mtd: nand: omap: use DT specified bus-width only for scanning NAND device
authorPekon Gupta <pekon@ti.com>
Thu, 24 Oct 2013 12:50:20 +0000 (18:20 +0530)
committerBrian Norris <computersforpeace@gmail.com>
Thu, 7 Nov 2013 07:33:08 +0000 (23:33 -0800)
This patch:
- calls nand_scan_ident() using bus-width as passed by DT
- removes double calls to nand_scan_ident(), in case first call fails
  then omap_nand_probe just returns error.

Signed-off-by: Pekon Gupta <pekon@ti.com>
Tested-by: Ezequiel Garcia <ezequiel.garcia@free-electrons.com>
Signed-off-by: Brian Norris <computersforpeace@gmail.com>
drivers/mtd/nand/omap2.c

index 5596368a357465d0c2cd49ea43a6d4fc4435f26c..f464321c598d2060f00f882c780b995d5d2c1194 100644 (file)
@@ -1856,7 +1856,6 @@ static int omap_nand_probe(struct platform_device *pdev)
        mtd->name               = dev_name(&pdev->dev);
        mtd->owner              = THIS_MODULE;
        nand_chip               = &info->nand;
-       nand_chip->options      = pdata->devsize;
        nand_chip->options      |= NAND_SKIP_BBTSCAN;
 #ifdef CONFIG_MTD_NAND_OMAP_BCH
        info->of_node           = pdata->of_node;
@@ -1904,6 +1903,15 @@ static int omap_nand_probe(struct platform_device *pdev)
                nand_chip->chip_delay = 50;
        }
 
+       /* scan NAND device connected to chip controller */
+       nand_chip->options |= pdata->devsize & NAND_BUSWIDTH_16;
+       if (nand_scan_ident(mtd, 1, NULL)) {
+               pr_err("nand device scan failed, may be bus-width mismatch\n");
+               err = -ENXIO;
+               goto out_release_mem_region;
+       }
+
+       /* re-populate low-level callbacks based on xfer modes */
        switch (pdata->xfer_type) {
        case NAND_OMAP_PREFETCH_POLLED:
                nand_chip->read_buf   = omap_read_buf_pref;
@@ -2011,17 +2019,6 @@ static int omap_nand_probe(struct platform_device *pdev)
                }
        }
 
-       /* DIP switches on some boards change between 8 and 16 bit
-        * bus widths for flash.  Try the other width if the first try fails.
-        */
-       if (nand_scan_ident(mtd, 1, NULL)) {
-               nand_chip->options ^= NAND_BUSWIDTH_16;
-               if (nand_scan_ident(mtd, 1, NULL)) {
-                       err = -ENXIO;
-                       goto out_release_mem_region;
-               }
-       }
-
        /* rom code layout */
        if (pdata->ecc_opt == OMAP_ECC_HAM1_CODE_HW) {