--- drivers/mtd/nand/plat_nand.c | 13 ++++++++++++- include/linux/mtd/nand.h | 1 + 2 files changed, 13 insertions(+), 1 deletion(-) --- linux-2.6.35.3.orig/include/linux/mtd/nand.h +++ linux-2.6.35.3/include/linux/mtd/nand.h @@ -512,6 +512,7 @@ struct platform_nand_chip { int chip_delay; unsigned int options; const char **part_probe_types; + int (*chip_fixup)(struct mtd_info *mtd); void (*set_parts)(uint64_t size, struct platform_nand_chip *chip); void *priv; --- linux-2.6.35.3.orig/drivers/mtd/nand/plat_nand.c +++ linux-2.6.35.3/drivers/mtd/nand/plat_nand.c @@ -91,7 +91,18 @@ static int __devinit plat_nand_probe(str } /* Scan to find existance of the device */ - if (nand_scan(&data->mtd, pdata->chip.nr_chips)) { + if (nand_scan_ident(&data->mtd, pdata->chip.nr_chips, NULL)) { + res = -ENXIO; + goto out; + } + + if (pdata->chip.chip_fixup) { + res = pdata->chip.chip_fixup(&data->mtd); + if (res) + goto out; + } + + if (nand_scan_tail(&data->mtd)) { err = -ENXIO; goto out; }