mtd: nand: Allow caller to pass alternative ID table to nand_scan_ident()
Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
This commit is contained in:
		
							parent
							
								
									9fc51a37a8
								
							
						
					
					
						commit
						5e81e88a4c
					
				| @ -474,7 +474,7 @@ static int __init atmel_nand_probe(struct platform_device *pdev) | ||||
| 	} | ||||
| 
 | ||||
| 	/* first scan to find the device and get the page size */ | ||||
| 	if (nand_scan_ident(mtd, 1)) { | ||||
| 	if (nand_scan_ident(mtd, 1, NULL)) { | ||||
| 		res = -ENXIO; | ||||
| 		goto err_scan_ident; | ||||
| 	} | ||||
|  | ||||
| @ -446,7 +446,7 @@ static int __devinit bcm_umi_nand_probe(struct platform_device *pdev) | ||||
| 	 * layout we'll be using. | ||||
| 	 */ | ||||
| 
 | ||||
| 	err = nand_scan_ident(board_mtd, 1); | ||||
| 	err = nand_scan_ident(board_mtd, 1, NULL); | ||||
| 	if (err) { | ||||
| 		printk(KERN_ERR "nand_scan failed: %d\n", err); | ||||
| 		iounmap(bcm_umi_io_base); | ||||
|  | ||||
| @ -761,7 +761,7 @@ static int __devinit cafe_nand_probe(struct pci_dev *pdev, | ||||
| 		cafe_readl(cafe, GLOBAL_CTRL), cafe_readl(cafe, GLOBAL_IRQ_MASK)); | ||||
| 
 | ||||
| 	/* Scan to find existence of the device */ | ||||
| 	if (nand_scan_ident(mtd, 2)) { | ||||
| 	if (nand_scan_ident(mtd, 2, NULL)) { | ||||
| 		err = -ENXIO; | ||||
| 		goto out_irq; | ||||
| 	} | ||||
|  | ||||
| @ -690,7 +690,7 @@ static int __init nand_davinci_probe(struct platform_device *pdev) | ||||
| 	spin_unlock_irq(&davinci_nand_lock); | ||||
| 
 | ||||
| 	/* Scan to find existence of the device(s) */ | ||||
| 	ret = nand_scan_ident(&info->mtd, pdata->mask_chipsel ? 2 : 1); | ||||
| 	ret = nand_scan_ident(&info->mtd, pdata->mask_chipsel ? 2 : 1, NULL); | ||||
| 	if (ret < 0) { | ||||
| 		dev_dbg(&pdev->dev, "no NAND chip(s) found\n"); | ||||
| 		goto err_scan; | ||||
|  | ||||
| @ -891,7 +891,7 @@ static int __devinit fsl_elbc_chip_probe(struct fsl_elbc_ctrl *ctrl, | ||||
| 	if (ret) | ||||
| 		goto err; | ||||
| 
 | ||||
| 	ret = nand_scan_ident(&priv->mtd, 1); | ||||
| 	ret = nand_scan_ident(&priv->mtd, 1, NULL); | ||||
| 	if (ret) | ||||
| 		goto err; | ||||
| 
 | ||||
|  | ||||
| @ -819,7 +819,7 @@ static int __init mxcnd_probe(struct platform_device *pdev) | ||||
| 	} | ||||
| 
 | ||||
| 	/* first scan to find the device and get the page size */ | ||||
| 	if (nand_scan_ident(mtd, 1)) { | ||||
| 	if (nand_scan_ident(mtd, 1, NULL)) { | ||||
| 		err = -ENXIO; | ||||
| 		goto escan; | ||||
| 	} | ||||
|  | ||||
| @ -2766,10 +2766,10 @@ static void nand_set_defaults(struct nand_chip *chip, int busw) | ||||
|  */ | ||||
| static 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, | ||||
| 						  struct nand_flash_dev *type) | ||||
| { | ||||
| 	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 */ | ||||
| @ -2808,15 +2808,14 @@ static 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->name) | ||||
| 		return ERR_PTR(-ENODEV); | ||||
| 
 | ||||
| 	if (!mtd->name) | ||||
| @ -2926,13 +2925,15 @@ static 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, | ||||
| 		    struct nand_flash_dev *table) | ||||
| { | ||||
| 	int i, busw, nand_maf_id; | ||||
| 	struct nand_chip *chip = mtd->priv; | ||||
| @ -2944,7 +2945,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)) { | ||||
| 		if (!(chip->options & NAND_SCAN_SILENT_NODEV)) | ||||
| @ -3235,7 +3236,7 @@ int nand_scan(struct mtd_info *mtd, int maxchips) | ||||
| 		BUG(); | ||||
| 	} | ||||
| 
 | ||||
| 	ret = nand_scan_ident(mtd, maxchips); | ||||
| 	ret = nand_scan_ident(mtd, maxchips, NULL); | ||||
| 	if (!ret) | ||||
| 		ret = nand_scan_tail(mtd); | ||||
| 	return ret; | ||||
|  | ||||
| @ -1013,7 +1013,8 @@ static int s3c24xx_nand_probe(struct platform_device *pdev) | ||||
| 		s3c2410_nand_init_chip(info, nmtd, sets); | ||||
| 
 | ||||
| 		nmtd->scan_res = nand_scan_ident(&nmtd->mtd, | ||||
| 						 (sets) ? sets->nr_chips : 1); | ||||
| 						 (sets) ? sets->nr_chips : 1, | ||||
| 						 NULL); | ||||
| 
 | ||||
| 		if (nmtd->scan_res == 0) { | ||||
| 			s3c2410_nand_update_chip(info, nmtd); | ||||
|  | ||||
| @ -825,7 +825,7 @@ static int __init flctl_probe(struct platform_device *pdev) | ||||
| 	nand->select_chip = flctl_select_chip; | ||||
| 	nand->cmdfunc = flctl_cmdfunc; | ||||
| 
 | ||||
| 	ret = nand_scan_ident(flctl_mtd, 1); | ||||
| 	ret = nand_scan_ident(flctl_mtd, 1, NULL); | ||||
| 	if (ret) | ||||
| 		goto err; | ||||
| 
 | ||||
|  | ||||
| @ -75,7 +75,7 @@ int sm_register_device(struct mtd_info *mtd) | ||||
| 	chip->options |= NAND_SKIP_BBTSCAN | NAND_SMARTMEDIA; | ||||
| 
 | ||||
| 	/* Scan for card properties */ | ||||
| 	ret = nand_scan_ident(mtd, 1); | ||||
| 	ret = nand_scan_ident(mtd, 1, NULL); | ||||
| 
 | ||||
| 	if (ret) | ||||
| 		return ret; | ||||
|  | ||||
| @ -220,7 +220,7 @@ static int __devinit socrates_nand_probe(struct of_device *ofdev, | ||||
| 	dev_set_drvdata(&ofdev->dev, host); | ||||
| 
 | ||||
| 	/* first scan to find the device and get the page size */ | ||||
| 	if (nand_scan_ident(mtd, 1)) { | ||||
| 	if (nand_scan_ident(mtd, 1, NULL)) { | ||||
| 		res = -ENXIO; | ||||
| 		goto out; | ||||
| 	} | ||||
|  | ||||
| @ -274,7 +274,7 @@ static int txx9ndfmc_nand_scan(struct mtd_info *mtd) | ||||
| 	struct nand_chip *chip = mtd->priv; | ||||
| 	int ret; | ||||
| 
 | ||||
| 	ret = nand_scan_ident(mtd, 1); | ||||
| 	ret = nand_scan_ident(mtd, 1, NULL); | ||||
| 	if (!ret) { | ||||
| 		if (mtd->writesize >= 512) { | ||||
| 			chip->ecc.size = mtd->writesize; | ||||
|  | ||||
| @ -25,11 +25,13 @@ | ||||
| #include <linux/mtd/bbm.h> | ||||
| 
 | ||||
| struct mtd_info; | ||||
| struct nand_flash_dev; | ||||
| /* Scan and identify a NAND device */ | ||||
| extern int nand_scan (struct mtd_info *mtd, int max_chips); | ||||
| /* Separate phases of nand_scan(), allowing board driver to intervene
 | ||||
|  * and override command or ECC setup according to flash type */ | ||||
| extern int nand_scan_ident(struct mtd_info *mtd, int max_chips); | ||||
| extern int nand_scan_ident(struct mtd_info *mtd, int max_chips, | ||||
| 			   struct nand_flash_dev *table); | ||||
| extern int nand_scan_tail(struct mtd_info *mtd); | ||||
| 
 | ||||
| /* Free resources held by the NAND device */ | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user