sh: rts7751r2d board updates.
[pandora-kernel.git] / arch / sh / boards / renesas / rts7751r2d / setup.c
index d97be12..44b4208 100644 (file)
@@ -1,8 +1,8 @@
 /*
  * Renesas Technology Sales RTS7751R2D Support.
  *
- * Copyright (C) 2002 Atom Create Engineering Co., Ltd.
- * Copyright (C) 2004 - 2006 Paul Mundt
+ * Copyright (C) 2002 - 2006 Atom Create Engineering Co., Ltd.
+ * Copyright (C) 2004 - 2007 Paul Mundt
  *
  * This file is subject to the terms and conditions of the GNU General Public
  * License.  See the file "COPYING" in the main directory of this archive
  */
 #include <linux/init.h>
 #include <linux/platform_device.h>
+#include <linux/pata_platform.h>
 #include <linux/serial_8250.h>
 #include <linux/pm.h>
 #include <asm/machvec.h>
-#include <asm/mach/rts7751r2d.h>
-#include <asm/io.h>
+#include <asm/rts7751r2d.h>
 #include <asm/voyagergx.h>
-
-extern void heartbeat_rts7751r2d(void);
-extern void init_rts7751r2d_IRQ(void);
-extern int rts7751r2d_irq_demux(int irq);
-
-extern void *voyagergx_consistent_alloc(struct device *, size_t, dma_addr_t *, gfp_t);
-extern int voyagergx_consistent_free(struct device *, size_t, void *, dma_addr_t);
-
-static struct plat_serial8250_port uart_platform_data[] = {
-       {
-               .membase        = (void *)VOYAGER_UART_BASE,
-               .mapbase        = VOYAGER_UART_BASE,
-               .iotype         = UPIO_MEM,
-               .irq            = VOYAGER_UART0_IRQ,
-               .flags          = UPF_BOOT_AUTOCONF,
-               .regshift       = 2,
-               .uartclk        = (9600 * 16),
-       }, {
-               .flags          = 0,
-       },
-};
+#include <asm/io.h>
 
 static void __init voyagergx_serial_init(void)
 {
@@ -45,25 +25,72 @@ static void __init voyagergx_serial_init(void)
        /*
         * GPIO Control
         */
-       val = inl(GPIO_MUX_HIGH);
+       val = readl((void __iomem *)GPIO_MUX_HIGH);
        val |= 0x00001fe0;
-       outl(val, GPIO_MUX_HIGH);
+       writel(val, (void __iomem *)GPIO_MUX_HIGH);
 
        /*
         * Power Mode Gate
         */
-       val = inl(POWER_MODE0_GATE);
+       val = readl((void __iomem *)POWER_MODE0_GATE);
        val |= (POWER_MODE0_GATE_U0 | POWER_MODE0_GATE_U1);
-       outl(val, POWER_MODE0_GATE);
+       writel(val, (void __iomem *)POWER_MODE0_GATE);
 
-       val = inl(POWER_MODE1_GATE);
+       val = readl((void __iomem *)POWER_MODE1_GATE);
        val |= (POWER_MODE1_GATE_U0 | POWER_MODE1_GATE_U1);
-       outl(val, POWER_MODE1_GATE);
+       writel(val, (void __iomem *)POWER_MODE1_GATE);
 }
 
+static struct resource cf_ide_resources[] = {
+       [0] = {
+               .start  = PA_AREA5_IO + 0x1000,
+               .end    = PA_AREA5_IO + 0x1000 + 0x08 - 1,
+               .flags  = IORESOURCE_MEM,
+       },
+       [1] = {
+               .start  = PA_AREA5_IO + 0x80c,
+               .end    = PA_AREA5_IO + 0x80c + 0x16 - 1,
+               .flags  = IORESOURCE_MEM,
+       },
+       [2] = {
+#ifdef CONFIG_RTS7751R2D_REV11
+               .start  = 1,
+#else
+               .start  = 2,
+#endif
+               .flags  = IORESOURCE_IRQ,
+       },
+};
+
+static struct pata_platform_info pata_info = {
+       .ioport_shift   = 1,
+};
+
+static struct platform_device cf_ide_device  = {
+       .name           = "pata_platform",
+       .id             = -1,
+       .num_resources  = ARRAY_SIZE(cf_ide_resources),
+       .resource       = cf_ide_resources,
+       .dev    = {
+               .platform_data  = &pata_info,
+       },
+};
+
+static struct plat_serial8250_port uart_platform_data[] = {
+       {
+               .membase        = (void __iomem *)VOYAGER_UART_BASE,
+               .mapbase        = VOYAGER_UART_BASE,
+               .iotype         = UPIO_MEM,
+               .irq            = VOYAGER_UART0_IRQ,
+               .flags          = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST,
+               .regshift       = 2,
+               .uartclk        = (9600 * 16),
+       }
+};
+
 static struct platform_device uart_device = {
        .name           = "serial8250",
-       .id             = -1,
+       .id             = PLAT8250_DEV_PLATFORM,
        .dev            = {
                .platform_data  = uart_platform_data,
        },
@@ -87,6 +114,7 @@ static struct platform_device heartbeat_device = {
 static struct platform_device *rts7751r2d_devices[] __initdata = {
        &uart_device,
        &heartbeat_device,
+       &cf_ide_device,
 };
 
 static int __init rts7751r2d_devices_setup(void)
@@ -94,6 +122,7 @@ static int __init rts7751r2d_devices_setup(void)
        return platform_add_devices(rts7751r2d_devices,
                                    ARRAY_SIZE(rts7751r2d_devices));
 }
+__initcall(rts7751r2d_devices_setup);
 
 static void rts7751r2d_power_off(void)
 {
@@ -105,14 +134,17 @@ static void rts7751r2d_power_off(void)
  */
 static void __init rts7751r2d_setup(char **cmdline_p)
 {
-       device_initcall(rts7751r2d_devices_setup);
+       u16 ver = ctrl_inw(PA_VERREG);
+
+       printk(KERN_INFO "Renesas Technology Sales RTS7751R2D support.\n");
+
+       printk(KERN_INFO "FPGA version:%d (revision:%d)\n",
+                                       (ver >> 4) & 0xf, ver & 0xf);
 
        ctrl_outw(0x0000, PA_OUTPORT);
        pm_power_off = rts7751r2d_power_off;
 
        voyagergx_serial_init();
-
-       printk(KERN_INFO "Renesas Technology Sales RTS7751R2D support.\n");
 }
 
 /*
@@ -123,27 +155,6 @@ struct sh_machine_vector mv_rts7751r2d __initmv = {
        .mv_setup               = rts7751r2d_setup,
        .mv_nr_irqs             = 72,
 
-       .mv_inb                 = rts7751r2d_inb,
-       .mv_inw                 = rts7751r2d_inw,
-       .mv_inl                 = rts7751r2d_inl,
-       .mv_outb                = rts7751r2d_outb,
-       .mv_outw                = rts7751r2d_outw,
-       .mv_outl                = rts7751r2d_outl,
-
-       .mv_inb_p               = rts7751r2d_inb_p,
-       .mv_inw_p               = rts7751r2d_inw,
-       .mv_inl_p               = rts7751r2d_inl,
-       .mv_outb_p              = rts7751r2d_outb_p,
-       .mv_outw_p              = rts7751r2d_outw,
-       .mv_outl_p              = rts7751r2d_outl,
-
-       .mv_insb                = rts7751r2d_insb,
-       .mv_insw                = rts7751r2d_insw,
-       .mv_insl                = rts7751r2d_insl,
-       .mv_outsb               = rts7751r2d_outsb,
-       .mv_outsw               = rts7751r2d_outsw,
-       .mv_outsl               = rts7751r2d_outsl,
-
        .mv_init_irq            = init_rts7751r2d_IRQ,
        .mv_irq_demux           = rts7751r2d_irq_demux,