]> git.ipfire.org Git - people/ms/u-boot.git/blobdiff - drivers/mtd/nand/nand_base.c
mtd: nand: Create a NAND reset function
[people/ms/u-boot.git] / drivers / mtd / nand / nand_base.c
index 18f416998823e0863590ce3ef8cc4d6dc9ec794f..77da6fa9a17ffab84c32287104d1545ed849e3a1 100644 (file)
@@ -901,6 +901,21 @@ static int nand_wait(struct mtd_info *mtd, struct nand_chip *chip)
        return status;
 }
 
+/**
+ * nand_reset - Reset and initialize a NAND device
+ * @chip: The NAND chip
+ *
+ * Returns 0 for success or negative error code otherwise
+ */
+int nand_reset(struct nand_chip *chip)
+{
+       struct mtd_info *mtd = nand_to_mtd(chip);
+
+       chip->cmdfunc(mtd, NAND_CMD_RESET, -1, -1);
+
+       return 0;
+}
+
 /**
  * nand_check_erased_buf - check if a buffer contains (almost) only 0xff data
  * @buf: buffer to test
@@ -2591,7 +2606,7 @@ static int nand_do_write_oob(struct mtd_info *mtd, loff_t to,
         * if we don't do this. I have no clue why, but I seem to have 'fixed'
         * it in the doc2000 driver in August 1999.  dwmw2.
         */
-       chip->cmdfunc(mtd, NAND_CMD_RESET, -1, -1);
+       nand_reset(chip);
 
        /* Check, if it is write protected */
        if (nand_check_wp(mtd)) {
@@ -3612,7 +3627,7 @@ static struct nand_flash_dev *nand_get_flash_type(struct mtd_info *mtd,
         * Reset the chip, required by some chips (e.g. Micron MT29FxGxxxxx)
         * after power-up.
         */
-       chip->cmdfunc(mtd, NAND_CMD_RESET, -1, -1);
+       nand_reset(chip);
 
        /* Send the command for reading device ID */
        chip->cmdfunc(mtd, NAND_CMD_READID, 0x00, -1);
@@ -3873,7 +3888,7 @@ int nand_scan_ident(struct mtd_info *mtd, int maxchips,
        for (i = 1; i < maxchips; i++) {
                chip->select_chip(mtd, i);
                /* See comment in nand_get_flash_type for reset */
-               chip->cmdfunc(mtd, NAND_CMD_RESET, -1, -1);
+               nand_reset(chip);
                /* Send the command for reading device ID */
                chip->cmdfunc(mtd, NAND_CMD_READID, 0x00, -1);
                /* Read manufacturer and device IDs */