kernel: generic: add kernel 4.3
[openwrt.git] / target / linux / generic / patches-4.3 / 450-mtd-nand-allow-to-use-platform-specific-chip-fixup.patch
diff --git a/target/linux/generic/patches-4.3/450-mtd-nand-allow-to-use-platform-specific-chip-fixup.patch b/target/linux/generic/patches-4.3/450-mtd-nand-allow-to-use-platform-specific-chip-fixup.patch
new file mode 100644 (file)
index 0000000..84d2e14
--- /dev/null
@@ -0,0 +1,37 @@
+---
+ drivers/mtd/nand/plat_nand.c |   13 ++++++++++++-
+ include/linux/mtd/nand.h     |    1 +
+ 2 files changed, 13 insertions(+), 1 deletion(-)
+
+--- a/include/linux/mtd/nand.h
++++ b/include/linux/mtd/nand.h
+@@ -869,6 +869,7 @@ struct platform_nand_chip {
+       unsigned int options;
+       unsigned int bbt_options;
+       const char **part_probe_types;
++      int (*chip_fixup)(struct mtd_info *mtd);
+ };
+ /* Keep gcc happy */
+--- a/drivers/mtd/nand/plat_nand.c
++++ b/drivers/mtd/nand/plat_nand.c
+@@ -88,7 +88,18 @@ static int plat_nand_probe(struct platfo
+       }
+       /* Scan to find existence of the device */
+-      if (nand_scan(&data->mtd, pdata->chip.nr_chips)) {
++      if (nand_scan_ident(&data->mtd, pdata->chip.nr_chips, NULL)) {
++              err = -ENXIO;
++              goto out;
++      }
++
++      if (pdata->chip.chip_fixup) {
++              err = pdata->chip.chip_fixup(&data->mtd);
++              if (err)
++                      goto out;
++      }
++
++      if (nand_scan_tail(&data->mtd)) {
+               err = -ENXIO;
+               goto out;
+       }