diff options
Diffstat (limited to 'drivers/mtd/nand/nand_mxs.c')
-rw-r--r-- | drivers/mtd/nand/nand_mxs.c | 27 |
1 files changed, 18 insertions, 9 deletions
diff --git a/drivers/mtd/nand/nand_mxs.c b/drivers/mtd/nand/nand_mxs.c index f69453aba5..28a07d4cba 100644 --- a/drivers/mtd/nand/nand_mxs.c +++ b/drivers/mtd/nand/nand_mxs.c @@ -1201,7 +1201,21 @@ static int mxs_nand_block_bad(struct mtd_info *mtd, loff_t ofs, int getchip) return 0; } -static int mxs_nand_init_bch(struct mtd_info *mtd) +/* + * Nominally, the purpose of this function is to look for or create the bad + * block table. In fact, since the we call this function at the very end of + * the initialization process started by nand_scan(), and we doesn't have a + * more formal mechanism, we "hook" this function to continue init process. + * + * At this point, the physical NAND Flash chips have been identified and + * counted, so we know the physical geometry. This enables us to make some + * important configuration decisions. + * + * The return value of this function propogates directly back to this driver's + * call to nand_scan(). Anything other than zero will cause this driver to + * tear everything down and declare failure. + */ +static int mxs_nand_scan_bbt(struct mtd_info *mtd) { struct nand_chip *nand = mtd->priv; struct mxs_nand_info *nand_info = nand->priv; @@ -1238,7 +1252,8 @@ static int mxs_nand_init_bch(struct mtd_info *mtd) mtd->block_markbad = mxs_nand_hook_block_markbad; } - return 0; + /* We use the reference implementation for bad block management. */ + return nand_default_bbt(mtd); } /* @@ -2168,6 +2183,7 @@ static int mxs_nand_probe(struct device_d *dev) nand->dev_ready = mxs_nand_device_ready; nand->select_chip = mxs_nand_select_chip; nand->block_bad = mxs_nand_block_bad; + nand->scan_bbt = mxs_nand_scan_bbt; nand->read_byte = mxs_nand_read_byte; @@ -2199,13 +2215,6 @@ static int mxs_nand_probe(struct device_d *dev) mxs_nand_setup_timing(nand_info); - err = mxs_nand_init_bch(mtd); - if (err) - goto err2; - err = nand_create_bbt(mtd); - if (err) - goto err2; - /* second phase scan */ err = nand_scan_tail(mtd); if (err) |