mtd: gpmi: imx6: fix the wrong method for checking ready/busy
authorHuang Shijie <b32955@freescale.com>
Tue, 27 Aug 2013 09:29:07 +0000 (17:29 +0800)
committerBrian Norris <computersforpeace@gmail.com>
Thu, 7 Nov 2013 07:33:03 +0000 (23:33 -0800)
In the imx6, all the ready/busy pins are binding togeter.
So we should always check the ready/busy pin of the chip 0.

In the other word, when the CS1 is enabled, we should also check the
ready/busy of chip 0; if we check the ready/busy of chip 1,
we will get the wrong result.

Signed-off-by: Huang Shijie <b32955@freescale.com>
Signed-off-by: Brian Norris <computersforpeace@gmail.com>
drivers/mtd/nand/gpmi-nand/gpmi-lib.c

index 7d56d87599c00c69aa3e611bacf99c09a9364370..aaced29727fb0437f6a0c142253b04cbc0ca82d0 100644 (file)
@@ -1079,6 +1079,13 @@ int gpmi_is_ready(struct gpmi_nand_data *this, unsigned chip)
                mask = MX23_BM_GPMI_DEBUG_READY0 << chip;
                reg = readl(r->gpmi_regs + HW_GPMI_DEBUG);
        } else if (GPMI_IS_MX28(this) || GPMI_IS_MX6Q(this)) {
+               /*
+                * In the imx6, all the ready/busy pins are bound
+                * together. So we only need to check chip 0.
+                */
+               if (GPMI_IS_MX6Q(this))
+                       chip = 0;
+
                /* MX28 shares the same R/B register as MX6Q. */
                mask = MX28_BF_GPMI_STAT_READY_BUSY(1 << chip);
                reg = readl(r->gpmi_regs + HW_GPMI_STAT);