Thank you for this very quick answer ... Am Donnerstag, den 12.02.2009, 09:17 +0100 schrieb Manuel Lauss: > Here's the NAND portion of a DB1200 board support rewrite I did a while > ago. It uses gen_nand instead of the au1550nd.c driver (which seems to I saw this gen_nand (plat_nand.c) never before (because it is not configurable in the Makefile) > only work on the Db1550 and small page devices). It shouls also work on > any Au1550 since the Au1200 has identical NAND hardware. Do I understand right, this is not a handmade patch aginst plat_nand.c ? I try to mix this code now with the plat_nand.c, rigth? Kind regards, Frank > > ---------- 8< --------------------------- 8< --------------------- > > > #include <linux/mtd/mtd.h> > #include <linux/mtd/nand.h> > #include <linux/mtd/partitions.h> > > [...] > > static void au1200_nand_cmd_ctrl(struct mtd_info *mtd, int cmd, > unsigned int ctrl) > { > struct nand_chip *this = mtd->priv; > unsigned long ioaddr = (unsigned long)this->IO_ADDR_W; > > ioaddr &= 0xffffff00; > > if (ctrl & NAND_CLE) { > ioaddr += MEM_STNAND_CMD; > } else if (ctrl & NAND_ALE) { > ioaddr += MEM_STNAND_ADDR; > } else { > /* assume we want to r/w real data by default */ > ioaddr += MEM_STNAND_DATA; > } > this->IO_ADDR_R = this->IO_ADDR_W = (void __iomem *)ioaddr; > if (cmd != NAND_CMD_NONE) { > au_writeb(cmd, ioaddr); > au_sync(); > } > } > > static int au1200_nand_device_ready(struct mtd_info *mtd) > { > return au_readl(MEM_STSTAT) & 1; > } > > static const char *db1200_part_probes[] = { "cmdlinepart", NULL }; > > static struct mtd_partition db1200_nand_parts[] = { > { > .name = "NAND FS 0", > .offset = 0, > .size = 8 * 1024 * 1024, > }, > { > .name = "NAND FS 1", > .offset = MTDPART_OFS_APPEND, > .size = MTDPART_SIZ_FULL > }, > }; > > struct platform_nand_data db1200_nand_platdata = { > .chip = { > .nr_chips = 1, > .chip_offset = 0, > .nr_partitions = ARRAY_SIZE(db1200_nand_parts), > .partitions = db1200_nand_parts, > .chip_delay = 20, > .part_probe_types = db1200_part_probes, > }, > .ctrl = { > .hwcontrol = 0, > .dev_ready = au1200_nand_device_ready, > .select_chip = 0, > .cmd_ctrl = au1200_nand_cmd_ctrl, > }, > }; > > static struct resource db1200_nand_res[] = { > [0] = { > .start = 0x20000000, > .end = 0x200000ff, > .flags = IORESOURCE_MEM, > }, > }; > > static struct platform_device nand_dev = { > .name = "gen_nand", > .num_resources = ARRAY_SIZE(db1200_nand_res), > .resource = db1200_nand_res, > .id = -1, > .dev = { > .platform_data = &db1200_nand_platdata, > } > }; > > [...] > > static struct platform_device *db1200_devs[] __initdata = { > [...] > &nand_dev, > [...] > }; > > -------------------- 8< ------------------------ 8< ------------------- > > > Best regards, > Manuel Lauss >