aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-pxa
diff options
context:
space:
mode:
authorDmitry Baryshkov <dbaryshkov@gmail.com>2008-10-16 11:17:05 -0400
committerDmitry Baryshkov <dbaryshkov@gmail.com>2008-10-29 14:08:37 -0400
commit6af7a8eb1eb2b5a0967fccf61e750b085d60ad48 (patch)
tree05b7d4d994bf5582c037a39c0df152c5a651d858 /arch/arm/mach-pxa
parenta20c7ab570ffdce1d6f67c7acf8c1c502a3b3839 (diff)
[MTD] sharpsl-nand: move registration to board code
Finally move registration of sharpsl-nand device to board-specific code. sharpsl nand driver is now clean and simple. Signed-off-by: Dmitry Baryshkov <dbaryshkov@gmail.com>
Diffstat (limited to 'arch/arm/mach-pxa')
-rw-r--r--arch/arm/mach-pxa/corgi.c54
-rw-r--r--arch/arm/mach-pxa/poodle.c51
-rw-r--r--arch/arm/mach-pxa/spitz.c77
3 files changed, 182 insertions, 0 deletions
diff --git a/arch/arm/mach-pxa/corgi.c b/arch/arm/mach-pxa/corgi.c
index 65558d6aa220..b65be8e7792a 100644
--- a/arch/arm/mach-pxa/corgi.c
+++ b/arch/arm/mach-pxa/corgi.c
@@ -26,6 +26,7 @@
26#include <linux/spi/spi.h> 26#include <linux/spi/spi.h>
27#include <linux/spi/ads7846.h> 27#include <linux/spi/ads7846.h>
28#include <linux/spi/corgi_lcd.h> 28#include <linux/spi/corgi_lcd.h>
29#include <linux/mtd/sharpsl.h>
29#include <video/w100fb.h> 30#include <video/w100fb.h>
30 31
31#include <asm/setup.h> 32#include <asm/setup.h>
@@ -541,11 +542,61 @@ err_free_1:
541static inline void corgi_init_spi(void) {} 542static inline void corgi_init_spi(void) {}
542#endif 543#endif
543 544
545static struct mtd_partition sharpsl_nand_partitions[] = {
546 {
547 .name = "System Area",
548 .offset = 0,
549 .size = 7 * 1024 * 1024,
550 },
551 {
552 .name = "Root Filesystem",
553 .offset = 7 * 1024 * 1024,
554 .size = 25 * 1024 * 1024,
555 },
556 {
557 .name = "Home Filesystem",
558 .offset = MTDPART_OFS_APPEND,
559 .size = MTDPART_SIZ_FULL,
560 },
561};
562
563static uint8_t scan_ff_pattern[] = { 0xff, 0xff };
564
565static struct nand_bbt_descr sharpsl_bbt = {
566 .options = 0,
567 .offs = 4,
568 .len = 2,
569 .pattern = scan_ff_pattern
570};
571
572static struct sharpsl_nand_platform_data sharpsl_nand_platform_data = {
573 .badblock_pattern = &sharpsl_bbt,
574 .partitions = sharpsl_nand_partitions,
575 .nr_partitions = ARRAY_SIZE(sharpsl_nand_partitions),
576};
577
578static struct resource sharpsl_nand_resources[] = {
579 {
580 .start = 0x0C000000,
581 .end = 0x0C000FFF,
582 .flags = IORESOURCE_MEM,
583 },
584};
585
586static struct platform_device sharpsl_nand_device = {
587 .name = "sharpsl-nand",
588 .id = -1,
589 .resource = sharpsl_nand_resources,
590 .num_resources = ARRAY_SIZE(sharpsl_nand_resources),
591 .dev.platform_data = &sharpsl_nand_platform_data,
592};
593
544static struct platform_device *devices[] __initdata = { 594static struct platform_device *devices[] __initdata = {
545 &corgiscoop_device, 595 &corgiscoop_device,
546 &corgifb_device, 596 &corgifb_device,
547 &corgikbd_device, 597 &corgikbd_device,
548 &corgiled_device, 598 &corgiled_device,
599 &sharpsl_nand_device,
549}; 600};
550 601
551static void corgi_poweroff(void) 602static void corgi_poweroff(void)
@@ -585,6 +636,9 @@ static void __init corgi_init(void)
585 636
586 platform_scoop_config = &corgi_pcmcia_config; 637 platform_scoop_config = &corgi_pcmcia_config;
587 638
639 if (machine_is_husky())
640 sharpsl_nand_partitions[1].size = 53 * 1024 * 1024;
641
588 platform_add_devices(devices, ARRAY_SIZE(devices)); 642 platform_add_devices(devices, ARRAY_SIZE(devices));
589} 643}
590 644
diff --git a/arch/arm/mach-pxa/poodle.c b/arch/arm/mach-pxa/poodle.c
index 2e3bd8b1523b..a45afdf25202 100644
--- a/arch/arm/mach-pxa/poodle.c
+++ b/arch/arm/mach-pxa/poodle.c
@@ -23,6 +23,7 @@
23#include <linux/gpio.h> 23#include <linux/gpio.h>
24#include <linux/spi/spi.h> 24#include <linux/spi/spi.h>
25#include <linux/spi/ads7846.h> 25#include <linux/spi/ads7846.h>
26#include <linux/mtd/sharpsl.h>
26 27
27#include <mach/hardware.h> 28#include <mach/hardware.h>
28#include <asm/mach-types.h> 29#include <asm/mach-types.h>
@@ -413,9 +414,59 @@ static struct pxafb_mach_info poodle_fb_info = {
413 .lcd_conn = LCD_COLOR_TFT_16BPP, 414 .lcd_conn = LCD_COLOR_TFT_16BPP,
414}; 415};
415 416
417static struct mtd_partition sharpsl_nand_partitions[] = {
418 {
419 .name = "System Area",
420 .offset = 0,
421 .size = 7 * 1024 * 1024,
422 },
423 {
424 .name = "Root Filesystem",
425 .offset = 7 * 1024 * 1024,
426 .size = 22 * 1024 * 1024,
427 },
428 {
429 .name = "Home Filesystem",
430 .offset = MTDPART_OFS_APPEND,
431 .size = MTDPART_SIZ_FULL,
432 },
433};
434
435static uint8_t scan_ff_pattern[] = { 0xff, 0xff };
436
437static struct nand_bbt_descr sharpsl_bbt = {
438 .options = 0,
439 .offs = 4,
440 .len = 2,
441 .pattern = scan_ff_pattern
442};
443
444static struct sharpsl_nand_platform_data sharpsl_nand_platform_data = {
445 .badblock_pattern = &sharpsl_bbt,
446 .partitions = sharpsl_nand_partitions,
447 .nr_partitions = ARRAY_SIZE(sharpsl_nand_partitions),
448};
449
450static struct resource sharpsl_nand_resources[] = {
451 {
452 .start = 0x0C000000,
453 .end = 0x0C000FFF,
454 .flags = IORESOURCE_MEM,
455 },
456};
457
458static struct platform_device sharpsl_nand_device = {
459 .name = "sharpsl-nand",
460 .id = -1,
461 .resource = sharpsl_nand_resources,
462 .num_resources = ARRAY_SIZE(sharpsl_nand_resources),
463 .dev.platform_data = &sharpsl_nand_platform_data,
464};
465
416static struct platform_device *devices[] __initdata = { 466static struct platform_device *devices[] __initdata = {
417 &poodle_locomo_device, 467 &poodle_locomo_device,
418 &poodle_scoop_device, 468 &poodle_scoop_device,
469 &sharpsl_nand_device,
419}; 470};
420 471
421static void poodle_poweroff(void) 472static void poodle_poweroff(void)
diff --git a/arch/arm/mach-pxa/spitz.c b/arch/arm/mach-pxa/spitz.c
index 524f656dc56d..6ffa6134e107 100644
--- a/arch/arm/mach-pxa/spitz.c
+++ b/arch/arm/mach-pxa/spitz.c
@@ -30,6 +30,7 @@
30#include <linux/spi/spi.h> 30#include <linux/spi/spi.h>
31#include <linux/spi/ads7846.h> 31#include <linux/spi/ads7846.h>
32#include <linux/spi/corgi_lcd.h> 32#include <linux/spi/corgi_lcd.h>
33#include <linux/mtd/sharpsl.h>
33 34
34#include <asm/setup.h> 35#include <asm/setup.h>
35#include <asm/memory.h> 36#include <asm/memory.h>
@@ -595,11 +596,60 @@ static struct pxafb_mach_info spitz_pxafb_info = {
595 .lcd_conn = LCD_COLOR_TFT_16BPP | LCD_ALTERNATE_MAPPING, 596 .lcd_conn = LCD_COLOR_TFT_16BPP | LCD_ALTERNATE_MAPPING,
596}; 597};
597 598
599static struct mtd_partition sharpsl_nand_partitions[] = {
600 {
601 .name = "System Area",
602 .offset = 0,
603 .size = 7 * 1024 * 1024,
604 },
605 {
606 .name = "Root Filesystem",
607 .offset = 7 * 1024 * 1024,
608 },
609 {
610 .name = "Home Filesystem",
611 .offset = MTDPART_OFS_APPEND,
612 .size = MTDPART_SIZ_FULL,
613 },
614};
615
616static uint8_t scan_ff_pattern[] = { 0xff, 0xff };
617
618static struct nand_bbt_descr sharpsl_bbt = {
619 .options = 0,
620 .offs = 4,
621 .len = 2,
622 .pattern = scan_ff_pattern
623};
624
625static struct sharpsl_nand_platform_data sharpsl_nand_platform_data = {
626 .badblock_pattern = &sharpsl_bbt,
627 .partitions = sharpsl_nand_partitions,
628 .nr_partitions = ARRAY_SIZE(sharpsl_nand_partitions),
629};
630
631static struct resource sharpsl_nand_resources[] = {
632 {
633 .start = 0x0C000000,
634 .end = 0x0C000FFF,
635 .flags = IORESOURCE_MEM,
636 },
637};
638
639static struct platform_device sharpsl_nand_device = {
640 .name = "sharpsl-nand",
641 .id = -1,
642 .resource = sharpsl_nand_resources,
643 .num_resources = ARRAY_SIZE(sharpsl_nand_resources),
644 .dev.platform_data = &sharpsl_nand_platform_data,
645};
646
598 647
599static struct platform_device *devices[] __initdata = { 648static struct platform_device *devices[] __initdata = {
600 &spitzscoop_device, 649 &spitzscoop_device,
601 &spitzkbd_device, 650 &spitzkbd_device,
602 &spitzled_device, 651 &spitzled_device,
652 &sharpsl_nand_device,
603}; 653};
604 654
605static void spitz_poweroff(void) 655static void spitz_poweroff(void)
@@ -622,6 +672,14 @@ static void __init common_init(void)
622 pm_power_off = spitz_poweroff; 672 pm_power_off = spitz_poweroff;
623 arm_pm_restart = spitz_restart; 673 arm_pm_restart = spitz_restart;
624 674
675 if (machine_is_spitz()) {
676 sharpsl_nand_partitions[1].size = 5 * 1024 * 1024;
677 } else if (machine_is_akita()) {
678 sharpsl_nand_partitions[1].size = 58 * 1024 * 1024;
679 } else if (machine_is_borzoi()) {
680 sharpsl_nand_partitions[1].size = 32 * 1024 * 1024;
681 }
682
625 PMCR = 0x00; 683 PMCR = 0x00;
626 684
627 /* Stop 3.6MHz and drive HIGH to PCMCIA and CS */ 685 /* Stop 3.6MHz and drive HIGH to PCMCIA and CS */
@@ -666,10 +724,29 @@ static struct i2c_board_info akita_i2c_board_info[] = {
666 }, 724 },
667}; 725};
668 726
727static struct nand_bbt_descr sharpsl_akita_bbt = {
728 .options = 0,
729 .offs = 4,
730 .len = 1,
731 .pattern = scan_ff_pattern
732};
733
734static struct nand_ecclayout akita_oobinfo = {
735 .eccbytes = 24,
736 .eccpos = {
737 0x5, 0x1, 0x2, 0x3, 0x6, 0x7, 0x15, 0x11,
738 0x12, 0x13, 0x16, 0x17, 0x25, 0x21, 0x22, 0x23,
739 0x26, 0x27, 0x35, 0x31, 0x32, 0x33, 0x36, 0x37},
740 .oobfree = {{0x08, 0x09}}
741};
742
669static void __init akita_init(void) 743static void __init akita_init(void)
670{ 744{
671 spitz_ficp_platform_data.transceiver_mode = akita_irda_transceiver_mode; 745 spitz_ficp_platform_data.transceiver_mode = akita_irda_transceiver_mode;
672 746
747 sharpsl_nand_platform_data.badblock_pattern = &sharpsl_akita_bbt;
748 sharpsl_nand_platform_data.ecc_layout = &akita_oobinfo;
749
673 /* We just pretend the second element of the array doesn't exist */ 750 /* We just pretend the second element of the array doesn't exist */
674 spitz_pcmcia_config.num_devs = 1; 751 spitz_pcmcia_config.num_devs = 1;
675 platform_scoop_config = &spitz_pcmcia_config; 752 platform_scoop_config = &spitz_pcmcia_config;