mtd: rawnand: Add the nand_wait_readrdy() helper and use it
authorBoris Brezillon <boris.brezillon@bootlin.com>
Fri, 27 Jul 2018 07:44:17 +0000 (09:44 +0200)
committerMiquel Raynal <miquel.raynal@bootlin.com>
Tue, 4 Sep 2018 20:24:55 +0000 (22:24 +0200)
The logic to wait for chip readiness after a page read has been
duplicated in nand_do_read_ops() and nand_do_read_oob(). Provide an
helper that does the right thing and call it where appropriate.

Signed-off-by: Boris Brezillon <boris.brezillon@bootlin.com>
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
drivers/mtd/nand/raw/nand_base.c

index d527e44..21a04b7 100644 (file)
@@ -3524,6 +3524,18 @@ static int nand_setup_read_retry(struct mtd_info *mtd, int retry_mode)
        return chip->setup_read_retry(mtd, retry_mode);
 }
 
+static void nand_wait_readrdy(struct nand_chip *chip)
+{
+       if (!(chip->options & NAND_NEED_READRDY))
+               return;
+
+       /* Apply delay or wait for ready/busy pin */
+       if (!chip->dev_ready)
+               udelay(chip->chip_delay);
+       else
+               nand_wait_ready(nand_to_mtd(chip));
+}
+
 /**
  * nand_do_read_ops - [INTERN] Read data with ECC
  * @mtd: MTD device structure
@@ -3631,13 +3643,7 @@ read_retry:
                                }
                        }
 
-                       if (chip->options & NAND_NEED_READRDY) {
-                               /* Apply delay or wait for ready/busy pin */
-                               if (!chip->dev_ready)
-                                       udelay(chip->chip_delay);
-                               else
-                                       nand_wait_ready(mtd);
-                       }
+                       nand_wait_readrdy(chip);
 
                        if (mtd->ecc_stats.failed - ecc_failures) {
                                if (retry_mode + 1 < chip->read_retries) {
@@ -3908,13 +3914,7 @@ static int nand_do_read_oob(struct mtd_info *mtd, loff_t from,
                len = min(len, readlen);
                buf = nand_transfer_oob(mtd, buf, ops, len);
 
-               if (chip->options & NAND_NEED_READRDY) {
-                       /* Apply delay or wait for ready/busy pin */
-                       if (!chip->dev_ready)
-                               udelay(chip->chip_delay);
-                       else
-                               nand_wait_ready(mtd);
-               }
+               nand_wait_readrdy(chip);
 
                max_bitflips = max_t(unsigned int, max_bitflips, ret);