diff options
Diffstat (limited to 'drivers/mtd/maps/ipaq-flash.c')
-rw-r--r-- | drivers/mtd/maps/ipaq-flash.c | 37 |
1 files changed, 18 insertions, 19 deletions
diff --git a/drivers/mtd/maps/ipaq-flash.c b/drivers/mtd/maps/ipaq-flash.c index 712401810841..35097c9bbf50 100644 --- a/drivers/mtd/maps/ipaq-flash.c +++ b/drivers/mtd/maps/ipaq-flash.c | |||
@@ -1,11 +1,11 @@ | |||
1 | /* | 1 | /* |
2 | * Flash memory access on iPAQ Handhelds (either SA1100 or PXA250 based) | 2 | * Flash memory access on iPAQ Handhelds (either SA1100 or PXA250 based) |
3 | * | 3 | * |
4 | * (C) 2000 Nicolas Pitre <nico@cam.org> | 4 | * (C) 2000 Nicolas Pitre <nico@cam.org> |
5 | * (C) 2002 Hewlett-Packard Company <jamey.hicks@hp.com> | 5 | * (C) 2002 Hewlett-Packard Company <jamey.hicks@hp.com> |
6 | * (C) 2003 Christian Pellegrin <chri@ascensit.com>, <chri@infis.univ.ts.it>: concatenation of multiple flashes | 6 | * (C) 2003 Christian Pellegrin <chri@ascensit.com>, <chri@infis.univ.ts.it>: concatenation of multiple flashes |
7 | * | 7 | * |
8 | * $Id: ipaq-flash.c,v 1.3 2004/11/04 13:24:15 gleixner Exp $ | 8 | * $Id: ipaq-flash.c,v 1.5 2005/11/07 11:14:27 gleixner Exp $ |
9 | */ | 9 | */ |
10 | 10 | ||
11 | #include <linux/config.h> | 11 | #include <linux/config.h> |
@@ -107,7 +107,7 @@ static struct mtd_partition h3xxx_partitions[] = { | |||
107 | #ifndef CONFIG_LAB | 107 | #ifndef CONFIG_LAB |
108 | mask_flags: MTD_WRITEABLE, /* force read-only */ | 108 | mask_flags: MTD_WRITEABLE, /* force read-only */ |
109 | #endif | 109 | #endif |
110 | }, | 110 | }, |
111 | { | 111 | { |
112 | name: "H3XXX root jffs2", | 112 | name: "H3XXX root jffs2", |
113 | #ifndef CONFIG_LAB | 113 | #ifndef CONFIG_LAB |
@@ -148,7 +148,7 @@ static DEFINE_SPINLOCK(ipaq_vpp_lock); | |||
148 | static void h3xxx_set_vpp(struct map_info *map, int vpp) | 148 | static void h3xxx_set_vpp(struct map_info *map, int vpp) |
149 | { | 149 | { |
150 | static int nest = 0; | 150 | static int nest = 0; |
151 | 151 | ||
152 | spin_lock(&ipaq_vpp_lock); | 152 | spin_lock(&ipaq_vpp_lock); |
153 | if (vpp) | 153 | if (vpp) |
154 | nest++; | 154 | nest++; |
@@ -191,7 +191,7 @@ static unsigned long cs_phys[] = { | |||
191 | SA1100_CS3_PHYS, | 191 | SA1100_CS3_PHYS, |
192 | SA1100_CS4_PHYS, | 192 | SA1100_CS4_PHYS, |
193 | SA1100_CS5_PHYS, | 193 | SA1100_CS5_PHYS, |
194 | #else | 194 | #else |
195 | PXA_CS0_PHYS, | 195 | PXA_CS0_PHYS, |
196 | PXA_CS1_PHYS, | 196 | PXA_CS1_PHYS, |
197 | PXA_CS2_PHYS, | 197 | PXA_CS2_PHYS, |
@@ -216,7 +216,7 @@ int __init ipaq_mtd_init(void) | |||
216 | 216 | ||
217 | /* Default flash bankwidth */ | 217 | /* Default flash bankwidth */ |
218 | // ipaq_map.bankwidth = (MSC0 & MSC_RBW) ? 2 : 4; | 218 | // ipaq_map.bankwidth = (MSC0 & MSC_RBW) ? 2 : 4; |
219 | 219 | ||
220 | if (machine_is_h1900()) | 220 | if (machine_is_h1900()) |
221 | { | 221 | { |
222 | /* For our intents, the h1900 is not a real iPAQ, so we special-case it. */ | 222 | /* For our intents, the h1900 is not a real iPAQ, so we special-case it. */ |
@@ -229,7 +229,7 @@ int __init ipaq_mtd_init(void) | |||
229 | else | 229 | else |
230 | for(i=0; i<MAX_IPAQ_CS; i++) | 230 | for(i=0; i<MAX_IPAQ_CS; i++) |
231 | ipaq_map[i].bankwidth = 4; | 231 | ipaq_map[i].bankwidth = 4; |
232 | 232 | ||
233 | /* | 233 | /* |
234 | * Static partition definition selection | 234 | * Static partition definition selection |
235 | */ | 235 | */ |
@@ -309,7 +309,7 @@ int __init ipaq_mtd_init(void) | |||
309 | return -ENXIO; | 309 | return -ENXIO; |
310 | } else | 310 | } else |
311 | printk(KERN_NOTICE "iPAQ flash: found %d bytes\n", my_sub_mtd[i]->size); | 311 | printk(KERN_NOTICE "iPAQ flash: found %d bytes\n", my_sub_mtd[i]->size); |
312 | 312 | ||
313 | /* do we really need this debugging? --joshua 20030703 */ | 313 | /* do we really need this debugging? --joshua 20030703 */ |
314 | // printk("my_sub_mtd[%d]=%p\n", i, my_sub_mtd[i]); | 314 | // printk("my_sub_mtd[%d]=%p\n", i, my_sub_mtd[i]); |
315 | my_sub_mtd[i]->owner = THIS_MODULE; | 315 | my_sub_mtd[i]->owner = THIS_MODULE; |
@@ -333,11 +333,11 @@ int __init ipaq_mtd_init(void) | |||
333 | #else | 333 | #else |
334 | mymtd = my_sub_mtd[0]; | 334 | mymtd = my_sub_mtd[0]; |
335 | 335 | ||
336 | /* | 336 | /* |
337 | *In the very near future, command line partition parsing | 337 | *In the very near future, command line partition parsing |
338 | * will use the device name as 'mtd-id' instead of a value | 338 | * will use the device name as 'mtd-id' instead of a value |
339 | * passed to the parse_cmdline_partitions() routine. Since | 339 | * passed to the parse_cmdline_partitions() routine. Since |
340 | * the bootldr says 'ipaq', make sure it continues to work. | 340 | * the bootldr says 'ipaq', make sure it continues to work. |
341 | */ | 341 | */ |
342 | mymtd->name = "ipaq"; | 342 | mymtd->name = "ipaq"; |
343 | 343 | ||
@@ -385,7 +385,7 @@ int __init ipaq_mtd_init(void) | |||
385 | */ | 385 | */ |
386 | 386 | ||
387 | i = parse_mtd_partitions(mymtd, part_probes, &parsed_parts, 0); | 387 | i = parse_mtd_partitions(mymtd, part_probes, &parsed_parts, 0); |
388 | 388 | ||
389 | if (i > 0) { | 389 | if (i > 0) { |
390 | nb_parts = parsed_nr_parts = i; | 390 | nb_parts = parsed_nr_parts = i; |
391 | parts = parsed_parts; | 391 | parts = parsed_parts; |
@@ -423,16 +423,15 @@ static void __exit ipaq_mtd_cleanup(void) | |||
423 | #endif | 423 | #endif |
424 | map_destroy(mymtd); | 424 | map_destroy(mymtd); |
425 | #ifdef CONFIG_MTD_CONCAT | 425 | #ifdef CONFIG_MTD_CONCAT |
426 | for(i=0; i<MAX_IPAQ_CS; i++) | 426 | for(i=0; i<MAX_IPAQ_CS; i++) |
427 | #else | 427 | #else |
428 | for(i=1; i<MAX_IPAQ_CS; i++) | 428 | for(i=1; i<MAX_IPAQ_CS; i++) |
429 | #endif | 429 | #endif |
430 | { | 430 | { |
431 | if (my_sub_mtd[i]) | 431 | if (my_sub_mtd[i]) |
432 | map_destroy(my_sub_mtd[i]); | 432 | map_destroy(my_sub_mtd[i]); |
433 | } | 433 | } |
434 | if (parsed_parts) | 434 | kfree(parsed_parts); |
435 | kfree(parsed_parts); | ||
436 | } | 435 | } |
437 | } | 436 | } |
438 | 437 | ||
@@ -445,14 +444,14 @@ static int __init h1900_special_case(void) | |||
445 | ipaq_map[0].phys = 0x0; | 444 | ipaq_map[0].phys = 0x0; |
446 | ipaq_map[0].virt = __ioremap(0x0, 0x04000000, 0, 1); | 445 | ipaq_map[0].virt = __ioremap(0x0, 0x04000000, 0, 1); |
447 | ipaq_map[0].bankwidth = 2; | 446 | ipaq_map[0].bankwidth = 2; |
448 | 447 | ||
449 | printk(KERN_NOTICE "iPAQ flash: probing %d-bit flash bus, window=%lx with JEDEC.\n", ipaq_map[0].bankwidth*8, ipaq_map[0].virt); | 448 | printk(KERN_NOTICE "iPAQ flash: probing %d-bit flash bus, window=%lx with JEDEC.\n", ipaq_map[0].bankwidth*8, ipaq_map[0].virt); |
450 | mymtd = do_map_probe("jedec_probe", &ipaq_map[0]); | 449 | mymtd = do_map_probe("jedec_probe", &ipaq_map[0]); |
451 | if (!mymtd) | 450 | if (!mymtd) |
452 | return -ENODEV; | 451 | return -ENODEV; |
453 | add_mtd_device(mymtd); | 452 | add_mtd_device(mymtd); |
454 | printk(KERN_NOTICE "iPAQ flash: registered h1910 flash\n"); | 453 | printk(KERN_NOTICE "iPAQ flash: registered h1910 flash\n"); |
455 | 454 | ||
456 | return 0; | 455 | return 0; |
457 | } | 456 | } |
458 | 457 | ||