Merge branch 'gpio/next' of git://git.secretlab.ca/git/linux-2.6
[firefly-linux-kernel-4.4.55.git] / arch / arm / mach-ep93xx / core.c
index 1d4b65fd673eb23e9d2ac2fd9dbded0f2e8ba6d9..c488e4bd61e75c775dad8372f2a1dd96fac73268 100644 (file)
@@ -174,14 +174,10 @@ struct sys_timer ep93xx_timer = {
 /*************************************************************************
  * EP93xx IRQ handling
  *************************************************************************/
-extern void ep93xx_gpio_init_irq(void);
-
 void __init ep93xx_init_irq(void)
 {
        vic_init(EP93XX_VIC1_BASE, 0, EP93XX_VIC1_VALID_IRQ_MASK, 0);
        vic_init(EP93XX_VIC2_BASE, 32, EP93XX_VIC2_VALID_IRQ_MASK, 0);
-
-       ep93xx_gpio_init_irq();
 }
 
 
@@ -240,6 +236,24 @@ unsigned int ep93xx_chip_revision(void)
        return v;
 }
 
+/*************************************************************************
+ * EP93xx GPIO
+ *************************************************************************/
+static struct resource ep93xx_gpio_resource[] = {
+       {
+               .start          = EP93XX_GPIO_PHYS_BASE,
+               .end            = EP93XX_GPIO_PHYS_BASE + 0xcc - 1,
+               .flags          = IORESOURCE_MEM,
+       },
+};
+
+static struct platform_device ep93xx_gpio_device = {
+       .name           = "gpio-ep93xx",
+       .id             = -1,
+       .num_resources  = ARRAY_SIZE(ep93xx_gpio_resource),
+       .resource       = ep93xx_gpio_resource,
+};
+
 /*************************************************************************
  * EP93xx peripheral handling
  *************************************************************************/
@@ -251,9 +265,9 @@ static void ep93xx_uart_set_mctrl(struct amba_device *dev,
        unsigned int mcr;
 
        mcr = 0;
-       if (!(mctrl & TIOCM_RTS))
+       if (mctrl & TIOCM_RTS)
                mcr |= 2;
-       if (!(mctrl & TIOCM_DTR))
+       if (mctrl & TIOCM_DTR)
                mcr |= 1;
 
        __raw_writel(mcr, base + EP93XX_UART_MCR_OFFSET);
@@ -870,14 +884,13 @@ void __init ep93xx_register_ac97(void)
        platform_device_register(&ep93xx_pcm_device);
 }
 
-extern void ep93xx_gpio_init(void);
-
 void __init ep93xx_init_devices(void)
 {
        /* Disallow access to MaverickCrunch initially */
        ep93xx_devcfg_clear_bits(EP93XX_SYSCON_DEVCFG_CPENA);
 
-       ep93xx_gpio_init();
+       /* Get the GPIO working early, other devices need it */
+       platform_device_register(&ep93xx_gpio_device);
 
        amba_device_register(&uart1_device, &iomem_resource);
        amba_device_register(&uart2_device, &iomem_resource);