Charu, > -----Original Message----- > From: linux-omap-owner@xxxxxxxxxxxxxxx [mailto:linux-omap- > owner@xxxxxxxxxxxxxxx] On Behalf Of Varadarajan, Charulatha > Sent: Friday, August 06, 2010 6:04 PM > To: linux-omap@xxxxxxxxxxxxxxx > Cc: paul@xxxxxxxxx; khilman@xxxxxxxxxxxxxxxxxxx; Cousson, Benoit; Nayak, > Rajendra; Varadarajan, Charulatha; Basak, Partha > Subject: [PATCH 03/13 v5] OMAP: GPIO: Introduce support for OMAP16xx chip > GPIO init > > This patch adds support for handling OMAP16xx specific gpio_init > by providing platform device data and doing device registration. > > Signed-off-by: Charulatha V <charu@xxxxxx> > Signed-off-by: Basak, Partha <p-basak2@xxxxxx> > --- > arch/arm/mach-omap1/gpio16xx.c | 208 > ++++++++++++++++++++++++++++++++++++++++ > 1 files changed, 208 insertions(+), 0 deletions(-) > create mode 100644 arch/arm/mach-omap1/gpio16xx.c > > diff --git a/arch/arm/mach-omap1/gpio16xx.c b/arch/arm/mach- > omap1/gpio16xx.c > new file mode 100644 > index 0000000..727c52b > --- /dev/null > +++ b/arch/arm/mach-omap1/gpio16xx.c > @@ -0,0 +1,208 @@ > +/* > + * OMAP16XX-specific gpio code > + * > + * Copyright (C) 2010 Texas Instruments, Inc. > + * > + * Author: > + * Charulatha V <charu@xxxxxx> > + * > + * This program is free software; you can redistribute it and/or modify > + * it under the terms of the GNU General Public License version 2 as > + * published by the Free Software Foundation. > + */ > + > +#include <linux/gpio.h> > + > +#define OMAP1610_GPIO1_BASE 0xfffbe400 > +#define OMAP1610_GPIO2_BASE 0xfffbec00 > +#define OMAP1610_GPIO3_BASE 0xfffbb400 > +#define OMAP1610_GPIO4_BASE 0xfffbbc00 > +#define OMAP1_MPUIO_VBASE OMAP1_MPUIO_BASE > + > +static struct omap_gpio_dev_attr omap16xx_gpio_attr = { > + .bank_width = 16, > +}; > + > +/* > + * OMAP16XX MPU GPIO interface data > + */ > +static struct __initdata resource omap16xx_mpu_gpio_resources[] = { > + { > + .start = OMAP1_MPUIO_VBASE, > + .end = OMAP1_MPUIO_VBASE + SZ_2K - 1, > + .flags = IORESOURCE_MEM, > + }, > + { > + .start = INT_MPUIO, > + .flags = IORESOURCE_IRQ, > + }, > +}; > + > +static struct __initdata omap_gpio_platform_data omap16xx_mpu_gpio_config > = { > + .virtual_irq_start = IH_MPUIO_BASE, > + .bank_type = METHOD_MPUIO, > + .gpio_attr = &omap16xx_gpio_attr, > +}; > + > +static struct __initdata platform_device omap16xx_mpu_gpio = { > + .name = "omap-gpio", > + .id = 0, > + .dev = { > + .platform_data = &omap16xx_mpu_gpio_config, > + }, > + .num_resources = ARRAY_SIZE(omap16xx_mpu_gpio_resources), > + .resource = omap16xx_mpu_gpio_resources, > +}; > + > +/* > + * OMAP16XX GPIO1 interface data > + */ > +static struct __initdata resource omap16xx_gpio1_resources[] = { > + { > + .start = OMAP1610_GPIO1_BASE, > + .end = OMAP1610_GPIO1_BASE + SZ_2K - 1, > + .flags = IORESOURCE_MEM, > + }, > + { > + .start = INT_GPIO_BANK1, > + .flags = IORESOURCE_IRQ, > + }, > +}; > + > +static struct __initdata omap_gpio_platform_data omap16xx_gpio1_config = > { > + .virtual_irq_start = IH_GPIO_BASE, > + .bank_type = METHOD_GPIO_1610, > + .gpio_attr = &omap16xx_gpio_attr, > +}; > + > +static struct __initdata platform_device omap16xx_gpio1 = { > + .name = "omap-gpio", > + .id = 1, > + .dev = { > + .platform_data = &omap16xx_gpio1_config, > + }, > + .num_resources = ARRAY_SIZE(omap16xx_gpio1_resources), > + .resource = omap16xx_gpio1_resources, > +}; > + > +/* > + * OMAP16XX GPIO2 interface data > + */ > +static struct __initdata resource omap16xx_gpio2_resources[] = { > + { > + .start = OMAP1610_GPIO2_BASE, > + .end = OMAP1610_GPIO2_BASE + SZ_2K - 1, > + .flags = IORESOURCE_MEM, > + }, > + { > + .start = INT_1610_GPIO_BANK2, > + .flags = IORESOURCE_IRQ, > + }, > +}; > + > +static struct __initdata omap_gpio_platform_data omap16xx_gpio2_config = > { > + .virtual_irq_start = IH_GPIO_BASE + 16, > + .bank_type = METHOD_GPIO_1610, > + .gpio_attr = &omap16xx_gpio_attr, > +}; > + > +static struct __initdata platform_device omap16xx_gpio2 = { > + .name = "omap-gpio", > + .id = 2, > + .dev = { > + .platform_data = &omap16xx_gpio2_config, > + }, > + .num_resources = ARRAY_SIZE(omap16xx_gpio2_resources), > + .resource = omap16xx_gpio2_resources, > +}; > + > +/* > + * OMAP16XX GPIO3 interface data > + */ > +static struct __initdata resource omap16xx_gpio3_resources[] = { > + { > + .start = OMAP1610_GPIO3_BASE, > + .end = OMAP1610_GPIO3_BASE + SZ_2K - 1, > + .flags = IORESOURCE_MEM, > + }, > + { > + .start = INT_1610_GPIO_BANK3, > + .flags = IORESOURCE_IRQ, > + }, > +}; > + > +static struct __initdata omap_gpio_platform_data omap16xx_gpio3_config = > { > + .virtual_irq_start = IH_GPIO_BASE + 32, > + .bank_type = METHOD_GPIO_1610, > + .gpio_attr = &omap16xx_gpio_attr, > +}; > + > +static struct __initdata platform_device omap16xx_gpio3 = { > + .name = "omap-gpio", > + .id = 3, > + .dev = { > + .platform_data = &omap16xx_gpio3_config, > + }, > + .num_resources = ARRAY_SIZE(omap16xx_gpio3_resources), > + .resource = omap16xx_gpio3_resources, > +}; > + > +/* > + * OMAP16XX GPIO4 interface data > + */ > +static struct __initdata resource omap16xx_gpio4_resources[] = { > + { > + .start = OMAP1610_GPIO4_BASE, > + .end = OMAP1610_GPIO4_BASE + SZ_2K - 1, > + .flags = IORESOURCE_MEM, > + }, > + { > + .start = INT_1610_GPIO_BANK4, > + .flags = IORESOURCE_IRQ, > + }, > +}; > + > +static struct __initdata omap_gpio_platform_data omap16xx_gpio4_config = > { > + .virtual_irq_start = IH_GPIO_BASE + 48, > + .bank_type = METHOD_GPIO_1610, > + .gpio_attr = &omap16xx_gpio_attr, > +}; > + > +static struct __initdata platform_device omap16xx_gpio4 = { > + .name = "omap-gpio", > + .id = 4, > + .dev = { > + .platform_data = &omap16xx_gpio4_config, > + }, > + .num_resources = ARRAY_SIZE(omap16xx_gpio4_resources), > + .resource = omap16xx_gpio4_resources, > +}; > + > +static struct __initdata platform_device * omap16xx_gpio_dev[] = { > + &omap16xx_mpu_gpio, > + &omap16xx_gpio1, > + &omap16xx_gpio2, > + &omap16xx_gpio3, > + &omap16xx_gpio4, > +}; > + > +/* > + * omap16xx_gpio_init needs to be done before > + * machine_init functions access gpio APIs. > + * Hence omap16xx_gpio_init is a postcore_initcall. > + */ > +static int __init omap16xx_gpio_init(void) > +{ > + int i; > + > + if (!cpu_is_omap16xx()) > + return -EINVAL; > + > + for (i = 0; i < sizeof(omap16xx_gpio_dev); i++) > + platform_device_register(omap16xx_gpio_dev[i]); > + > + gpio_bank_count = sizeof(omap16xx_gpio_dev); > + I believe, you meant ARRAY_SIZE(omap16xx_gpio_dev) ? > + return 0; > +} > +postcore_initcall(omap16xx_gpio_init); > -- > 1.6.3.3 > > -- > To unsubscribe from this list: send the line "unsubscribe linux-omap" in > the body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html