已经有nandflash controller的驱动了,但是要添加一个新的nandflash,尤其是本来是8bit, 新加的是16bit时,需要注意如下:
1. board.c 中:
static struct platform_nand_data cartesio_nand_mlc_data = {
.chip = {
.nr_chips = 1, /* 1 NAND chip per FSMC NAND-Flash slot */
.chip_offset = 0, /* using FSMC PC-Card/NAND-Flash slot 0 */
.nr_partitions = ARRAY_SIZE(cartesio_nand_mlc_partitions),
.partitions = cartesio_nand_mlc_partitions,
.ecclayout = &cartesio_nand_mlc_ecclayout,
.chip_delay = 20,
.options = NAND_BUSWIDTH_16, //这里8bit时是0,使用16bit时,应该修改
},
#ifdef CONFIG_CARTESIO_NAND_DMA
.ctrl = {
.priv = &cartesio_dma_nand,
}
#endif
};
这里的 chip->option 需要注意.
同时需要注意下面的 .name 和 .id, nand_base.c 中的驱动会用到。
static struct platform_device cartesio_nand_mlc_flash = {
.name = "CARTESIO-NAND", // 这个会用来判断是不是NULL
.id = 0, // id会用来比较 chip id
.dev = {
.platform_data = &cartesio_nand_mlc_data,
.parent = &fsmc_device.dev,
},
.num_resources = ARRAY_SIZE(cartesio_nand_mlc_resource),
.resource = cartesio_nand_mlc_resource,
};
2. drivers/mtd/nand/nand_ids.c
这里有个表 nand_flash_ids[], 定义如下:
/*
* Chip ID list
*
* Name. ID code, pagesize, chipsize in MegaByte, eraseblock size,
* options
*
* Pagesize; 0, 256, 512
* 0 get this information from the extended chip ID
+ 256 256 Byte page size
* 512 512 Byte page size
*/
struct nand_flash_dev nand_flash_ids[] = {
#ifdef CONFIG_MTD_NAND_MUSEUM_IDS
{"NAND 1MiB 5V 8-bit", 0x6e, 256, 1, 0x1000, 0},
{"NAND 2MiB 5V 8-bit", 0x64, 256, 2, 0x1000, 0},
{"NAND 4MiB 5V 8-bit", 0x6b, 512, 4, 0x2000, 0},
{"NAND 1MiB 3,3V 8-bit", 0xe8, 256, 1, 0x1000, 0},
{"NAND 1MiB 3,3V 8-bit", 0xec, 256, 1, 0x1000, 0},
{"NAND 2MiB 3,3V 8-bit", 0xea, 256, 2, 0x1000, 0},
{"NAND 4MiB 3,3V 8-bit", 0xd5, 512, 4, 0x2000, 0},
{"NAND 4MiB 3,3V 8-bit", 0xe3, 512, 4, 0x2000, 0},
{"NAND 4MiB 3,3V 8-bit", 0xe5, 512, 4, 0x2000, 0},
{"NAND 8MiB 3,3V 8-bit", 0xd6, 512, 8, 0x2000, 0},
{"NAND 8MiB 1,8V 8-bit", 0x39, 512, 8, 0x2000, 0},
{"NAND 8MiB 3,3V 8-bit", 0xe6, 512, 8, 0x2000, 0},
{"NAND 8MiB 1,8V 16-bit", 0x49, 512, 8, 0x2000, NAND_BUSWIDTH_16},
{"NAND 8MiB 3,3V 16-bit", 0x59, 512, 8, 0x2000, NAND_BUSWIDTH_16},
#endif
{"NAND 16MiB 1,8V 8-bit", 0x33, 512, 16, 0x4000, 0},
{"NAND 16MiB 3,3V 8-bit", 0x73, 512, 16, 0x4000, 0},
{"NAND 16MiB 1,8V 16-bit", 0x43, 512, 16, 0x4000, NAND_BUSWIDTH_16},
{"NAND 16MiB 3,3V 16-bit", 0x53, 512, 16, 0x4000, NAND_BUSWIDTH_16},
{"NAND 32MiB 1,8V 8-bit", 0x35, 512, 32, 0x4000, 0},
{"NAND 32MiB 3,3V 8-bit", 0x75, 512, 32, 0x4000, 0},
{"NAND 32MiB 1,8V 16-bit", 0x45, 512, 32, 0x4000, NAND_BUSWIDTH_16},
{"NAND 32MiB 3,3V 16-bit", 0x55, 512, 32, 0x4000, NAND_BUSWIDTH_16},
{"NAND 64MiB 1,8V 8-bit", 0x36, 512, 64, 0x4000, 0},
{"NAND 64MiB 3,3V 8-bit", 0x76, 512, 64, 0x4000, 0},
{"NAND 64MiB 1