ARM: shmobile: r8a7778: add GPIO support
authorKuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Thu, 18 Apr 2013 06:41:50 +0000 (23:41 -0700)
committerSimon Horman <horms+renesas@verge.net.au>
Wed, 5 Jun 2013 08:17:12 +0000 (17:17 +0900)
This patch was tested on Bock-W board

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Signed-off-by: Simon Horman <horms+renesas@verge.net.au>
arch/arm/mach-shmobile/setup-r8a7778.c

index 0ca5701064d2dc4e74c57197f5337b9ac77d2596..1f36ecc322a389f9a7effe2c40af55809776cc14 100644 (file)
@@ -24,6 +24,7 @@
 #include <linux/irqchip/arm-gic.h>
 #include <linux/of.h>
 #include <linux/of_platform.h>
+#include <linux/platform_data/gpio-rcar.h>
 #include <linux/platform_data/irq-renesas-intc-irqpin.h>
 #include <linux/platform_device.h>
 #include <linux/irqchip.h>
@@ -94,17 +95,50 @@ static struct resource ether_resources[] = {
                &sh_tmu##idx##_platform_data,           \
                sizeof(sh_tmu##idx##_platform_data))
 
-/* PFC */
+/* PFC/GPIO */
 static struct resource pfc_resources[] = {
        DEFINE_RES_MEM(0xfffc0000, 0x118),
 };
 
+#define R8A7778_GPIO(idx)                                              \
+static struct resource r8a7778_gpio##idx##_resources[] = {             \
+       DEFINE_RES_MEM(0xffc40000 + 0x1000 * (idx), 0x30),              \
+       DEFINE_RES_IRQ(gic_iid(0x87)),                                  \
+};                                                                     \
+                                                                       \
+static struct gpio_rcar_config r8a7778_gpio##idx##_platform_data = {   \
+       .gpio_base      = 32 * (idx),                                   \
+       .irq_base       = GPIO_IRQ_BASE(idx),                           \
+       .number_of_pins = 32,                                           \
+       .pctl_name      = "pfc-r8a7778",                                \
+}
+
+R8A7778_GPIO(0);
+R8A7778_GPIO(1);
+R8A7778_GPIO(2);
+R8A7778_GPIO(3);
+R8A7778_GPIO(4);
+
+#define r8a7778_register_gpio(idx)                             \
+       platform_device_register_resndata(                      \
+               &platform_bus, "gpio_rcar", idx,                \
+               r8a7778_gpio##idx##_resources,                  \
+               ARRAY_SIZE(r8a7778_gpio##idx##_resources),      \
+               &r8a7778_gpio##idx##_platform_data,             \
+               sizeof(r8a7778_gpio##idx##_platform_data))
+
 void __init r8a7778_pinmux_init(void)
 {
        platform_device_register_simple(
                "pfc-r8a7778", -1,
                pfc_resources,
                ARRAY_SIZE(pfc_resources));
+
+       r8a7778_register_gpio(0);
+       r8a7778_register_gpio(1);
+       r8a7778_register_gpio(2);
+       r8a7778_register_gpio(3);
+       r8a7778_register_gpio(4);
 }
 
 void __init r8a7778_add_standard_devices(void)