aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/mach-pxa/spitz.c
diff options
context:
space:
mode:
authorDavid Woodhouse <David.Woodhouse@intel.com>2008-12-10 10:49:12 -0500
committerDavid Woodhouse <David.Woodhouse@intel.com>2008-12-10 10:49:12 -0500
commitc4956ed6fab26347ab1a712727da84b2501ab2dd (patch)
tree6ac59589a722faaa70a1865ff8050c5274ba0216 /arch/arm/mach-pxa/spitz.c
parentc80a7b265fedef584a1bb8baf92a5b289a66e039 (diff)
parent6af7a8eb1eb2b5a0967fccf61e750b085d60ad48 (diff)
Merge branch 'misc/mtd/sharpsl-nand' of git://git.kernel.org/pub/scm/linux/kernel/git/lumag/tosa-2.6
Diffstat (limited to 'arch/arm/mach-pxa/spitz.c')
-rw-r--r--arch/arm/mach-pxa/spitz.c77
1 files changed, 77 insertions, 0 deletions
diff --git a/arch/arm/mach-pxa/spitz.c b/arch/arm/mach-pxa/spitz.c
index 3be76ee2bdbf..7672b09c31b9 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>
@@ -608,11 +609,60 @@ static struct pxafb_mach_info spitz_pxafb_info = {
608 .lcd_conn = LCD_COLOR_TFT_16BPP | LCD_ALTERNATE_MAPPING, 609 .lcd_conn = LCD_COLOR_TFT_16BPP | LCD_ALTERNATE_MAPPING,
609}; 610};
610 611
612static struct mtd_partition sharpsl_nand_partitions[] = {
613 {
614 .name = "System Area",
615 .offset = 0,
616 .size = 7 * 1024 * 1024,
617 },
618 {
619 .name = "Root Filesystem",
620 .offset = 7 * 1024 * 1024,
621 },
622 {
623 .name = "Home Filesystem",
624 .offset = MTDPART_OFS_APPEND,
625 .size = MTDPART_SIZ_FULL,
626 },
627};
628
629static uint8_t scan_ff_pattern[] = { 0xff, 0xff };
630
631static struct nand_bbt_descr sharpsl_bbt = {
632 .options = 0,
633 .offs = 4,
634 .len = 2,
635 .pattern = scan_ff_pattern
636};
637
638static struct sharpsl_nand_platform_data sharpsl_nand_platform_data = {
639 .badblock_pattern = &sharpsl_bbt,
640 .partitions = sharpsl_nand_partitions,
641 .nr_partitions = ARRAY_SIZE(sharpsl_nand_partitions),
642};
643
644static struct resource sharpsl_nand_resources[] = {
645 {
646 .start = 0x0C000000,
647 .end = 0x0C000FFF,
648 .flags = IORESOURCE_MEM,
649 },
650};
651
652static struct platform_device sharpsl_nand_device = {
653 .name = "sharpsl-nand",
654 .id = -1,
655 .resource = sharpsl_nand_resources,
656 .num_resources = ARRAY_SIZE(sharpsl_nand_resources),
657 .dev.platform_data = &sharpsl_nand_platform_data,
658};
659
611 660
612static struct platform_device *devices[] __initdata = { 661static struct platform_device *devices[] __initdata = {
613 &spitzscoop_device, 662 &spitzscoop_device,
614 &spitzkbd_device, 663 &spitzkbd_device,
615 &spitzled_device, 664 &spitzled_device,
665 &sharpsl_nand_device,
616}; 666};
617 667
618static void spitz_poweroff(void) 668static void spitz_poweroff(void)
@@ -635,6 +685,14 @@ static void __init common_init(void)
635 pm_power_off = spitz_poweroff; 685 pm_power_off = spitz_poweroff;
636 arm_pm_restart = spitz_restart; 686 arm_pm_restart = spitz_restart;
637 687
688 if (machine_is_spitz()) {
689 sharpsl_nand_partitions[1].size = 5 * 1024 * 1024;
690 } else if (machine_is_akita()) {
691 sharpsl_nand_partitions[1].size = 58 * 1024 * 1024;
692 } else if (machine_is_borzoi()) {
693 sharpsl_nand_partitions[1].size = 32 * 1024 * 1024;
694 }
695
638 PMCR = 0x00; 696 PMCR = 0x00;
639 697
640 /* Stop 3.6MHz and drive HIGH to PCMCIA and CS */ 698 /* Stop 3.6MHz and drive HIGH to PCMCIA and CS */
@@ -679,10 +737,29 @@ static struct i2c_board_info akita_i2c_board_info[] = {
679 }, 737 },
680}; 738};
681 739
740static struct nand_bbt_descr sharpsl_akita_bbt = {
741 .options = 0,
742 .offs = 4,
743 .len = 1,
744 .pattern = scan_ff_pattern
745};
746
747static struct nand_ecclayout akita_oobinfo = {
748 .eccbytes = 24,
749 .eccpos = {
750 0x5, 0x1, 0x2, 0x3, 0x6, 0x7, 0x15, 0x11,
751 0x12, 0x13, 0x16, 0x17, 0x25, 0x21, 0x22, 0x23,
752 0x26, 0x27, 0x35, 0x31, 0x32, 0x33, 0x36, 0x37},
753 .oobfree = {{0x08, 0x09}}
754};
755
682static void __init akita_init(void) 756static void __init akita_init(void)
683{ 757{
684 spitz_ficp_platform_data.transceiver_mode = akita_irda_transceiver_mode; 758 spitz_ficp_platform_data.transceiver_mode = akita_irda_transceiver_mode;
685 759
760 sharpsl_nand_platform_data.badblock_pattern = &sharpsl_akita_bbt;
761 sharpsl_nand_platform_data.ecc_layout = &akita_oobinfo;
762
686 /* We just pretend the second element of the array doesn't exist */ 763 /* We just pretend the second element of the array doesn't exist */
687 spitz_pcmcia_config.num_devs = 1; 764 spitz_pcmcia_config.num_devs = 1;
688 platform_scoop_config = &spitz_pcmcia_config; 765 platform_scoop_config = &spitz_pcmcia_config;