[ARM] pxa/vpac270: add ide support
authorMarek Vasut <marek.vasut@gmail.com>
Mon, 26 Apr 2010 19:46:07 +0000 (21:46 +0200)
committerEric Miao <eric.y.miao@gmail.com>
Tue, 11 May 2010 15:25:03 +0000 (17:25 +0200)
This patch adds support for the on-board IDE channel. I tested this with a CDROM
connected over 2.5-3.5 IDE reduction with external power supplied to the CDROM.
This was not tested with the Voipac 270-HDD-000 (official Voipac HDD module),
but I expect no problems.

Signed-off-by: Marek Vasut <marek.vasut@gmail.com>
Signed-off-by: Eric Miao <eric.y.miao@gmail.com>
arch/arm/mach-pxa/Kconfig
arch/arm/mach-pxa/include/mach/vpac270.h
arch/arm/mach-pxa/vpac270.c

index e4a0452..3b51741 100644 (file)
@@ -252,6 +252,7 @@ config MACH_COLIBRI320
 config MACH_VPAC270
        bool "Voipac PXA270"
        select PXA27x
+       select HAVE_PATA_PLATFORM
        help
          PXA270 based Single Board Computer.
 
index b90b380..0d82c47 100644 (file)
@@ -35,4 +35,6 @@
 
 #define        GPIO114_VPAC270_ETH_IRQ         114
 
+#define        GPIO36_VPAC270_IDE_IRQ          36
+
 #endif
index 0a9647b..6575b8f 100644 (file)
@@ -23,6 +23,7 @@
 #include <linux/mtd/physmap.h>
 #include <linux/dm9000.h>
 #include <linux/ucb1400.h>
+#include <linux/ata_platform.h>
 
 #include <asm/mach-types.h>
 #include <asm/mach/arch.h>
@@ -138,6 +139,10 @@ static unsigned long vpac270_pin_config[] __initdata = {
        /* I2C */
        GPIO117_I2C_SCL,
        GPIO118_I2C_SDA,
+
+       /* IDE */
+       GPIO36_GPIO,    /* IDE IRQ */
+       GPIO80_DREQ_1,
 };
 
 /******************************************************************************
@@ -487,6 +492,50 @@ static inline void vpac270_lcd_init(void) {}
 #endif
 
 /******************************************************************************
+ * PATA IDE
+ ******************************************************************************/
+#if defined(CONFIG_PATA_PLATFORM) || defined(CONFIG_PATA_PLATFORM_MODULE)
+static struct pata_platform_info vpac270_pata_pdata = {
+       .ioport_shift   = 1,
+       .irq_flags      = IRQF_TRIGGER_RISING,
+};
+
+static struct resource vpac270_ide_resources[] = {
+       [0] = { /* I/O Base address */
+              .start   = PXA_CS3_PHYS + 0x120,
+              .end     = PXA_CS3_PHYS + 0x13f,
+              .flags   = IORESOURCE_MEM
+       },
+       [1] = { /* CTL Base address */
+              .start   = PXA_CS3_PHYS + 0x15c,
+              .end     = PXA_CS3_PHYS + 0x15f,
+              .flags   = IORESOURCE_MEM
+       },
+       [2] = { /* IDE IRQ pin */
+              .start   = gpio_to_irq(GPIO36_VPAC270_IDE_IRQ),
+              .end     = gpio_to_irq(GPIO36_VPAC270_IDE_IRQ),
+              .flags   = IORESOURCE_IRQ
+       }
+};
+
+static struct platform_device vpac270_ide_device = {
+       .name           = "pata_platform",
+       .num_resources  = ARRAY_SIZE(vpac270_ide_resources),
+       .resource       = vpac270_ide_resources,
+       .dev            = {
+               .platform_data  = &vpac270_pata_pdata,
+       }
+};
+
+static void __init vpac270_ide_init(void)
+{
+       platform_device_register(&vpac270_ide_device);
+}
+#else
+static inline void vpac270_ide_init(void) {}
+#endif
+
+/******************************************************************************
  * Machine init
  ******************************************************************************/
 static void __init vpac270_init(void)
@@ -507,6 +556,7 @@ static void __init vpac270_init(void)
        vpac270_eth_init();
        vpac270_ts_init();
        vpac270_rtc_init();
+       vpac270_ide_init();
 }
 
 MACHINE_START(VPAC270, "Voipac PXA270")