Some nand controllers, such as the Freescale enhanced local bus controller, need to do late initialization based on details of the chip that has been probed, such as chip size, large/small pages, etc. A late_init() callback method is added to allow this.
Signed-off-by: Scott Wood <[EMAIL PROTECTED]> --- drivers/mtd/nand/nand_base.c | 12 ++++++++++++ include/linux/mtd/nand.h | 2 ++ 2 files changed, 14 insertions(+), 0 deletions(-) diff --git a/drivers/mtd/nand/nand_base.c b/drivers/mtd/nand/nand_base.c index 85a7283..119a6f7 100644 --- a/drivers/mtd/nand/nand_base.c +++ b/drivers/mtd/nand/nand_base.c @@ -2593,6 +2593,18 @@ int nand_scan_tail(struct mtd_info *mtd) /* propagate ecc.layout to mtd_info */ mtd->ecclayout = chip->ecc.layout; + /* Give the driver a chance to do any remaining setup + * based on the chip details. + */ + if (chip->late_init) { + int ret = chip->late_init(mtd); + + if (ret) { + kfree(chip->buffers); + return ret; + } + } + /* Check, if we should skip the bad block table scan */ if (chip->options & NAND_SKIP_BBTSCAN) return 0; diff --git a/include/linux/mtd/nand.h b/include/linux/mtd/nand.h index c42bc7f..27bc879 100644 --- a/include/linux/mtd/nand.h +++ b/include/linux/mtd/nand.h @@ -360,6 +360,7 @@ struct nand_buffers { * @errstat: [OPTIONAL] hardware specific function to perform additional error status checks * (determine if errors are correctable) * @write_page: [REPLACEABLE] High-level page write function + * @late_init: [OPTIONAL] initialization callback after identification */ struct nand_chip { @@ -384,6 +385,7 @@ struct nand_chip { int (*errstat)(struct mtd_info *mtd, struct nand_chip *this, int state, int status, int page); int (*write_page)(struct mtd_info *mtd, struct nand_chip *chip, const uint8_t *buf, int page, int cached, int raw); + int (*late_init)(struct mtd_info *mtd); int chip_delay; unsigned int options; -- 1.5.3.7 _______________________________________________ Linuxppc-dev mailing list Linuxppc-dev@ozlabs.org https://ozlabs.org/mailman/listinfo/linuxppc-dev