diff options
| author | Lei Wen <leiwen@marvell.com> | 2011-01-06 09:48:18 +0800 | 
|---|---|---|
| committer | Scott Wood <scottwood@freescale.com> | 2011-01-12 17:13:10 -0600 | 
| commit | 245eb90091f30604211ac77d93aa131b5b950a50 (patch) | |
| tree | 0fdfe8e0b514ab3c8c1c010ba6f822e569b17697 /drivers/mtd/nand/nand_base.c | |
| parent | 47fc18f1e72ef1fc68a179c2b674a4c58646afc9 (diff) | |
| download | olio-uboot-2014.01-245eb90091f30604211ac77d93aa131b5b950a50.tar.xz olio-uboot-2014.01-245eb90091f30604211ac77d93aa131b5b950a50.zip | |
mtd: nand: Allow caller to pass alternative ID table to nand_scan_ident()
This patch sync with David's patch on Linux for handling nand_scan_ident.
	commit 5e81e88a4c140586d9212999cea683bcd66a15c6
	Author: David Woodhouse <David.Woodhouse@intel.com>
	Date:   Fri Feb 26 18:32:56 2010 +0000
	mtd: nand: Allow caller to pass alternative ID table to nand_scan_ident()
	Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
Signed-off-by: Lei Wen <leiwen@marvell.com>
Diffstat (limited to 'drivers/mtd/nand/nand_base.c')
| -rw-r--r-- | drivers/mtd/nand/nand_base.c | 29 | 
1 files changed, 15 insertions, 14 deletions
| diff --git a/drivers/mtd/nand/nand_base.c b/drivers/mtd/nand/nand_base.c index 5239c1fcf..3b96b0e2a 100644 --- a/drivers/mtd/nand/nand_base.c +++ b/drivers/mtd/nand/nand_base.c @@ -2414,10 +2414,10 @@ static void nand_set_defaults(struct nand_chip *chip, int busw)   */  static const struct nand_flash_dev *nand_get_flash_type(struct mtd_info *mtd,  						  struct nand_chip *chip, -						  int busw, int *maf_id) +						  int busw, int *maf_id, +						  const struct nand_flash_dev *type)  { -	const struct nand_flash_dev *type = NULL; -	int i, dev_id, maf_idx; +	int dev_id, maf_idx;  	int tmp_id, tmp_manf;  	/* Select the device */ @@ -2456,15 +2456,14 @@ static const struct nand_flash_dev *nand_get_flash_type(struct mtd_info *mtd,  		return ERR_PTR(-ENODEV);  	} -	/* Lookup the flash id */ -	for (i = 0; nand_flash_ids[i].name != NULL; i++) { -		if (dev_id == nand_flash_ids[i].id) { -			type =  &nand_flash_ids[i]; -			break; -		} -	} +	if (!type) +		type = nand_flash_ids; + +	for (; type->name != NULL; type++) +		if (dev_id == type->id) +                        break; -	if (!type) { +	if (!type->name) {  		/* supress warning if there is no nand */  		if (*maf_id != 0x00 && *maf_id != 0xff &&  		    dev_id  != 0x00 && dev_id  != 0xff) @@ -2580,13 +2579,15 @@ static const struct nand_flash_dev *nand_get_flash_type(struct mtd_info *mtd,   * nand_scan_ident - [NAND Interface] Scan for the NAND device   * @mtd:	     MTD device structure   * @maxchips:	     Number of chips to scan for + * @table:	     Alternative NAND ID table   *   * This is the first phase of the normal nand_scan() function. It   * reads the flash ID and sets up MTD fields accordingly.   *   * The mtd->owner field must be set to the module of the caller.   */ -int nand_scan_ident(struct mtd_info *mtd, int maxchips) +int nand_scan_ident(struct mtd_info *mtd, int maxchips, +		    const struct nand_flash_dev *table)  {  	int i, busw, nand_maf_id;  	struct nand_chip *chip = mtd->priv; @@ -2598,7 +2599,7 @@ int nand_scan_ident(struct mtd_info *mtd, int maxchips)  	nand_set_defaults(chip, busw);  	/* Read the flash type */ -	type = nand_get_flash_type(mtd, chip, busw, &nand_maf_id); +	type = nand_get_flash_type(mtd, chip, busw, &nand_maf_id, table);  	if (IS_ERR(type)) {  #ifndef CONFIG_SYS_NAND_QUIET_TEST @@ -2869,7 +2870,7 @@ int nand_scan(struct mtd_info *mtd, int maxchips)  {  	int ret; -	ret = nand_scan_ident(mtd, maxchips); +	ret = nand_scan_ident(mtd, maxchips, NULL);  	if (!ret)  		ret = nand_scan_tail(mtd);  	return ret; |