|
@@ -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 */
|