/* * Flash memory access on 4G Systems MTX-1 boards * * $Id: mtx-1_flash.c,v 1.2 2005/11/07 11:14:27 gleixner Exp $ * * (C) 2005 Bruno Randolf * (C) 2005 Jörn Engel * */ #include #include #include #include #include #include #include #include static struct map_info mtx1_map = { .name = "MTX-1 flash", .bankwidth = 4, .size = 0x2000000, .phys = 0x1E000000, }; static struct mtd_partition mtx1_partitions[] = { { .name = "filesystem", .size = 0x01C00000, .offset = 0, },{ .name = "yamon", .size = 0x00100000, .offset = MTDPART_OFS_APPEND, .mask_flags = MTD_WRITEABLE, },{ .name = "kernel", .size = 0x002c0000, .offset = MTDPART_OFS_APPEND, },{ .name = "yamon env", .size = 0x00040000, .offset = MTDPART_OFS_APPEND, } }; static struct mtd_info *mtx1_mtd; int __init mtx1_mtd_init(void) { int ret = -ENXIO; simple_map_init(&mtx1_map); mtx1_map.virt = ioremap(mtx1_map.phys, mtx1_map.size); if (!mtx1_map.virt) return -EIO; mtx1_mtd = do_map_probe("cfi_probe", &mtx1_map); if (!mtx1_mtd) goto err; mtx1_mtd->owner = THIS_MODULE; ret = add_mtd_partitions(mtx1_mtd, mtx1_partitions, ARRAY_SIZE(mtx1_partitions)); if (ret) goto err; return 0; err: iounmap(mtx1_map.virt); return ret; } static void __exit mtx1_mtd_cleanup(void) { if (mtx1_mtd) { del_mtd_partitions(mtx1_mtd); map_destroy(mtx1_mtd); } if (mtx1_map.virt) iounmap(mtx1_map.virt); } module_init(mtx1_mtd_init); module_exit(mtx1_mtd_cleanup); MODULE_AUTHOR("Bruno Randolf "); MODULE_DESCRIPTION("MTX-1 flash map"); MODULE_LICENSE("GPL");