Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at v3.3-rc7 120 lines 2.7 kB view raw
1/* 2 * Flash memory access on Hynix GMS30C7201/HMS30C7202 based 3 * evaluation boards 4 * 5 * (C) 2002 Jungjun Kim <jungjun.kim@hynix.com> 6 * 2003 Thomas Gleixner <tglx@linutronix.de> 7 */ 8 9#include <linux/module.h> 10#include <linux/types.h> 11#include <linux/kernel.h> 12#include <linux/init.h> 13#include <linux/errno.h> 14#include <linux/slab.h> 15 16#include <linux/mtd/mtd.h> 17#include <linux/mtd/map.h> 18#include <linux/mtd/partitions.h> 19#include <mach/hardware.h> 20#include <asm/io.h> 21 22static struct mtd_info *mymtd; 23 24static struct map_info h720x_map = { 25 .name = "H720X", 26 .bankwidth = 4, 27 .size = H720X_FLASH_SIZE, 28 .phys = H720X_FLASH_PHYS, 29}; 30 31static struct mtd_partition h720x_partitions[] = { 32 { 33 .name = "ArMon", 34 .size = 0x00080000, 35 .offset = 0, 36 .mask_flags = MTD_WRITEABLE 37 },{ 38 .name = "Env", 39 .size = 0x00040000, 40 .offset = 0x00080000, 41 .mask_flags = MTD_WRITEABLE 42 },{ 43 .name = "Kernel", 44 .size = 0x00180000, 45 .offset = 0x000c0000, 46 .mask_flags = MTD_WRITEABLE 47 },{ 48 .name = "Ramdisk", 49 .size = 0x00400000, 50 .offset = 0x00240000, 51 .mask_flags = MTD_WRITEABLE 52 },{ 53 .name = "jffs2", 54 .size = MTDPART_SIZ_FULL, 55 .offset = MTDPART_OFS_APPEND 56 } 57}; 58 59#define NUM_PARTITIONS ARRAY_SIZE(h720x_partitions) 60 61/* 62 * Initialize FLASH support 63 */ 64static int __init h720x_mtd_init(void) 65{ 66 h720x_map.virt = ioremap(h720x_map.phys, h720x_map.size); 67 68 if (!h720x_map.virt) { 69 printk(KERN_ERR "H720x-MTD: ioremap failed\n"); 70 return -EIO; 71 } 72 73 simple_map_init(&h720x_map); 74 75 // Probe for flash bankwidth 4 76 printk (KERN_INFO "H720x-MTD probing 32bit FLASH\n"); 77 mymtd = do_map_probe("cfi_probe", &h720x_map); 78 if (!mymtd) { 79 printk (KERN_INFO "H720x-MTD probing 16bit FLASH\n"); 80 // Probe for bankwidth 2 81 h720x_map.bankwidth = 2; 82 mymtd = do_map_probe("cfi_probe", &h720x_map); 83 } 84 85 if (mymtd) { 86 mymtd->owner = THIS_MODULE; 87 88 mtd_device_parse_register(mymtd, NULL, 0, 89 h720x_partitions, NUM_PARTITIONS); 90 return 0; 91 } 92 93 iounmap((void *)h720x_map.virt); 94 return -ENXIO; 95} 96 97/* 98 * Cleanup 99 */ 100static void __exit h720x_mtd_cleanup(void) 101{ 102 103 if (mymtd) { 104 mtd_device_unregister(mymtd); 105 map_destroy(mymtd); 106 } 107 108 if (h720x_map.virt) { 109 iounmap((void *)h720x_map.virt); 110 h720x_map.virt = 0; 111 } 112} 113 114 115module_init(h720x_mtd_init); 116module_exit(h720x_mtd_cleanup); 117 118MODULE_LICENSE("GPL"); 119MODULE_AUTHOR("Thomas Gleixner <tglx@linutronix.de>"); 120MODULE_DESCRIPTION("MTD map driver for Hynix evaluation boards");