[PATCH 6/6] add NAND_BUSWIDTH_AUTO
Matthieu CASTET
matthieu.castet at parrot.com
Sun Jun 26 12:26:56 EDT 2011
Nand read id and Read Parameter (onfi) return data on low 8 bits.
So if the driver start in 8 bit mode, it is possible to detect nand
buswidth, and configure the controller to the correct buswidth
after nand_scan_ident.
This is a new flag, so only driver that know what there are doing
will use it.
Signed-off-by: Matthieu CASTET <matthieu.castet at parrot.com>
---
drivers/mtd/nand/nand_base.c | 7 ++++++-
include/linux/mtd/nand.h | 5 +++++
2 files changed, 11 insertions(+), 1 deletions(-)
diff --git a/drivers/mtd/nand/nand_base.c b/drivers/mtd/nand/nand_base.c
index e7c8bdd..34f441e 100644
--- a/drivers/mtd/nand/nand_base.c
+++ b/drivers/mtd/nand/nand_base.c
@@ -3096,11 +3096,16 @@ ident_done:
break;
}
+ if (chip->options & NAND_BUSWIDTH_AUTO) {
+ BUG_ON(chip->options & NAND_BUSWIDTH_16);
+ chip->options |= busw;
+ nand_set_defaults(chip, busw);
+ }
/*
* Check, if buswidth is correct. Hardware drivers should set
* chip correct !
*/
- if (busw != (chip->options & NAND_BUSWIDTH_16)) {
+ else if (busw != (chip->options & NAND_BUSWIDTH_16)) {
printk(KERN_INFO "NAND device: Manufacturer ID:"
" 0x%02x, Chip ID: 0x%02x (%s %s)\n", *maf_id,
*dev_id, nand_manuf_ids[maf_idx].name, mtd->name);
diff --git a/include/linux/mtd/nand.h b/include/linux/mtd/nand.h
index c2b9ac4..cdda28a 100644
--- a/include/linux/mtd/nand.h
+++ b/include/linux/mtd/nand.h
@@ -240,6 +240,11 @@ typedef enum {
#define NAND_USE_FLASH_BBT_NO_OOB 0x00800000
/* Create an empty BBT with no vendor information if the BBT is available */
#define NAND_CREATE_EMPTY_BBT 0x01000000
+/* autodetect nand buswidth with readid. This suppose the driver will
+ * configure the hardware has 8 bit in nand_scan_ident, and update
+ * configuration before calling nand_scan_tail
+ */
+#define NAND_BUSWIDTH_AUTO 0x02000000
/* Options set by nand scan */
/* Nand scan has allocated controller struct */
--
1.7.5.4
More information about the linux-mtd
mailing list