* [PATCH v7 01/11] OMAP: GPIO: prepare for platform driver
2010-11-23 14:56 [PATCH v7 00/11] OMAP: GPIO: Implement GPIO as a platform device Varadarajan, Charulatha
@ 2010-11-23 14:56 ` Varadarajan, Charulatha
2010-11-26 4:38 ` Olof Johansson
2010-11-23 14:56 ` [PATCH v7 02/11] OMAP15xx: GPIO: Introduce support for GPIO init Varadarajan, Charulatha
` (10 subsequent siblings)
11 siblings, 1 reply; 29+ messages in thread
From: Varadarajan, Charulatha @ 2010-11-23 14:56 UTC (permalink / raw)
To: linux-arm-kernel
Prepare for implementing GPIO as a platform driver.
Modifies omap_gpio_init() to make use of omap_gpio_chip_init()
and omap_gpio_mod_init(). omap_gpio_mod_init() does the module init
by clearing the status register and initializing the GPIO control register.
omap_gpio_chip_init() initializes the chip request, free, get, set and
other function pointers and sets the gpio irq handler.
This is only to reorganize the code so that the "omap gpio platform driver
implementation patch" looks cleaner and better to review.
Signed-off-by: Charulatha V <charu@ti.com>
---
arch/arm/plat-omap/gpio.c | 234 +++++++++++++++++++++++----------------------
1 files changed, 118 insertions(+), 116 deletions(-)
diff --git a/arch/arm/plat-omap/gpio.c b/arch/arm/plat-omap/gpio.c
index e0e2fa7..48bccf2 100644
--- a/arch/arm/plat-omap/gpio.c
+++ b/arch/arm/plat-omap/gpio.c
@@ -190,14 +190,12 @@ struct gpio_bank {
u32 suspend_wakeup;
u32 saved_wakeup;
#endif
-#ifdef CONFIG_ARCH_OMAP2PLUS
u32 non_wakeup_gpios;
u32 enabled_non_wakeup_gpios;
u32 saved_datain;
u32 saved_fallingdetect;
u32 saved_risingdetect;
-#endif
u32 level_mask;
u32 toggle_mask;
spinlock_t lock;
@@ -1718,10 +1716,125 @@ static void __init omap_gpio_show_rev(void)
*/
static struct lock_class_key gpio_lock_class;
+static void omap_gpio_mod_init(struct gpio_bank *bank, int id)
+{
+ if (cpu_class_is_omap2()) {
+ if (cpu_is_omap44xx()) {
+ __raw_writel(0xffffffff, bank->base +
+ OMAP4_GPIO_IRQSTATUSCLR0);
+ __raw_writel(0x00000000, bank->base +
+ OMAP4_GPIO_DEBOUNCENABLE);
+ /* Initialize interface clk ungated, module enabled */
+ __raw_writel(0, bank->base + OMAP4_GPIO_CTRL);
+ } else if (cpu_is_omap34xx()) {
+ __raw_writel(0x00000000, bank->base +
+ OMAP24XX_GPIO_IRQENABLE1);
+ __raw_writel(0xffffffff, bank->base +
+ OMAP24XX_GPIO_IRQSTATUS1);
+ __raw_writel(0x00000000, bank->base +
+ OMAP24XX_GPIO_DEBOUNCE_EN);
+
+ /* Initialize interface clk ungated, module enabled */
+ __raw_writel(0, bank->base + OMAP24XX_GPIO_CTRL);
+ } else if (cpu_is_omap24xx()) {
+ static const u32 non_wakeup_gpios[] = {
+ 0xe203ffc0, 0x08700040
+ };
+ if (id < ARRAY_SIZE(non_wakeup_gpios))
+ bank->non_wakeup_gpios = non_wakeup_gpios[id];
+ }
+ } else if (cpu_class_is_omap1()) {
+ if (bank_is_mpuio(bank))
+ __raw_writew(0xffff, bank->base
+ + OMAP_MPUIO_GPIO_MASKIT);
+ if (cpu_is_omap15xx() && bank->method == METHOD_GPIO_1510) {
+ __raw_writew(0xffff, bank->base
+ + OMAP1510_GPIO_INT_MASK);
+ __raw_writew(0x0000, bank->base
+ + OMAP1510_GPIO_INT_STATUS);
+ }
+ if (cpu_is_omap16xx() && bank->method == METHOD_GPIO_1610) {
+ __raw_writew(0x0000, bank->base
+ + OMAP1610_GPIO_IRQENABLE1);
+ __raw_writew(0xffff, bank->base
+ + OMAP1610_GPIO_IRQSTATUS1);
+ __raw_writew(0x0014, bank->base
+ + OMAP1610_GPIO_SYSCONFIG);
+
+ /*
+ * Enable system clock for GPIO module.
+ * The CAM_CLK_CTRL *is* really the right place.
+ */
+ omap_writel(omap_readl(ULPD_CAM_CLK_CTRL) | 0x04,
+ ULPD_CAM_CLK_CTRL);
+ }
+ if (cpu_is_omap7xx() && bank->method == METHOD_GPIO_7XX) {
+ __raw_writel(0xffffffff, bank->base
+ + OMAP7XX_GPIO_INT_MASK);
+ __raw_writel(0x00000000, bank->base
+ + OMAP7XX_GPIO_INT_STATUS);
+ }
+ }
+}
+
+static void __init omap_gpio_chip_init(struct gpio_bank *bank)
+{
+ int j, bank_width = 16;
+ static int gpio;
+
+ if (cpu_is_omap7xx() && bank->method == METHOD_GPIO_7XX)
+ bank_width = 32; /* 7xx has 32-bit GPIOs */
+
+ if ((bank->method == METHOD_GPIO_24XX) ||
+ (bank->method == METHOD_GPIO_44XX))
+ bank_width = 32;
+
+ bank->mod_usage = 0;
+ /*
+ * REVISIT eventually switch from OMAP-specific gpio structs
+ * over to the generic ones
+ */
+ bank->chip.request = omap_gpio_request;
+ bank->chip.free = omap_gpio_free;
+ bank->chip.direction_input = gpio_input;
+ bank->chip.get = gpio_get;
+ bank->chip.direction_output = gpio_output;
+ bank->chip.set_debounce = gpio_debounce;
+ bank->chip.set = gpio_set;
+ bank->chip.to_irq = gpio_2irq;
+ if (bank_is_mpuio(bank)) {
+ bank->chip.label = "mpuio";
+#ifdef CONFIG_ARCH_OMAP16XX
+ bank->chip.dev = &omap_mpuio_device.dev;
+#endif
+ bank->chip.base = OMAP_MPUIO(0);
+ } else {
+ bank->chip.label = "gpio";
+ bank->chip.base = gpio;
+ gpio += bank_width;
+ }
+ bank->chip.ngpio = bank_width;
+
+ gpiochip_add(&bank->chip);
+
+ for (j = bank->virtual_irq_start;
+ j < bank->virtual_irq_start + bank_width; j++) {
+ lockdep_set_class(&irq_desc[j].lock, &gpio_lock_class);
+ set_irq_chip_data(j, bank);
+ if (bank_is_mpuio(bank))
+ set_irq_chip(j, &mpuio_irq_chip);
+ else
+ set_irq_chip(j, &gpio_irq_chip);
+ set_irq_handler(j, handle_simple_irq);
+ set_irq_flags(j, IRQF_VALID);
+ }
+ set_irq_chained_handler(bank->irq, gpio_irq_handler);
+ set_irq_data(bank->irq, bank);
+}
+
static int __init _omap_gpio_init(void)
{
int i;
- int gpio = 0;
struct gpio_bank *bank;
int bank_size = SZ_8K; /* Module 4KB + L4 4KB except on omap1 */
char clk_name[11];
@@ -1828,7 +1941,6 @@ static int __init _omap_gpio_init(void)
}
#endif
for (i = 0; i < gpio_bank_count; i++) {
- int j, gpio_count = 16;
bank = &gpio_bank[i];
spin_lock_init(&bank->lock);
@@ -1840,107 +1952,8 @@ static int __init _omap_gpio_init(void)
continue;
}
- if (bank_is_mpuio(bank))
- __raw_writew(0xffff, bank->base + OMAP_MPUIO_GPIO_MASKIT);
- if (cpu_is_omap15xx() && bank->method == METHOD_GPIO_1510) {
- __raw_writew(0xffff, bank->base + OMAP1510_GPIO_INT_MASK);
- __raw_writew(0x0000, bank->base + OMAP1510_GPIO_INT_STATUS);
- }
- if (cpu_is_omap16xx() && bank->method == METHOD_GPIO_1610) {
- __raw_writew(0x0000, bank->base + OMAP1610_GPIO_IRQENABLE1);
- __raw_writew(0xffff, bank->base + OMAP1610_GPIO_IRQSTATUS1);
- __raw_writew(0x0014, bank->base + OMAP1610_GPIO_SYSCONFIG);
- }
- if (cpu_is_omap7xx() && bank->method == METHOD_GPIO_7XX) {
- __raw_writel(0xffffffff, bank->base + OMAP7XX_GPIO_INT_MASK);
- __raw_writel(0x00000000, bank->base + OMAP7XX_GPIO_INT_STATUS);
-
- gpio_count = 32; /* 7xx has 32-bit GPIOs */
- }
-
-#ifdef CONFIG_ARCH_OMAP2PLUS
- if ((bank->method == METHOD_GPIO_24XX) ||
- (bank->method == METHOD_GPIO_44XX)) {
- static const u32 non_wakeup_gpios[] = {
- 0xe203ffc0, 0x08700040
- };
-
- if (cpu_is_omap44xx()) {
- __raw_writel(0xffffffff, bank->base +
- OMAP4_GPIO_IRQSTATUSCLR0);
- __raw_writew(0x0015, bank->base +
- OMAP4_GPIO_SYSCONFIG);
- __raw_writel(0x00000000, bank->base +
- OMAP4_GPIO_DEBOUNCENABLE);
- /*
- * Initialize interface clock ungated,
- * module enabled
- */
- __raw_writel(0, bank->base + OMAP4_GPIO_CTRL);
- } else {
- __raw_writel(0x00000000, bank->base +
- OMAP24XX_GPIO_IRQENABLE1);
- __raw_writel(0xffffffff, bank->base +
- OMAP24XX_GPIO_IRQSTATUS1);
- __raw_writew(0x0015, bank->base +
- OMAP24XX_GPIO_SYSCONFIG);
- __raw_writel(0x00000000, bank->base +
- OMAP24XX_GPIO_DEBOUNCE_EN);
-
- /*
- * Initialize interface clock ungated,
- * module enabled
- */
- __raw_writel(0, bank->base +
- OMAP24XX_GPIO_CTRL);
- }
- if (cpu_is_omap24xx() &&
- i < ARRAY_SIZE(non_wakeup_gpios))
- bank->non_wakeup_gpios = non_wakeup_gpios[i];
- gpio_count = 32;
- }
-#endif
-
- bank->mod_usage = 0;
- /* REVISIT eventually switch from OMAP-specific gpio structs
- * over to the generic ones
- */
- bank->chip.request = omap_gpio_request;
- bank->chip.free = omap_gpio_free;
- bank->chip.direction_input = gpio_input;
- bank->chip.get = gpio_get;
- bank->chip.direction_output = gpio_output;
- bank->chip.set_debounce = gpio_debounce;
- bank->chip.set = gpio_set;
- bank->chip.to_irq = gpio_2irq;
- if (bank_is_mpuio(bank)) {
- bank->chip.label = "mpuio";
-#ifdef CONFIG_ARCH_OMAP16XX
- bank->chip.dev = &omap_mpuio_device.dev;
-#endif
- bank->chip.base = OMAP_MPUIO(0);
- } else {
- bank->chip.label = "gpio";
- bank->chip.base = gpio;
- gpio += gpio_count;
- }
- bank->chip.ngpio = gpio_count;
-
- gpiochip_add(&bank->chip);
-
- for (j = bank->virtual_irq_start;
- j < bank->virtual_irq_start + gpio_count; j++) {
- lockdep_set_class(&irq_desc[j].lock, &gpio_lock_class);
- set_irq_chip_data(j, bank);
- if (bank_is_mpuio(bank))
- set_irq_chip(j, &mpuio_irq_chip);
- else
- set_irq_chip(j, &gpio_irq_chip);
- set_irq_handler(j, handle_simple_irq);
- set_irq_flags(j, IRQF_VALID);
- }
- set_irq_chained_handler(bank->irq, gpio_irq_handler);
- set_irq_data(bank->irq, bank);
+ omap_gpio_mod_init(bank, i);
+ omap_gpio_chip_init(bank);
if (cpu_is_omap34xx() || cpu_is_omap44xx()) {
sprintf(clk_name, "gpio%d_dbck", i + 1);
@@ -1950,17 +1963,6 @@ static int __init _omap_gpio_init(void)
}
}
- /* Enable system clock for GPIO module.
- * The CAM_CLK_CTRL *is* really the right place. */
- if (cpu_is_omap16xx())
- omap_writel(omap_readl(ULPD_CAM_CLK_CTRL) | 0x04, ULPD_CAM_CLK_CTRL);
-
- /* Enable autoidle for the OCP interface */
- if (cpu_is_omap24xx())
- omap_writel(1 << 0, 0x48019010);
- if (cpu_is_omap34xx())
- omap_writel(1 << 0, 0x48306814);
-
omap_gpio_show_rev();
return 0;
--
1.7.0.4
^ permalink raw reply related [flat|nested] 29+ messages in thread* [PATCH v7 01/11] OMAP: GPIO: prepare for platform driver
2010-11-23 14:56 ` [PATCH v7 01/11] OMAP: GPIO: prepare for platform driver Varadarajan, Charulatha
@ 2010-11-26 4:38 ` Olof Johansson
2010-11-26 5:03 ` Varadarajan, Charulatha
0 siblings, 1 reply; 29+ messages in thread
From: Olof Johansson @ 2010-11-26 4:38 UTC (permalink / raw)
To: linux-arm-kernel
Hi,
On Tue, Nov 23, 2010 at 08:26:43PM +0530, Varadarajan, Charulatha wrote:
> +static void omap_gpio_mod_init(struct gpio_bank *bank, int id)
> +{
> + if (cpu_class_is_omap2()) {
Why check class when you're checking for all possible variants anyway?
> + if (cpu_is_omap44xx()) {
> + __raw_writel(0xffffffff, bank->base +
> + OMAP4_GPIO_IRQSTATUSCLR0);
> + __raw_writel(0x00000000, bank->base +
> + OMAP4_GPIO_DEBOUNCENABLE);
> + /* Initialize interface clk ungated, module enabled */
> + __raw_writel(0, bank->base + OMAP4_GPIO_CTRL);
> + } else if (cpu_is_omap34xx()) {
> + __raw_writel(0x00000000, bank->base +
> + OMAP24XX_GPIO_IRQENABLE1);
> + __raw_writel(0xffffffff, bank->base +
> + OMAP24XX_GPIO_IRQSTATUS1);
> + __raw_writel(0x00000000, bank->base +
> + OMAP24XX_GPIO_DEBOUNCE_EN);
> +
> + /* Initialize interface clk ungated, module enabled */
> + __raw_writel(0, bank->base + OMAP24XX_GPIO_CTRL);
> + } else if (cpu_is_omap24xx()) {
> + static const u32 non_wakeup_gpios[] = {
> + 0xe203ffc0, 0x08700040
> + };
> + if (id < ARRAY_SIZE(non_wakeup_gpios))
> + bank->non_wakeup_gpios = non_wakeup_gpios[id];
> + }
> + } else if (cpu_class_is_omap1()) {
> + if (bank_is_mpuio(bank))
> + __raw_writew(0xffff, bank->base
> + + OMAP_MPUIO_GPIO_MASKIT);
Above is using else if, this is using if. I don't see how you can ever
hit more than one of these anyway.
Besides, why check for both cpu and method? When do they ever
diverge? (same goes for other places)
The plat-omap/gpio.c driver is pretty hard to read because of all the
ifdeffing and tests for platforms. It would make sense to abstract out
some of the operations into separate functions and use function pointers
for them, IMHO. (Not an issue for this patch, just a reflection).
> + if (cpu_is_omap15xx() && bank->method == METHOD_GPIO_1510) {
> + __raw_writew(0xffff, bank->base
> + + OMAP1510_GPIO_INT_MASK);
> + __raw_writew(0x0000, bank->base
> + + OMAP1510_GPIO_INT_STATUS);
> + }
> + if (cpu_is_omap16xx() && bank->method == METHOD_GPIO_1610) {
> + __raw_writew(0x0000, bank->base
> + + OMAP1610_GPIO_IRQENABLE1);
> + __raw_writew(0xffff, bank->base
> + + OMAP1610_GPIO_IRQSTATUS1);
> + __raw_writew(0x0014, bank->base
> + + OMAP1610_GPIO_SYSCONFIG);
> +
> + /*
> + * Enable system clock for GPIO module.
> + * The CAM_CLK_CTRL *is* really the right place.
> + */
> + omap_writel(omap_readl(ULPD_CAM_CLK_CTRL) | 0x04,
> + ULPD_CAM_CLK_CTRL);
> + }
> + if (cpu_is_omap7xx() && bank->method == METHOD_GPIO_7XX) {
> + __raw_writel(0xffffffff, bank->base
> + + OMAP7XX_GPIO_INT_MASK);
> + __raw_writel(0x00000000, bank->base
> + + OMAP7XX_GPIO_INT_STATUS);
> + }
> + }
> +}
> +
> +static void __init omap_gpio_chip_init(struct gpio_bank *bank)
> +{
> + int j, bank_width = 16;
> + static int gpio;
> +
> + if (cpu_is_omap7xx() && bank->method == METHOD_GPIO_7XX)
> + bank_width = 32; /* 7xx has 32-bit GPIOs */
> +
> + if ((bank->method == METHOD_GPIO_24XX) ||
> + (bank->method == METHOD_GPIO_44XX))
> + bank_width = 32;
> +
> + bank->mod_usage = 0;
> + /*
> + * REVISIT eventually switch from OMAP-specific gpio structs
> + * over to the generic ones
> + */
> + bank->chip.request = omap_gpio_request;
> + bank->chip.free = omap_gpio_free;
> + bank->chip.direction_input = gpio_input;
> + bank->chip.get = gpio_get;
> + bank->chip.direction_output = gpio_output;
> + bank->chip.set_debounce = gpio_debounce;
> + bank->chip.set = gpio_set;
> + bank->chip.to_irq = gpio_2irq;
> + if (bank_is_mpuio(bank)) {
> + bank->chip.label = "mpuio";
> +#ifdef CONFIG_ARCH_OMAP16XX
> + bank->chip.dev = &omap_mpuio_device.dev;
> +#endif
> + bank->chip.base = OMAP_MPUIO(0);
> + } else {
> + bank->chip.label = "gpio";
> + bank->chip.base = gpio;
> + gpio += bank_width;
> + }
> + bank->chip.ngpio = bank_width;
> +
> + gpiochip_add(&bank->chip);
> +
> + for (j = bank->virtual_irq_start;
> + j < bank->virtual_irq_start + bank_width; j++) {
> + lockdep_set_class(&irq_desc[j].lock, &gpio_lock_class);
> + set_irq_chip_data(j, bank);
> + if (bank_is_mpuio(bank))
> + set_irq_chip(j, &mpuio_irq_chip);
> + else
> + set_irq_chip(j, &gpio_irq_chip);
> + set_irq_handler(j, handle_simple_irq);
> + set_irq_flags(j, IRQF_VALID);
> + }
> + set_irq_chained_handler(bank->irq, gpio_irq_handler);
> + set_irq_data(bank->irq, bank);
> +}
> +
> static int __init _omap_gpio_init(void)
> {
> int i;
> - int gpio = 0;
> struct gpio_bank *bank;
> int bank_size = SZ_8K; /* Module 4KB + L4 4KB except on omap1 */
> char clk_name[11];
> @@ -1828,7 +1941,6 @@ static int __init _omap_gpio_init(void)
> }
> #endif
> for (i = 0; i < gpio_bank_count; i++) {
> - int j, gpio_count = 16;
>
> bank = &gpio_bank[i];
> spin_lock_init(&bank->lock);
> @@ -1840,107 +1952,8 @@ static int __init _omap_gpio_init(void)
> continue;
> }
>
> - if (bank_is_mpuio(bank))
> - __raw_writew(0xffff, bank->base + OMAP_MPUIO_GPIO_MASKIT);
> - if (cpu_is_omap15xx() && bank->method == METHOD_GPIO_1510) {
> - __raw_writew(0xffff, bank->base + OMAP1510_GPIO_INT_MASK);
> - __raw_writew(0x0000, bank->base + OMAP1510_GPIO_INT_STATUS);
> - }
> - if (cpu_is_omap16xx() && bank->method == METHOD_GPIO_1610) {
> - __raw_writew(0x0000, bank->base + OMAP1610_GPIO_IRQENABLE1);
> - __raw_writew(0xffff, bank->base + OMAP1610_GPIO_IRQSTATUS1);
> - __raw_writew(0x0014, bank->base + OMAP1610_GPIO_SYSCONFIG);
> - }
> - if (cpu_is_omap7xx() && bank->method == METHOD_GPIO_7XX) {
> - __raw_writel(0xffffffff, bank->base + OMAP7XX_GPIO_INT_MASK);
> - __raw_writel(0x00000000, bank->base + OMAP7XX_GPIO_INT_STATUS);
> -
> - gpio_count = 32; /* 7xx has 32-bit GPIOs */
> - }
> -
> -#ifdef CONFIG_ARCH_OMAP2PLUS
> - if ((bank->method == METHOD_GPIO_24XX) ||
> - (bank->method == METHOD_GPIO_44XX)) {
> - static const u32 non_wakeup_gpios[] = {
> - 0xe203ffc0, 0x08700040
> - };
> -
> - if (cpu_is_omap44xx()) {
> - __raw_writel(0xffffffff, bank->base +
> - OMAP4_GPIO_IRQSTATUSCLR0);
> - __raw_writew(0x0015, bank->base +
> - OMAP4_GPIO_SYSCONFIG);
> - __raw_writel(0x00000000, bank->base +
> - OMAP4_GPIO_DEBOUNCENABLE);
> - /*
> - * Initialize interface clock ungated,
> - * module enabled
> - */
> - __raw_writel(0, bank->base + OMAP4_GPIO_CTRL);
> - } else {
> - __raw_writel(0x00000000, bank->base +
> - OMAP24XX_GPIO_IRQENABLE1);
> - __raw_writel(0xffffffff, bank->base +
> - OMAP24XX_GPIO_IRQSTATUS1);
> - __raw_writew(0x0015, bank->base +
> - OMAP24XX_GPIO_SYSCONFIG);
> - __raw_writel(0x00000000, bank->base +
> - OMAP24XX_GPIO_DEBOUNCE_EN);
> -
> - /*
> - * Initialize interface clock ungated,
> - * module enabled
> - */
> - __raw_writel(0, bank->base +
> - OMAP24XX_GPIO_CTRL);
> - }
> - if (cpu_is_omap24xx() &&
> - i < ARRAY_SIZE(non_wakeup_gpios))
> - bank->non_wakeup_gpios = non_wakeup_gpios[i];
> - gpio_count = 32;
> - }
> -#endif
> -
> - bank->mod_usage = 0;
> - /* REVISIT eventually switch from OMAP-specific gpio structs
> - * over to the generic ones
> - */
> - bank->chip.request = omap_gpio_request;
> - bank->chip.free = omap_gpio_free;
> - bank->chip.direction_input = gpio_input;
> - bank->chip.get = gpio_get;
> - bank->chip.direction_output = gpio_output;
> - bank->chip.set_debounce = gpio_debounce;
> - bank->chip.set = gpio_set;
> - bank->chip.to_irq = gpio_2irq;
> - if (bank_is_mpuio(bank)) {
> - bank->chip.label = "mpuio";
> -#ifdef CONFIG_ARCH_OMAP16XX
> - bank->chip.dev = &omap_mpuio_device.dev;
> -#endif
> - bank->chip.base = OMAP_MPUIO(0);
> - } else {
> - bank->chip.label = "gpio";
> - bank->chip.base = gpio;
> - gpio += gpio_count;
> - }
> - bank->chip.ngpio = gpio_count;
> -
> - gpiochip_add(&bank->chip);
> -
> - for (j = bank->virtual_irq_start;
> - j < bank->virtual_irq_start + gpio_count; j++) {
> - lockdep_set_class(&irq_desc[j].lock, &gpio_lock_class);
> - set_irq_chip_data(j, bank);
> - if (bank_is_mpuio(bank))
> - set_irq_chip(j, &mpuio_irq_chip);
> - else
> - set_irq_chip(j, &gpio_irq_chip);
> - set_irq_handler(j, handle_simple_irq);
> - set_irq_flags(j, IRQF_VALID);
> - }
> - set_irq_chained_handler(bank->irq, gpio_irq_handler);
> - set_irq_data(bank->irq, bank);
> + omap_gpio_mod_init(bank, i);
> + omap_gpio_chip_init(bank);
>
> if (cpu_is_omap34xx() || cpu_is_omap44xx()) {
> sprintf(clk_name, "gpio%d_dbck", i + 1);
> @@ -1950,17 +1963,6 @@ static int __init _omap_gpio_init(void)
> }
> }
>
> - /* Enable system clock for GPIO module.
> - * The CAM_CLK_CTRL *is* really the right place. */
> - if (cpu_is_omap16xx())
> - omap_writel(omap_readl(ULPD_CAM_CLK_CTRL) | 0x04, ULPD_CAM_CLK_CTRL);
> -
> - /* Enable autoidle for the OCP interface */
> - if (cpu_is_omap24xx())
> - omap_writel(1 << 0, 0x48019010);
> - if (cpu_is_omap34xx())
> - omap_writel(1 << 0, 0x48306814);
> -
> omap_gpio_show_rev();
>
> return 0;
> --
> 1.7.0.4
>
>
> _______________________________________________
> linux-arm-kernel mailing list
> linux-arm-kernel at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply [flat|nested] 29+ messages in thread* [PATCH v7 01/11] OMAP: GPIO: prepare for platform driver
2010-11-26 4:38 ` Olof Johansson
@ 2010-11-26 5:03 ` Varadarajan, Charulatha
0 siblings, 0 replies; 29+ messages in thread
From: Varadarajan, Charulatha @ 2010-11-26 5:03 UTC (permalink / raw)
To: linux-arm-kernel
Olof Johansson,
On Fri, Nov 26, 2010 at 10:08, Olof Johansson <olof@lixom.net> wrote:
> Hi,
>
> On Tue, Nov 23, 2010 at 08:26:43PM +0530, Varadarajan, Charulatha wrote:
>> +static void omap_gpio_mod_init(struct gpio_bank *bank, int id)
>> +{
>> + ? ? if (cpu_class_is_omap2()) {
>
> Why check class when you're checking for all possible variants anyway?
This is only a movement of code as I mentioned in the patch description
and I am not trying to modify anything newly. All these would be removed while
doing GPIO driver cleanup (please see below).
>
>> + ? ? ? ? ? ? if (cpu_is_omap44xx()) {
>> + ? ? ? ? ? ? ? ? ? ? __raw_writel(0xffffffff, bank->base +
>> + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? OMAP4_GPIO_IRQSTATUSCLR0);
>> + ? ? ? ? ? ? ? ? ? ? __raw_writel(0x00000000, bank->base +
>> + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?OMAP4_GPIO_DEBOUNCENABLE);
>> + ? ? ? ? ? ? ? ? ? ? /* Initialize interface clk ungated, module enabled */
>> + ? ? ? ? ? ? ? ? ? ? __raw_writel(0, bank->base + OMAP4_GPIO_CTRL);
>> + ? ? ? ? ? ? } else if (cpu_is_omap34xx()) {
>> + ? ? ? ? ? ? ? ? ? ? __raw_writel(0x00000000, bank->base +
>> + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? OMAP24XX_GPIO_IRQENABLE1);
>> + ? ? ? ? ? ? ? ? ? ? __raw_writel(0xffffffff, bank->base +
>> + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? OMAP24XX_GPIO_IRQSTATUS1);
>> + ? ? ? ? ? ? ? ? ? ? __raw_writel(0x00000000, bank->base +
>> + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? OMAP24XX_GPIO_DEBOUNCE_EN);
>> +
>> + ? ? ? ? ? ? ? ? ? ? /* Initialize interface clk ungated, module enabled */
>> + ? ? ? ? ? ? ? ? ? ? __raw_writel(0, bank->base + OMAP24XX_GPIO_CTRL);
>> + ? ? ? ? ? ? } else if (cpu_is_omap24xx()) {
>> + ? ? ? ? ? ? ? ? ? ? static const u32 non_wakeup_gpios[] = {
>> + ? ? ? ? ? ? ? ? ? ? ? ? ? ? 0xe203ffc0, 0x08700040
>> + ? ? ? ? ? ? ? ? ? ? };
>> + ? ? ? ? ? ? ? ? ? ? if (id < ARRAY_SIZE(non_wakeup_gpios))
>> + ? ? ? ? ? ? ? ? ? ? ? ? ? ? bank->non_wakeup_gpios = non_wakeup_gpios[id];
>> + ? ? ? ? ? ? }
>> + ? ? } else if (cpu_class_is_omap1()) {
>> + ? ? ? ? ? ? if (bank_is_mpuio(bank))
>> + ? ? ? ? ? ? ? ? ? ? __raw_writew(0xffff, bank->base
>> + ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? + OMAP_MPUIO_GPIO_MASKIT);
>
> Above is using else if, this is using if. I don't see how you can ever
> hit more than one of these anyway.
>
> Besides, why check for both cpu and method? When do they ever
> diverge? (same goes for other places)
>
> The plat-omap/gpio.c driver is pretty hard to read because of all the
> ifdeffing and tests for platforms. It would make sense to abstract out
> some of the operations into separate functions and use function pointers
> for them, IMHO. (Not an issue for this patch, just a reflection).
Yes. I also wondered why to have cpu_is checks, methods and #ifdefs and
it is quite confusing too.
This patch series is intended only for platform driver implementation of hwmod
and mainly using hwmod for OMAP2+. If I include cleaning up of GPIO driver
also in this patch series, it would become too huge. This was discussed long ago
and it was agreed to have GPIO driver cleanup as a separate series.
Hence this is
mentioned in the TODOs (please see patch 10 description for the list of TODOs as
that is main patch where the actual platform driver implementation is
being done for
GPIO)
Thanks.
^ permalink raw reply [flat|nested] 29+ messages in thread
* [PATCH v7 02/11] OMAP15xx: GPIO: Introduce support for GPIO init
2010-11-23 14:56 [PATCH v7 00/11] OMAP: GPIO: Implement GPIO as a platform device Varadarajan, Charulatha
2010-11-23 14:56 ` [PATCH v7 01/11] OMAP: GPIO: prepare for platform driver Varadarajan, Charulatha
@ 2010-11-23 14:56 ` Varadarajan, Charulatha
2010-11-23 14:56 ` [PATCH v7 03/11] OMAP16xx: " Varadarajan, Charulatha
` (9 subsequent siblings)
11 siblings, 0 replies; 29+ messages in thread
From: Varadarajan, Charulatha @ 2010-11-23 14:56 UTC (permalink / raw)
To: linux-arm-kernel
Add support for handling OMAP15xx specific gpio_init by
providing platform device data and doing device registration.
Signed-off-by: Charulatha V <charu@ti.com>
---
arch/arm/mach-omap1/gpio15xx.c | 98 ++++++++++++++++++++++++++++++++
arch/arm/plat-omap/gpio.c | 10 +---
arch/arm/plat-omap/include/plat/gpio.h | 18 ++++++
3 files changed, 118 insertions(+), 8 deletions(-)
create mode 100644 arch/arm/mach-omap1/gpio15xx.c
diff --git a/arch/arm/mach-omap1/gpio15xx.c b/arch/arm/mach-omap1/gpio15xx.c
new file mode 100644
index 0000000..dbd8168
--- /dev/null
+++ b/arch/arm/mach-omap1/gpio15xx.c
@@ -0,0 +1,98 @@
+/*
+ * OMAP15xx specific gpio init
+ *
+ * Copyright (C) 2010 Texas Instruments Incorporated - http://www.ti.com/
+ *
+ * Author:
+ * Charulatha V <charu@ti.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation version 2.
+ *
+ * This program is distributed "as is" WITHOUT ANY WARRANTY of any
+ * kind, whether express or implied; without even the implied warranty
+ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ */
+
+#include <linux/gpio.h>
+
+#define OMAP1_MPUIO_VBASE OMAP1_MPUIO_BASE
+#define OMAP1510_GPIO_BASE 0xFFFCE000
+
+/* gpio1 */
+static struct __initdata resource omap15xx_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 omap15xx_mpu_gpio_config = {
+ .virtual_irq_start = IH_MPUIO_BASE,
+ .bank_type = METHOD_MPUIO,
+ .bank_width = 16,
+};
+
+static struct __initdata platform_device omap15xx_mpu_gpio = {
+ .name = "omap_gpio",
+ .id = 0,
+ .dev = {
+ .platform_data = &omap15xx_mpu_gpio_config,
+ },
+ .num_resources = ARRAY_SIZE(omap15xx_mpu_gpio_resources),
+ .resource = omap15xx_mpu_gpio_resources,
+};
+
+/* gpio2 */
+static struct __initdata resource omap15xx_gpio_resources[] = {
+ {
+ .start = OMAP1510_GPIO_BASE,
+ .end = OMAP1510_GPIO_BASE + SZ_2K - 1,
+ .flags = IORESOURCE_MEM,
+ },
+ {
+ .start = INT_GPIO_BANK1,
+ .flags = IORESOURCE_IRQ,
+ },
+};
+
+static struct __initdata omap_gpio_platform_data omap15xx_gpio_config = {
+ .virtual_irq_start = IH_GPIO_BASE,
+ .bank_type = METHOD_GPIO_1510,
+ .bank_width = 16,
+};
+
+static struct __initdata platform_device omap15xx_gpio = {
+ .name = "omap_gpio",
+ .id = 1,
+ .dev = {
+ .platform_data = &omap15xx_gpio_config,
+ },
+ .num_resources = ARRAY_SIZE(omap15xx_gpio_resources),
+ .resource = omap15xx_gpio_resources,
+};
+
+/*
+ * omap15xx_gpio_init needs to be done before
+ * machine_init functions access gpio APIs.
+ * Hence omap15xx_gpio_init is a postcore_initcall.
+ */
+static int __init omap15xx_gpio_init(void)
+{
+ if (!cpu_is_omap15xx())
+ return -EINVAL;
+
+ platform_device_register(&omap15xx_mpu_gpio);
+ platform_device_register(&omap15xx_gpio);
+
+ gpio_bank_count = 2;
+ return 0;
+}
+postcore_initcall(omap15xx_gpio_init);
diff --git a/arch/arm/plat-omap/gpio.c b/arch/arm/plat-omap/gpio.c
index 48bccf2..610787c 100644
--- a/arch/arm/plat-omap/gpio.c
+++ b/arch/arm/plat-omap/gpio.c
@@ -205,13 +205,6 @@ struct gpio_bank {
u32 dbck_enable_mask;
};
-#define METHOD_MPUIO 0
-#define METHOD_GPIO_1510 1
-#define METHOD_GPIO_1610 2
-#define METHOD_GPIO_7XX 3
-#define METHOD_GPIO_24XX 5
-#define METHOD_GPIO_44XX 6
-
#ifdef CONFIG_ARCH_OMAP16XX
static struct gpio_bank gpio_bank_1610[5] = {
{ OMAP1_MPUIO_VBASE, NULL, INT_MPUIO, IH_MPUIO_BASE,
@@ -335,7 +328,8 @@ static struct gpio_bank gpio_bank_44xx[6] = {
#endif
static struct gpio_bank *gpio_bank;
-static int gpio_bank_count;
+/* TODO: Analyze removing gpio_bank_count usage from driver code */
+int gpio_bank_count;
static inline struct gpio_bank *get_gpio_bank(int gpio)
{
diff --git a/arch/arm/plat-omap/include/plat/gpio.h b/arch/arm/plat-omap/include/plat/gpio.h
index de1c604..5bef86d 100644
--- a/arch/arm/plat-omap/include/plat/gpio.h
+++ b/arch/arm/plat-omap/include/plat/gpio.h
@@ -27,6 +27,7 @@
#define __ASM_ARCH_OMAP_GPIO_H
#include <linux/io.h>
+#include <linux/platform_device.h>
#include <mach/irqs.h>
#define OMAP1_MPUIO_BASE 0xfffb5000
@@ -71,6 +72,23 @@
IH_MPUIO_BASE + ((nr) & 0x0f) : \
IH_GPIO_BASE + (nr))
+#define METHOD_MPUIO 0
+#define METHOD_GPIO_1510 1
+#define METHOD_GPIO_1610 2
+#define METHOD_GPIO_7XX 3
+#define METHOD_GPIO_24XX 5
+#define METHOD_GPIO_44XX 6
+
+struct omap_gpio_platform_data {
+ u16 virtual_irq_start;
+ int bank_type;
+ int bank_width; /* GPIO bank width */
+ bool dbck_flag; /* dbck required or not - True for OMAP3&4 */
+};
+
+/* TODO: Analyze removing gpio_bank_count usage from driver code */
+extern int gpio_bank_count;
+
extern int omap_gpio_init(void); /* Call from board init only */
extern void omap2_gpio_prepare_for_idle(int power_state);
extern void omap2_gpio_resume_after_idle(void);
--
1.7.0.4
^ permalink raw reply related [flat|nested] 29+ messages in thread* [PATCH v7 03/11] OMAP16xx: GPIO: Introduce support for GPIO init
2010-11-23 14:56 [PATCH v7 00/11] OMAP: GPIO: Implement GPIO as a platform device Varadarajan, Charulatha
2010-11-23 14:56 ` [PATCH v7 01/11] OMAP: GPIO: prepare for platform driver Varadarajan, Charulatha
2010-11-23 14:56 ` [PATCH v7 02/11] OMAP15xx: GPIO: Introduce support for GPIO init Varadarajan, Charulatha
@ 2010-11-23 14:56 ` Varadarajan, Charulatha
2010-11-23 14:56 ` [PATCH v7 04/11] OMAP7xx: " Varadarajan, Charulatha
` (8 subsequent siblings)
11 siblings, 0 replies; 29+ messages in thread
From: Varadarajan, Charulatha @ 2010-11-23 14:56 UTC (permalink / raw)
To: linux-arm-kernel
Add support for handling OMAP16xx specific gpio_init by
providing platform device data and doing device registration.
Signed-off-by: Charulatha V <charu@ti.com>
---
arch/arm/mach-omap1/gpio16xx.c | 199 ++++++++++++++++++++++++++++++++++++++++
1 files changed, 199 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..5493b72
--- /dev/null
+++ b/arch/arm/mach-omap1/gpio16xx.c
@@ -0,0 +1,199 @@
+/*
+ * OMAP16xx specific gpio init
+ *
+ * Copyright (C) 2010 Texas Instruments Incorporated - http://www.ti.com/
+ *
+ * Author:
+ * Charulatha V <charu@ti.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation version 2.
+ *
+ * This program is distributed "as is" WITHOUT ANY WARRANTY of any
+ * kind, whether express or implied; without even the implied warranty
+ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ */
+
+#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
+
+/* mpu gpio */
+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,
+ .bank_width = 16,
+};
+
+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,
+};
+
+/* gpio1 */
+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,
+ .bank_width = 16,
+};
+
+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,
+};
+
+/* gpio2 */
+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,
+ .bank_width = 16,
+};
+
+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,
+};
+
+/* gpio3 */
+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,
+ .bank_width = 16,
+};
+
+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,
+};
+
+/* gpio4 */
+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,
+ .bank_width = 16,
+};
+
+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 < ARRAY_SIZE(omap16xx_gpio_dev); i++)
+ platform_device_register(omap16xx_gpio_dev[i]);
+
+ gpio_bank_count = ARRAY_SIZE(omap16xx_gpio_dev);
+
+ return 0;
+}
+postcore_initcall(omap16xx_gpio_init);
--
1.7.0.4
^ permalink raw reply related [flat|nested] 29+ messages in thread* [PATCH v7 04/11] OMAP7xx: GPIO: Introduce support for GPIO init
2010-11-23 14:56 [PATCH v7 00/11] OMAP: GPIO: Implement GPIO as a platform device Varadarajan, Charulatha
` (2 preceding siblings ...)
2010-11-23 14:56 ` [PATCH v7 03/11] OMAP16xx: " Varadarajan, Charulatha
@ 2010-11-23 14:56 ` Varadarajan, Charulatha
2010-11-23 14:56 ` [PATCH v7 05/11] OMAP2420: hwmod data: Add GPIO Varadarajan, Charulatha
` (7 subsequent siblings)
11 siblings, 0 replies; 29+ messages in thread
From: Varadarajan, Charulatha @ 2010-11-23 14:56 UTC (permalink / raw)
To: linux-arm-kernel
Add support for handling OMAP7xx specific gpio_init by
providing platform device data and doing device registration.
Signed-off-by: Charulatha V <charu@ti.com>
---
arch/arm/mach-omap1/gpio7xx.c | 261 +++++++++++++++++++++++++++++++++++++++++
1 files changed, 261 insertions(+), 0 deletions(-)
create mode 100644 arch/arm/mach-omap1/gpio7xx.c
diff --git a/arch/arm/mach-omap1/gpio7xx.c b/arch/arm/mach-omap1/gpio7xx.c
new file mode 100644
index 0000000..94bccd4
--- /dev/null
+++ b/arch/arm/mach-omap1/gpio7xx.c
@@ -0,0 +1,261 @@
+/*
+ * OMAP7xx specific gpio init
+ *
+ * Copyright (C) 2010 Texas Instruments Incorporated - http://www.ti.com/
+ *
+ * Author:
+ * Charulatha V <charu@ti.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation version 2.
+ *
+ * This program is distributed "as is" WITHOUT ANY WARRANTY of any
+ * kind, whether express or implied; without even the implied warranty
+ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ */
+
+#include <linux/gpio.h>
+
+#define OMAP7XX_GPIO1_BASE 0xfffbc000
+#define OMAP7XX_GPIO2_BASE 0xfffbc800
+#define OMAP7XX_GPIO3_BASE 0xfffbd000
+#define OMAP7XX_GPIO4_BASE 0xfffbd800
+#define OMAP7XX_GPIO5_BASE 0xfffbe000
+#define OMAP7XX_GPIO6_BASE 0xfffbe800
+#define OMAP1_MPUIO_VBASE OMAP1_MPUIO_BASE
+
+/* mpu gpio */
+static struct __initdata resource omap7xx_mpu_gpio_resources[] = {
+ {
+ .start = OMAP1_MPUIO_VBASE,
+ .end = OMAP1_MPUIO_VBASE + SZ_2K - 1,
+ .flags = IORESOURCE_MEM,
+ },
+ {
+ .start = INT_7XX_MPUIO,
+ .flags = IORESOURCE_IRQ,
+ },
+};
+
+static struct __initdata omap_gpio_platform_data omap7xx_mpu_gpio_config = {
+ .virtual_irq_start = IH_MPUIO_BASE,
+ .bank_type = METHOD_MPUIO,
+ .bank_width = 32,
+};
+
+static struct __initdata platform_device omap7xx_mpu_gpio = {
+ .name = "omap_gpio",
+ .id = 0,
+ .dev = {
+ .platform_data = &omap7xx_mpu_gpio_config,
+ },
+ .num_resources = ARRAY_SIZE(omap7xx_mpu_gpio_resources),
+ .resource = omap7xx_mpu_gpio_resources,
+};
+
+/* gpio1 */
+static struct __initdata resource omap7xx_gpio1_resources[] = {
+ {
+ .start = OMAP7XX_GPIO1_BASE,
+ .end = OMAP7XX_GPIO1_BASE + SZ_2K - 1,
+ .flags = IORESOURCE_MEM,
+ },
+ {
+ .start = INT_7XX_GPIO_BANK1,
+ .flags = IORESOURCE_IRQ,
+ },
+};
+
+static struct __initdata omap_gpio_platform_data omap7xx_gpio1_config = {
+ .virtual_irq_start = IH_GPIO_BASE,
+ .bank_type = METHOD_GPIO_7XX,
+ .bank_width = 32,
+};
+
+static struct __initdata platform_device omap7xx_gpio1 = {
+ .name = "omap_gpio",
+ .id = 1,
+ .dev = {
+ .platform_data = &omap7xx_gpio1_config,
+ },
+ .num_resources = ARRAY_SIZE(omap7xx_gpio1_resources),
+ .resource = omap7xx_gpio1_resources,
+};
+
+/* gpio2 */
+static struct __initdata resource omap7xx_gpio2_resources[] = {
+ {
+ .start = OMAP7XX_GPIO2_BASE,
+ .end = OMAP7XX_GPIO2_BASE + SZ_2K - 1,
+ .flags = IORESOURCE_MEM,
+ },
+ {
+ .start = INT_7XX_GPIO_BANK2,
+ .flags = IORESOURCE_IRQ,
+ },
+};
+
+static struct __initdata omap_gpio_platform_data omap7xx_gpio2_config = {
+ .virtual_irq_start = IH_GPIO_BASE + 32,
+ .bank_type = METHOD_GPIO_7XX,
+ .bank_width = 32,
+};
+
+static struct __initdata platform_device omap7xx_gpio2 = {
+ .name = "omap_gpio",
+ .id = 2,
+ .dev = {
+ .platform_data = &omap7xx_gpio2_config,
+ },
+ .num_resources = ARRAY_SIZE(omap7xx_gpio2_resources),
+ .resource = omap7xx_gpio2_resources,
+};
+
+/* gpio3 */
+static struct __initdata resource omap7xx_gpio3_resources[] = {
+ {
+ .start = OMAP7XX_GPIO3_BASE,
+ .end = OMAP7XX_GPIO3_BASE + SZ_2K - 1,
+ .flags = IORESOURCE_MEM,
+ },
+ {
+ .start = INT_7XX_GPIO_BANK3,
+ .flags = IORESOURCE_IRQ,
+ },
+};
+
+static struct __initdata omap_gpio_platform_data omap7xx_gpio3_config = {
+ .virtual_irq_start = IH_GPIO_BASE + 64,
+ .bank_type = METHOD_GPIO_7XX,
+ .bank_width = 32,
+};
+
+static struct __initdata platform_device omap7xx_gpio3 = {
+ .name = "omap_gpio",
+ .id = 3,
+ .dev = {
+ .platform_data = &omap7xx_gpio3_config,
+ },
+ .num_resources = ARRAY_SIZE(omap7xx_gpio3_resources),
+ .resource = omap7xx_gpio3_resources,
+};
+
+/* gpio4 */
+static struct __initdata resource omap7xx_gpio4_resources[] = {
+ {
+ .start = OMAP7XX_GPIO4_BASE,
+ .end = OMAP7XX_GPIO4_BASE + SZ_2K - 1,
+ .flags = IORESOURCE_MEM,
+ },
+ {
+ .start = INT_7XX_GPIO_BANK4,
+ .flags = IORESOURCE_IRQ,
+ },
+};
+
+static struct __initdata omap_gpio_platform_data omap7xx_gpio4_config = {
+ .virtual_irq_start = IH_GPIO_BASE + 96,
+ .bank_type = METHOD_GPIO_7XX,
+ .bank_width = 32,
+};
+
+static struct __initdata platform_device omap7xx_gpio4 = {
+ .name = "omap_gpio",
+ .id = 4,
+ .dev = {
+ .platform_data = &omap7xx_gpio4_config,
+ },
+ .num_resources = ARRAY_SIZE(omap7xx_gpio4_resources),
+ .resource = omap7xx_gpio4_resources,
+};
+
+/* gpio5 */
+static struct __initdata resource omap7xx_gpio5_resources[] = {
+ {
+ .start = OMAP7XX_GPIO5_BASE,
+ .end = OMAP7XX_GPIO5_BASE + SZ_2K - 1,
+ .flags = IORESOURCE_MEM,
+ },
+ {
+ .start = INT_7XX_GPIO_BANK5,
+ .flags = IORESOURCE_IRQ,
+ },
+};
+
+static struct __initdata omap_gpio_platform_data omap7xx_gpio5_config = {
+ .virtual_irq_start = IH_GPIO_BASE + 128,
+ .bank_type = METHOD_GPIO_7XX,
+ .bank_width = 32,
+};
+
+static struct __initdata platform_device omap7xx_gpio5 = {
+ .name = "omap_gpio",
+ .id = 5,
+ .dev = {
+ .platform_data = &omap7xx_gpio5_config,
+ },
+ .num_resources = ARRAY_SIZE(omap7xx_gpio5_resources),
+ .resource = omap7xx_gpio5_resources,
+};
+
+/* gpio6 */
+static struct __initdata resource omap7xx_gpio6_resources[] = {
+ {
+ .start = OMAP7XX_GPIO6_BASE,
+ .end = OMAP7XX_GPIO6_BASE + SZ_2K - 1,
+ .flags = IORESOURCE_MEM,
+ },
+ {
+ .start = INT_7XX_GPIO_BANK6,
+ .flags = IORESOURCE_IRQ,
+ },
+};
+
+static struct __initdata omap_gpio_platform_data omap7xx_gpio6_config = {
+ .virtual_irq_start = IH_GPIO_BASE + 160,
+ .bank_type = METHOD_GPIO_7XX,
+ .bank_width = 32,
+};
+
+static struct __initdata platform_device omap7xx_gpio6 = {
+ .name = "omap_gpio",
+ .id = 6,
+ .dev = {
+ .platform_data = &omap7xx_gpio6_config,
+ },
+ .num_resources = ARRAY_SIZE(omap7xx_gpio6_resources),
+ .resource = omap7xx_gpio6_resources,
+};
+
+static struct __initdata platform_device * omap7xx_gpio_dev[] = {
+ &omap7xx_mpu_gpio,
+ &omap7xx_gpio1,
+ &omap7xx_gpio2,
+ &omap7xx_gpio3,
+ &omap7xx_gpio4,
+ &omap7xx_gpio5,
+ &omap7xx_gpio6,
+};
+
+/*
+ * omap7xx_gpio_init needs to be done before
+ * machine_init functions access gpio APIs.
+ * Hence omap7xx_gpio_init is a postcore_initcall.
+ */
+static int __init omap7xx_gpio_init(void)
+{
+ int i;
+
+ if (!cpu_is_omap7xx())
+ return -EINVAL;
+
+ for (i = 0; i < ARRAY_SIZE(omap7xx_gpio_dev); i++)
+ platform_device_register(omap7xx_gpio_dev[i]);
+
+ gpio_bank_count = ARRAY_SIZE(omap7xx_gpio_dev);
+
+ return 0;
+}
+postcore_initcall(omap7xx_gpio_init);
--
1.7.0.4
^ permalink raw reply related [flat|nested] 29+ messages in thread* [PATCH v7 05/11] OMAP2420: hwmod data: Add GPIO
2010-11-23 14:56 [PATCH v7 00/11] OMAP: GPIO: Implement GPIO as a platform device Varadarajan, Charulatha
` (3 preceding siblings ...)
2010-11-23 14:56 ` [PATCH v7 04/11] OMAP7xx: " Varadarajan, Charulatha
@ 2010-11-23 14:56 ` Varadarajan, Charulatha
2010-11-24 22:13 ` Cousson, Benoit
2010-11-23 14:56 ` [PATCH v7 06/11] OMAP2430: " Varadarajan, Charulatha
` (6 subsequent siblings)
11 siblings, 1 reply; 29+ messages in thread
From: Varadarajan, Charulatha @ 2010-11-23 14:56 UTC (permalink / raw)
To: linux-arm-kernel
Add GPIO hwmod data for OMAP2420
Signed-off-by: Charulatha V <charu@ti.com>
---
arch/arm/mach-omap2/omap_hwmod_2420_data.c | 229 ++++++++++++++++++++++++++++
arch/arm/plat-omap/include/plat/gpio.h | 5 +
2 files changed, 234 insertions(+), 0 deletions(-)
diff --git a/arch/arm/mach-omap2/omap_hwmod_2420_data.c b/arch/arm/mach-omap2/omap_hwmod_2420_data.c
index a1a3dd6..c951061 100644
--- a/arch/arm/mach-omap2/omap_hwmod_2420_data.c
+++ b/arch/arm/mach-omap2/omap_hwmod_2420_data.c
@@ -17,6 +17,7 @@
#include <plat/dma.h>
#include <plat/serial.h>
#include <plat/i2c.h>
+#include <plat/gpio.h>
#include <plat/omap24xx.h>
#include "omap_hwmod_common_data.h"
@@ -38,6 +39,10 @@ static struct omap_hwmod omap2420_iva_hwmod;
static struct omap_hwmod omap2420_l3_main_hwmod;
static struct omap_hwmod omap2420_l4_core_hwmod;
static struct omap_hwmod omap2420_wd_timer2_hwmod;
+static struct omap_hwmod omap2420_gpio1_hwmod;
+static struct omap_hwmod omap2420_gpio2_hwmod;
+static struct omap_hwmod omap2420_gpio3_hwmod;
+static struct omap_hwmod omap2420_gpio4_hwmod;
/* L3 -> L4_CORE interface */
static struct omap_hwmod_ocp_if omap2420_l3_main__l4_core = {
@@ -557,6 +562,224 @@ static struct omap_hwmod omap2420_i2c2_hwmod = {
.flags = HWMOD_16BIT_REG,
};
+/* l4_wkup -> gpio1 */
+static struct omap_hwmod_addr_space omap2420_gpio1_addr_space[] = {
+ {
+ .pa_start = 0x48018000,
+ .pa_end = 0x480181ff,
+ .flags = ADDR_TYPE_RT
+ },
+};
+
+static struct omap_hwmod_ocp_if omap2420_l4_wkup__gpio1 = {
+ .master = &omap2420_l4_wkup_hwmod,
+ .slave = &omap2420_gpio1_hwmod,
+ .clk = "gpios_ick",
+ .addr = omap2420_gpio1_addr_space,
+ .addr_cnt = ARRAY_SIZE(omap2420_gpio1_addr_space),
+ .user = OCP_USER_MPU | OCP_USER_SDMA,
+};
+
+/* l4_wkup -> gpio2 */
+static struct omap_hwmod_addr_space omap2420_gpio2_addr_space[] = {
+ {
+ .pa_start = 0x4801a000,
+ .pa_end = 0x4801a1ff,
+ .flags = ADDR_TYPE_RT
+ },
+};
+
+static struct omap_hwmod_ocp_if omap2420_l4_wkup__gpio2 = {
+ .master = &omap2420_l4_wkup_hwmod,
+ .slave = &omap2420_gpio2_hwmod,
+ .clk = "gpios_ick",
+ .addr = omap2420_gpio2_addr_space,
+ .addr_cnt = ARRAY_SIZE(omap2420_gpio2_addr_space),
+ .user = OCP_USER_MPU | OCP_USER_SDMA,
+};
+
+/* l4_wkup -> gpio3 */
+static struct omap_hwmod_addr_space omap2420_gpio3_addr_space[] = {
+ {
+ .pa_start = 0x4801c000,
+ .pa_end = 0x4801c1ff,
+ .flags = ADDR_TYPE_RT
+ },
+};
+
+static struct omap_hwmod_ocp_if omap2420_l4_wkup__gpio3 = {
+ .master = &omap2420_l4_wkup_hwmod,
+ .slave = &omap2420_gpio3_hwmod,
+ .clk = "gpios_ick",
+ .addr = omap2420_gpio3_addr_space,
+ .addr_cnt = ARRAY_SIZE(omap2420_gpio3_addr_space),
+ .user = OCP_USER_MPU | OCP_USER_SDMA,
+};
+
+/* l4_wkup -> gpio4 */
+static struct omap_hwmod_addr_space omap2420_gpio4_addr_space[] = {
+ {
+ .pa_start = 0x4801e000,
+ .pa_end = 0x4801e1ff,
+ .flags = ADDR_TYPE_RT
+ },
+};
+
+static struct omap_hwmod_ocp_if omap2420_l4_wkup__gpio4 = {
+ .master = &omap2420_l4_wkup_hwmod,
+ .slave = &omap2420_gpio4_hwmod,
+ .clk = "gpios_ick",
+ .addr = omap2420_gpio4_addr_space,
+ .addr_cnt = ARRAY_SIZE(omap2420_gpio4_addr_space),
+ .user = OCP_USER_MPU | OCP_USER_SDMA,
+};
+
+/* gpio dev_attr */
+static struct omap_gpio_dev_attr gpio_dev_attr = {
+ .bank_width = 32,
+ .dbck_flag = false,
+};
+
+static struct omap_hwmod_class_sysconfig omap242x_gpio_sysc = {
+ .rev_offs = 0x0000,
+ .sysc_offs = 0x0010,
+ .syss_offs = 0x0014,
+ .sysc_flags = (SYSC_HAS_ENAWAKEUP | SYSC_HAS_SIDLEMODE |
+ SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE),
+ .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
+ .sysc_fields = &omap_hwmod_sysc_type1,
+};
+
+/*
+ * 'gpio' class
+ * general purpose io module
+ */
+static struct omap_hwmod_class omap242x_gpio_hwmod_class = {
+ .name = "gpio",
+ .sysc = &omap242x_gpio_sysc,
+ .rev = 0,
+};
+
+/* gpio1 */
+static struct omap_hwmod_irq_info omap242x_gpio1_irqs[] = {
+ { .name = "gpio_mpu_irq", .irq = 29 }, /* INT_24XX_GPIO_BANK1 */
+};
+
+static struct omap_hwmod_ocp_if *omap2420_gpio1_slaves[] = {
+ &omap2420_l4_wkup__gpio1,
+};
+
+static struct omap_hwmod omap2420_gpio1_hwmod = {
+ .name = "gpio1",
+ .mpu_irqs = omap242x_gpio1_irqs,
+ .mpu_irqs_cnt = ARRAY_SIZE(omap242x_gpio1_irqs),
+ .main_clk = "gpios_fck",
+ .prcm = {
+ .omap2 = {
+ .prcm_reg_id = 1,
+ .module_bit = OMAP24XX_EN_GPIOS_SHIFT,
+ .module_offs = WKUP_MOD,
+ .idlest_reg_id = 1,
+ .idlest_idle_bit = OMAP24XX_ST_GPIOS_SHIFT,
+ },
+ },
+ .slaves = omap2420_gpio1_slaves,
+ .slaves_cnt = ARRAY_SIZE(omap2420_gpio1_slaves),
+ .class = &omap242x_gpio_hwmod_class,
+ .dev_attr = &gpio_dev_attr,
+ .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420),
+};
+
+/* gpio2 */
+static struct omap_hwmod_irq_info omap242x_gpio2_irqs[] = {
+ { .name = "gpio_mpu_irq", .irq = 30 }, /* INT_24XX_GPIO_BANK2 */
+};
+
+static struct omap_hwmod_ocp_if *omap2420_gpio2_slaves[] = {
+ &omap2420_l4_wkup__gpio2,
+};
+
+static struct omap_hwmod omap2420_gpio2_hwmod = {
+ .name = "gpio2",
+ .mpu_irqs = omap242x_gpio2_irqs,
+ .mpu_irqs_cnt = ARRAY_SIZE(omap242x_gpio2_irqs),
+ .main_clk = "gpios_fck",
+ .prcm = {
+ .omap2 = {
+ .prcm_reg_id = 1,
+ .module_bit = OMAP24XX_EN_GPIOS_SHIFT,
+ .module_offs = WKUP_MOD,
+ .idlest_reg_id = 1,
+ .idlest_idle_bit = OMAP24XX_ST_GPIOS_SHIFT,
+ },
+ },
+ .slaves = omap2420_gpio2_slaves,
+ .slaves_cnt = ARRAY_SIZE(omap2420_gpio2_slaves),
+ .class = &omap242x_gpio_hwmod_class,
+ .dev_attr = &gpio_dev_attr,
+ .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420),
+};
+
+/* gpio3 */
+static struct omap_hwmod_irq_info omap242x_gpio3_irqs[] = {
+ { .name = "gpio_mpu_irq", .irq = 31 }, /* INT_24XX_GPIO_BANK3 */
+};
+
+static struct omap_hwmod_ocp_if *omap2420_gpio3_slaves[] = {
+ &omap2420_l4_wkup__gpio3,
+};
+
+static struct omap_hwmod omap2420_gpio3_hwmod = {
+ .name = "gpio3",
+ .mpu_irqs = omap242x_gpio3_irqs,
+ .mpu_irqs_cnt = ARRAY_SIZE(omap242x_gpio3_irqs),
+ .main_clk = "gpios_fck",
+ .prcm = {
+ .omap2 = {
+ .prcm_reg_id = 1,
+ .module_bit = OMAP24XX_EN_GPIOS_SHIFT,
+ .module_offs = WKUP_MOD,
+ .idlest_reg_id = 1,
+ .idlest_idle_bit = OMAP24XX_ST_GPIOS_SHIFT,
+ },
+ },
+ .slaves = omap2420_gpio3_slaves,
+ .slaves_cnt = ARRAY_SIZE(omap2420_gpio3_slaves),
+ .class = &omap242x_gpio_hwmod_class,
+ .dev_attr = &gpio_dev_attr,
+ .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420),
+};
+
+/* gpio4 */
+static struct omap_hwmod_irq_info omap242x_gpio4_irqs[] = {
+ { .name = "gpio_mpu_irq", .irq = 32 }, /* INT_24XX_GPIO_BANK4 */
+};
+
+static struct omap_hwmod_ocp_if *omap2420_gpio4_slaves[] = {
+ &omap2420_l4_wkup__gpio4,
+};
+
+static struct omap_hwmod omap2420_gpio4_hwmod = {
+ .name = "gpio4",
+ .mpu_irqs = omap242x_gpio4_irqs,
+ .mpu_irqs_cnt = ARRAY_SIZE(omap242x_gpio4_irqs),
+ .main_clk = "gpios_fck",
+ .prcm = {
+ .omap2 = {
+ .prcm_reg_id = 1,
+ .module_bit = OMAP24XX_EN_GPIOS_SHIFT,
+ .module_offs = WKUP_MOD,
+ .idlest_reg_id = 1,
+ .idlest_idle_bit = OMAP24XX_ST_GPIOS_SHIFT,
+ },
+ },
+ .slaves = omap2420_gpio4_slaves,
+ .slaves_cnt = ARRAY_SIZE(omap2420_gpio4_slaves),
+ .class = &omap242x_gpio_hwmod_class,
+ .dev_attr = &gpio_dev_attr,
+ .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420),
+};
+
static __initdata struct omap_hwmod *omap2420_hwmods[] = {
&omap2420_l3_main_hwmod,
&omap2420_l4_core_hwmod,
@@ -569,6 +792,12 @@ static __initdata struct omap_hwmod *omap2420_hwmods[] = {
&omap2420_uart3_hwmod,
&omap2420_i2c1_hwmod,
&omap2420_i2c2_hwmod,
+
+ /* gpio class */
+ &omap2420_gpio1_hwmod,
+ &omap2420_gpio2_hwmod,
+ &omap2420_gpio3_hwmod,
+ &omap2420_gpio4_hwmod,
NULL,
};
diff --git a/arch/arm/plat-omap/include/plat/gpio.h b/arch/arm/plat-omap/include/plat/gpio.h
index 5bef86d..24892a6 100644
--- a/arch/arm/plat-omap/include/plat/gpio.h
+++ b/arch/arm/plat-omap/include/plat/gpio.h
@@ -79,6 +79,11 @@
#define METHOD_GPIO_24XX 5
#define METHOD_GPIO_44XX 6
+struct omap_gpio_dev_attr {
+ int bank_width; /* GPIO bank width */
+ bool dbck_flag; /* dbck required or not - True for OMAP3&4 */
+};
+
struct omap_gpio_platform_data {
u16 virtual_irq_start;
int bank_type;
--
1.7.0.4
^ permalink raw reply related [flat|nested] 29+ messages in thread* [PATCH v7 05/11] OMAP2420: hwmod data: Add GPIO
2010-11-23 14:56 ` [PATCH v7 05/11] OMAP2420: hwmod data: Add GPIO Varadarajan, Charulatha
@ 2010-11-24 22:13 ` Cousson, Benoit
2010-11-25 4:36 ` Varadarajan, Charulatha
0 siblings, 1 reply; 29+ messages in thread
From: Cousson, Benoit @ 2010-11-24 22:13 UTC (permalink / raw)
To: linux-arm-kernel
On 11/23/2010 3:56 PM, Varadarajan, Charulatha wrote:
> Add GPIO hwmod data for OMAP2420
>
> Signed-off-by: Charulatha V<charu@ti.com>
> ---
> arch/arm/mach-omap2/omap_hwmod_2420_data.c | 229 ++++++++++++++++++++++++++++
> arch/arm/plat-omap/include/plat/gpio.h | 5 +
> 2 files changed, 234 insertions(+), 0 deletions(-)
>
> diff --git a/arch/arm/mach-omap2/omap_hwmod_2420_data.c b/arch/arm/mach-omap2/omap_hwmod_2420_data.c
> index a1a3dd6..c951061 100644
> --- a/arch/arm/mach-omap2/omap_hwmod_2420_data.c
> +++ b/arch/arm/mach-omap2/omap_hwmod_2420_data.c
> @@ -17,6 +17,7 @@
> #include<plat/dma.h>
> #include<plat/serial.h>
> #include<plat/i2c.h>
> +#include<plat/gpio.h>
> #include<plat/omap24xx.h>
Do you still need that header file?
>
> #include "omap_hwmod_common_data.h"
> @@ -38,6 +39,10 @@ static struct omap_hwmod omap2420_iva_hwmod;
> static struct omap_hwmod omap2420_l3_main_hwmod;
> static struct omap_hwmod omap2420_l4_core_hwmod;
> static struct omap_hwmod omap2420_wd_timer2_hwmod;
> +static struct omap_hwmod omap2420_gpio1_hwmod;
> +static struct omap_hwmod omap2420_gpio2_hwmod;
> +static struct omap_hwmod omap2420_gpio3_hwmod;
> +static struct omap_hwmod omap2420_gpio4_hwmod;
>
> /* L3 -> L4_CORE interface */
> static struct omap_hwmod_ocp_if omap2420_l3_main__l4_core = {
> @@ -557,6 +562,224 @@ static struct omap_hwmod omap2420_i2c2_hwmod = {
> .flags = HWMOD_16BIT_REG,
> };
>
> +/* l4_wkup -> gpio1 */
> +static struct omap_hwmod_addr_space omap2420_gpio1_addr_space[] = {
> + {
> + .pa_start = 0x48018000,
> + .pa_end = 0x480181ff,
> + .flags = ADDR_TYPE_RT
> + },
> +};
> +
> +static struct omap_hwmod_ocp_if omap2420_l4_wkup__gpio1 = {
> + .master =&omap2420_l4_wkup_hwmod,
> + .slave =&omap2420_gpio1_hwmod,
> + .clk = "gpios_ick",
> + .addr = omap2420_gpio1_addr_space,
> + .addr_cnt = ARRAY_SIZE(omap2420_gpio1_addr_space),
> + .user = OCP_USER_MPU | OCP_USER_SDMA,
> +};
> +
> +/* l4_wkup -> gpio2 */
> +static struct omap_hwmod_addr_space omap2420_gpio2_addr_space[] = {
> + {
> + .pa_start = 0x4801a000,
> + .pa_end = 0x4801a1ff,
> + .flags = ADDR_TYPE_RT
> + },
> +};
> +
> +static struct omap_hwmod_ocp_if omap2420_l4_wkup__gpio2 = {
> + .master =&omap2420_l4_wkup_hwmod,
> + .slave =&omap2420_gpio2_hwmod,
> + .clk = "gpios_ick",
> + .addr = omap2420_gpio2_addr_space,
> + .addr_cnt = ARRAY_SIZE(omap2420_gpio2_addr_space),
> + .user = OCP_USER_MPU | OCP_USER_SDMA,
> +};
> +
> +/* l4_wkup -> gpio3 */
> +static struct omap_hwmod_addr_space omap2420_gpio3_addr_space[] = {
> + {
> + .pa_start = 0x4801c000,
> + .pa_end = 0x4801c1ff,
> + .flags = ADDR_TYPE_RT
> + },
> +};
> +
> +static struct omap_hwmod_ocp_if omap2420_l4_wkup__gpio3 = {
> + .master =&omap2420_l4_wkup_hwmod,
> + .slave =&omap2420_gpio3_hwmod,
> + .clk = "gpios_ick",
> + .addr = omap2420_gpio3_addr_space,
> + .addr_cnt = ARRAY_SIZE(omap2420_gpio3_addr_space),
> + .user = OCP_USER_MPU | OCP_USER_SDMA,
> +};
> +
> +/* l4_wkup -> gpio4 */
> +static struct omap_hwmod_addr_space omap2420_gpio4_addr_space[] = {
> + {
> + .pa_start = 0x4801e000,
> + .pa_end = 0x4801e1ff,
> + .flags = ADDR_TYPE_RT
> + },
> +};
> +
> +static struct omap_hwmod_ocp_if omap2420_l4_wkup__gpio4 = {
> + .master =&omap2420_l4_wkup_hwmod,
> + .slave =&omap2420_gpio4_hwmod,
> + .clk = "gpios_ick",
> + .addr = omap2420_gpio4_addr_space,
> + .addr_cnt = ARRAY_SIZE(omap2420_gpio4_addr_space),
> + .user = OCP_USER_MPU | OCP_USER_SDMA,
> +};
> +
> +/* gpio dev_attr */
> +static struct omap_gpio_dev_attr gpio_dev_attr = {
> + .bank_width = 32,
> + .dbck_flag = false,
> +};
> +
> +static struct omap_hwmod_class_sysconfig omap242x_gpio_sysc = {
> + .rev_offs = 0x0000,
> + .sysc_offs = 0x0010,
> + .syss_offs = 0x0014,
> + .sysc_flags = (SYSC_HAS_ENAWAKEUP | SYSC_HAS_SIDLEMODE |
> + SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE),
> + .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
> + .sysc_fields =&omap_hwmod_sysc_type1,
> +};
> +
> +/*
> + * 'gpio' class
> + * general purpose io module
> + */
> +static struct omap_hwmod_class omap242x_gpio_hwmod_class = {
> + .name = "gpio",
> + .sysc =&omap242x_gpio_sysc,
> + .rev = 0,
> +};
> +
> +/* gpio1 */
> +static struct omap_hwmod_irq_info omap242x_gpio1_irqs[] = {
> + { .name = "gpio_mpu_irq", .irq = 29 }, /* INT_24XX_GPIO_BANK1 */
> +};
> +
> +static struct omap_hwmod_ocp_if *omap2420_gpio1_slaves[] = {
> + &omap2420_l4_wkup__gpio1,
> +};
> +
> +static struct omap_hwmod omap2420_gpio1_hwmod = {
> + .name = "gpio1",
> + .mpu_irqs = omap242x_gpio1_irqs,
> + .mpu_irqs_cnt = ARRAY_SIZE(omap242x_gpio1_irqs),
> + .main_clk = "gpios_fck",
> + .prcm = {
> + .omap2 = {
> + .prcm_reg_id = 1,
> + .module_bit = OMAP24XX_EN_GPIOS_SHIFT,
> + .module_offs = WKUP_MOD,
> + .idlest_reg_id = 1,
> + .idlest_idle_bit = OMAP24XX_ST_GPIOS_SHIFT,
> + },
> + },
> + .slaves = omap2420_gpio1_slaves,
> + .slaves_cnt = ARRAY_SIZE(omap2420_gpio1_slaves),
> + .class =&omap242x_gpio_hwmod_class,
> + .dev_attr =&gpio_dev_attr,
> + .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420),
> +};
> +
> +/* gpio2 */
> +static struct omap_hwmod_irq_info omap242x_gpio2_irqs[] = {
> + { .name = "gpio_mpu_irq", .irq = 30 }, /* INT_24XX_GPIO_BANK2 */
> +};
> +
> +static struct omap_hwmod_ocp_if *omap2420_gpio2_slaves[] = {
> + &omap2420_l4_wkup__gpio2,
> +};
> +
> +static struct omap_hwmod omap2420_gpio2_hwmod = {
> + .name = "gpio2",
> + .mpu_irqs = omap242x_gpio2_irqs,
> + .mpu_irqs_cnt = ARRAY_SIZE(omap242x_gpio2_irqs),
> + .main_clk = "gpios_fck",
> + .prcm = {
> + .omap2 = {
> + .prcm_reg_id = 1,
> + .module_bit = OMAP24XX_EN_GPIOS_SHIFT,
> + .module_offs = WKUP_MOD,
> + .idlest_reg_id = 1,
> + .idlest_idle_bit = OMAP24XX_ST_GPIOS_SHIFT,
> + },
> + },
> + .slaves = omap2420_gpio2_slaves,
> + .slaves_cnt = ARRAY_SIZE(omap2420_gpio2_slaves),
> + .class =&omap242x_gpio_hwmod_class,
> + .dev_attr =&gpio_dev_attr,
> + .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420),
> +};
> +
> +/* gpio3 */
> +static struct omap_hwmod_irq_info omap242x_gpio3_irqs[] = {
> + { .name = "gpio_mpu_irq", .irq = 31 }, /* INT_24XX_GPIO_BANK3 */
> +};
> +
> +static struct omap_hwmod_ocp_if *omap2420_gpio3_slaves[] = {
> + &omap2420_l4_wkup__gpio3,
> +};
> +
> +static struct omap_hwmod omap2420_gpio3_hwmod = {
> + .name = "gpio3",
> + .mpu_irqs = omap242x_gpio3_irqs,
> + .mpu_irqs_cnt = ARRAY_SIZE(omap242x_gpio3_irqs),
> + .main_clk = "gpios_fck",
> + .prcm = {
> + .omap2 = {
> + .prcm_reg_id = 1,
> + .module_bit = OMAP24XX_EN_GPIOS_SHIFT,
> + .module_offs = WKUP_MOD,
> + .idlest_reg_id = 1,
> + .idlest_idle_bit = OMAP24XX_ST_GPIOS_SHIFT,
> + },
> + },
> + .slaves = omap2420_gpio3_slaves,
> + .slaves_cnt = ARRAY_SIZE(omap2420_gpio3_slaves),
> + .class =&omap242x_gpio_hwmod_class,
> + .dev_attr =&gpio_dev_attr,
> + .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420),
> +};
> +
> +/* gpio4 */
> +static struct omap_hwmod_irq_info omap242x_gpio4_irqs[] = {
> + { .name = "gpio_mpu_irq", .irq = 32 }, /* INT_24XX_GPIO_BANK4 */
> +};
> +
> +static struct omap_hwmod_ocp_if *omap2420_gpio4_slaves[] = {
> + &omap2420_l4_wkup__gpio4,
> +};
> +
> +static struct omap_hwmod omap2420_gpio4_hwmod = {
> + .name = "gpio4",
> + .mpu_irqs = omap242x_gpio4_irqs,
> + .mpu_irqs_cnt = ARRAY_SIZE(omap242x_gpio4_irqs),
> + .main_clk = "gpios_fck",
> + .prcm = {
> + .omap2 = {
> + .prcm_reg_id = 1,
> + .module_bit = OMAP24XX_EN_GPIOS_SHIFT,
> + .module_offs = WKUP_MOD,
> + .idlest_reg_id = 1,
> + .idlest_idle_bit = OMAP24XX_ST_GPIOS_SHIFT,
> + },
> + },
> + .slaves = omap2420_gpio4_slaves,
> + .slaves_cnt = ARRAY_SIZE(omap2420_gpio4_slaves),
> + .class =&omap242x_gpio_hwmod_class,
> + .dev_attr =&gpio_dev_attr,
> + .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2420),
> +};
> +
> static __initdata struct omap_hwmod *omap2420_hwmods[] = {
> &omap2420_l3_main_hwmod,
> &omap2420_l4_core_hwmod,
> @@ -569,6 +792,12 @@ static __initdata struct omap_hwmod *omap2420_hwmods[] = {
> &omap2420_uart3_hwmod,
> &omap2420_i2c1_hwmod,
> &omap2420_i2c2_hwmod,
> +
> + /* gpio class */
> + &omap2420_gpio1_hwmod,
> + &omap2420_gpio2_hwmod,
> + &omap2420_gpio3_hwmod,
> + &omap2420_gpio4_hwmod,
> NULL,
> };
>
> diff --git a/arch/arm/plat-omap/include/plat/gpio.h b/arch/arm/plat-omap/include/plat/gpio.h
That change should not necessarily be there, it is not directly related
to the subject.
Maybe that should be in an extra patch just before that one.
Beside these 2 minor comments, that patch seems good to me.
Almost-acked-by: Benoit Cousson <b-cousson@ti.com>
Regards,
Benoit
> index 5bef86d..24892a6 100644
> --- a/arch/arm/plat-omap/include/plat/gpio.h
> +++ b/arch/arm/plat-omap/include/plat/gpio.h
> @@ -79,6 +79,11 @@
> #define METHOD_GPIO_24XX 5
> #define METHOD_GPIO_44XX 6
>
> +struct omap_gpio_dev_attr {
> + int bank_width; /* GPIO bank width */
> + bool dbck_flag; /* dbck required or not - True for OMAP3&4 */
> +};
> +
> struct omap_gpio_platform_data {
> u16 virtual_irq_start;
> int bank_type;
^ permalink raw reply [flat|nested] 29+ messages in thread* [PATCH v7 05/11] OMAP2420: hwmod data: Add GPIO
2010-11-24 22:13 ` Cousson, Benoit
@ 2010-11-25 4:36 ` Varadarajan, Charulatha
2010-11-25 7:55 ` Cousson, Benoit
2010-11-25 8:02 ` Cousson, Benoit
0 siblings, 2 replies; 29+ messages in thread
From: Varadarajan, Charulatha @ 2010-11-25 4:36 UTC (permalink / raw)
To: linux-arm-kernel
Benoit,
On Thu, Nov 25, 2010 at 03:43, Cousson, Benoit <b-cousson@ti.com> wrote:
> On 11/23/2010 3:56 PM, Varadarajan, Charulatha wrote:
>>
>> Add GPIO hwmod data for OMAP2420
>>
>> Signed-off-by: Charulatha V<charu@ti.com>
>> ---
>> ?arch/arm/mach-omap2/omap_hwmod_2420_data.c | ?229
>> ++++++++++++++++++++++++++++
>> ?arch/arm/plat-omap/include/plat/gpio.h ? ? | ? ?5 +
>> ?2 files changed, 234 insertions(+), 0 deletions(-)
>>
>> diff --git a/arch/arm/mach-omap2/omap_hwmod_2420_data.c
>> b/arch/arm/mach-omap2/omap_hwmod_2420_data.c
>> index a1a3dd6..c951061 100644
>> --- a/arch/arm/mach-omap2/omap_hwmod_2420_data.c
>> +++ b/arch/arm/mach-omap2/omap_hwmod_2420_data.c
>> @@ -17,6 +17,7 @@
>> ?#include<plat/dma.h>
>> ?#include<plat/serial.h>
>> ?#include<plat/i2c.h>
>> +#include<plat/gpio.h>
>> ?#include<plat/omap24xx.h>
>
> Do you still need that header file?
Yes, for the gpio_dev_attr
>
>>
>> ?#include "omap_hwmod_common_data.h"
>> @@ -38,6 +39,10 @@ static struct omap_hwmod omap2420_iva_hwmod;
>> ?static struct omap_hwmod omap2420_l3_main_hwmod;
>> ?static struct omap_hwmod omap2420_l4_core_hwmod;
>> ?static struct omap_hwmod omap2420_wd_timer2_hwmod;
>> +static struct omap_hwmod omap2420_gpio1_hwmod;
>> +static struct omap_hwmod omap2420_gpio2_hwmod;
>> +static struct omap_hwmod omap2420_gpio3_hwmod;
>> +static struct omap_hwmod omap2420_gpio4_hwmod;
>>
>> ?/* L3 -> ?L4_CORE interface */
>> ?static struct omap_hwmod_ocp_if omap2420_l3_main__l4_core = {
>> @@ -557,6 +562,224 @@ static struct omap_hwmod omap2420_i2c2_hwmod = {
>> ? ? ? ?.flags ? ? ? ? ?= HWMOD_16BIT_REG,
>> ?};
>>
>> +/* l4_wkup -> ?gpio1 */
>> +static struct omap_hwmod_addr_space omap2420_gpio1_addr_space[] = {
>> + ? ? ? {
>> + ? ? ? ? ? ? ? .pa_start ? ? ? = 0x48018000,
>> + ? ? ? ? ? ? ? .pa_end ? ? ? ? = 0x480181ff,
>> + ? ? ? ? ? ? ? .flags ? ? ? ? ?= ADDR_TYPE_RT
>> + ? ? ? },
>> +};
>> +
>> +static struct omap_hwmod_ocp_if omap2420_l4_wkup__gpio1 = {
>> + ? ? ? .master ? ? ? ? =&omap2420_l4_wkup_hwmod,
>> + ? ? ? .slave ? ? ? ? ?=&omap2420_gpio1_hwmod,
>> + ? ? ? .clk ? ? ? ? ? ?= "gpios_ick",
>> + ? ? ? .addr ? ? ? ? ? = omap2420_gpio1_addr_space,
>> + ? ? ? .addr_cnt ? ? ? = ARRAY_SIZE(omap2420_gpio1_addr_space),
>> + ? ? ? .user ? ? ? ? ? = OCP_USER_MPU | OCP_USER_SDMA,
>> +};
>> +
>> +/* l4_wkup -> ?gpio2 */
>> +static struct omap_hwmod_addr_space omap2420_gpio2_addr_space[] = {
>> + ? ? ? {
>> + ? ? ? ? ? ? ? .pa_start ? ? ? = 0x4801a000,
>> + ? ? ? ? ? ? ? .pa_end ? ? ? ? = 0x4801a1ff,
>> + ? ? ? ? ? ? ? .flags ? ? ? ? ?= ADDR_TYPE_RT
>> + ? ? ? },
>> +};
>> +
>> +static struct omap_hwmod_ocp_if omap2420_l4_wkup__gpio2 = {
>> + ? ? ? .master ? ? ? ? =&omap2420_l4_wkup_hwmod,
>> + ? ? ? .slave ? ? ? ? ?=&omap2420_gpio2_hwmod,
>> + ? ? ? .clk ? ? ? ? ? ?= "gpios_ick",
>> + ? ? ? .addr ? ? ? ? ? = omap2420_gpio2_addr_space,
>> + ? ? ? .addr_cnt ? ? ? = ARRAY_SIZE(omap2420_gpio2_addr_space),
>> + ? ? ? .user ? ? ? ? ? = OCP_USER_MPU | OCP_USER_SDMA,
>> +};
>> +
>> +/* l4_wkup -> ?gpio3 */
>> +static struct omap_hwmod_addr_space omap2420_gpio3_addr_space[] = {
>> + ? ? ? {
>> + ? ? ? ? ? ? ? .pa_start ? ? ? = 0x4801c000,
>> + ? ? ? ? ? ? ? .pa_end ? ? ? ? = 0x4801c1ff,
>> + ? ? ? ? ? ? ? .flags ? ? ? ? ?= ADDR_TYPE_RT
>> + ? ? ? },
>> +};
>> +
>> +static struct omap_hwmod_ocp_if omap2420_l4_wkup__gpio3 = {
>> + ? ? ? .master ? ? ? ? =&omap2420_l4_wkup_hwmod,
>> + ? ? ? .slave ? ? ? ? ?=&omap2420_gpio3_hwmod,
>> + ? ? ? .clk ? ? ? ? ? ?= "gpios_ick",
>> + ? ? ? .addr ? ? ? ? ? = omap2420_gpio3_addr_space,
>> + ? ? ? .addr_cnt ? ? ? = ARRAY_SIZE(omap2420_gpio3_addr_space),
>> + ? ? ? .user ? ? ? ? ? = OCP_USER_MPU | OCP_USER_SDMA,
>> +};
>> +
>> +/* l4_wkup -> ?gpio4 */
>> +static struct omap_hwmod_addr_space omap2420_gpio4_addr_space[] = {
>> + ? ? ? {
>> + ? ? ? ? ? ? ? .pa_start ? ? ? = 0x4801e000,
>> + ? ? ? ? ? ? ? .pa_end ? ? ? ? = 0x4801e1ff,
>> + ? ? ? ? ? ? ? .flags ? ? ? ? ?= ADDR_TYPE_RT
>> + ? ? ? },
>> +};
>> +
>> +static struct omap_hwmod_ocp_if omap2420_l4_wkup__gpio4 = {
>> + ? ? ? .master ? ? ? ? =&omap2420_l4_wkup_hwmod,
>> + ? ? ? .slave ? ? ? ? ?=&omap2420_gpio4_hwmod,
>> + ? ? ? .clk ? ? ? ? ? ?= "gpios_ick",
>> + ? ? ? .addr ? ? ? ? ? = omap2420_gpio4_addr_space,
>> + ? ? ? .addr_cnt ? ? ? = ARRAY_SIZE(omap2420_gpio4_addr_space),
>> + ? ? ? .user ? ? ? ? ? = OCP_USER_MPU | OCP_USER_SDMA,
>> +};
>> +
>> +/* gpio dev_attr */
>> +static struct omap_gpio_dev_attr gpio_dev_attr = {
>> + ? ? ? .bank_width = 32,
>> + ? ? ? .dbck_flag = false,
>> +};
>> +
<<snip>>
>> ?};
>>
>> diff --git a/arch/arm/plat-omap/include/plat/gpio.h
>> b/arch/arm/plat-omap/include/plat/gpio.h
>
> That change should not necessarily be there, it is not directly related to
> the subject.
>
> Maybe that should be in an extra patch just before that one.
I merged these two patches because of a comment to introduce
new variables/structures only in the patch where they are used.
Since "omap_gpio_dev_attr" is being used by hwmod DB I merged
these two patches. Do you think that hwmod DB patches should not
be merged with other patches?
>
> Beside these 2 minor comments, that patch seems good to me.
>
> Almost-acked-by: Benoit Cousson <b-cousson@ti.com>
Thanks.
>
> Regards,
> Benoit
>
>> index 5bef86d..24892a6 100644
>> --- a/arch/arm/plat-omap/include/plat/gpio.h
>> +++ b/arch/arm/plat-omap/include/plat/gpio.h
>> @@ -79,6 +79,11 @@
>> ?#define METHOD_GPIO_24XX ? ? ?5
>> ?#define METHOD_GPIO_44XX ? ? ?6
>>
>> +struct omap_gpio_dev_attr {
>> + ? ? ? int bank_width; ? ? ? ? /* GPIO bank width */
>> + ? ? ? bool dbck_flag; ? ? ? ? /* dbck required or not - True for OMAP3&4
>> */
>> +};
>> +
>> ?struct omap_gpio_platform_data {
>> ? ? ? ?u16 virtual_irq_start;
>> ? ? ? ?int bank_type;
>
>
^ permalink raw reply [flat|nested] 29+ messages in thread* [PATCH v7 05/11] OMAP2420: hwmod data: Add GPIO
2010-11-25 4:36 ` Varadarajan, Charulatha
@ 2010-11-25 7:55 ` Cousson, Benoit
2010-11-25 8:02 ` Cousson, Benoit
1 sibling, 0 replies; 29+ messages in thread
From: Cousson, Benoit @ 2010-11-25 7:55 UTC (permalink / raw)
To: linux-arm-kernel
On 11/25/2010 5:36 AM, Varadarajan, Charulatha wrote:
> Benoit,
>
> On Thu, Nov 25, 2010 at 03:43, Cousson, Benoit<b-cousson@ti.com> wrote:
>> On 11/23/2010 3:56 PM, Varadarajan, Charulatha wrote:
>>>
>>> Add GPIO hwmod data for OMAP2420
>>>
>>> Signed-off-by: Charulatha V<charu@ti.com>
[...]
>>> diff --git a/arch/arm/plat-omap/include/plat/gpio.h
>>> b/arch/arm/plat-omap/include/plat/gpio.h
>>
>> That change should not necessarily be there, it is not directly related to
>> the subject.
>>
>> Maybe that should be in an extra patch just before that one.
>
> I merged these two patches because of a comment to introduce
> new variables/structures only in the patch where they are used.
> Since "omap_gpio_dev_attr" is being used by hwmod DB I merged
> these two patches. Do you think that hwmod DB patches should not
> be merged with other patches?
Not necessarily, maybe you can just update the changelog and the subject
to indicate that you add a new structure as well in this patch.
Benoit
^ permalink raw reply [flat|nested] 29+ messages in thread
* [PATCH v7 05/11] OMAP2420: hwmod data: Add GPIO
2010-11-25 4:36 ` Varadarajan, Charulatha
2010-11-25 7:55 ` Cousson, Benoit
@ 2010-11-25 8:02 ` Cousson, Benoit
2010-11-25 8:31 ` Varadarajan, Charulatha
1 sibling, 1 reply; 29+ messages in thread
From: Cousson, Benoit @ 2010-11-25 8:02 UTC (permalink / raw)
To: linux-arm-kernel
On 11/25/2010 5:36 AM, Varadarajan, Charulatha wrote:
> Benoit,
>
> On Thu, Nov 25, 2010 at 03:43, Cousson, Benoit<b-cousson@ti.com> wrote:
>> On 11/23/2010 3:56 PM, Varadarajan, Charulatha wrote:
>>>
>>> Add GPIO hwmod data for OMAP2420
>>>
>>> Signed-off-by: Charulatha V<charu@ti.com>
>>> ---
>>> arch/arm/mach-omap2/omap_hwmod_2420_data.c | 229
>>> ++++++++++++++++++++++++++++
>>> arch/arm/plat-omap/include/plat/gpio.h | 5 +
>>> 2 files changed, 234 insertions(+), 0 deletions(-)
>>>
>>> diff --git a/arch/arm/mach-omap2/omap_hwmod_2420_data.c
>>> b/arch/arm/mach-omap2/omap_hwmod_2420_data.c
>>> index a1a3dd6..c951061 100644
>>> --- a/arch/arm/mach-omap2/omap_hwmod_2420_data.c
>>> +++ b/arch/arm/mach-omap2/omap_hwmod_2420_data.c
>>> @@ -17,6 +17,7 @@
>>> #include<plat/dma.h>
>>> #include<plat/serial.h>
>>> #include<plat/i2c.h>
>>> +#include<plat/gpio.h>
>>> #include<plat/omap24xx.h>
>>
>> Do you still need that header file?
>
> Yes, for the gpio_dev_attr
I'm still confused, gpio_dev_attr just contains an int and a bool:
+static struct omap_gpio_dev_attr gpio_dev_attr = {
+ .bank_width = 32,
+ .dbck_flag = false,
+};
Benoit
>
>>
>>>
>>> #include "omap_hwmod_common_data.h"
>>> @@ -38,6 +39,10 @@ static struct omap_hwmod omap2420_iva_hwmod;
>>> static struct omap_hwmod omap2420_l3_main_hwmod;
>>> static struct omap_hwmod omap2420_l4_core_hwmod;
>>> static struct omap_hwmod omap2420_wd_timer2_hwmod;
>>> +static struct omap_hwmod omap2420_gpio1_hwmod;
>>> +static struct omap_hwmod omap2420_gpio2_hwmod;
>>> +static struct omap_hwmod omap2420_gpio3_hwmod;
>>> +static struct omap_hwmod omap2420_gpio4_hwmod;
>>>
>>> /* L3 -> L4_CORE interface */
>>> static struct omap_hwmod_ocp_if omap2420_l3_main__l4_core = {
>>> @@ -557,6 +562,224 @@ static struct omap_hwmod omap2420_i2c2_hwmod = {
>>> .flags = HWMOD_16BIT_REG,
>>> };
>>>
>>> +/* l4_wkup -> gpio1 */
>>> +static struct omap_hwmod_addr_space omap2420_gpio1_addr_space[] = {
>>> + {
>>> + .pa_start = 0x48018000,
>>> + .pa_end = 0x480181ff,
>>> + .flags = ADDR_TYPE_RT
>>> + },
>>> +};
>>> +
>>> +static struct omap_hwmod_ocp_if omap2420_l4_wkup__gpio1 = {
>>> + .master =&omap2420_l4_wkup_hwmod,
>>> + .slave =&omap2420_gpio1_hwmod,
>>> + .clk = "gpios_ick",
>>> + .addr = omap2420_gpio1_addr_space,
>>> + .addr_cnt = ARRAY_SIZE(omap2420_gpio1_addr_space),
>>> + .user = OCP_USER_MPU | OCP_USER_SDMA,
>>> +};
>>> +
>>> +/* l4_wkup -> gpio2 */
>>> +static struct omap_hwmod_addr_space omap2420_gpio2_addr_space[] = {
>>> + {
>>> + .pa_start = 0x4801a000,
>>> + .pa_end = 0x4801a1ff,
>>> + .flags = ADDR_TYPE_RT
>>> + },
>>> +};
>>> +
>>> +static struct omap_hwmod_ocp_if omap2420_l4_wkup__gpio2 = {
>>> + .master =&omap2420_l4_wkup_hwmod,
>>> + .slave =&omap2420_gpio2_hwmod,
>>> + .clk = "gpios_ick",
>>> + .addr = omap2420_gpio2_addr_space,
>>> + .addr_cnt = ARRAY_SIZE(omap2420_gpio2_addr_space),
>>> + .user = OCP_USER_MPU | OCP_USER_SDMA,
>>> +};
>>> +
>>> +/* l4_wkup -> gpio3 */
>>> +static struct omap_hwmod_addr_space omap2420_gpio3_addr_space[] = {
>>> + {
>>> + .pa_start = 0x4801c000,
>>> + .pa_end = 0x4801c1ff,
>>> + .flags = ADDR_TYPE_RT
>>> + },
>>> +};
>>> +
>>> +static struct omap_hwmod_ocp_if omap2420_l4_wkup__gpio3 = {
>>> + .master =&omap2420_l4_wkup_hwmod,
>>> + .slave =&omap2420_gpio3_hwmod,
>>> + .clk = "gpios_ick",
>>> + .addr = omap2420_gpio3_addr_space,
>>> + .addr_cnt = ARRAY_SIZE(omap2420_gpio3_addr_space),
>>> + .user = OCP_USER_MPU | OCP_USER_SDMA,
>>> +};
>>> +
>>> +/* l4_wkup -> gpio4 */
>>> +static struct omap_hwmod_addr_space omap2420_gpio4_addr_space[] = {
>>> + {
>>> + .pa_start = 0x4801e000,
>>> + .pa_end = 0x4801e1ff,
>>> + .flags = ADDR_TYPE_RT
>>> + },
>>> +};
>>> +
>>> +static struct omap_hwmod_ocp_if omap2420_l4_wkup__gpio4 = {
>>> + .master =&omap2420_l4_wkup_hwmod,
>>> + .slave =&omap2420_gpio4_hwmod,
>>> + .clk = "gpios_ick",
>>> + .addr = omap2420_gpio4_addr_space,
>>> + .addr_cnt = ARRAY_SIZE(omap2420_gpio4_addr_space),
>>> + .user = OCP_USER_MPU | OCP_USER_SDMA,
>>> +};
>>> +
>>> +/* gpio dev_attr */
>>> +static struct omap_gpio_dev_attr gpio_dev_attr = {
>>> + .bank_width = 32,
>>> + .dbck_flag = false,
>>> +};
>>> +
>
> <<snip>>
>
>>> };
>>>
>>> diff --git a/arch/arm/plat-omap/include/plat/gpio.h
>>> b/arch/arm/plat-omap/include/plat/gpio.h
>>
>> That change should not necessarily be there, it is not directly related to
>> the subject.
>>
>> Maybe that should be in an extra patch just before that one.
>
> I merged these two patches because of a comment to introduce
> new variables/structures only in the patch where they are used.
> Since "omap_gpio_dev_attr" is being used by hwmod DB I merged
> these two patches. Do you think that hwmod DB patches should not
> be merged with other patches?
>
>>
>> Beside these 2 minor comments, that patch seems good to me.
>>
>> Almost-acked-by: Benoit Cousson<b-cousson@ti.com>
>
> Thanks.
>
>>
>> Regards,
>> Benoit
>>
>>> index 5bef86d..24892a6 100644
>>> --- a/arch/arm/plat-omap/include/plat/gpio.h
>>> +++ b/arch/arm/plat-omap/include/plat/gpio.h
>>> @@ -79,6 +79,11 @@
>>> #define METHOD_GPIO_24XX 5
>>> #define METHOD_GPIO_44XX 6
>>>
>>> +struct omap_gpio_dev_attr {
>>> + int bank_width; /* GPIO bank width */
>>> + bool dbck_flag; /* dbck required or not - True for OMAP3&4
>>> */
>>> +};
>>> +
>>> struct omap_gpio_platform_data {
>>> u16 virtual_irq_start;
>>> int bank_type;
>>
>>
^ permalink raw reply [flat|nested] 29+ messages in thread* [PATCH v7 05/11] OMAP2420: hwmod data: Add GPIO
2010-11-25 8:02 ` Cousson, Benoit
@ 2010-11-25 8:31 ` Varadarajan, Charulatha
2010-11-25 9:33 ` Varadarajan, Charulatha
0 siblings, 1 reply; 29+ messages in thread
From: Varadarajan, Charulatha @ 2010-11-25 8:31 UTC (permalink / raw)
To: linux-arm-kernel
On Thu, Nov 25, 2010 at 13:32, Cousson, Benoit <b-cousson@ti.com> wrote:
> On 11/25/2010 5:36 AM, Varadarajan, Charulatha wrote:
>>
>> Benoit,
>>
>> On Thu, Nov 25, 2010 at 03:43, Cousson, Benoit<b-cousson@ti.com> ?wrote:
>>>
>>> On 11/23/2010 3:56 PM, Varadarajan, Charulatha wrote:
>>>>
>>>> Add GPIO hwmod data for OMAP2420
>>>>
>>>> Signed-off-by: Charulatha V<charu@ti.com>
>>>> ---
>>>> ?arch/arm/mach-omap2/omap_hwmod_2420_data.c | ?229
>>>> ++++++++++++++++++++++++++++
>>>> ?arch/arm/plat-omap/include/plat/gpio.h ? ? | ? ?5 +
>>>> ?2 files changed, 234 insertions(+), 0 deletions(-)
>>>>
>>>> diff --git a/arch/arm/mach-omap2/omap_hwmod_2420_data.c
>>>> b/arch/arm/mach-omap2/omap_hwmod_2420_data.c
>>>> index a1a3dd6..c951061 100644
>>>> --- a/arch/arm/mach-omap2/omap_hwmod_2420_data.c
>>>> +++ b/arch/arm/mach-omap2/omap_hwmod_2420_data.c
>>>> @@ -17,6 +17,7 @@
>>>> ?#include<plat/dma.h>
>>>> ?#include<plat/serial.h>
>>>> ?#include<plat/i2c.h>
>>>> +#include<plat/gpio.h>
>>>> ?#include<plat/omap24xx.h>
>>>
>>> Do you still need that header file?
>>
>> Yes, for the gpio_dev_attr
>
> I'm still confused, gpio_dev_attr just contains an int and a bool:
I am talking about gpio.h file which is required for using
omap_gpio_dev_attr. If you are pointing out omap24xx.h file,
I am not sure. It was in the original code.
>
> +static struct omap_gpio_dev_attr gpio_dev_attr = {
> + ? ? ? .bank_width = 32,
> + ? ? ? .dbck_flag = false,
> +};
>
>>
>>>
>>>>
>>>> ?#include "omap_hwmod_common_data.h"
>>>> @@ -38,6 +39,10 @@ static struct omap_hwmod omap2420_iva_hwmod;
>>>> ?static struct omap_hwmod omap2420_l3_main_hwmod;
>>>> ?static struct omap_hwmod omap2420_l4_core_hwmod;
>>>> ?static struct omap_hwmod omap2420_wd_timer2_hwmod;
>>>> +static struct omap_hwmod omap2420_gpio1_hwmod;
>>>> +static struct omap_hwmod omap2420_gpio2_hwmod;
>>>> +static struct omap_hwmod omap2420_gpio3_hwmod;
>>>> +static struct omap_hwmod omap2420_gpio4_hwmod;
>>>>
>>>> ?/* L3 -> ? ?L4_CORE interface */
>>>> ?static struct omap_hwmod_ocp_if omap2420_l3_main__l4_core = {
>>>> @@ -557,6 +562,224 @@ static struct omap_hwmod omap2420_i2c2_hwmod = {
>>>> ? ? ? ?.flags ? ? ? ? ?= HWMOD_16BIT_REG,
>>>> ?};
>>>>
>>>> +/* l4_wkup -> ? ?gpio1 */
>>>> +static struct omap_hwmod_addr_space omap2420_gpio1_addr_space[] = {
>>>> + ? ? ? {
>>>> + ? ? ? ? ? ? ? .pa_start ? ? ? = 0x48018000,
>>>> + ? ? ? ? ? ? ? .pa_end ? ? ? ? = 0x480181ff,
>>>> + ? ? ? ? ? ? ? .flags ? ? ? ? ?= ADDR_TYPE_RT
>>>> + ? ? ? },
>>>> +};
>>>> +
>>>> +static struct omap_hwmod_ocp_if omap2420_l4_wkup__gpio1 = {
>>>> + ? ? ? .master ? ? ? ? =&omap2420_l4_wkup_hwmod,
>>>> + ? ? ? .slave ? ? ? ? ?=&omap2420_gpio1_hwmod,
>>>> + ? ? ? .clk ? ? ? ? ? ?= "gpios_ick",
>>>> + ? ? ? .addr ? ? ? ? ? = omap2420_gpio1_addr_space,
>>>> + ? ? ? .addr_cnt ? ? ? = ARRAY_SIZE(omap2420_gpio1_addr_space),
>>>> + ? ? ? .user ? ? ? ? ? = OCP_USER_MPU | OCP_USER_SDMA,
>>>> +};
>>>> +
>>>> +/* l4_wkup -> ? ?gpio2 */
>>>> +static struct omap_hwmod_addr_space omap2420_gpio2_addr_space[] = {
>>>> + ? ? ? {
>>>> + ? ? ? ? ? ? ? .pa_start ? ? ? = 0x4801a000,
>>>> + ? ? ? ? ? ? ? .pa_end ? ? ? ? = 0x4801a1ff,
>>>> + ? ? ? ? ? ? ? .flags ? ? ? ? ?= ADDR_TYPE_RT
>>>> + ? ? ? },
>>>> +};
>>>> +
>>>> +static struct omap_hwmod_ocp_if omap2420_l4_wkup__gpio2 = {
>>>> + ? ? ? .master ? ? ? ? =&omap2420_l4_wkup_hwmod,
>>>> + ? ? ? .slave ? ? ? ? ?=&omap2420_gpio2_hwmod,
>>>> + ? ? ? .clk ? ? ? ? ? ?= "gpios_ick",
>>>> + ? ? ? .addr ? ? ? ? ? = omap2420_gpio2_addr_space,
>>>> + ? ? ? .addr_cnt ? ? ? = ARRAY_SIZE(omap2420_gpio2_addr_space),
>>>> + ? ? ? .user ? ? ? ? ? = OCP_USER_MPU | OCP_USER_SDMA,
>>>> +};
>>>> +
>>>> +/* l4_wkup -> ? ?gpio3 */
>>>> +static struct omap_hwmod_addr_space omap2420_gpio3_addr_space[] = {
>>>> + ? ? ? {
>>>> + ? ? ? ? ? ? ? .pa_start ? ? ? = 0x4801c000,
>>>> + ? ? ? ? ? ? ? .pa_end ? ? ? ? = 0x4801c1ff,
>>>> + ? ? ? ? ? ? ? .flags ? ? ? ? ?= ADDR_TYPE_RT
>>>> + ? ? ? },
>>>> +};
>>>> +
>>>> +static struct omap_hwmod_ocp_if omap2420_l4_wkup__gpio3 = {
>>>> + ? ? ? .master ? ? ? ? =&omap2420_l4_wkup_hwmod,
>>>> + ? ? ? .slave ? ? ? ? ?=&omap2420_gpio3_hwmod,
>>>> + ? ? ? .clk ? ? ? ? ? ?= "gpios_ick",
>>>> + ? ? ? .addr ? ? ? ? ? = omap2420_gpio3_addr_space,
>>>> + ? ? ? .addr_cnt ? ? ? = ARRAY_SIZE(omap2420_gpio3_addr_space),
>>>> + ? ? ? .user ? ? ? ? ? = OCP_USER_MPU | OCP_USER_SDMA,
>>>> +};
>>>> +
>>>> +/* l4_wkup -> ? ?gpio4 */
>>>> +static struct omap_hwmod_addr_space omap2420_gpio4_addr_space[] = {
>>>> + ? ? ? {
>>>> + ? ? ? ? ? ? ? .pa_start ? ? ? = 0x4801e000,
>>>> + ? ? ? ? ? ? ? .pa_end ? ? ? ? = 0x4801e1ff,
>>>> + ? ? ? ? ? ? ? .flags ? ? ? ? ?= ADDR_TYPE_RT
>>>> + ? ? ? },
>>>> +};
>>>> +
>>>> +static struct omap_hwmod_ocp_if omap2420_l4_wkup__gpio4 = {
>>>> + ? ? ? .master ? ? ? ? =&omap2420_l4_wkup_hwmod,
>>>> + ? ? ? .slave ? ? ? ? ?=&omap2420_gpio4_hwmod,
>>>> + ? ? ? .clk ? ? ? ? ? ?= "gpios_ick",
>>>> + ? ? ? .addr ? ? ? ? ? = omap2420_gpio4_addr_space,
>>>> + ? ? ? .addr_cnt ? ? ? = ARRAY_SIZE(omap2420_gpio4_addr_space),
>>>> + ? ? ? .user ? ? ? ? ? = OCP_USER_MPU | OCP_USER_SDMA,
>>>> +};
>>>> +
>>>> +/* gpio dev_attr */
>>>> +static struct omap_gpio_dev_attr gpio_dev_attr = {
>>>> + ? ? ? .bank_width = 32,
>>>> + ? ? ? .dbck_flag = false,
>>>> +};
>>>> +
>>
>> <<snip>>
>>
>>>> ?};
>>>>
>>>> diff --git a/arch/arm/plat-omap/include/plat/gpio.h
>>>> b/arch/arm/plat-omap/include/plat/gpio.h
>>>
>>> That change should not necessarily be there, it is not directly related
>>> to
>>> the subject.
>>>
>>> Maybe that should be in an extra patch just before that one.
>>
>> I merged these two patches because of a comment to introduce
>> new variables/structures only in the patch where they are used.
>> Since "omap_gpio_dev_attr" is being used by hwmod DB I merged
>> these two patches. Do you think that hwmod DB patches should not
>> be merged with other patches?
>>
> Not necessarily, maybe you can just update the changelog and the subject
> to indicate that you add a new structure as well in this patch.
Okay. I will do that.
>>>
>>> Beside these 2 minor comments, that patch seems good to me.
>>>
>>> Almost-acked-by: Benoit Cousson<b-cousson@ti.com>
>>
>> Thanks.
>>
>>>
>>> Regards,
>>> Benoit
>>>
>>>> index 5bef86d..24892a6 100644
>>>> --- a/arch/arm/plat-omap/include/plat/gpio.h
>>>> +++ b/arch/arm/plat-omap/include/plat/gpio.h
>>>> @@ -79,6 +79,11 @@
>>>> ?#define METHOD_GPIO_24XX ? ? ?5
>>>> ?#define METHOD_GPIO_44XX ? ? ?6
>>>>
>>>> +struct omap_gpio_dev_attr {
>>>> + ? ? ? int bank_width; ? ? ? ? /* GPIO bank width */
>>>> + ? ? ? bool dbck_flag; ? ? ? ? /* dbck required or not - True for
>>>> OMAP3&4
>>>> */
>>>> +};
>>>> +
>>>> ?struct omap_gpio_platform_data {
>>>> ? ? ? ?u16 virtual_irq_start;
>>>> ? ? ? ?int bank_type;
>>>
>>>
>
>
^ permalink raw reply [flat|nested] 29+ messages in thread* [PATCH v7 05/11] OMAP2420: hwmod data: Add GPIO
2010-11-25 8:31 ` Varadarajan, Charulatha
@ 2010-11-25 9:33 ` Varadarajan, Charulatha
0 siblings, 0 replies; 29+ messages in thread
From: Varadarajan, Charulatha @ 2010-11-25 9:33 UTC (permalink / raw)
To: linux-arm-kernel
On Thu, Nov 25, 2010 at 14:01, Varadarajan, Charulatha <charu@ti.com> wrote:
> On Thu, Nov 25, 2010 at 13:32, Cousson, Benoit <b-cousson@ti.com> wrote:
>> On 11/25/2010 5:36 AM, Varadarajan, Charulatha wrote:
>>>
>>> Benoit,
>>>
>>> On Thu, Nov 25, 2010 at 03:43, Cousson, Benoit<b-cousson@ti.com> ?wrote:
>>>>
>>>> On 11/23/2010 3:56 PM, Varadarajan, Charulatha wrote:
>>>>>
>>>>> Add GPIO hwmod data for OMAP2420
>>>>>
>>>>> Signed-off-by: Charulatha V<charu@ti.com>
>>>>> ---
>>>>> ?arch/arm/mach-omap2/omap_hwmod_2420_data.c | ?229
>>>>> ++++++++++++++++++++++++++++
>>>>> ?arch/arm/plat-omap/include/plat/gpio.h ? ? | ? ?5 +
>>>>> ?2 files changed, 234 insertions(+), 0 deletions(-)
>>>>>
>>>>> diff --git a/arch/arm/mach-omap2/omap_hwmod_2420_data.c
>>>>> b/arch/arm/mach-omap2/omap_hwmod_2420_data.c
>>>>> index a1a3dd6..c951061 100644
>>>>> --- a/arch/arm/mach-omap2/omap_hwmod_2420_data.c
>>>>> +++ b/arch/arm/mach-omap2/omap_hwmod_2420_data.c
>>>>> @@ -17,6 +17,7 @@
>>>>> ?#include<plat/dma.h>
>>>>> ?#include<plat/serial.h>
>>>>> ?#include<plat/i2c.h>
>>>>> +#include<plat/gpio.h>
>>>>> ?#include<plat/omap24xx.h>
>>>>
>>>> Do you still need that header file?
>>>
>>> Yes, for the gpio_dev_attr
>>
>> I'm still confused, gpio_dev_attr just contains an int and a bool:
>
> I am talking about gpio.h file which is required for using
> omap_gpio_dev_attr. If you are pointing out omap24xx.h file,
> I am not sure. It was in the original code.
Okay. I checked. omap24xx.h file is no more required here
and I am deleting this header include from this file. Same for
OMAP2430 and OMAP3xxx hwmod database files too.
-V Charulatha
^ permalink raw reply [flat|nested] 29+ messages in thread
* [PATCH v7 06/11] OMAP2430: hwmod data: Add GPIO
2010-11-23 14:56 [PATCH v7 00/11] OMAP: GPIO: Implement GPIO as a platform device Varadarajan, Charulatha
` (4 preceding siblings ...)
2010-11-23 14:56 ` [PATCH v7 05/11] OMAP2420: hwmod data: Add GPIO Varadarajan, Charulatha
@ 2010-11-23 14:56 ` Varadarajan, Charulatha
2010-11-24 22:42 ` Cousson, Benoit
2010-11-23 14:56 ` [PATCH v7 07/11] OMAP3: " Varadarajan, Charulatha
` (5 subsequent siblings)
11 siblings, 1 reply; 29+ messages in thread
From: Varadarajan, Charulatha @ 2010-11-23 14:56 UTC (permalink / raw)
To: linux-arm-kernel
Add GPIO hwmod data for OMAP2430
Signed-off-by: Charulatha V <charu@ti.com>
---
arch/arm/mach-omap2/omap_hwmod_2430_data.c | 279 ++++++++++++++++++++++++++++
1 files changed, 279 insertions(+), 0 deletions(-)
diff --git a/arch/arm/mach-omap2/omap_hwmod_2430_data.c b/arch/arm/mach-omap2/omap_hwmod_2430_data.c
index 7cf0d3a..397471c 100644
--- a/arch/arm/mach-omap2/omap_hwmod_2430_data.c
+++ b/arch/arm/mach-omap2/omap_hwmod_2430_data.c
@@ -17,6 +17,7 @@
#include <plat/dma.h>
#include <plat/serial.h>
#include <plat/i2c.h>
+#include <plat/gpio.h>
#include <plat/omap24xx.h>
#include "omap_hwmod_common_data.h"
@@ -38,6 +39,11 @@ static struct omap_hwmod omap2430_iva_hwmod;
static struct omap_hwmod omap2430_l3_main_hwmod;
static struct omap_hwmod omap2430_l4_core_hwmod;
static struct omap_hwmod omap2430_wd_timer2_hwmod;
+static struct omap_hwmod omap2430_gpio1_hwmod;
+static struct omap_hwmod omap2430_gpio2_hwmod;
+static struct omap_hwmod omap2430_gpio3_hwmod;
+static struct omap_hwmod omap2430_gpio4_hwmod;
+static struct omap_hwmod omap2430_gpio5_hwmod;
/* L3 -> L4_CORE interface */
static struct omap_hwmod_ocp_if omap2430_l3_main__l4_core = {
@@ -569,6 +575,272 @@ static struct omap_hwmod omap2430_i2c2_hwmod = {
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
};
+/* l4_wkup -> gpio1 */
+static struct omap_hwmod_addr_space omap2430_gpio1_addr_space[] = {
+ {
+ .pa_start = 0x4900C000,
+ .pa_end = 0x4900C1ff,
+ .flags = ADDR_TYPE_RT
+ },
+};
+
+static struct omap_hwmod_ocp_if omap2430_l4_wkup__gpio1 = {
+ .master = &omap2430_l4_wkup_hwmod,
+ .slave = &omap2430_gpio1_hwmod,
+ .clk = "gpios_ick",
+ .addr = omap2430_gpio1_addr_space,
+ .addr_cnt = ARRAY_SIZE(omap2430_gpio1_addr_space),
+ .user = OCP_USER_MPU | OCP_USER_SDMA,
+};
+
+/* l4_wkup -> gpio2 */
+static struct omap_hwmod_addr_space omap2430_gpio2_addr_space[] = {
+ {
+ .pa_start = 0x4900E000,
+ .pa_end = 0x4900E1ff,
+ .flags = ADDR_TYPE_RT
+ },
+};
+
+static struct omap_hwmod_ocp_if omap2430_l4_wkup__gpio2 = {
+ .master = &omap2430_l4_wkup_hwmod,
+ .slave = &omap2430_gpio2_hwmod,
+ .clk = "gpios_ick",
+ .addr = omap2430_gpio2_addr_space,
+ .addr_cnt = ARRAY_SIZE(omap2430_gpio2_addr_space),
+ .user = OCP_USER_MPU | OCP_USER_SDMA,
+};
+
+/* l4_wkup -> gpio3 */
+static struct omap_hwmod_addr_space omap2430_gpio3_addr_space[] = {
+ {
+ .pa_start = 0x49010000,
+ .pa_end = 0x490101ff,
+ .flags = ADDR_TYPE_RT
+ },
+};
+
+static struct omap_hwmod_ocp_if omap2430_l4_wkup__gpio3 = {
+ .master = &omap2430_l4_wkup_hwmod,
+ .slave = &omap2430_gpio3_hwmod,
+ .clk = "gpios_ick",
+ .addr = omap2430_gpio3_addr_space,
+ .addr_cnt = ARRAY_SIZE(omap2430_gpio3_addr_space),
+ .user = OCP_USER_MPU | OCP_USER_SDMA,
+};
+
+/* l4_wkup -> gpio4 */
+static struct omap_hwmod_addr_space omap2430_gpio4_addr_space[] = {
+ {
+ .pa_start = 0x49012000,
+ .pa_end = 0x490121ff,
+ .flags = ADDR_TYPE_RT
+ },
+};
+
+static struct omap_hwmod_ocp_if omap2430_l4_wkup__gpio4 = {
+ .master = &omap2430_l4_wkup_hwmod,
+ .slave = &omap2430_gpio4_hwmod,
+ .clk = "gpios_ick",
+ .addr = omap2430_gpio4_addr_space,
+ .addr_cnt = ARRAY_SIZE(omap2430_gpio4_addr_space),
+ .user = OCP_USER_MPU | OCP_USER_SDMA,
+};
+
+/* l4_core -> gpio5 */
+static struct omap_hwmod_addr_space omap2430_gpio5_addr_space[] = {
+ {
+ .pa_start = 0x480B6000,
+ .pa_end = 0x480B61ff,
+ .flags = ADDR_TYPE_RT
+ },
+};
+
+static struct omap_hwmod_ocp_if omap2430_l4_core__gpio5 = {
+ .master = &omap2430_l4_core_hwmod,
+ .slave = &omap2430_gpio5_hwmod,
+ .clk = "gpio5_ick",
+ .addr = omap2430_gpio5_addr_space,
+ .addr_cnt = ARRAY_SIZE(omap2430_gpio5_addr_space),
+ .user = OCP_USER_MPU | OCP_USER_SDMA,
+};
+
+/* gpio dev_attr */
+static struct omap_gpio_dev_attr gpio_dev_attr = {
+ .bank_width = 32,
+ .dbck_flag = false,
+};
+
+static struct omap_hwmod_class_sysconfig omap243x_gpio_sysc = {
+ .rev_offs = 0x0000,
+ .sysc_offs = 0x0010,
+ .syss_offs = 0x0014,
+ .sysc_flags = (SYSC_HAS_ENAWAKEUP | SYSC_HAS_SIDLEMODE |
+ SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE),
+ .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
+ .sysc_fields = &omap_hwmod_sysc_type1,
+};
+
+/*
+ * 'gpio' class
+ * general purpose io module
+ */
+static struct omap_hwmod_class omap243x_gpio_hwmod_class = {
+ .name = "gpio",
+ .sysc = &omap243x_gpio_sysc,
+ .rev = 0,
+};
+
+/* gpio1 */
+static struct omap_hwmod_irq_info omap243x_gpio1_irqs[] = {
+ { .name = "gpio_mpu_irq", .irq = 29 }, /* INT_24XX_GPIO_BANK1 */
+};
+
+static struct omap_hwmod_ocp_if *omap2430_gpio1_slaves[] = {
+ &omap2430_l4_wkup__gpio1,
+};
+
+static struct omap_hwmod omap2430_gpio1_hwmod = {
+ .name = "gpio1",
+ .mpu_irqs = omap243x_gpio1_irqs,
+ .mpu_irqs_cnt = ARRAY_SIZE(omap243x_gpio1_irqs),
+ .main_clk = "gpios_fck",
+ .prcm = {
+ .omap2 = {
+ .prcm_reg_id = 1,
+ .module_bit = OMAP24XX_EN_GPIOS_SHIFT,
+ .module_offs = WKUP_MOD,
+ .idlest_reg_id = 1,
+ .idlest_idle_bit = OMAP24XX_EN_GPIOS_SHIFT,
+ },
+ },
+ .slaves = omap2430_gpio1_slaves,
+ .slaves_cnt = ARRAY_SIZE(omap2430_gpio1_slaves),
+ .class = &omap243x_gpio_hwmod_class,
+ .dev_attr = &gpio_dev_attr,
+ .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
+};
+
+/* gpio2 */
+static struct omap_hwmod_irq_info omap243x_gpio2_irqs[] = {
+ { .name = "gpio_mpu_irq", .irq = 30 }, /* INT_24XX_GPIO_BANK2 */
+};
+
+static struct omap_hwmod_ocp_if *omap2430_gpio2_slaves[] = {
+ &omap2430_l4_wkup__gpio2,
+};
+
+static struct omap_hwmod omap2430_gpio2_hwmod = {
+ .name = "gpio2",
+ .mpu_irqs = omap243x_gpio2_irqs,
+ .mpu_irqs_cnt = ARRAY_SIZE(omap243x_gpio2_irqs),
+ .main_clk = "gpios_fck",
+ .prcm = {
+ .omap2 = {
+ .prcm_reg_id = 1,
+ .module_bit = OMAP24XX_EN_GPIOS_SHIFT,
+ .module_offs = WKUP_MOD,
+ .idlest_reg_id = 1,
+ .idlest_idle_bit = OMAP24XX_ST_GPIOS_SHIFT,
+ },
+ },
+ .slaves = omap2430_gpio2_slaves,
+ .slaves_cnt = ARRAY_SIZE(omap2430_gpio2_slaves),
+ .class = &omap243x_gpio_hwmod_class,
+ .dev_attr = &gpio_dev_attr,
+ .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
+};
+
+/* gpio3 */
+static struct omap_hwmod_irq_info omap243x_gpio3_irqs[] = {
+ { .name = "gpio_mpu_irq", .irq = 31 }, /* INT_24XX_GPIO_BANK3 */
+};
+
+static struct omap_hwmod_ocp_if *omap2430_gpio3_slaves[] = {
+ &omap2430_l4_wkup__gpio3,
+};
+
+static struct omap_hwmod omap2430_gpio3_hwmod = {
+ .name = "gpio3",
+ .mpu_irqs = omap243x_gpio3_irqs,
+ .mpu_irqs_cnt = ARRAY_SIZE(omap243x_gpio3_irqs),
+ .main_clk = "gpios_fck",
+ .prcm = {
+ .omap2 = {
+ .prcm_reg_id = 1,
+ .module_bit = OMAP24XX_EN_GPIOS_SHIFT,
+ .module_offs = WKUP_MOD,
+ .idlest_reg_id = 1,
+ .idlest_idle_bit = OMAP24XX_ST_GPIOS_SHIFT,
+ },
+ },
+ .slaves = omap2430_gpio3_slaves,
+ .slaves_cnt = ARRAY_SIZE(omap2430_gpio3_slaves),
+ .class = &omap243x_gpio_hwmod_class,
+ .dev_attr = &gpio_dev_attr,
+ .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
+};
+
+/* gpio4 */
+static struct omap_hwmod_irq_info omap243x_gpio4_irqs[] = {
+ { .name = "gpio_mpu_irq", .irq = 32 }, /* INT_24XX_GPIO_BANK4 */
+};
+
+static struct omap_hwmod_ocp_if *omap2430_gpio4_slaves[] = {
+ &omap2430_l4_wkup__gpio4,
+};
+
+static struct omap_hwmod omap2430_gpio4_hwmod = {
+ .name = "gpio4",
+ .mpu_irqs = omap243x_gpio4_irqs,
+ .mpu_irqs_cnt = ARRAY_SIZE(omap243x_gpio4_irqs),
+ .main_clk = "gpios_fck",
+ .prcm = {
+ .omap2 = {
+ .prcm_reg_id = 1,
+ .module_bit = OMAP24XX_EN_GPIOS_SHIFT,
+ .module_offs = WKUP_MOD,
+ .idlest_reg_id = 1,
+ .idlest_idle_bit = OMAP24XX_ST_GPIOS_SHIFT,
+ },
+ },
+ .slaves = omap2430_gpio4_slaves,
+ .slaves_cnt = ARRAY_SIZE(omap2430_gpio4_slaves),
+ .class = &omap243x_gpio_hwmod_class,
+ .dev_attr = &gpio_dev_attr,
+ .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
+};
+
+/* gpio5 */
+static struct omap_hwmod_irq_info omap243x_gpio5_irqs[] = {
+ { .name = "gpio_mpu_irq", .irq = 33 }, /* INT_24XX_GPIO_BANK5 */
+};
+
+static struct omap_hwmod_ocp_if *omap2430_gpio5_slaves[] = {
+ &omap2430_l4_core__gpio5,
+};
+
+static struct omap_hwmod omap2430_gpio5_hwmod = {
+ .name = "gpio5",
+ .mpu_irqs = omap243x_gpio5_irqs,
+ .mpu_irqs_cnt = ARRAY_SIZE(omap243x_gpio5_irqs),
+ .main_clk = "gpio5_fck",
+ .prcm = {
+ .omap2 = {
+ .prcm_reg_id = 2,
+ .module_bit = OMAP2430_EN_GPIO5_SHIFT,
+ .module_offs = CORE_MOD,
+ .idlest_reg_id = 2,
+ .idlest_idle_bit = OMAP2430_ST_GPIO5_SHIFT,
+ },
+ },
+ .slaves = omap2430_gpio5_slaves,
+ .slaves_cnt = ARRAY_SIZE(omap2430_gpio5_slaves),
+ .class = &omap243x_gpio_hwmod_class,
+ .dev_attr = &gpio_dev_attr,
+ .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
+};
+
static __initdata struct omap_hwmod *omap2430_hwmods[] = {
&omap2430_l3_main_hwmod,
&omap2430_l4_core_hwmod,
@@ -581,6 +853,13 @@ static __initdata struct omap_hwmod *omap2430_hwmods[] = {
&omap2430_uart3_hwmod,
&omap2430_i2c1_hwmod,
&omap2430_i2c2_hwmod,
+
+ /* gpio class */
+ &omap2430_gpio1_hwmod,
+ &omap2430_gpio2_hwmod,
+ &omap2430_gpio3_hwmod,
+ &omap2430_gpio4_hwmod,
+ &omap2430_gpio5_hwmod,
NULL,
};
--
1.7.0.4
^ permalink raw reply related [flat|nested] 29+ messages in thread* [PATCH v7 06/11] OMAP2430: hwmod data: Add GPIO
2010-11-23 14:56 ` [PATCH v7 06/11] OMAP2430: " Varadarajan, Charulatha
@ 2010-11-24 22:42 ` Cousson, Benoit
0 siblings, 0 replies; 29+ messages in thread
From: Cousson, Benoit @ 2010-11-24 22:42 UTC (permalink / raw)
To: linux-arm-kernel
On 11/23/2010 3:56 PM, Varadarajan, Charulatha wrote:
> Add GPIO hwmod data for OMAP2430
>
> Signed-off-by: Charulatha V<charu@ti.com>
Acked-by: Benoit Cousson <b-cousson@ti.com>
> ---
> arch/arm/mach-omap2/omap_hwmod_2430_data.c | 279 ++++++++++++++++++++++++++++
> 1 files changed, 279 insertions(+), 0 deletions(-)
>
> diff --git a/arch/arm/mach-omap2/omap_hwmod_2430_data.c b/arch/arm/mach-omap2/omap_hwmod_2430_data.c
> index 7cf0d3a..397471c 100644
> --- a/arch/arm/mach-omap2/omap_hwmod_2430_data.c
> +++ b/arch/arm/mach-omap2/omap_hwmod_2430_data.c
> @@ -17,6 +17,7 @@
> #include<plat/dma.h>
> #include<plat/serial.h>
> #include<plat/i2c.h>
> +#include<plat/gpio.h>
> #include<plat/omap24xx.h>
Just check if that include is still needed.
Benoit
>
> #include "omap_hwmod_common_data.h"
> @@ -38,6 +39,11 @@ static struct omap_hwmod omap2430_iva_hwmod;
> static struct omap_hwmod omap2430_l3_main_hwmod;
> static struct omap_hwmod omap2430_l4_core_hwmod;
> static struct omap_hwmod omap2430_wd_timer2_hwmod;
> +static struct omap_hwmod omap2430_gpio1_hwmod;
> +static struct omap_hwmod omap2430_gpio2_hwmod;
> +static struct omap_hwmod omap2430_gpio3_hwmod;
> +static struct omap_hwmod omap2430_gpio4_hwmod;
> +static struct omap_hwmod omap2430_gpio5_hwmod;
>
> /* L3 -> L4_CORE interface */
> static struct omap_hwmod_ocp_if omap2430_l3_main__l4_core = {
> @@ -569,6 +575,272 @@ static struct omap_hwmod omap2430_i2c2_hwmod = {
> .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
> };
>
> +/* l4_wkup -> gpio1 */
> +static struct omap_hwmod_addr_space omap2430_gpio1_addr_space[] = {
> + {
> + .pa_start = 0x4900C000,
> + .pa_end = 0x4900C1ff,
> + .flags = ADDR_TYPE_RT
> + },
> +};
> +
> +static struct omap_hwmod_ocp_if omap2430_l4_wkup__gpio1 = {
> + .master =&omap2430_l4_wkup_hwmod,
> + .slave =&omap2430_gpio1_hwmod,
> + .clk = "gpios_ick",
> + .addr = omap2430_gpio1_addr_space,
> + .addr_cnt = ARRAY_SIZE(omap2430_gpio1_addr_space),
> + .user = OCP_USER_MPU | OCP_USER_SDMA,
> +};
> +
> +/* l4_wkup -> gpio2 */
> +static struct omap_hwmod_addr_space omap2430_gpio2_addr_space[] = {
> + {
> + .pa_start = 0x4900E000,
> + .pa_end = 0x4900E1ff,
> + .flags = ADDR_TYPE_RT
> + },
> +};
> +
> +static struct omap_hwmod_ocp_if omap2430_l4_wkup__gpio2 = {
> + .master =&omap2430_l4_wkup_hwmod,
> + .slave =&omap2430_gpio2_hwmod,
> + .clk = "gpios_ick",
> + .addr = omap2430_gpio2_addr_space,
> + .addr_cnt = ARRAY_SIZE(omap2430_gpio2_addr_space),
> + .user = OCP_USER_MPU | OCP_USER_SDMA,
> +};
> +
> +/* l4_wkup -> gpio3 */
> +static struct omap_hwmod_addr_space omap2430_gpio3_addr_space[] = {
> + {
> + .pa_start = 0x49010000,
> + .pa_end = 0x490101ff,
> + .flags = ADDR_TYPE_RT
> + },
> +};
> +
> +static struct omap_hwmod_ocp_if omap2430_l4_wkup__gpio3 = {
> + .master =&omap2430_l4_wkup_hwmod,
> + .slave =&omap2430_gpio3_hwmod,
> + .clk = "gpios_ick",
> + .addr = omap2430_gpio3_addr_space,
> + .addr_cnt = ARRAY_SIZE(omap2430_gpio3_addr_space),
> + .user = OCP_USER_MPU | OCP_USER_SDMA,
> +};
> +
> +/* l4_wkup -> gpio4 */
> +static struct omap_hwmod_addr_space omap2430_gpio4_addr_space[] = {
> + {
> + .pa_start = 0x49012000,
> + .pa_end = 0x490121ff,
> + .flags = ADDR_TYPE_RT
> + },
> +};
> +
> +static struct omap_hwmod_ocp_if omap2430_l4_wkup__gpio4 = {
> + .master =&omap2430_l4_wkup_hwmod,
> + .slave =&omap2430_gpio4_hwmod,
> + .clk = "gpios_ick",
> + .addr = omap2430_gpio4_addr_space,
> + .addr_cnt = ARRAY_SIZE(omap2430_gpio4_addr_space),
> + .user = OCP_USER_MPU | OCP_USER_SDMA,
> +};
> +
> +/* l4_core -> gpio5 */
> +static struct omap_hwmod_addr_space omap2430_gpio5_addr_space[] = {
> + {
> + .pa_start = 0x480B6000,
> + .pa_end = 0x480B61ff,
> + .flags = ADDR_TYPE_RT
> + },
> +};
> +
> +static struct omap_hwmod_ocp_if omap2430_l4_core__gpio5 = {
> + .master =&omap2430_l4_core_hwmod,
> + .slave =&omap2430_gpio5_hwmod,
> + .clk = "gpio5_ick",
> + .addr = omap2430_gpio5_addr_space,
> + .addr_cnt = ARRAY_SIZE(omap2430_gpio5_addr_space),
> + .user = OCP_USER_MPU | OCP_USER_SDMA,
> +};
> +
> +/* gpio dev_attr */
> +static struct omap_gpio_dev_attr gpio_dev_attr = {
> + .bank_width = 32,
> + .dbck_flag = false,
> +};
> +
> +static struct omap_hwmod_class_sysconfig omap243x_gpio_sysc = {
> + .rev_offs = 0x0000,
> + .sysc_offs = 0x0010,
> + .syss_offs = 0x0014,
> + .sysc_flags = (SYSC_HAS_ENAWAKEUP | SYSC_HAS_SIDLEMODE |
> + SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE),
> + .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
> + .sysc_fields =&omap_hwmod_sysc_type1,
> +};
> +
> +/*
> + * 'gpio' class
> + * general purpose io module
> + */
> +static struct omap_hwmod_class omap243x_gpio_hwmod_class = {
> + .name = "gpio",
> + .sysc =&omap243x_gpio_sysc,
> + .rev = 0,
> +};
> +
> +/* gpio1 */
> +static struct omap_hwmod_irq_info omap243x_gpio1_irqs[] = {
> + { .name = "gpio_mpu_irq", .irq = 29 }, /* INT_24XX_GPIO_BANK1 */
> +};
> +
> +static struct omap_hwmod_ocp_if *omap2430_gpio1_slaves[] = {
> + &omap2430_l4_wkup__gpio1,
> +};
> +
> +static struct omap_hwmod omap2430_gpio1_hwmod = {
> + .name = "gpio1",
> + .mpu_irqs = omap243x_gpio1_irqs,
> + .mpu_irqs_cnt = ARRAY_SIZE(omap243x_gpio1_irqs),
> + .main_clk = "gpios_fck",
> + .prcm = {
> + .omap2 = {
> + .prcm_reg_id = 1,
> + .module_bit = OMAP24XX_EN_GPIOS_SHIFT,
> + .module_offs = WKUP_MOD,
> + .idlest_reg_id = 1,
> + .idlest_idle_bit = OMAP24XX_EN_GPIOS_SHIFT,
> + },
> + },
> + .slaves = omap2430_gpio1_slaves,
> + .slaves_cnt = ARRAY_SIZE(omap2430_gpio1_slaves),
> + .class =&omap243x_gpio_hwmod_class,
> + .dev_attr =&gpio_dev_attr,
> + .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
> +};
> +
> +/* gpio2 */
> +static struct omap_hwmod_irq_info omap243x_gpio2_irqs[] = {
> + { .name = "gpio_mpu_irq", .irq = 30 }, /* INT_24XX_GPIO_BANK2 */
> +};
> +
> +static struct omap_hwmod_ocp_if *omap2430_gpio2_slaves[] = {
> + &omap2430_l4_wkup__gpio2,
> +};
> +
> +static struct omap_hwmod omap2430_gpio2_hwmod = {
> + .name = "gpio2",
> + .mpu_irqs = omap243x_gpio2_irqs,
> + .mpu_irqs_cnt = ARRAY_SIZE(omap243x_gpio2_irqs),
> + .main_clk = "gpios_fck",
> + .prcm = {
> + .omap2 = {
> + .prcm_reg_id = 1,
> + .module_bit = OMAP24XX_EN_GPIOS_SHIFT,
> + .module_offs = WKUP_MOD,
> + .idlest_reg_id = 1,
> + .idlest_idle_bit = OMAP24XX_ST_GPIOS_SHIFT,
> + },
> + },
> + .slaves = omap2430_gpio2_slaves,
> + .slaves_cnt = ARRAY_SIZE(omap2430_gpio2_slaves),
> + .class =&omap243x_gpio_hwmod_class,
> + .dev_attr =&gpio_dev_attr,
> + .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
> +};
> +
> +/* gpio3 */
> +static struct omap_hwmod_irq_info omap243x_gpio3_irqs[] = {
> + { .name = "gpio_mpu_irq", .irq = 31 }, /* INT_24XX_GPIO_BANK3 */
> +};
> +
> +static struct omap_hwmod_ocp_if *omap2430_gpio3_slaves[] = {
> + &omap2430_l4_wkup__gpio3,
> +};
> +
> +static struct omap_hwmod omap2430_gpio3_hwmod = {
> + .name = "gpio3",
> + .mpu_irqs = omap243x_gpio3_irqs,
> + .mpu_irqs_cnt = ARRAY_SIZE(omap243x_gpio3_irqs),
> + .main_clk = "gpios_fck",
> + .prcm = {
> + .omap2 = {
> + .prcm_reg_id = 1,
> + .module_bit = OMAP24XX_EN_GPIOS_SHIFT,
> + .module_offs = WKUP_MOD,
> + .idlest_reg_id = 1,
> + .idlest_idle_bit = OMAP24XX_ST_GPIOS_SHIFT,
> + },
> + },
> + .slaves = omap2430_gpio3_slaves,
> + .slaves_cnt = ARRAY_SIZE(omap2430_gpio3_slaves),
> + .class =&omap243x_gpio_hwmod_class,
> + .dev_attr =&gpio_dev_attr,
> + .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
> +};
> +
> +/* gpio4 */
> +static struct omap_hwmod_irq_info omap243x_gpio4_irqs[] = {
> + { .name = "gpio_mpu_irq", .irq = 32 }, /* INT_24XX_GPIO_BANK4 */
> +};
> +
> +static struct omap_hwmod_ocp_if *omap2430_gpio4_slaves[] = {
> + &omap2430_l4_wkup__gpio4,
> +};
> +
> +static struct omap_hwmod omap2430_gpio4_hwmod = {
> + .name = "gpio4",
> + .mpu_irqs = omap243x_gpio4_irqs,
> + .mpu_irqs_cnt = ARRAY_SIZE(omap243x_gpio4_irqs),
> + .main_clk = "gpios_fck",
> + .prcm = {
> + .omap2 = {
> + .prcm_reg_id = 1,
> + .module_bit = OMAP24XX_EN_GPIOS_SHIFT,
> + .module_offs = WKUP_MOD,
> + .idlest_reg_id = 1,
> + .idlest_idle_bit = OMAP24XX_ST_GPIOS_SHIFT,
> + },
> + },
> + .slaves = omap2430_gpio4_slaves,
> + .slaves_cnt = ARRAY_SIZE(omap2430_gpio4_slaves),
> + .class =&omap243x_gpio_hwmod_class,
> + .dev_attr =&gpio_dev_attr,
> + .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
> +};
> +
> +/* gpio5 */
> +static struct omap_hwmod_irq_info omap243x_gpio5_irqs[] = {
> + { .name = "gpio_mpu_irq", .irq = 33 }, /* INT_24XX_GPIO_BANK5 */
> +};
> +
> +static struct omap_hwmod_ocp_if *omap2430_gpio5_slaves[] = {
> + &omap2430_l4_core__gpio5,
> +};
> +
> +static struct omap_hwmod omap2430_gpio5_hwmod = {
> + .name = "gpio5",
> + .mpu_irqs = omap243x_gpio5_irqs,
> + .mpu_irqs_cnt = ARRAY_SIZE(omap243x_gpio5_irqs),
> + .main_clk = "gpio5_fck",
> + .prcm = {
> + .omap2 = {
> + .prcm_reg_id = 2,
> + .module_bit = OMAP2430_EN_GPIO5_SHIFT,
> + .module_offs = CORE_MOD,
> + .idlest_reg_id = 2,
> + .idlest_idle_bit = OMAP2430_ST_GPIO5_SHIFT,
> + },
> + },
> + .slaves = omap2430_gpio5_slaves,
> + .slaves_cnt = ARRAY_SIZE(omap2430_gpio5_slaves),
> + .class =&omap243x_gpio_hwmod_class,
> + .dev_attr =&gpio_dev_attr,
> + .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP2430),
> +};
> +
> static __initdata struct omap_hwmod *omap2430_hwmods[] = {
> &omap2430_l3_main_hwmod,
> &omap2430_l4_core_hwmod,
> @@ -581,6 +853,13 @@ static __initdata struct omap_hwmod *omap2430_hwmods[] = {
> &omap2430_uart3_hwmod,
> &omap2430_i2c1_hwmod,
> &omap2430_i2c2_hwmod,
> +
> + /* gpio class */
> + &omap2430_gpio1_hwmod,
> + &omap2430_gpio2_hwmod,
> + &omap2430_gpio3_hwmod,
> + &omap2430_gpio4_hwmod,
> + &omap2430_gpio5_hwmod,
> NULL,
> };
>
^ permalink raw reply [flat|nested] 29+ messages in thread
* [PATCH v7 07/11] OMAP3: hwmod data: Add GPIO
2010-11-23 14:56 [PATCH v7 00/11] OMAP: GPIO: Implement GPIO as a platform device Varadarajan, Charulatha
` (5 preceding siblings ...)
2010-11-23 14:56 ` [PATCH v7 06/11] OMAP2430: " Varadarajan, Charulatha
@ 2010-11-23 14:56 ` Varadarajan, Charulatha
2010-11-24 22:51 ` Cousson, Benoit
2010-11-23 14:56 ` [PATCH v7 08/11] OMAP4: " Varadarajan, Charulatha
` (4 subsequent siblings)
11 siblings, 1 reply; 29+ messages in thread
From: Varadarajan, Charulatha @ 2010-11-23 14:56 UTC (permalink / raw)
To: linux-arm-kernel
Add GPIO hwmod data for OMAP3
Signed-off-by: Charulatha V <charu@ti.com>
Signed-off-by: Rajendra Nayak <rnayak@ti.com>
---
arch/arm/mach-omap2/omap_hwmod_3xxx_data.c | 360 ++++++++++++++++++++++++++++
1 files changed, 360 insertions(+), 0 deletions(-)
diff --git a/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c b/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c
index a8bed84..9ca2206 100644
--- a/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c
+++ b/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c
@@ -20,6 +20,7 @@
#include <plat/serial.h>
#include <plat/l4_3xxx.h>
#include <plat/i2c.h>
+#include <plat/gpio.h>
#include <plat/omap34xx.h>
#include "omap_hwmod_common_data.h"
@@ -45,6 +46,12 @@ static struct omap_hwmod omap3xxx_wd_timer2_hwmod;
static struct omap_hwmod omap3xxx_i2c1_hwmod;
static struct omap_hwmod omap3xxx_i2c2_hwmod;
static struct omap_hwmod omap3xxx_i2c3_hwmod;
+static struct omap_hwmod omap3xxx_gpio1_hwmod;
+static struct omap_hwmod omap3xxx_gpio2_hwmod;
+static struct omap_hwmod omap3xxx_gpio3_hwmod;
+static struct omap_hwmod omap3xxx_gpio4_hwmod;
+static struct omap_hwmod omap3xxx_gpio5_hwmod;
+static struct omap_hwmod omap3xxx_gpio6_hwmod;
/* L3 -> L4_CORE interface */
static struct omap_hwmod_ocp_if omap3xxx_l3_main__l4_core = {
@@ -739,6 +746,351 @@ static struct omap_hwmod omap3xxx_i2c3_hwmod = {
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
};
+/* l4_wkup -> gpio1 */
+static struct omap_hwmod_addr_space omap3xxx_gpio1_addrs[] = {
+ {
+ .pa_start = 0x48310000,
+ .pa_end = 0x483101ff,
+ .flags = ADDR_TYPE_RT
+ },
+};
+
+static struct omap_hwmod_ocp_if omap3xxx_l4_wkup__gpio1 = {
+ .master = &omap3xxx_l4_wkup_hwmod,
+ .slave = &omap3xxx_gpio1_hwmod,
+ .addr = omap3xxx_gpio1_addrs,
+ .addr_cnt = ARRAY_SIZE(omap3xxx_gpio1_addrs),
+ .user = OCP_USER_MPU | OCP_USER_SDMA,
+};
+
+/* l4_per -> gpio2 */
+static struct omap_hwmod_addr_space omap3xxx_gpio2_addrs[] = {
+ {
+ .pa_start = 0x49050000,
+ .pa_end = 0x490501ff,
+ .flags = ADDR_TYPE_RT
+ },
+};
+
+static struct omap_hwmod_ocp_if omap3xxx_l4_per__gpio2 = {
+ .master = &omap3xxx_l4_per_hwmod,
+ .slave = &omap3xxx_gpio2_hwmod,
+ .addr = omap3xxx_gpio2_addrs,
+ .addr_cnt = ARRAY_SIZE(omap3xxx_gpio2_addrs),
+ .user = OCP_USER_MPU | OCP_USER_SDMA,
+};
+
+/* l4_per -> gpio3 */
+static struct omap_hwmod_addr_space omap3xxx_gpio3_addrs[] = {
+ {
+ .pa_start = 0x49052000,
+ .pa_end = 0x490521ff,
+ .flags = ADDR_TYPE_RT
+ },
+};
+
+static struct omap_hwmod_ocp_if omap3xxx_l4_per__gpio3 = {
+ .master = &omap3xxx_l4_per_hwmod,
+ .slave = &omap3xxx_gpio3_hwmod,
+ .addr = omap3xxx_gpio3_addrs,
+ .addr_cnt = ARRAY_SIZE(omap3xxx_gpio3_addrs),
+ .user = OCP_USER_MPU | OCP_USER_SDMA,
+};
+
+/* l4_per -> gpio4 */
+static struct omap_hwmod_addr_space omap3xxx_gpio4_addrs[] = {
+ {
+ .pa_start = 0x49054000,
+ .pa_end = 0x490541ff,
+ .flags = ADDR_TYPE_RT
+ },
+};
+
+static struct omap_hwmod_ocp_if omap3xxx_l4_per__gpio4 = {
+ .master = &omap3xxx_l4_per_hwmod,
+ .slave = &omap3xxx_gpio4_hwmod,
+ .addr = omap3xxx_gpio4_addrs,
+ .addr_cnt = ARRAY_SIZE(omap3xxx_gpio4_addrs),
+ .user = OCP_USER_MPU | OCP_USER_SDMA,
+};
+
+/* l4_per -> gpio5 */
+static struct omap_hwmod_addr_space omap3xxx_gpio5_addrs[] = {
+ {
+ .pa_start = 0x49056000,
+ .pa_end = 0x490561ff,
+ .flags = ADDR_TYPE_RT
+ },
+};
+
+static struct omap_hwmod_ocp_if omap3xxx_l4_per__gpio5 = {
+ .master = &omap3xxx_l4_per_hwmod,
+ .slave = &omap3xxx_gpio5_hwmod,
+ .addr = omap3xxx_gpio5_addrs,
+ .addr_cnt = ARRAY_SIZE(omap3xxx_gpio5_addrs),
+ .user = OCP_USER_MPU | OCP_USER_SDMA,
+};
+
+/* l4_per -> gpio6 */
+static struct omap_hwmod_addr_space omap3xxx_gpio6_addrs[] = {
+ {
+ .pa_start = 0x49058000,
+ .pa_end = 0x490581ff,
+ .flags = ADDR_TYPE_RT
+ },
+};
+
+static struct omap_hwmod_ocp_if omap3xxx_l4_per__gpio6 = {
+ .master = &omap3xxx_l4_per_hwmod,
+ .slave = &omap3xxx_gpio6_hwmod,
+ .addr = omap3xxx_gpio6_addrs,
+ .addr_cnt = ARRAY_SIZE(omap3xxx_gpio6_addrs),
+ .user = OCP_USER_MPU | OCP_USER_SDMA,
+};
+
+/*
+ * 'gpio' class
+ * general purpose io module
+ */
+
+static struct omap_hwmod_class_sysconfig omap3xxx_gpio_sysc = {
+ .rev_offs = 0x0000,
+ .sysc_offs = 0x0010,
+ .syss_offs = 0x0014,
+ .sysc_flags = (SYSC_HAS_ENAWAKEUP | SYSC_HAS_SIDLEMODE |
+ SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE),
+ .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
+ .sysc_fields = &omap_hwmod_sysc_type1,
+};
+
+static struct omap_hwmod_class omap3xxx_gpio_hwmod_class = {
+ .name = "gpio",
+ .sysc = &omap3xxx_gpio_sysc,
+ .rev = 1,
+};
+
+/* gpio_dev_attr*/
+static struct omap_gpio_dev_attr gpio_dev_attr = {
+ .bank_width = 32,
+ .dbck_flag = true,
+};
+
+/* gpio1 */
+static struct omap_hwmod_irq_info omap3xxx_gpio1_irqs[] = {
+ { .name = "gpio_mpu_irq", .irq = 29 }, /* INT_34XX_GPIO_BANK1 */
+};
+
+static struct omap_hwmod_opt_clk gpio1_opt_clks[] = {
+ { .role = "dbclk", .clk = "gpio1_dbck", },
+};
+
+static struct omap_hwmod_ocp_if *omap3xxx_gpio1_slaves[] = {
+ &omap3xxx_l4_wkup__gpio1,
+};
+
+static struct omap_hwmod omap3xxx_gpio1_hwmod = {
+ .name = "gpio1",
+ .mpu_irqs = omap3xxx_gpio1_irqs,
+ .mpu_irqs_cnt = ARRAY_SIZE(omap3xxx_gpio1_irqs),
+ .main_clk = "gpio1_ick",
+ .opt_clks = gpio1_opt_clks,
+ .opt_clks_cnt = ARRAY_SIZE(gpio1_opt_clks),
+ .prcm = {
+ .omap2 = {
+ .prcm_reg_id = 1,
+ .module_bit = OMAP3430_EN_GPIO1_SHIFT,
+ .module_offs = WKUP_MOD,
+ .idlest_reg_id = 1,
+ .idlest_idle_bit = OMAP3430_ST_GPIO1_SHIFT,
+ },
+ },
+ .slaves = omap3xxx_gpio1_slaves,
+ .slaves_cnt = ARRAY_SIZE(omap3xxx_gpio1_slaves),
+ .class = &omap3xxx_gpio_hwmod_class,
+ .dev_attr = &gpio_dev_attr,
+ .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
+};
+
+/* gpio2 */
+static struct omap_hwmod_irq_info omap3xxx_gpio2_irqs[] = {
+ { .name = "gpio_mpu_irq", .irq = 30 }, /* INT_34XX_GPIO_BANK2 */
+};
+
+static struct omap_hwmod_opt_clk gpio2_opt_clks[] = {
+ { .role = "dbclk", .clk = "gpio2_dbck", },
+};
+
+static struct omap_hwmod_ocp_if *omap3xxx_gpio2_slaves[] = {
+ &omap3xxx_l4_per__gpio2,
+};
+
+static struct omap_hwmod omap3xxx_gpio2_hwmod = {
+ .name = "gpio2",
+ .mpu_irqs = omap3xxx_gpio2_irqs,
+ .mpu_irqs_cnt = ARRAY_SIZE(omap3xxx_gpio2_irqs),
+ .main_clk = "gpio2_ick",
+ .opt_clks = gpio2_opt_clks,
+ .opt_clks_cnt = ARRAY_SIZE(gpio2_opt_clks),
+ .prcm = {
+ .omap2 = {
+ .prcm_reg_id = 1,
+ .module_bit = OMAP3430_EN_GPIO2_SHIFT,
+ .module_offs = OMAP3430_PER_MOD,
+ .idlest_reg_id = 1,
+ .idlest_idle_bit = OMAP3430_ST_GPIO2_SHIFT,
+ },
+ },
+ .slaves = omap3xxx_gpio2_slaves,
+ .slaves_cnt = ARRAY_SIZE(omap3xxx_gpio2_slaves),
+ .class = &omap3xxx_gpio_hwmod_class,
+ .dev_attr = &gpio_dev_attr,
+ .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
+};
+
+/* gpio3 */
+static struct omap_hwmod_irq_info omap3xxx_gpio3_irqs[] = {
+ { .name = "gpio_mpu_irq", .irq = 31 }, /* INT_34XX_GPIO_BANK3 */
+};
+
+static struct omap_hwmod_opt_clk gpio3_opt_clks[] = {
+ { .role = "dbclk", .clk = "gpio3_dbck", },
+};
+
+static struct omap_hwmod_ocp_if *omap3xxx_gpio3_slaves[] = {
+ &omap3xxx_l4_per__gpio3,
+};
+
+static struct omap_hwmod omap3xxx_gpio3_hwmod = {
+ .name = "gpio3",
+ .mpu_irqs = omap3xxx_gpio3_irqs,
+ .mpu_irqs_cnt = ARRAY_SIZE(omap3xxx_gpio3_irqs),
+ .main_clk = "gpio3_ick",
+ .opt_clks = gpio3_opt_clks,
+ .opt_clks_cnt = ARRAY_SIZE(gpio3_opt_clks),
+ .prcm = {
+ .omap2 = {
+ .prcm_reg_id = 1,
+ .module_bit = OMAP3430_EN_GPIO3_SHIFT,
+ .module_offs = OMAP3430_PER_MOD,
+ .idlest_reg_id = 1,
+ .idlest_idle_bit = OMAP3430_ST_GPIO3_SHIFT,
+ },
+ },
+ .slaves = omap3xxx_gpio3_slaves,
+ .slaves_cnt = ARRAY_SIZE(omap3xxx_gpio3_slaves),
+ .class = &omap3xxx_gpio_hwmod_class,
+ .dev_attr = &gpio_dev_attr,
+ .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
+};
+
+/* gpio4 */
+static struct omap_hwmod_irq_info omap3xxx_gpio4_irqs[] = {
+ { .name = "gpio_mpu_irq", .irq = 32 }, /* INT_34XX_GPIO_BANK4 */
+};
+
+static struct omap_hwmod_opt_clk gpio4_opt_clks[] = {
+ { .role = "dbclk", .clk = "gpio4_dbck", },
+};
+
+static struct omap_hwmod_ocp_if *omap3xxx_gpio4_slaves[] = {
+ &omap3xxx_l4_per__gpio4,
+};
+
+static struct omap_hwmod omap3xxx_gpio4_hwmod = {
+ .name = "gpio4",
+ .mpu_irqs = omap3xxx_gpio4_irqs,
+ .mpu_irqs_cnt = ARRAY_SIZE(omap3xxx_gpio4_irqs),
+ .main_clk = "gpio4_ick",
+ .opt_clks = gpio4_opt_clks,
+ .opt_clks_cnt = ARRAY_SIZE(gpio4_opt_clks),
+ .prcm = {
+ .omap2 = {
+ .prcm_reg_id = 1,
+ .module_bit = OMAP3430_EN_GPIO4_SHIFT,
+ .module_offs = OMAP3430_PER_MOD,
+ .idlest_reg_id = 1,
+ .idlest_idle_bit = OMAP3430_ST_GPIO4_SHIFT,
+ },
+ },
+ .slaves = omap3xxx_gpio4_slaves,
+ .slaves_cnt = ARRAY_SIZE(omap3xxx_gpio4_slaves),
+ .class = &omap3xxx_gpio_hwmod_class,
+ .dev_attr = &gpio_dev_attr,
+ .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
+};
+
+/* gpio5 */
+static struct omap_hwmod_irq_info omap3xxx_gpio5_irqs[] = {
+ { .name = "gpio_mpu_irq", .irq = 33 }, /* INT_34XX_GPIO_BANK5 */
+};
+
+static struct omap_hwmod_opt_clk gpio5_opt_clks[] = {
+ { .role = "dbclk", .clk = "gpio5_dbck", },
+};
+
+static struct omap_hwmod_ocp_if *omap3xxx_gpio5_slaves[] = {
+ &omap3xxx_l4_per__gpio5,
+};
+
+static struct omap_hwmod omap3xxx_gpio5_hwmod = {
+ .name = "gpio5",
+ .mpu_irqs = omap3xxx_gpio5_irqs,
+ .mpu_irqs_cnt = ARRAY_SIZE(omap3xxx_gpio5_irqs),
+ .main_clk = "gpio5_ick",
+ .opt_clks = gpio5_opt_clks,
+ .opt_clks_cnt = ARRAY_SIZE(gpio5_opt_clks),
+ .prcm = {
+ .omap2 = {
+ .prcm_reg_id = 1,
+ .module_bit = OMAP3430_EN_GPIO5_SHIFT,
+ .module_offs = OMAP3430_PER_MOD,
+ .idlest_reg_id = 1,
+ .idlest_idle_bit = OMAP3430_ST_GPIO5_SHIFT,
+ },
+ },
+ .slaves = omap3xxx_gpio5_slaves,
+ .slaves_cnt = ARRAY_SIZE(omap3xxx_gpio5_slaves),
+ .class = &omap3xxx_gpio_hwmod_class,
+ .dev_attr = &gpio_dev_attr,
+ .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
+};
+
+/* gpio6 */
+static struct omap_hwmod_irq_info omap3xxx_gpio6_irqs[] = {
+ { .name = "gpio_mpu_irq", .irq = 34 }, /* INT_34XX_GPIO_BANK6 */
+};
+
+static struct omap_hwmod_opt_clk gpio6_opt_clks[] = {
+ { .role = "dbclk", .clk = "gpio6_dbck", },
+};
+
+static struct omap_hwmod_ocp_if *omap3xxx_gpio6_slaves[] = {
+ &omap3xxx_l4_per__gpio6,
+};
+
+static struct omap_hwmod omap3xxx_gpio6_hwmod = {
+ .name = "gpio6",
+ .mpu_irqs = omap3xxx_gpio6_irqs,
+ .mpu_irqs_cnt = ARRAY_SIZE(omap3xxx_gpio6_irqs),
+ .main_clk = "gpio6_ick",
+ .opt_clks = gpio6_opt_clks,
+ .opt_clks_cnt = ARRAY_SIZE(gpio6_opt_clks),
+ .prcm = {
+ .omap2 = {
+ .prcm_reg_id = 1,
+ .module_bit = OMAP3430_EN_GPIO6_SHIFT,
+ .module_offs = OMAP3430_PER_MOD,
+ .idlest_reg_id = 1,
+ .idlest_idle_bit = OMAP3430_ST_GPIO6_SHIFT,
+ },
+ },
+ .slaves = omap3xxx_gpio6_slaves,
+ .slaves_cnt = ARRAY_SIZE(omap3xxx_gpio6_slaves),
+ .class = &omap3xxx_gpio_hwmod_class,
+ .dev_attr = &gpio_dev_attr,
+ .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
+};
+
static __initdata struct omap_hwmod *omap3xxx_hwmods[] = {
&omap3xxx_l3_main_hwmod,
&omap3xxx_l4_core_hwmod,
@@ -754,6 +1106,14 @@ static __initdata struct omap_hwmod *omap3xxx_hwmods[] = {
&omap3xxx_i2c1_hwmod,
&omap3xxx_i2c2_hwmod,
&omap3xxx_i2c3_hwmod,
+
+ /* gpio class */
+ &omap3xxx_gpio1_hwmod,
+ &omap3xxx_gpio2_hwmod,
+ &omap3xxx_gpio3_hwmod,
+ &omap3xxx_gpio4_hwmod,
+ &omap3xxx_gpio5_hwmod,
+ &omap3xxx_gpio6_hwmod,
NULL,
};
--
1.7.0.4
^ permalink raw reply related [flat|nested] 29+ messages in thread* [PATCH v7 07/11] OMAP3: hwmod data: Add GPIO
2010-11-23 14:56 ` [PATCH v7 07/11] OMAP3: " Varadarajan, Charulatha
@ 2010-11-24 22:51 ` Cousson, Benoit
2010-11-25 4:37 ` Varadarajan, Charulatha
0 siblings, 1 reply; 29+ messages in thread
From: Cousson, Benoit @ 2010-11-24 22:51 UTC (permalink / raw)
To: linux-arm-kernel
On 11/23/2010 3:56 PM, Varadarajan, Charulatha wrote:
> Add GPIO hwmod data for OMAP3
>
> Signed-off-by: Charulatha V<charu@ti.com>
> Signed-off-by: Rajendra Nayak<rnayak@ti.com>
Acked-by: Benoit Cousson <b-cousson@ti.com>
> ---
> arch/arm/mach-omap2/omap_hwmod_3xxx_data.c | 360 ++++++++++++++++++++++++++++
> 1 files changed, 360 insertions(+), 0 deletions(-)
>
> diff --git a/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c b/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c
> index a8bed84..9ca2206 100644
> --- a/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c
> +++ b/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c
> @@ -20,6 +20,7 @@
> #include<plat/serial.h>
> #include<plat/l4_3xxx.h>
> #include<plat/i2c.h>
> +#include<plat/gpio.h>
> #include<plat/omap34xx.h>
>
> #include "omap_hwmod_common_data.h"
> @@ -45,6 +46,12 @@ static struct omap_hwmod omap3xxx_wd_timer2_hwmod;
> static struct omap_hwmod omap3xxx_i2c1_hwmod;
> static struct omap_hwmod omap3xxx_i2c2_hwmod;
> static struct omap_hwmod omap3xxx_i2c3_hwmod;
> +static struct omap_hwmod omap3xxx_gpio1_hwmod;
> +static struct omap_hwmod omap3xxx_gpio2_hwmod;
> +static struct omap_hwmod omap3xxx_gpio3_hwmod;
> +static struct omap_hwmod omap3xxx_gpio4_hwmod;
> +static struct omap_hwmod omap3xxx_gpio5_hwmod;
> +static struct omap_hwmod omap3xxx_gpio6_hwmod;
>
> /* L3 -> L4_CORE interface */
> static struct omap_hwmod_ocp_if omap3xxx_l3_main__l4_core = {
> @@ -739,6 +746,351 @@ static struct omap_hwmod omap3xxx_i2c3_hwmod = {
> .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP3430),
> };
>
> +/* l4_wkup -> gpio1 */
> +static struct omap_hwmod_addr_space omap3xxx_gpio1_addrs[] = {
> + {
> + .pa_start = 0x48310000,
> + .pa_end = 0x483101ff,
> + .flags = ADDR_TYPE_RT
> + },
> +};
> +
> +static struct omap_hwmod_ocp_if omap3xxx_l4_wkup__gpio1 = {
> + .master =&omap3xxx_l4_wkup_hwmod,
> + .slave =&omap3xxx_gpio1_hwmod,
> + .addr = omap3xxx_gpio1_addrs,
> + .addr_cnt = ARRAY_SIZE(omap3xxx_gpio1_addrs),
> + .user = OCP_USER_MPU | OCP_USER_SDMA,
> +};
> +
> +/* l4_per -> gpio2 */
> +static struct omap_hwmod_addr_space omap3xxx_gpio2_addrs[] = {
> + {
> + .pa_start = 0x49050000,
> + .pa_end = 0x490501ff,
> + .flags = ADDR_TYPE_RT
> + },
> +};
> +
> +static struct omap_hwmod_ocp_if omap3xxx_l4_per__gpio2 = {
> + .master =&omap3xxx_l4_per_hwmod,
> + .slave =&omap3xxx_gpio2_hwmod,
> + .addr = omap3xxx_gpio2_addrs,
> + .addr_cnt = ARRAY_SIZE(omap3xxx_gpio2_addrs),
> + .user = OCP_USER_MPU | OCP_USER_SDMA,
> +};
> +
> +/* l4_per -> gpio3 */
> +static struct omap_hwmod_addr_space omap3xxx_gpio3_addrs[] = {
> + {
> + .pa_start = 0x49052000,
> + .pa_end = 0x490521ff,
> + .flags = ADDR_TYPE_RT
> + },
> +};
> +
> +static struct omap_hwmod_ocp_if omap3xxx_l4_per__gpio3 = {
> + .master =&omap3xxx_l4_per_hwmod,
> + .slave =&omap3xxx_gpio3_hwmod,
> + .addr = omap3xxx_gpio3_addrs,
> + .addr_cnt = ARRAY_SIZE(omap3xxx_gpio3_addrs),
> + .user = OCP_USER_MPU | OCP_USER_SDMA,
> +};
> +
> +/* l4_per -> gpio4 */
> +static struct omap_hwmod_addr_space omap3xxx_gpio4_addrs[] = {
> + {
> + .pa_start = 0x49054000,
> + .pa_end = 0x490541ff,
> + .flags = ADDR_TYPE_RT
> + },
> +};
> +
> +static struct omap_hwmod_ocp_if omap3xxx_l4_per__gpio4 = {
> + .master =&omap3xxx_l4_per_hwmod,
> + .slave =&omap3xxx_gpio4_hwmod,
> + .addr = omap3xxx_gpio4_addrs,
> + .addr_cnt = ARRAY_SIZE(omap3xxx_gpio4_addrs),
> + .user = OCP_USER_MPU | OCP_USER_SDMA,
> +};
> +
> +/* l4_per -> gpio5 */
> +static struct omap_hwmod_addr_space omap3xxx_gpio5_addrs[] = {
> + {
> + .pa_start = 0x49056000,
> + .pa_end = 0x490561ff,
> + .flags = ADDR_TYPE_RT
> + },
> +};
> +
> +static struct omap_hwmod_ocp_if omap3xxx_l4_per__gpio5 = {
> + .master =&omap3xxx_l4_per_hwmod,
> + .slave =&omap3xxx_gpio5_hwmod,
> + .addr = omap3xxx_gpio5_addrs,
> + .addr_cnt = ARRAY_SIZE(omap3xxx_gpio5_addrs),
> + .user = OCP_USER_MPU | OCP_USER_SDMA,
> +};
> +
> +/* l4_per -> gpio6 */
> +static struct omap_hwmod_addr_space omap3xxx_gpio6_addrs[] = {
> + {
> + .pa_start = 0x49058000,
> + .pa_end = 0x490581ff,
> + .flags = ADDR_TYPE_RT
> + },
> +};
> +
> +static struct omap_hwmod_ocp_if omap3xxx_l4_per__gpio6 = {
> + .master =&omap3xxx_l4_per_hwmod,
> + .slave =&omap3xxx_gpio6_hwmod,
> + .addr = omap3xxx_gpio6_addrs,
> + .addr_cnt = ARRAY_SIZE(omap3xxx_gpio6_addrs),
> + .user = OCP_USER_MPU | OCP_USER_SDMA,
> +};
> +
> +/*
> + * 'gpio' class
> + * general purpose io module
> + */
> +
> +static struct omap_hwmod_class_sysconfig omap3xxx_gpio_sysc = {
> + .rev_offs = 0x0000,
> + .sysc_offs = 0x0010,
> + .syss_offs = 0x0014,
> + .sysc_flags = (SYSC_HAS_ENAWAKEUP | SYSC_HAS_SIDLEMODE |
> + SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE),
> + .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
> + .sysc_fields =&omap_hwmod_sysc_type1,
> +};
> +
> +static struct omap_hwmod_class omap3xxx_gpio_hwmod_class = {
> + .name = "gpio",
> + .sysc =&omap3xxx_gpio_sysc,
> + .rev = 1,
> +};
> +
> +/* gpio_dev_attr*/
> +static struct omap_gpio_dev_attr gpio_dev_attr = {
> + .bank_width = 32,
> + .dbck_flag = true,
> +};
> +
> +/* gpio1 */
> +static struct omap_hwmod_irq_info omap3xxx_gpio1_irqs[] = {
> + { .name = "gpio_mpu_irq", .irq = 29 }, /* INT_34XX_GPIO_BANK1 */
In this case the name is not necessarily needed since there is only one
irq line.
You can save some memory by just adding the .irq field.
Benoit
^ permalink raw reply [flat|nested] 29+ messages in thread* [PATCH v7 07/11] OMAP3: hwmod data: Add GPIO
2010-11-24 22:51 ` Cousson, Benoit
@ 2010-11-25 4:37 ` Varadarajan, Charulatha
0 siblings, 0 replies; 29+ messages in thread
From: Varadarajan, Charulatha @ 2010-11-25 4:37 UTC (permalink / raw)
To: linux-arm-kernel
Benoit,
On Thu, Nov 25, 2010 at 04:21, Cousson, Benoit <b-cousson@ti.com> wrote:
> On 11/23/2010 3:56 PM, Varadarajan, Charulatha wrote:
>>
>> Add GPIO hwmod data for OMAP3
>>
>> Signed-off-by: Charulatha V<charu@ti.com>
>> Signed-off-by: Rajendra Nayak<rnayak@ti.com>
>
> Acked-by: Benoit Cousson <b-cousson@ti.com>
Thanks.
>
>> ---
>> ?arch/arm/mach-omap2/omap_hwmod_3xxx_data.c | ?360
>> ++++++++++++++++++++++++++++
>> ?1 files changed, 360 insertions(+), 0 deletions(-)
>>
>> diff --git a/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c
>> b/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c
>> index a8bed84..9ca2206 100644
>> --- a/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c
>> +++ b/arch/arm/mach-omap2/omap_hwmod_3xxx_data.c
>> @@ -20,6 +20,7 @@
>> ?#include<plat/serial.h>
>> ?#include<plat/l4_3xxx.h>
>> ?#include<plat/i2c.h>
>> +#include<plat/gpio.h>
>> ?#include<plat/omap34xx.h>
>>
>> ?#include "omap_hwmod_common_data.h"
>> @@ -45,6 +46,12 @@ static struct omap_hwmod omap3xxx_wd_timer2_hwmod;
>> ?static struct omap_hwmod omap3xxx_i2c1_hwmod;
>> ?static struct omap_hwmod omap3xxx_i2c2_hwmod;
<<snip>>
>> +};
>> +
>> +/* gpio1 */
>> +static struct omap_hwmod_irq_info omap3xxx_gpio1_irqs[] = {
>> + ? ? ? { .name = "gpio_mpu_irq", .irq = 29 }, /* INT_34XX_GPIO_BANK1 */
>
> In this case the name is not necessarily needed since there is only one irq
> line.
> You can save some memory by just adding the .irq field.
Yes, I too thought about it. But to be consistent with other devices,
I included it here
as I did not receive any comments before on this. Anyways, will remove
them while
re-sending patches as per Kevin's suggestions to rebase them on pm-core branch.
>
> Benoit
>
^ permalink raw reply [flat|nested] 29+ messages in thread
* [PATCH v7 08/11] OMAP4: hwmod data: Add GPIO
2010-11-23 14:56 [PATCH v7 00/11] OMAP: GPIO: Implement GPIO as a platform device Varadarajan, Charulatha
` (6 preceding siblings ...)
2010-11-23 14:56 ` [PATCH v7 07/11] OMAP3: " Varadarajan, Charulatha
@ 2010-11-23 14:56 ` Varadarajan, Charulatha
2010-11-23 14:56 ` [PATCH v7 09/11] OMAP2+: GPIO: device registration Varadarajan, Charulatha
` (3 subsequent siblings)
11 siblings, 0 replies; 29+ messages in thread
From: Varadarajan, Charulatha @ 2010-11-23 14:56 UTC (permalink / raw)
To: linux-arm-kernel
From: Benoit Cousson <b-cousson@ti.com>
Add GPIO hwmod data for OMAP4
Signed-off-by: Benoit Cousson <b-cousson@ti.com>
Signed-off-by: Charulatha V <charu@ti.com>
---
arch/arm/mach-omap2/omap_hwmod_44xx_data.c | 341 ++++++++++++++++++++++++++++
1 files changed, 341 insertions(+), 0 deletions(-)
diff --git a/arch/arm/mach-omap2/omap_hwmod_44xx_data.c b/arch/arm/mach-omap2/omap_hwmod_44xx_data.c
index 0d5c6eb..d258936 100644
--- a/arch/arm/mach-omap2/omap_hwmod_44xx_data.c
+++ b/arch/arm/mach-omap2/omap_hwmod_44xx_data.c
@@ -22,6 +22,7 @@
#include <plat/omap_hwmod.h>
#include <plat/cpu.h>
+#include <plat/gpio.h>
#include "omap_hwmod_common_data.h"
@@ -1043,6 +1044,338 @@ static struct omap_hwmod omap44xx_uart4_hwmod = {
.omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
};
+/*
+ * 'gpio' class
+ * general purpose io module
+ */
+
+static struct omap_hwmod_class_sysconfig omap44xx_gpio_sysc = {
+ .rev_offs = 0x0000,
+ .sysc_offs = 0x0010,
+ .syss_offs = 0x0114,
+ .sysc_flags = (SYSC_HAS_ENAWAKEUP | SYSC_HAS_SIDLEMODE |
+ SYSC_HAS_SOFTRESET | SYSC_HAS_AUTOIDLE),
+ .idlemodes = (SIDLE_FORCE | SIDLE_NO | SIDLE_SMART),
+ .sysc_fields = &omap_hwmod_sysc_type1,
+};
+
+static struct omap_hwmod_class omap44xx_gpio_hwmod_class = {
+ .name = "gpio",
+ .sysc = &omap44xx_gpio_sysc,
+ .rev = 2,
+};
+
+/* gpio dev_attr */
+static struct omap_gpio_dev_attr gpio_dev_attr = {
+ .bank_width = 32,
+ .dbck_flag = true,
+};
+
+/* gpio1 */
+static struct omap_hwmod omap44xx_gpio1_hwmod;
+static struct omap_hwmod_irq_info omap44xx_gpio1_irqs[] = {
+ { .irq = 29 + OMAP44XX_IRQ_GIC_START },
+};
+
+static struct omap_hwmod_addr_space omap44xx_gpio1_addrs[] = {
+ {
+ .pa_start = 0x4a310000,
+ .pa_end = 0x4a3101ff,
+ .flags = ADDR_TYPE_RT
+ },
+};
+
+/* l4_wkup -> gpio1 */
+static struct omap_hwmod_ocp_if omap44xx_l4_wkup__gpio1 = {
+ .master = &omap44xx_l4_wkup_hwmod,
+ .slave = &omap44xx_gpio1_hwmod,
+ .addr = omap44xx_gpio1_addrs,
+ .addr_cnt = ARRAY_SIZE(omap44xx_gpio1_addrs),
+ .user = OCP_USER_MPU | OCP_USER_SDMA,
+};
+
+/* gpio1 slave ports */
+static struct omap_hwmod_ocp_if *omap44xx_gpio1_slaves[] = {
+ &omap44xx_l4_wkup__gpio1,
+};
+
+static struct omap_hwmod_opt_clk gpio1_opt_clks[] = {
+ { .role = "dbclk", .clk = "sys_32k_ck" },
+};
+
+static struct omap_hwmod omap44xx_gpio1_hwmod = {
+ .name = "gpio1",
+ .class = &omap44xx_gpio_hwmod_class,
+ .mpu_irqs = omap44xx_gpio1_irqs,
+ .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_gpio1_irqs),
+ .main_clk = "gpio1_ick",
+ .prcm = {
+ .omap4 = {
+ .clkctrl_reg = OMAP4430_CM_WKUP_GPIO1_CLKCTRL,
+ },
+ },
+ .opt_clks = gpio1_opt_clks,
+ .opt_clks_cnt = ARRAY_SIZE(gpio1_opt_clks),
+ .dev_attr = &gpio_dev_attr,
+ .slaves = omap44xx_gpio1_slaves,
+ .slaves_cnt = ARRAY_SIZE(omap44xx_gpio1_slaves),
+ .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
+};
+
+/* gpio2 */
+static struct omap_hwmod omap44xx_gpio2_hwmod;
+static struct omap_hwmod_irq_info omap44xx_gpio2_irqs[] = {
+ { .irq = 30 + OMAP44XX_IRQ_GIC_START },
+};
+
+static struct omap_hwmod_addr_space omap44xx_gpio2_addrs[] = {
+ {
+ .pa_start = 0x48055000,
+ .pa_end = 0x480551ff,
+ .flags = ADDR_TYPE_RT
+ },
+};
+
+/* l4_per -> gpio2 */
+static struct omap_hwmod_ocp_if omap44xx_l4_per__gpio2 = {
+ .master = &omap44xx_l4_per_hwmod,
+ .slave = &omap44xx_gpio2_hwmod,
+ .addr = omap44xx_gpio2_addrs,
+ .addr_cnt = ARRAY_SIZE(omap44xx_gpio2_addrs),
+ .user = OCP_USER_MPU | OCP_USER_SDMA,
+};
+
+/* gpio2 slave ports */
+static struct omap_hwmod_ocp_if *omap44xx_gpio2_slaves[] = {
+ &omap44xx_l4_per__gpio2,
+};
+
+static struct omap_hwmod_opt_clk gpio2_opt_clks[] = {
+ { .role = "dbclk", .clk = "sys_32k_ck" },
+};
+
+static struct omap_hwmod omap44xx_gpio2_hwmod = {
+ .name = "gpio2",
+ .class = &omap44xx_gpio_hwmod_class,
+ .mpu_irqs = omap44xx_gpio2_irqs,
+ .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_gpio2_irqs),
+ .main_clk = "gpio2_ick",
+ .prcm = {
+ .omap4 = {
+ .clkctrl_reg = OMAP4430_CM_L4PER_GPIO2_CLKCTRL,
+ },
+ },
+ .opt_clks = gpio2_opt_clks,
+ .opt_clks_cnt = ARRAY_SIZE(gpio2_opt_clks),
+ .dev_attr = &gpio_dev_attr,
+ .slaves = omap44xx_gpio2_slaves,
+ .slaves_cnt = ARRAY_SIZE(omap44xx_gpio2_slaves),
+ .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
+};
+
+/* gpio3 */
+static struct omap_hwmod omap44xx_gpio3_hwmod;
+static struct omap_hwmod_irq_info omap44xx_gpio3_irqs[] = {
+ { .irq = 31 + OMAP44XX_IRQ_GIC_START },
+};
+
+static struct omap_hwmod_addr_space omap44xx_gpio3_addrs[] = {
+ {
+ .pa_start = 0x48057000,
+ .pa_end = 0x480571ff,
+ .flags = ADDR_TYPE_RT
+ },
+};
+
+/* l4_per -> gpio3 */
+static struct omap_hwmod_ocp_if omap44xx_l4_per__gpio3 = {
+ .master = &omap44xx_l4_per_hwmod,
+ .slave = &omap44xx_gpio3_hwmod,
+ .addr = omap44xx_gpio3_addrs,
+ .addr_cnt = ARRAY_SIZE(omap44xx_gpio3_addrs),
+ .user = OCP_USER_MPU | OCP_USER_SDMA,
+};
+
+/* gpio3 slave ports */
+static struct omap_hwmod_ocp_if *omap44xx_gpio3_slaves[] = {
+ &omap44xx_l4_per__gpio3,
+};
+
+static struct omap_hwmod_opt_clk gpio3_opt_clks[] = {
+ { .role = "dbclk", .clk = "sys_32k_ck" },
+};
+
+static struct omap_hwmod omap44xx_gpio3_hwmod = {
+ .name = "gpio3",
+ .class = &omap44xx_gpio_hwmod_class,
+ .mpu_irqs = omap44xx_gpio3_irqs,
+ .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_gpio3_irqs),
+ .main_clk = "gpio3_ick",
+ .prcm = {
+ .omap4 = {
+ .clkctrl_reg = OMAP4430_CM_L4PER_GPIO3_CLKCTRL,
+ },
+ },
+ .opt_clks = gpio3_opt_clks,
+ .opt_clks_cnt = ARRAY_SIZE(gpio3_opt_clks),
+ .dev_attr = &gpio_dev_attr,
+ .slaves = omap44xx_gpio3_slaves,
+ .slaves_cnt = ARRAY_SIZE(omap44xx_gpio3_slaves),
+ .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
+};
+
+/* gpio4 */
+static struct omap_hwmod omap44xx_gpio4_hwmod;
+static struct omap_hwmod_irq_info omap44xx_gpio4_irqs[] = {
+ { .irq = 32 + OMAP44XX_IRQ_GIC_START },
+};
+
+static struct omap_hwmod_addr_space omap44xx_gpio4_addrs[] = {
+ {
+ .pa_start = 0x48059000,
+ .pa_end = 0x480591ff,
+ .flags = ADDR_TYPE_RT
+ },
+};
+
+/* l4_per -> gpio4 */
+static struct omap_hwmod_ocp_if omap44xx_l4_per__gpio4 = {
+ .master = &omap44xx_l4_per_hwmod,
+ .slave = &omap44xx_gpio4_hwmod,
+ .addr = omap44xx_gpio4_addrs,
+ .addr_cnt = ARRAY_SIZE(omap44xx_gpio4_addrs),
+ .user = OCP_USER_MPU | OCP_USER_SDMA,
+};
+
+/* gpio4 slave ports */
+static struct omap_hwmod_ocp_if *omap44xx_gpio4_slaves[] = {
+ &omap44xx_l4_per__gpio4,
+};
+
+static struct omap_hwmod_opt_clk gpio4_opt_clks[] = {
+ { .role = "dbclk", .clk = "sys_32k_ck" },
+};
+
+static struct omap_hwmod omap44xx_gpio4_hwmod = {
+ .name = "gpio4",
+ .class = &omap44xx_gpio_hwmod_class,
+ .mpu_irqs = omap44xx_gpio4_irqs,
+ .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_gpio4_irqs),
+ .main_clk = "gpio4_ick",
+ .prcm = {
+ .omap4 = {
+ .clkctrl_reg = OMAP4430_CM_L4PER_GPIO4_CLKCTRL,
+ },
+ },
+ .opt_clks = gpio4_opt_clks,
+ .opt_clks_cnt = ARRAY_SIZE(gpio4_opt_clks),
+ .dev_attr = &gpio_dev_attr,
+ .slaves = omap44xx_gpio4_slaves,
+ .slaves_cnt = ARRAY_SIZE(omap44xx_gpio4_slaves),
+ .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
+};
+
+/* gpio5 */
+static struct omap_hwmod omap44xx_gpio5_hwmod;
+static struct omap_hwmod_irq_info omap44xx_gpio5_irqs[] = {
+ { .irq = 33 + OMAP44XX_IRQ_GIC_START },
+};
+
+static struct omap_hwmod_addr_space omap44xx_gpio5_addrs[] = {
+ {
+ .pa_start = 0x4805b000,
+ .pa_end = 0x4805b1ff,
+ .flags = ADDR_TYPE_RT
+ },
+};
+
+/* l4_per -> gpio5 */
+static struct omap_hwmod_ocp_if omap44xx_l4_per__gpio5 = {
+ .master = &omap44xx_l4_per_hwmod,
+ .slave = &omap44xx_gpio5_hwmod,
+ .addr = omap44xx_gpio5_addrs,
+ .addr_cnt = ARRAY_SIZE(omap44xx_gpio5_addrs),
+ .user = OCP_USER_MPU | OCP_USER_SDMA,
+};
+
+/* gpio5 slave ports */
+static struct omap_hwmod_ocp_if *omap44xx_gpio5_slaves[] = {
+ &omap44xx_l4_per__gpio5,
+};
+
+static struct omap_hwmod_opt_clk gpio5_opt_clks[] = {
+ { .role = "dbclk", .clk = "sys_32k_ck" },
+};
+
+static struct omap_hwmod omap44xx_gpio5_hwmod = {
+ .name = "gpio5",
+ .class = &omap44xx_gpio_hwmod_class,
+ .mpu_irqs = omap44xx_gpio5_irqs,
+ .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_gpio5_irqs),
+ .main_clk = "gpio5_ick",
+ .prcm = {
+ .omap4 = {
+ .clkctrl_reg = OMAP4430_CM_L4PER_GPIO5_CLKCTRL,
+ },
+ },
+ .opt_clks = gpio5_opt_clks,
+ .opt_clks_cnt = ARRAY_SIZE(gpio5_opt_clks),
+ .dev_attr = &gpio_dev_attr,
+ .slaves = omap44xx_gpio5_slaves,
+ .slaves_cnt = ARRAY_SIZE(omap44xx_gpio5_slaves),
+ .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
+};
+
+/* gpio6 */
+static struct omap_hwmod omap44xx_gpio6_hwmod;
+static struct omap_hwmod_irq_info omap44xx_gpio6_irqs[] = {
+ { .irq = 34 + OMAP44XX_IRQ_GIC_START },
+};
+
+static struct omap_hwmod_addr_space omap44xx_gpio6_addrs[] = {
+ {
+ .pa_start = 0x4805d000,
+ .pa_end = 0x4805d1ff,
+ .flags = ADDR_TYPE_RT
+ },
+};
+
+/* l4_per -> gpio6 */
+static struct omap_hwmod_ocp_if omap44xx_l4_per__gpio6 = {
+ .master = &omap44xx_l4_per_hwmod,
+ .slave = &omap44xx_gpio6_hwmod,
+ .addr = omap44xx_gpio6_addrs,
+ .addr_cnt = ARRAY_SIZE(omap44xx_gpio6_addrs),
+ .user = OCP_USER_MPU | OCP_USER_SDMA,
+};
+
+/* gpio6 slave ports */
+static struct omap_hwmod_ocp_if *omap44xx_gpio6_slaves[] = {
+ &omap44xx_l4_per__gpio6,
+};
+
+static struct omap_hwmod_opt_clk gpio6_opt_clks[] = {
+ { .role = "dbclk", .clk = "sys_32k_ck" },
+};
+
+static struct omap_hwmod omap44xx_gpio6_hwmod = {
+ .name = "gpio6",
+ .class = &omap44xx_gpio_hwmod_class,
+ .mpu_irqs = omap44xx_gpio6_irqs,
+ .mpu_irqs_cnt = ARRAY_SIZE(omap44xx_gpio6_irqs),
+ .main_clk = "gpio6_ick",
+ .prcm = {
+ .omap4 = {
+ .clkctrl_reg = OMAP4430_CM_L4PER_GPIO6_CLKCTRL,
+ },
+ },
+ .opt_clks = gpio6_opt_clks,
+ .opt_clks_cnt = ARRAY_SIZE(gpio6_opt_clks),
+ .dev_attr = &gpio_dev_attr,
+ .slaves = omap44xx_gpio6_slaves,
+ .slaves_cnt = ARRAY_SIZE(omap44xx_gpio6_slaves),
+ .omap_chip = OMAP_CHIP_INIT(CHIP_IS_OMAP4430),
+};
static __initdata struct omap_hwmod *omap44xx_hwmods[] = {
/* dmm class */
&omap44xx_dmm_hwmod,
@@ -1066,6 +1399,14 @@ static __initdata struct omap_hwmod *omap44xx_hwmods[] = {
/* mpu_bus class */
&omap44xx_mpu_private_hwmod,
+ /* gpio class */
+ &omap44xx_gpio1_hwmod,
+ &omap44xx_gpio2_hwmod,
+ &omap44xx_gpio3_hwmod,
+ &omap44xx_gpio4_hwmod,
+ &omap44xx_gpio5_hwmod,
+ &omap44xx_gpio6_hwmod,
+
/* mpu class */
&omap44xx_mpu_hwmod,
/* wd_timer class */
--
1.7.0.4
^ permalink raw reply related [flat|nested] 29+ messages in thread* [PATCH v7 09/11] OMAP2+: GPIO: device registration
2010-11-23 14:56 [PATCH v7 00/11] OMAP: GPIO: Implement GPIO as a platform device Varadarajan, Charulatha
` (7 preceding siblings ...)
2010-11-23 14:56 ` [PATCH v7 08/11] OMAP4: " Varadarajan, Charulatha
@ 2010-11-23 14:56 ` Varadarajan, Charulatha
2010-11-24 23:00 ` Cousson, Benoit
2010-11-23 14:56 ` [PATCH v7 10/11] OMAP: GPIO: Implement GPIO as a platform device Varadarajan, Charulatha
` (2 subsequent siblings)
11 siblings, 1 reply; 29+ messages in thread
From: Varadarajan, Charulatha @ 2010-11-23 14:56 UTC (permalink / raw)
To: linux-arm-kernel
Use omap_device_build() API to do platform_device_register of
GPIO devices. For OMAP2+ chips, the device specific data defined
in the centralized hwmod database will be used.
gpio_init needs to be done before machine_init functions access
gpio APIs. Hence gpio_init is made as a postcore_initcall.
Signed-off-by: Charulatha V <charu@ti.com>
Reviewed-by: Basak, Partha <p-basak2@ti.com>
---
arch/arm/mach-omap2/gpio.c | 103 ++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 103 insertions(+), 0 deletions(-)
create mode 100644 arch/arm/mach-omap2/gpio.c
diff --git a/arch/arm/mach-omap2/gpio.c b/arch/arm/mach-omap2/gpio.c
new file mode 100644
index 0000000..e5c9b6a
--- /dev/null
+++ b/arch/arm/mach-omap2/gpio.c
@@ -0,0 +1,104 @@
+/*
+ * OMAP2+ specific gpio initialization
+ *
+ * Copyright (C) 2010 Texas Instruments Incorporated - http://www.ti.com/
+ *
+ * Author:
+ * Charulatha V <charu@ti.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation version 2.
+ *
+ * This program is distributed "as is" WITHOUT ANY WARRANTY of any
+ * kind, whether express or implied; without even the implied warranty
+ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ */
+
+#include <linux/gpio.h>
+#include <linux/err.h>
+#include <linux/slab.h>
+#include <linux/interrupt.h>
+
+#include <plat/omap_hwmod.h>
+#include <plat/omap_device.h>
+
+static struct omap_device_pm_latency omap_gpio_latency[] = {
+ [0] = {
+ .deactivate_func = omap_device_idle_hwmods,
+ .activate_func = omap_device_enable_hwmods,
+ .flags = OMAP_DEVICE_LATENCY_AUTO_ADJUST,
+ },
+};
+
+static int omap2_gpio_dev_init(struct omap_hwmod *oh, void *unused)
+{
+ struct omap_device *od;
+ struct omap_gpio_platform_data *pdata;
+ struct omap_gpio_dev_attr *dev_attr;
+ char *name = "omap_gpio";
+ int id;
+
+ /*
+ * extract the device id from name field available in the
+ * hwmod database and use the same for constructing ids for
+ * gpio devices.
+ * CAUTION: Make sure the name in the hwmod database does
+ * not change. If changed, make corresponding change here
+ * or make use of static variable mechanism to handle this.
+ */
+ sscanf(oh->name, "gpio%d", &id);
+
+ pdata = kzalloc(sizeof(struct omap_gpio_platform_data), GFP_KERNEL);
+ if (!pdata) {
+ pr_err("gpio%d: Memory allocation failed\n", id);
+ return -ENOMEM;
+ }
+
+ dev_attr = (struct omap_gpio_dev_attr *)oh->dev_attr;
+ pdata->bank_width = dev_attr->bank_width;
+ pdata->dbck_flag = dev_attr->dbck_flag;
+ pdata->virtual_irq_start = IH_GPIO_BASE + 32 * (id - 1);
+
+ switch (oh->class->rev) {
+ case 0:
+ case 1:
+ pdata->bank_type = METHOD_GPIO_24XX;
+ break;
+ case 2:
+ pdata->bank_type = METHOD_GPIO_44XX;
+ break;
+ default:
+ WARN(1, "Invalid gpio bank_type\n");
+ kfree(pdata);
+ return -EINVAL;
+ }
+
+ od = omap_device_build(name, id - 1, oh, pdata,
+ sizeof(*pdata), omap_gpio_latency,
+ ARRAY_SIZE(omap_gpio_latency),
+ false);
+ kfree(pdata);
+
+ if (IS_ERR(od)) {
+ WARN(1, "Cant build omap_device for %s:%s.\n",
+ name, oh->name);
+ return PTR_ERR(od);
+ }
+
+ gpio_bank_count++;
+ return 0;
+}
+
+/*
+ * gpio_init needs to be done before
+ * machine_init functions access gpio APIs.
+ * Hence gpio_init is a postcore_initcall.
+ */
+static int __init omap2_gpio_init(void)
+{
+ return omap_hwmod_for_each_by_class("gpio", omap2_gpio_dev_init,
+ NULL);
+}
+postcore_initcall(omap2_gpio_init);
--
1.7.0.4
^ permalink raw reply related [flat|nested] 29+ messages in thread* [PATCH v7 09/11] OMAP2+: GPIO: device registration
2010-11-23 14:56 ` [PATCH v7 09/11] OMAP2+: GPIO: device registration Varadarajan, Charulatha
@ 2010-11-24 23:00 ` Cousson, Benoit
0 siblings, 0 replies; 29+ messages in thread
From: Cousson, Benoit @ 2010-11-24 23:00 UTC (permalink / raw)
To: linux-arm-kernel
On 11/23/2010 3:56 PM, Varadarajan, Charulatha wrote:
> Use omap_device_build() API to do platform_device_register of
> GPIO devices. For OMAP2+ chips, the device specific data defined
> in the centralized hwmod database will be used.
>
> gpio_init needs to be done before machine_init functions access
> gpio APIs. Hence gpio_init is made as a postcore_initcall.
>
> Signed-off-by: Charulatha V<charu@ti.com>
> Reviewed-by: Basak, Partha<p-basak2@ti.com>
Acked-by: Benoit Cousson <b-cousson@ti.com>
> ---
> arch/arm/mach-omap2/gpio.c | 103 ++++++++++++++++++++++++++++++++++++++++++++
> 1 files changed, 103 insertions(+), 0 deletions(-)
> create mode 100644 arch/arm/mach-omap2/gpio.c
>
> diff --git a/arch/arm/mach-omap2/gpio.c b/arch/arm/mach-omap2/gpio.c
> new file mode 100644
> index 0000000..e5c9b6a
> --- /dev/null
> +++ b/arch/arm/mach-omap2/gpio.c
> @@ -0,0 +1,104 @@
> +/*
> + * OMAP2+ specific gpio initialization
> + *
> + * Copyright (C) 2010 Texas Instruments Incorporated - http://www.ti.com/
> + *
> + * Author:
> + * Charulatha V<charu@ti.com>
> + *
> + * This program is free software; you can redistribute it and/or
> + * modify it under the terms of the GNU General Public License as
> + * published by the Free Software Foundation version 2.
> + *
> + * This program is distributed "as is" WITHOUT ANY WARRANTY of any
> + * kind, whether express or implied; without even the implied warranty
> + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> + * GNU General Public License for more details.
> + */
> +
> +#include<linux/gpio.h>
> +#include<linux/err.h>
> +#include<linux/slab.h>
> +#include<linux/interrupt.h>
> +
> +#include<plat/omap_hwmod.h>
> +#include<plat/omap_device.h>
> +
> +static struct omap_device_pm_latency omap_gpio_latency[] = {
> + [0] = {
> + .deactivate_func = omap_device_idle_hwmods,
> + .activate_func = omap_device_enable_hwmods,
> + .flags = OMAP_DEVICE_LATENCY_AUTO_ADJUST,
> + },
> +};
> +
> +static int omap2_gpio_dev_init(struct omap_hwmod *oh, void *unused)
> +{
> + struct omap_device *od;
> + struct omap_gpio_platform_data *pdata;
> + struct omap_gpio_dev_attr *dev_attr;
> + char *name = "omap_gpio";
> + int id;
> +
> + /*
> + * extract the device id from name field available in the
> + * hwmod database and use the same for constructing ids for
> + * gpio devices.
> + * CAUTION: Make sure the name in the hwmod database does
> + * not change. If changed, make corresponding change here
> + * or make use of static variable mechanism to handle this.
> + */
> + sscanf(oh->name, "gpio%d",&id);
> +
> + pdata = kzalloc(sizeof(struct omap_gpio_platform_data), GFP_KERNEL);
> + if (!pdata) {
> + pr_err("gpio%d: Memory allocation failed\n", id);
> + return -ENOMEM;
> + }
> +
> + dev_attr = (struct omap_gpio_dev_attr *)oh->dev_attr;
> + pdata->bank_width = dev_attr->bank_width;
> + pdata->dbck_flag = dev_attr->dbck_flag;
> + pdata->virtual_irq_start = IH_GPIO_BASE + 32 * (id - 1);
> +
> + switch (oh->class->rev) {
> + case 0:
> + case 1:
> + pdata->bank_type = METHOD_GPIO_24XX;
> + break;
> + case 2:
> + pdata->bank_type = METHOD_GPIO_44XX;
> + break;
> + default:
> + WARN(1, "Invalid gpio bank_type\n");
> + kfree(pdata);
> + return -EINVAL;
> + }
> +
> + od = omap_device_build(name, id - 1, oh, pdata,
> + sizeof(*pdata), omap_gpio_latency,
> + ARRAY_SIZE(omap_gpio_latency),
> + false);
> + kfree(pdata);
> +
> + if (IS_ERR(od)) {
> + WARN(1, "Cant build omap_device for %s:%s.\n",
> + name, oh->name);
> + return PTR_ERR(od);
> + }
> +
> + gpio_bank_count++;
> + return 0;
> +}
> +
> +/*
> + * gpio_init needs to be done before
> + * machine_init functions access gpio APIs.
> + * Hence gpio_init is a postcore_initcall.
> + */
> +static int __init omap2_gpio_init(void)
> +{
> + return omap_hwmod_for_each_by_class("gpio", omap2_gpio_dev_init,
> + NULL);
> +}
> +postcore_initcall(omap2_gpio_init);
^ permalink raw reply [flat|nested] 29+ messages in thread
* [PATCH v7 10/11] OMAP: GPIO: Implement GPIO as a platform device
2010-11-23 14:56 [PATCH v7 00/11] OMAP: GPIO: Implement GPIO as a platform device Varadarajan, Charulatha
` (8 preceding siblings ...)
2010-11-23 14:56 ` [PATCH v7 09/11] OMAP2+: GPIO: device registration Varadarajan, Charulatha
@ 2010-11-23 14:56 ` Varadarajan, Charulatha
2010-11-23 14:56 ` [PATCH v7 11/11] OMAP: GPIO: Remove omap_gpio_init() Varadarajan, Charulatha
2010-11-25 1:40 ` [PATCH v7 00/11] OMAP: GPIO: Implement GPIO as a platform device Kevin Hilman
11 siblings, 0 replies; 29+ messages in thread
From: Varadarajan, Charulatha @ 2010-11-23 14:56 UTC (permalink / raw)
To: linux-arm-kernel
Implement GPIO as a platform device.
GPIO APIs are used in machine_init functions. Hence it is
required to complete GPIO probe before board_init. Therefore
GPIO device register and driver register are implemented as
postcore_initcalls.
omap_gpio_init() does nothing now and this function would be
removed in the next patch as it's usage is spread across most
of the board files.
Inorder to convert GPIO as platform device, modifications are
required in clockxxxx_data.c file for OMAP1 so that device names
can be used to obtain clock instead of getting clocks by
name/NULL ptr.
Use runtime pm APIs (pm_runtime_put*/pm_runtime_get*) for enabling
or disabling the clocks, modify sysconfig settings and remove usage
of clock FW APIs.
Note 1: Converting GPIO driver to use runtime PM APIs is not done as a
separate patch because GPIO clock names are different for various OMAPs
and are different for some of the banks in the same CPU. This would need
usage of cpu_is checks and bank id checks while using clock FW APIs in
the gpio driver. Hence while making GPIO a platform driver framework,
PM runtime APIs are used directly.
Note 2: While implementing GPIO as a platform device, pm runtime APIs
are used as mentioned above and modification is not done in gpio's
prepare for idle/ resume after idle functions. This would be done
in the next patch series and GPIO driver would be made to use dev_pm_ops
instead of sysdev_class in that series only.
Due to the above, the GPIO driver implicitly relies on
CM_AUTOIDLE = 1 on its iclk for power management to work, since the
driver never disables its iclk.
This would be taken care in the next patch series (see Note 3 below).
Refer to
http://www.mail-archive.com/linux-omap at vger.kernel.org/msg39112.html
for more details.
Note 3: only pm_runtime_get_sync is called in gpio's probe() and
pm_runtime_put* is never called. This is to make the implementation
similar to the existing GPIO code. Another patch series would be sent
to correct this.
In OMAP3 and OMAP4 gpio's debounce clocks are optional clocks. They
are enabled/ disabled whenever required using clock framework APIs
TODO:
1. Cleanup the GPIO driver. Use function pointers and register
offest pointers instead of using hardcoded values
2. Remove all cpu_is_ checks and OMAP specific macros
3. Remove usage of gpio_bank array so that only
instance specific information is used in driver code
4. Rename 'method'/ avoid it's usage
5. Fix the non-wakeup gpios handling for OMAP2430, OMAP3 & OMAP4
6. Modify gpio's prepare for idle/ resume after idle functions
to use runtime pm implentation.
Signed-off-by: Charulatha V <charu@ti.com>
Signed-off-by: Rajendra Nayak <rnayak@ti.com>
Reviewed-by: Basak, Partha <p-basak2@ti.com>
---
arch/arm/mach-omap1/Makefile | 6 +
arch/arm/mach-omap1/clock_data.c | 4 +-
arch/arm/mach-omap2/Makefile | 2 +-
arch/arm/plat-omap/gpio.c | 420 ++++++++++----------------------------
4 files changed, 114 insertions(+), 318 deletions(-)
diff --git a/arch/arm/mach-omap1/Makefile b/arch/arm/mach-omap1/Makefile
index de3cc13..0b1c07f 100644
--- a/arch/arm/mach-omap1/Makefile
+++ b/arch/arm/mach-omap1/Makefile
@@ -49,6 +49,12 @@ ifeq ($(CONFIG_ARCH_OMAP15XX),y)
obj-$(CONFIG_MACH_OMAP_INNOVATOR) += fpga.o
endif
+# GPIO
+obj-$(CONFIG_ARCH_OMAP730) += gpio7xx.o
+obj-$(CONFIG_ARCH_OMAP850) += gpio7xx.o
+obj-$(CONFIG_ARCH_OMAP15XX) += gpio15xx.o
+obj-$(CONFIG_ARCH_OMAP16XX) += gpio16xx.o
+
# LEDs support
led-$(CONFIG_MACH_OMAP_H2) += leds-h2p2-debug.o
led-$(CONFIG_MACH_OMAP_H3) += leds-h2p2-debug.o
diff --git a/arch/arm/mach-omap1/clock_data.c b/arch/arm/mach-omap1/clock_data.c
index af54114..423d21d 100644
--- a/arch/arm/mach-omap1/clock_data.c
+++ b/arch/arm/mach-omap1/clock_data.c
@@ -143,7 +143,7 @@ static struct arm_idlect1_clk armper_ck = {
* activation. [ GPIO code for 1510 ]
*/
static struct clk arm_gpio_ck = {
- .name = "arm_gpio_ck",
+ .name = "ick",
.ops = &clkops_generic,
.parent = &ck_dpll1,
.flags = ENABLE_ON_INIT,
@@ -684,7 +684,7 @@ static struct omap_clk omap_clks[] = {
CLK(NULL, "ck_sossi", &sossi_ck, CK_16XX),
CLK(NULL, "arm_ck", &arm_ck, CK_16XX | CK_1510 | CK_310),
CLK(NULL, "armper_ck", &armper_ck.clk, CK_16XX | CK_1510 | CK_310),
- CLK(NULL, "arm_gpio_ck", &arm_gpio_ck, CK_1510 | CK_310),
+ CLK("omap_gpio.0", "ick", &arm_gpio_ck, CK_1510 | CK_310),
CLK(NULL, "armxor_ck", &armxor_ck.clk, CK_16XX | CK_1510 | CK_310 | CK_7XX),
CLK(NULL, "armtim_ck", &armtim_ck.clk, CK_16XX | CK_1510 | CK_310),
CLK("omap_wdt", "fck", &armwdt_ck.clk, CK_16XX | CK_1510 | CK_310),
diff --git a/arch/arm/mach-omap2/Makefile b/arch/arm/mach-omap2/Makefile
index ce7b1f0..fbc8739 100644
--- a/arch/arm/mach-omap2/Makefile
+++ b/arch/arm/mach-omap2/Makefile
@@ -4,7 +4,7 @@
# Common support
obj-y := id.o io.o control.o mux.o devices.o serial.o gpmc.o timer-gp.o pm.o \
- common.o
+ common.o gpio.o
omap-2-3-common = irq.o sdrc.o prm2xxx_3xxx.o
hwmod-common = omap_hwmod.o \
diff --git a/arch/arm/plat-omap/gpio.c b/arch/arm/plat-omap/gpio.c
index 610787c..d04ded2 100644
--- a/arch/arm/plat-omap/gpio.c
+++ b/arch/arm/plat-omap/gpio.c
@@ -21,6 +21,8 @@
#include <linux/err.h>
#include <linux/clk.h>
#include <linux/io.h>
+#include <linux/slab.h>
+#include <linux/pm_runtime.h>
#include <mach/hardware.h>
#include <asm/irq.h>
@@ -32,7 +34,6 @@
/*
* OMAP1510 GPIO registers
*/
-#define OMAP1510_GPIO_BASE 0xfffce000
#define OMAP1510_GPIO_DATA_INPUT 0x00
#define OMAP1510_GPIO_DATA_OUTPUT 0x04
#define OMAP1510_GPIO_DIR_CONTROL 0x08
@@ -46,10 +47,6 @@
/*
* OMAP1610 specific GPIO registers
*/
-#define OMAP1610_GPIO1_BASE 0xfffbe400
-#define OMAP1610_GPIO2_BASE 0xfffbec00
-#define OMAP1610_GPIO3_BASE 0xfffbb400
-#define OMAP1610_GPIO4_BASE 0xfffbbc00
#define OMAP1610_GPIO_REVISION 0x0000
#define OMAP1610_GPIO_SYSCONFIG 0x0010
#define OMAP1610_GPIO_SYSSTATUS 0x0014
@@ -71,12 +68,6 @@
/*
* OMAP7XX specific GPIO registers
*/
-#define OMAP7XX_GPIO1_BASE 0xfffbc000
-#define OMAP7XX_GPIO2_BASE 0xfffbc800
-#define OMAP7XX_GPIO3_BASE 0xfffbd000
-#define OMAP7XX_GPIO4_BASE 0xfffbd800
-#define OMAP7XX_GPIO5_BASE 0xfffbe000
-#define OMAP7XX_GPIO6_BASE 0xfffbe800
#define OMAP7XX_GPIO_DATA_INPUT 0x00
#define OMAP7XX_GPIO_DATA_OUTPUT 0x04
#define OMAP7XX_GPIO_DIR_CONTROL 0x08
@@ -84,25 +75,10 @@
#define OMAP7XX_GPIO_INT_MASK 0x10
#define OMAP7XX_GPIO_INT_STATUS 0x14
-#define OMAP1_MPUIO_VBASE OMAP1_MPUIO_BASE
-
/*
- * omap24xx specific GPIO registers
+ * omap2+ specific GPIO registers
*/
-#define OMAP242X_GPIO1_BASE 0x48018000
-#define OMAP242X_GPIO2_BASE 0x4801a000
-#define OMAP242X_GPIO3_BASE 0x4801c000
-#define OMAP242X_GPIO4_BASE 0x4801e000
-
-#define OMAP243X_GPIO1_BASE 0x4900C000
-#define OMAP243X_GPIO2_BASE 0x4900E000
-#define OMAP243X_GPIO3_BASE 0x49010000
-#define OMAP243X_GPIO4_BASE 0x49012000
-#define OMAP243X_GPIO5_BASE 0x480B6000
-
#define OMAP24XX_GPIO_REVISION 0x0000
-#define OMAP24XX_GPIO_SYSCONFIG 0x0010
-#define OMAP24XX_GPIO_SYSSTATUS 0x0014
#define OMAP24XX_GPIO_IRQSTATUS1 0x0018
#define OMAP24XX_GPIO_IRQSTATUS2 0x0028
#define OMAP24XX_GPIO_IRQENABLE2 0x002c
@@ -126,7 +102,6 @@
#define OMAP24XX_GPIO_SETDATAOUT 0x0094
#define OMAP4_GPIO_REVISION 0x0000
-#define OMAP4_GPIO_SYSCONFIG 0x0010
#define OMAP4_GPIO_EOI 0x0020
#define OMAP4_GPIO_IRQSTATUSRAW0 0x0024
#define OMAP4_GPIO_IRQSTATUSRAW1 0x0028
@@ -138,7 +113,6 @@
#define OMAP4_GPIO_IRQSTATUSCLR1 0x0040
#define OMAP4_GPIO_IRQWAKEN0 0x0044
#define OMAP4_GPIO_IRQWAKEN1 0x0048
-#define OMAP4_GPIO_SYSSTATUS 0x0114
#define OMAP4_GPIO_IRQENABLE1 0x011c
#define OMAP4_GPIO_WAKE_EN 0x0120
#define OMAP4_GPIO_IRQSTATUS2 0x0128
@@ -159,26 +133,6 @@
#define OMAP4_GPIO_SETWKUENA 0x0184
#define OMAP4_GPIO_CLEARDATAOUT 0x0190
#define OMAP4_GPIO_SETDATAOUT 0x0194
-/*
- * omap34xx specific GPIO registers
- */
-
-#define OMAP34XX_GPIO1_BASE 0x48310000
-#define OMAP34XX_GPIO2_BASE 0x49050000
-#define OMAP34XX_GPIO3_BASE 0x49052000
-#define OMAP34XX_GPIO4_BASE 0x49054000
-#define OMAP34XX_GPIO5_BASE 0x49056000
-#define OMAP34XX_GPIO6_BASE 0x49058000
-
-/*
- * OMAP44XX specific GPIO registers
- */
-#define OMAP44XX_GPIO1_BASE 0x4a310000
-#define OMAP44XX_GPIO2_BASE 0x48055000
-#define OMAP44XX_GPIO3_BASE 0x48057000
-#define OMAP44XX_GPIO4_BASE 0x48059000
-#define OMAP44XX_GPIO5_BASE 0x4805B000
-#define OMAP44XX_GPIO6_BASE 0x4805D000
struct gpio_bank {
unsigned long pbase;
@@ -203,97 +157,12 @@ struct gpio_bank {
struct clk *dbck;
u32 mod_usage;
u32 dbck_enable_mask;
+ struct device *dev;
+ bool dbck_flag;
};
-#ifdef CONFIG_ARCH_OMAP16XX
-static struct gpio_bank gpio_bank_1610[5] = {
- { OMAP1_MPUIO_VBASE, NULL, INT_MPUIO, IH_MPUIO_BASE,
- METHOD_MPUIO },
- { OMAP1610_GPIO1_BASE, NULL, INT_GPIO_BANK1, IH_GPIO_BASE,
- METHOD_GPIO_1610 },
- { OMAP1610_GPIO2_BASE, NULL, INT_1610_GPIO_BANK2, IH_GPIO_BASE + 16,
- METHOD_GPIO_1610 },
- { OMAP1610_GPIO3_BASE, NULL, INT_1610_GPIO_BANK3, IH_GPIO_BASE + 32,
- METHOD_GPIO_1610 },
- { OMAP1610_GPIO4_BASE, NULL, INT_1610_GPIO_BANK4, IH_GPIO_BASE + 48,
- METHOD_GPIO_1610 },
-};
-#endif
-
-#ifdef CONFIG_ARCH_OMAP15XX
-static struct gpio_bank gpio_bank_1510[2] = {
- { OMAP1_MPUIO_VBASE, NULL, INT_MPUIO, IH_MPUIO_BASE,
- METHOD_MPUIO },
- { OMAP1510_GPIO_BASE, NULL, INT_GPIO_BANK1, IH_GPIO_BASE,
- METHOD_GPIO_1510 }
-};
-#endif
-
-#if defined(CONFIG_ARCH_OMAP730) || defined(CONFIG_ARCH_OMAP850)
-static struct gpio_bank gpio_bank_7xx[7] = {
- { OMAP1_MPUIO_VBASE, NULL, INT_7XX_MPUIO, IH_MPUIO_BASE,
- METHOD_MPUIO },
- { OMAP7XX_GPIO1_BASE, NULL, INT_7XX_GPIO_BANK1, IH_GPIO_BASE,
- METHOD_GPIO_7XX },
- { OMAP7XX_GPIO2_BASE, NULL, INT_7XX_GPIO_BANK2, IH_GPIO_BASE + 32,
- METHOD_GPIO_7XX },
- { OMAP7XX_GPIO3_BASE, NULL, INT_7XX_GPIO_BANK3, IH_GPIO_BASE + 64,
- METHOD_GPIO_7XX },
- { OMAP7XX_GPIO4_BASE, NULL, INT_7XX_GPIO_BANK4, IH_GPIO_BASE + 96,
- METHOD_GPIO_7XX },
- { OMAP7XX_GPIO5_BASE, NULL, INT_7XX_GPIO_BANK5, IH_GPIO_BASE + 128,
- METHOD_GPIO_7XX },
- { OMAP7XX_GPIO6_BASE, NULL, INT_7XX_GPIO_BANK6, IH_GPIO_BASE + 160,
- METHOD_GPIO_7XX },
-};
-#endif
-
-#ifdef CONFIG_ARCH_OMAP2
-
-static struct gpio_bank gpio_bank_242x[4] = {
- { OMAP242X_GPIO1_BASE, NULL, INT_24XX_GPIO_BANK1, IH_GPIO_BASE,
- METHOD_GPIO_24XX },
- { OMAP242X_GPIO2_BASE, NULL, INT_24XX_GPIO_BANK2, IH_GPIO_BASE + 32,
- METHOD_GPIO_24XX },
- { OMAP242X_GPIO3_BASE, NULL, INT_24XX_GPIO_BANK3, IH_GPIO_BASE + 64,
- METHOD_GPIO_24XX },
- { OMAP242X_GPIO4_BASE, NULL, INT_24XX_GPIO_BANK4, IH_GPIO_BASE + 96,
- METHOD_GPIO_24XX },
-};
-
-static struct gpio_bank gpio_bank_243x[5] = {
- { OMAP243X_GPIO1_BASE, NULL, INT_24XX_GPIO_BANK1, IH_GPIO_BASE,
- METHOD_GPIO_24XX },
- { OMAP243X_GPIO2_BASE, NULL, INT_24XX_GPIO_BANK2, IH_GPIO_BASE + 32,
- METHOD_GPIO_24XX },
- { OMAP243X_GPIO3_BASE, NULL, INT_24XX_GPIO_BANK3, IH_GPIO_BASE + 64,
- METHOD_GPIO_24XX },
- { OMAP243X_GPIO4_BASE, NULL, INT_24XX_GPIO_BANK4, IH_GPIO_BASE + 96,
- METHOD_GPIO_24XX },
- { OMAP243X_GPIO5_BASE, NULL, INT_24XX_GPIO_BANK5, IH_GPIO_BASE + 128,
- METHOD_GPIO_24XX },
-};
-
-#endif
-
#ifdef CONFIG_ARCH_OMAP3
-static struct gpio_bank gpio_bank_34xx[6] = {
- { OMAP34XX_GPIO1_BASE, NULL, INT_34XX_GPIO_BANK1, IH_GPIO_BASE,
- METHOD_GPIO_24XX },
- { OMAP34XX_GPIO2_BASE, NULL, INT_34XX_GPIO_BANK2, IH_GPIO_BASE + 32,
- METHOD_GPIO_24XX },
- { OMAP34XX_GPIO3_BASE, NULL, INT_34XX_GPIO_BANK3, IH_GPIO_BASE + 64,
- METHOD_GPIO_24XX },
- { OMAP34XX_GPIO4_BASE, NULL, INT_34XX_GPIO_BANK4, IH_GPIO_BASE + 96,
- METHOD_GPIO_24XX },
- { OMAP34XX_GPIO5_BASE, NULL, INT_34XX_GPIO_BANK5, IH_GPIO_BASE + 128,
- METHOD_GPIO_24XX },
- { OMAP34XX_GPIO6_BASE, NULL, INT_34XX_GPIO_BANK6, IH_GPIO_BASE + 160,
- METHOD_GPIO_24XX },
-};
-
struct omap3_gpio_regs {
- u32 sysconfig;
u32 irqenable1;
u32 irqenable2;
u32 wake_en;
@@ -309,25 +178,14 @@ struct omap3_gpio_regs {
static struct omap3_gpio_regs gpio_context[OMAP34XX_NR_GPIOS];
#endif
-#ifdef CONFIG_ARCH_OMAP4
-static struct gpio_bank gpio_bank_44xx[6] = {
- { OMAP44XX_GPIO1_BASE, NULL, OMAP44XX_IRQ_GPIO1, IH_GPIO_BASE,
- METHOD_GPIO_44XX },
- { OMAP44XX_GPIO2_BASE, NULL, OMAP44XX_IRQ_GPIO2, IH_GPIO_BASE + 32,
- METHOD_GPIO_44XX },
- { OMAP44XX_GPIO3_BASE, NULL, OMAP44XX_IRQ_GPIO3, IH_GPIO_BASE + 64,
- METHOD_GPIO_44XX },
- { OMAP44XX_GPIO4_BASE, NULL, OMAP44XX_IRQ_GPIO4, IH_GPIO_BASE + 96,
- METHOD_GPIO_44XX },
- { OMAP44XX_GPIO5_BASE, NULL, OMAP44XX_IRQ_GPIO5, IH_GPIO_BASE + 128,
- METHOD_GPIO_44XX },
- { OMAP44XX_GPIO6_BASE, NULL, OMAP44XX_IRQ_GPIO6, IH_GPIO_BASE + 160,
- METHOD_GPIO_44XX },
-};
+/*
+ * TODO: Cleanup gpio_bank usage as it is having information
+ * related to all instances of the device
+ */
+static struct gpio_bank *gpio_bank;
-#endif
+static int bank_width;
-static struct gpio_bank *gpio_bank;
/* TODO: Analyze removing gpio_bank_count usage from driver code */
int gpio_bank_count;
@@ -634,6 +492,9 @@ static void _set_gpio_debounce(struct gpio_bank *bank, unsigned gpio,
u32 val;
u32 l;
+ if (!bank->dbck_flag)
+ return;
+
if (debounce < 32)
debounce = 0x01;
else if (debounce > 7936)
@@ -643,7 +504,7 @@ static void _set_gpio_debounce(struct gpio_bank *bank, unsigned gpio,
l = 1 << get_gpio_index(gpio);
- if (cpu_is_omap44xx())
+ if (bank->method == METHOD_GPIO_44XX)
reg += OMAP4_GPIO_DEBOUNCINGTIME;
else
reg += OMAP24XX_GPIO_DEBOUNCE_VAL;
@@ -651,7 +512,7 @@ static void _set_gpio_debounce(struct gpio_bank *bank, unsigned gpio,
__raw_writel(debounce, reg);
reg = bank->base;
- if (cpu_is_omap44xx())
+ if (bank->method == METHOD_GPIO_44XX)
reg += OMAP4_GPIO_DEBOUNCENABLE;
else
reg += OMAP24XX_GPIO_DEBOUNCE_EN;
@@ -660,12 +521,10 @@ static void _set_gpio_debounce(struct gpio_bank *bank, unsigned gpio,
if (debounce) {
val |= l;
- if (cpu_is_omap34xx() || cpu_is_omap44xx())
- clk_enable(bank->dbck);
+ clk_enable(bank->dbck);
} else {
val &= ~l;
- if (cpu_is_omap34xx() || cpu_is_omap44xx())
- clk_disable(bank->dbck);
+ clk_disable(bank->dbck);
}
bank->dbck_enable_mask = val;
@@ -1537,7 +1396,8 @@ static struct platform_device omap_mpuio_device = {
static inline void mpuio_init(void)
{
- platform_set_drvdata(&omap_mpuio_device, &gpio_bank_1610[0]);
+ struct gpio_bank *bank = get_gpio_bank(OMAP_MPUIO(0));
+ platform_set_drvdata(&omap_mpuio_device, bank);
if (platform_driver_register(&omap_mpuio_driver) == 0)
(void) platform_device_register(&omap_mpuio_device);
@@ -1642,6 +1502,13 @@ static int gpio_debounce(struct gpio_chip *chip, unsigned offset,
unsigned long flags;
bank = container_of(chip, struct gpio_bank, chip);
+
+ if (!bank->dbck) {
+ bank->dbck = clk_get(bank->dev, "dbclk");
+ if (IS_ERR(bank->dbck))
+ dev_err(bank->dev, "Could not get gpio dbck\n");
+ }
+
spin_lock_irqsave(&bank->lock, flags);
_set_gpio_debounce(bank, offset, debounce);
spin_unlock_irqrestore(&bank->lock, flags);
@@ -1670,24 +1537,6 @@ static int gpio_2irq(struct gpio_chip *chip, unsigned offset)
/*---------------------------------------------------------------------*/
-static int initialized;
-#if defined(CONFIG_ARCH_OMAP1) || defined(CONFIG_ARCH_OMAP2)
-static struct clk * gpio_ick;
-#endif
-
-#if defined(CONFIG_ARCH_OMAP2)
-static struct clk * gpio_fck;
-#endif
-
-#if defined(CONFIG_ARCH_OMAP2430)
-static struct clk * gpio5_ick;
-static struct clk * gpio5_fck;
-#endif
-
-#if defined(CONFIG_ARCH_OMAP3) || defined(CONFIG_ARCH_OMAP4)
-static struct clk *gpio_iclks[OMAP34XX_NR_GPIOS];
-#endif
-
static void __init omap_gpio_show_rev(void)
{
u32 rev;
@@ -1710,6 +1559,19 @@ static void __init omap_gpio_show_rev(void)
*/
static struct lock_class_key gpio_lock_class;
+static inline int init_gpio_info(struct platform_device *pdev)
+{
+ /* TODO: Analyze removing gpio_bank_count usage from driver code */
+ gpio_bank = kzalloc(gpio_bank_count * sizeof(struct gpio_bank),
+ GFP_KERNEL);
+ if (!gpio_bank) {
+ dev_err(&pdev->dev, "Memory alloc failed for gpio_bank\n");
+ return -ENOMEM;
+ }
+ return 0;
+}
+
+/* TODO: Cleanup cpu_is_* checks */
static void omap_gpio_mod_init(struct gpio_bank *bank, int id)
{
if (cpu_class_is_omap2()) {
@@ -1773,16 +1635,9 @@ static void omap_gpio_mod_init(struct gpio_bank *bank, int id)
static void __init omap_gpio_chip_init(struct gpio_bank *bank)
{
- int j, bank_width = 16;
+ int j;
static int gpio;
- if (cpu_is_omap7xx() && bank->method == METHOD_GPIO_7XX)
- bank_width = 32; /* 7xx has 32-bit GPIOs */
-
- if ((bank->method == METHOD_GPIO_24XX) ||
- (bank->method == METHOD_GPIO_44XX))
- bank_width = 32;
-
bank->mod_usage = 0;
/*
* REVISIT eventually switch from OMAP-specific gpio structs
@@ -1826,138 +1681,68 @@ static void __init omap_gpio_chip_init(struct gpio_bank *bank)
set_irq_data(bank->irq, bank);
}
-static int __init _omap_gpio_init(void)
+static int __devinit omap_gpio_probe(struct platform_device *pdev)
{
- int i;
+ static int gpio_init_done;
+ struct omap_gpio_platform_data *pdata;
+ struct resource *res;
+ int id;
struct gpio_bank *bank;
- int bank_size = SZ_8K; /* Module 4KB + L4 4KB except on omap1 */
- char clk_name[11];
- initialized = 1;
+ if (!pdev->dev.platform_data)
+ return -EINVAL;
-#if defined(CONFIG_ARCH_OMAP1)
- if (cpu_is_omap15xx()) {
- gpio_ick = clk_get(NULL, "arm_gpio_ck");
- if (IS_ERR(gpio_ick))
- printk("Could not get arm_gpio_ck\n");
- else
- clk_enable(gpio_ick);
- }
-#endif
-#if defined(CONFIG_ARCH_OMAP2)
- if (cpu_class_is_omap2()) {
- gpio_ick = clk_get(NULL, "gpios_ick");
- if (IS_ERR(gpio_ick))
- printk("Could not get gpios_ick\n");
- else
- clk_enable(gpio_ick);
- gpio_fck = clk_get(NULL, "gpios_fck");
- if (IS_ERR(gpio_fck))
- printk("Could not get gpios_fck\n");
- else
- clk_enable(gpio_fck);
+ pdata = pdev->dev.platform_data;
- /*
- * On 2430 & 3430 GPIO 5 uses CORE L4 ICLK
- */
-#if defined(CONFIG_ARCH_OMAP2430)
- if (cpu_is_omap2430()) {
- gpio5_ick = clk_get(NULL, "gpio5_ick");
- if (IS_ERR(gpio5_ick))
- printk("Could not get gpio5_ick\n");
- else
- clk_enable(gpio5_ick);
- gpio5_fck = clk_get(NULL, "gpio5_fck");
- if (IS_ERR(gpio5_fck))
- printk("Could not get gpio5_fck\n");
- else
- clk_enable(gpio5_fck);
- }
-#endif
- }
-#endif
+ if (!gpio_init_done) {
+ int ret;
-#if defined(CONFIG_ARCH_OMAP3) || defined(CONFIG_ARCH_OMAP4)
- if (cpu_is_omap34xx() || cpu_is_omap44xx()) {
- for (i = 0; i < OMAP34XX_NR_GPIOS; i++) {
- sprintf(clk_name, "gpio%d_ick", i + 1);
- gpio_iclks[i] = clk_get(NULL, clk_name);
- if (IS_ERR(gpio_iclks[i]))
- printk(KERN_ERR "Could not get %s\n", clk_name);
- else
- clk_enable(gpio_iclks[i]);
- }
+ ret = init_gpio_info(pdev);
+ if (ret)
+ return ret;
}
-#endif
+ id = pdev->id;
+ bank = &gpio_bank[id];
-#ifdef CONFIG_ARCH_OMAP15XX
- if (cpu_is_omap15xx()) {
- gpio_bank_count = 2;
- gpio_bank = gpio_bank_1510;
- bank_size = SZ_2K;
- }
-#endif
-#if defined(CONFIG_ARCH_OMAP16XX)
- if (cpu_is_omap16xx()) {
- gpio_bank_count = 5;
- gpio_bank = gpio_bank_1610;
- bank_size = SZ_2K;
- }
-#endif
-#if defined(CONFIG_ARCH_OMAP730) || defined(CONFIG_ARCH_OMAP850)
- if (cpu_is_omap7xx()) {
- gpio_bank_count = 7;
- gpio_bank = gpio_bank_7xx;
- bank_size = SZ_2K;
- }
-#endif
-#ifdef CONFIG_ARCH_OMAP2
- if (cpu_is_omap242x()) {
- gpio_bank_count = 4;
- gpio_bank = gpio_bank_242x;
- }
- if (cpu_is_omap243x()) {
- gpio_bank_count = 5;
- gpio_bank = gpio_bank_243x;
- }
-#endif
-#ifdef CONFIG_ARCH_OMAP3
- if (cpu_is_omap34xx()) {
- gpio_bank_count = OMAP34XX_NR_GPIOS;
- gpio_bank = gpio_bank_34xx;
- }
-#endif
-#ifdef CONFIG_ARCH_OMAP4
- if (cpu_is_omap44xx()) {
- gpio_bank_count = OMAP34XX_NR_GPIOS;
- gpio_bank = gpio_bank_44xx;
+ res = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
+ if (unlikely(!res)) {
+ dev_err(&pdev->dev, "GPIO Bank %i Invalid IRQ resource\n", id);
+ return -ENODEV;
}
-#endif
- for (i = 0; i < gpio_bank_count; i++) {
- bank = &gpio_bank[i];
- spin_lock_init(&bank->lock);
+ bank->irq = res->start;
+ bank->virtual_irq_start = pdata->virtual_irq_start;
+ bank->method = pdata->bank_type;
+ bank->dev = &pdev->dev;
+ bank->dbck_flag = pdata->dbck_flag;
+ bank_width = pdata->bank_width;
- /* Static mapping, never released */
- bank->base = ioremap(bank->pbase, bank_size);
- if (!bank->base) {
- printk(KERN_ERR "Could not ioremap gpio bank%i\n", i);
- continue;
- }
+ spin_lock_init(&bank->lock);
- omap_gpio_mod_init(bank, i);
- omap_gpio_chip_init(bank);
+ /* Static mapping, never released */
+ res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
+ if (unlikely(!res)) {
+ dev_err(&pdev->dev, "GPIO Bank %i Invalid mem resource\n", id);
+ return -ENODEV;
+ }
- if (cpu_is_omap34xx() || cpu_is_omap44xx()) {
- sprintf(clk_name, "gpio%d_dbck", i + 1);
- bank->dbck = clk_get(NULL, clk_name);
- if (IS_ERR(bank->dbck))
- printk(KERN_ERR "Could not get %s\n", clk_name);
- }
+ bank->base = ioremap(res->start, resource_size(res));
+ if (!bank->base) {
+ dev_err(&pdev->dev, "Could not ioremap gpio bank%i\n", id);
+ return -ENOMEM;
}
- omap_gpio_show_rev();
+ pm_runtime_enable(bank->dev);
+ pm_runtime_get_sync(bank->dev);
+
+ omap_gpio_mod_init(bank, id);
+ omap_gpio_chip_init(bank);
+
+ if (!gpio_init_done) {
+ omap_gpio_show_rev();
+ gpio_init_done = 1;
+ }
return 0;
}
@@ -2252,8 +2037,6 @@ void omap_gpio_save_context(void)
/* saving banks from 2-6 only since GPIO1 is in WKUP */
for (i = 1; i < gpio_bank_count; i++) {
struct gpio_bank *bank = &gpio_bank[i];
- gpio_context[i].sysconfig =
- __raw_readl(bank->base + OMAP24XX_GPIO_SYSCONFIG);
gpio_context[i].irqenable1 =
__raw_readl(bank->base + OMAP24XX_GPIO_IRQENABLE1);
gpio_context[i].irqenable2 =
@@ -2284,8 +2067,6 @@ void omap_gpio_restore_context(void)
for (i = 1; i < gpio_bank_count; i++) {
struct gpio_bank *bank = &gpio_bank[i];
- __raw_writel(gpio_context[i].sysconfig,
- bank->base + OMAP24XX_GPIO_SYSCONFIG);
__raw_writel(gpio_context[i].irqenable1,
bank->base + OMAP24XX_GPIO_IRQENABLE1);
__raw_writel(gpio_context[i].irqenable2,
@@ -2310,25 +2091,34 @@ void omap_gpio_restore_context(void)
}
#endif
+static struct platform_driver omap_gpio_driver = {
+ .probe = omap_gpio_probe,
+ .driver = {
+ .name = "omap_gpio",
+ },
+};
+
/*
- * This may get called early from board specific init
- * for boards that have interrupts routed via FPGA.
+ * gpio driver register needs to be done before
+ * machine_init functions access gpio APIs.
+ * Hence omap_gpio_drv_reg() is a postcore_initcall.
*/
+static int __init omap_gpio_drv_reg(void)
+{
+ return platform_driver_register(&omap_gpio_driver);
+}
+postcore_initcall(omap_gpio_drv_reg);
+
+/* TODO: Remove omap_gpio_init() and its usage from board files */
int __init omap_gpio_init(void)
{
- if (!initialized)
- return _omap_gpio_init();
- else
- return 0;
+ return 0;
}
static int __init omap_gpio_sysinit(void)
{
int ret = 0;
- if (!initialized)
- ret = _omap_gpio_init();
-
mpuio_init();
#if defined(CONFIG_ARCH_OMAP16XX) || defined(CONFIG_ARCH_OMAP2PLUS)
--
1.7.0.4
^ permalink raw reply related [flat|nested] 29+ messages in thread* [PATCH v7 11/11] OMAP: GPIO: Remove omap_gpio_init()
2010-11-23 14:56 [PATCH v7 00/11] OMAP: GPIO: Implement GPIO as a platform device Varadarajan, Charulatha
` (9 preceding siblings ...)
2010-11-23 14:56 ` [PATCH v7 10/11] OMAP: GPIO: Implement GPIO as a platform device Varadarajan, Charulatha
@ 2010-11-23 14:56 ` Varadarajan, Charulatha
2010-11-24 23:28 ` Tony Lindgren
2010-11-25 1:40 ` [PATCH v7 00/11] OMAP: GPIO: Implement GPIO as a platform device Kevin Hilman
11 siblings, 1 reply; 29+ messages in thread
From: Varadarajan, Charulatha @ 2010-11-23 14:56 UTC (permalink / raw)
To: linux-arm-kernel
Remove the usage of omap_gpio_init() from all omap board files
since omap_gpio_init() does nothing, after gpio is implemented
as a platform device.
Signed-off-by: Charulatha V <charu@ti.com>
---
arch/arm/mach-omap1/board-ams-delta.c | 1 -
arch/arm/mach-omap1/board-fsample.c | 1 -
arch/arm/mach-omap1/board-h2.c | 1 -
arch/arm/mach-omap1/board-h3.c | 1 -
arch/arm/mach-omap1/board-htcherald.c | 2 --
arch/arm/mach-omap1/board-innovator.c | 1 -
arch/arm/mach-omap1/board-nokia770.c | 1 -
arch/arm/mach-omap1/board-osk.c | 1 -
arch/arm/mach-omap1/board-palmte.c | 1 -
arch/arm/mach-omap1/board-palmz71.c | 1 -
arch/arm/mach-omap1/board-perseus2.c | 1 -
arch/arm/mach-omap1/board-sx1.c | 1 -
arch/arm/mach-omap1/board-voiceblue.c | 1 -
arch/arm/mach-omap2/board-2430sdp.c | 1 -
arch/arm/mach-omap2/board-3430sdp.c | 1 -
arch/arm/mach-omap2/board-3630sdp.c | 1 -
arch/arm/mach-omap2/board-4430sdp.c | 1 -
arch/arm/mach-omap2/board-am3517crane.c | 2 --
arch/arm/mach-omap2/board-am3517evm.c | 1 -
arch/arm/mach-omap2/board-apollon.c | 1 -
arch/arm/mach-omap2/board-cm-t35.c | 1 -
arch/arm/mach-omap2/board-cm-t3517.c | 1 -
arch/arm/mach-omap2/board-devkit8000.c | 1 -
arch/arm/mach-omap2/board-h4.c | 1 -
arch/arm/mach-omap2/board-igep0020.c | 1 -
arch/arm/mach-omap2/board-igep0030.c | 1 -
arch/arm/mach-omap2/board-ldp.c | 1 -
arch/arm/mach-omap2/board-n8x0.c | 1 -
arch/arm/mach-omap2/board-omap3beagle.c | 1 -
arch/arm/mach-omap2/board-omap3evm.c | 1 -
arch/arm/mach-omap2/board-omap3logic.c | 1 -
arch/arm/mach-omap2/board-omap3pandora.c | 1 -
arch/arm/mach-omap2/board-omap3stalker.c | 1 -
arch/arm/mach-omap2/board-omap3touchbook.c | 1 -
arch/arm/mach-omap2/board-omap4panda.c | 1 -
arch/arm/mach-omap2/board-overo.c | 1 -
arch/arm/mach-omap2/board-rx51.c | 1 -
arch/arm/mach-omap2/board-zoom.c | 1 -
arch/arm/plat-omap/gpio.c | 6 ------
arch/arm/plat-omap/include/plat/gpio.h | 1 -
40 files changed, 0 insertions(+), 47 deletions(-)
diff --git a/arch/arm/mach-omap1/board-ams-delta.c b/arch/arm/mach-omap1/board-ams-delta.c
index eaa7081..c94b227 100644
--- a/arch/arm/mach-omap1/board-ams-delta.c
+++ b/arch/arm/mach-omap1/board-ams-delta.c
@@ -140,7 +140,6 @@ static void __init ams_delta_init_irq(void)
{
omap1_init_common_hw();
omap_init_irq();
- omap_gpio_init();
}
static struct map_desc ams_delta_io_desc[] __initdata = {
diff --git a/arch/arm/mach-omap1/board-fsample.c b/arch/arm/mach-omap1/board-fsample.c
index 149fdd3..2698fe8 100644
--- a/arch/arm/mach-omap1/board-fsample.c
+++ b/arch/arm/mach-omap1/board-fsample.c
@@ -325,7 +325,6 @@ static void __init omap_fsample_init_irq(void)
{
omap1_init_common_hw();
omap_init_irq();
- omap_gpio_init();
fsample_init_smc91x();
}
diff --git a/arch/arm/mach-omap1/board-h2.c b/arch/arm/mach-omap1/board-h2.c
index 197adb4..035c695 100644
--- a/arch/arm/mach-omap1/board-h2.c
+++ b/arch/arm/mach-omap1/board-h2.c
@@ -374,7 +374,6 @@ static void __init h2_init_irq(void)
{
omap1_init_common_hw();
omap_init_irq();
- omap_gpio_init();
h2_init_smc91x();
}
diff --git a/arch/arm/mach-omap1/board-h3.c b/arch/arm/mach-omap1/board-h3.c
index 9126e3e..9f002a5 100644
--- a/arch/arm/mach-omap1/board-h3.c
+++ b/arch/arm/mach-omap1/board-h3.c
@@ -435,7 +435,6 @@ static void __init h3_init_irq(void)
{
omap1_init_common_hw();
omap_init_irq();
- omap_gpio_init();
h3_init_smc91x();
}
diff --git a/arch/arm/mach-omap1/board-htcherald.c b/arch/arm/mach-omap1/board-htcherald.c
index 071af3e..faa344f 100644
--- a/arch/arm/mach-omap1/board-htcherald.c
+++ b/arch/arm/mach-omap1/board-htcherald.c
@@ -577,8 +577,6 @@ static void __init htcherald_init(void)
printk(KERN_INFO "HTC Herald init.\n");
/* Do board initialization before we register all the devices */
- omap_gpio_init();
-
omap_board_config = htcherald_config;
omap_board_config_size = ARRAY_SIZE(htcherald_config);
platform_add_devices(devices, ARRAY_SIZE(devices));
diff --git a/arch/arm/mach-omap1/board-innovator.c b/arch/arm/mach-omap1/board-innovator.c
index dc2b86f..a75b169 100644
--- a/arch/arm/mach-omap1/board-innovator.c
+++ b/arch/arm/mach-omap1/board-innovator.c
@@ -290,7 +290,6 @@ static void __init innovator_init_irq(void)
{
omap1_init_common_hw();
omap_init_irq();
- omap_gpio_init();
#ifdef CONFIG_ARCH_OMAP15XX
if (cpu_is_omap1510()) {
omap1510_fpga_init_irq();
diff --git a/arch/arm/mach-omap1/board-nokia770.c b/arch/arm/mach-omap1/board-nokia770.c
index 51bd52c..eb09463 100644
--- a/arch/arm/mach-omap1/board-nokia770.c
+++ b/arch/arm/mach-omap1/board-nokia770.c
@@ -347,7 +347,6 @@ static void __init omap_nokia770_init(void)
platform_add_devices(nokia770_devices, ARRAY_SIZE(nokia770_devices));
spi_register_board_info(nokia770_spi_board_info,
ARRAY_SIZE(nokia770_spi_board_info));
- omap_gpio_init();
omap_serial_init();
omap_register_i2c_bus(1, 100, NULL, 0);
hwa742_dev_init();
diff --git a/arch/arm/mach-omap1/board-osk.c b/arch/arm/mach-omap1/board-osk.c
index e9dd791..60e6cb6 100644
--- a/arch/arm/mach-omap1/board-osk.c
+++ b/arch/arm/mach-omap1/board-osk.c
@@ -283,7 +283,6 @@ static void __init osk_init_irq(void)
{
omap1_init_common_hw();
omap_init_irq();
- omap_gpio_init();
osk_init_smc91x();
osk_init_cf();
}
diff --git a/arch/arm/mach-omap1/board-palmte.c b/arch/arm/mach-omap1/board-palmte.c
index f32738b..994dc6f 100644
--- a/arch/arm/mach-omap1/board-palmte.c
+++ b/arch/arm/mach-omap1/board-palmte.c
@@ -63,7 +63,6 @@ static void __init omap_palmte_init_irq(void)
{
omap1_init_common_hw();
omap_init_irq();
- omap_gpio_init();
}
static const int palmte_keymap[] = {
diff --git a/arch/arm/mach-omap1/board-palmz71.c b/arch/arm/mach-omap1/board-palmz71.c
index d7a245c..2afac59 100644
--- a/arch/arm/mach-omap1/board-palmz71.c
+++ b/arch/arm/mach-omap1/board-palmz71.c
@@ -62,7 +62,6 @@ omap_palmz71_init_irq(void)
{
omap1_init_common_hw();
omap_init_irq();
- omap_gpio_init();
}
static int palmz71_keymap[] = {
diff --git a/arch/arm/mach-omap1/board-perseus2.c b/arch/arm/mach-omap1/board-perseus2.c
index a8d16a2..e30188d 100644
--- a/arch/arm/mach-omap1/board-perseus2.c
+++ b/arch/arm/mach-omap1/board-perseus2.c
@@ -293,7 +293,6 @@ static void __init omap_perseus2_init_irq(void)
{
omap1_init_common_hw();
omap_init_irq();
- omap_gpio_init();
perseus2_init_smc91x();
}
/* Only FPGA needs to be mapped here. All others are done with ioremap */
diff --git a/arch/arm/mach-omap1/board-sx1.c b/arch/arm/mach-omap1/board-sx1.c
index d25f59e..463862c 100644
--- a/arch/arm/mach-omap1/board-sx1.c
+++ b/arch/arm/mach-omap1/board-sx1.c
@@ -409,7 +409,6 @@ static void __init omap_sx1_init_irq(void)
{
omap1_init_common_hw();
omap_init_irq();
- omap_gpio_init();
}
/*----------------------------------------*/
diff --git a/arch/arm/mach-omap1/board-voiceblue.c b/arch/arm/mach-omap1/board-voiceblue.c
index f5992c2..789f5ba 100644
--- a/arch/arm/mach-omap1/board-voiceblue.c
+++ b/arch/arm/mach-omap1/board-voiceblue.c
@@ -158,7 +158,6 @@ static void __init voiceblue_init_irq(void)
{
omap1_init_common_hw();
omap_init_irq();
- omap_gpio_init();
}
static void __init voiceblue_init(void)
diff --git a/arch/arm/mach-omap2/board-2430sdp.c b/arch/arm/mach-omap2/board-2430sdp.c
index b527f8d..0f14001 100644
--- a/arch/arm/mach-omap2/board-2430sdp.c
+++ b/arch/arm/mach-omap2/board-2430sdp.c
@@ -145,7 +145,6 @@ static void __init omap_2430sdp_init_irq(void)
omap_board_config_size = ARRAY_SIZE(sdp2430_config);
omap2_init_common_hw(NULL, NULL);
omap_init_irq();
- omap_gpio_init();
}
static struct twl4030_gpio_platform_data sdp2430_gpio_data = {
diff --git a/arch/arm/mach-omap2/board-3430sdp.c b/arch/arm/mach-omap2/board-3430sdp.c
index 4e3742c..5cb23f3 100644
--- a/arch/arm/mach-omap2/board-3430sdp.c
+++ b/arch/arm/mach-omap2/board-3430sdp.c
@@ -328,7 +328,6 @@ static void __init omap_3430sdp_init_irq(void)
omap3_pm_init_cpuidle(omap3_cpuidle_params_table);
omap2_init_common_hw(hyb18m512160af6_sdrc_params, NULL);
omap_init_irq();
- omap_gpio_init();
}
static int sdp3430_batt_table[] = {
diff --git a/arch/arm/mach-omap2/board-3630sdp.c b/arch/arm/mach-omap2/board-3630sdp.c
index bbcf580..b23f401 100644
--- a/arch/arm/mach-omap2/board-3630sdp.c
+++ b/arch/arm/mach-omap2/board-3630sdp.c
@@ -76,7 +76,6 @@ static void __init omap_sdp_init_irq(void)
omap2_init_common_hw(h8mbx00u0mer0em_sdrc_params,
h8mbx00u0mer0em_sdrc_params);
omap_init_irq();
- omap_gpio_init();
}
#ifdef CONFIG_OMAP_MUX
diff --git a/arch/arm/mach-omap2/board-4430sdp.c b/arch/arm/mach-omap2/board-4430sdp.c
index 94d989b..8842ec5 100644
--- a/arch/arm/mach-omap2/board-4430sdp.c
+++ b/arch/arm/mach-omap2/board-4430sdp.c
@@ -223,7 +223,6 @@ static void __init omap_4430sdp_init_irq(void)
omap2_gp_clockevent_set_gptimer(1);
#endif
gic_init_irq();
- omap_gpio_init();
}
static struct omap_musb_board_data musb_board_data = {
diff --git a/arch/arm/mach-omap2/board-am3517crane.c b/arch/arm/mach-omap2/board-am3517crane.c
index 13ead33..8ba4047 100644
--- a/arch/arm/mach-omap2/board-am3517crane.c
+++ b/arch/arm/mach-omap2/board-am3517crane.c
@@ -19,7 +19,6 @@
#include <linux/kernel.h>
#include <linux/init.h>
-#include <linux/gpio.h>
#include <mach/hardware.h>
#include <asm/mach-types.h>
@@ -50,7 +49,6 @@ static void __init am3517_crane_init_irq(void)
omap2_init_common_hw(NULL, NULL);
omap_init_irq();
- omap_gpio_init();
}
static void __init am3517_crane_init(void)
diff --git a/arch/arm/mach-omap2/board-am3517evm.c b/arch/arm/mach-omap2/board-am3517evm.c
index 0739950..df6900e 100644
--- a/arch/arm/mach-omap2/board-am3517evm.c
+++ b/arch/arm/mach-omap2/board-am3517evm.c
@@ -392,7 +392,6 @@ static void __init am3517_evm_init_irq(void)
omap2_init_common_hw(NULL, NULL);
omap_init_irq();
- omap_gpio_init();
}
static struct omap_musb_board_data musb_board_data = {
diff --git a/arch/arm/mach-omap2/board-apollon.c b/arch/arm/mach-omap2/board-apollon.c
index 2c6db1a..1ccb23b 100644
--- a/arch/arm/mach-omap2/board-apollon.c
+++ b/arch/arm/mach-omap2/board-apollon.c
@@ -280,7 +280,6 @@ static void __init omap_apollon_init_irq(void)
omap_board_config_size = ARRAY_SIZE(apollon_config);
omap2_init_common_hw(NULL, NULL);
omap_init_irq();
- omap_gpio_init();
apollon_init_smc91x();
}
diff --git a/arch/arm/mach-omap2/board-cm-t35.c b/arch/arm/mach-omap2/board-cm-t35.c
index 63f764e..78b67fb 100644
--- a/arch/arm/mach-omap2/board-cm-t35.c
+++ b/arch/arm/mach-omap2/board-cm-t35.c
@@ -686,7 +686,6 @@ static void __init cm_t35_init_irq(void)
omap2_init_common_hw(mt46h32m32lf6_sdrc_params,
mt46h32m32lf6_sdrc_params);
omap_init_irq();
- omap_gpio_init();
}
static struct omap_board_mux board_mux[] __initdata = {
diff --git a/arch/arm/mach-omap2/board-cm-t3517.c b/arch/arm/mach-omap2/board-cm-t3517.c
index 1dd303e..7ee23da 100644
--- a/arch/arm/mach-omap2/board-cm-t3517.c
+++ b/arch/arm/mach-omap2/board-cm-t3517.c
@@ -250,7 +250,6 @@ static void __init cm_t3517_init_irq(void)
omap2_init_common_hw(NULL, NULL);
omap_init_irq();
- omap_gpio_init();
}
static struct omap_board_mux board_mux[] __initdata = {
diff --git a/arch/arm/mach-omap2/board-devkit8000.c b/arch/arm/mach-omap2/board-devkit8000.c
index 53ac762..a30a7fc 100644
--- a/arch/arm/mach-omap2/board-devkit8000.c
+++ b/arch/arm/mach-omap2/board-devkit8000.c
@@ -450,7 +450,6 @@ static void __init devkit8000_init_irq(void)
#ifdef CONFIG_OMAP_32K_TIMER
omap2_gp_clockevent_set_gptimer(12);
#endif
- omap_gpio_init();
}
static void __init devkit8000_ads7846_init(void)
diff --git a/arch/arm/mach-omap2/board-h4.c b/arch/arm/mach-omap2/board-h4.c
index 929993b..68e6f4c 100644
--- a/arch/arm/mach-omap2/board-h4.c
+++ b/arch/arm/mach-omap2/board-h4.c
@@ -293,7 +293,6 @@ static void __init omap_h4_init_irq(void)
omap_board_config_size = ARRAY_SIZE(h4_config);
omap2_init_common_hw(NULL, NULL);
omap_init_irq();
- omap_gpio_init();
h4_init_flash();
}
diff --git a/arch/arm/mach-omap2/board-igep0020.c b/arch/arm/mach-omap2/board-igep0020.c
index 5e035a5..458ec4b 100644
--- a/arch/arm/mach-omap2/board-igep0020.c
+++ b/arch/arm/mach-omap2/board-igep0020.c
@@ -497,7 +497,6 @@ static void __init igep2_init_irq(void)
omap_board_config_size = ARRAY_SIZE(igep2_config);
omap2_init_common_hw(m65kxxxxam_sdrc_params, m65kxxxxam_sdrc_params);
omap_init_irq();
- omap_gpio_init();
}
static struct twl4030_codec_audio_data igep2_audio_data = {
diff --git a/arch/arm/mach-omap2/board-igep0030.c b/arch/arm/mach-omap2/board-igep0030.c
index 22b0b25..c7c57cd 100644
--- a/arch/arm/mach-omap2/board-igep0030.c
+++ b/arch/arm/mach-omap2/board-igep0030.c
@@ -291,7 +291,6 @@ static void __init igep3_init_irq(void)
{
omap2_init_common_hw(m65kxxxxam_sdrc_params, m65kxxxxam_sdrc_params);
omap_init_irq();
- omap_gpio_init();
}
static struct twl4030_platform_data igep3_twl4030_pdata = {
diff --git a/arch/arm/mach-omap2/board-ldp.c b/arch/arm/mach-omap2/board-ldp.c
index 001fd97..7160e1b 100644
--- a/arch/arm/mach-omap2/board-ldp.c
+++ b/arch/arm/mach-omap2/board-ldp.c
@@ -294,7 +294,6 @@ static void __init omap_ldp_init_irq(void)
omap_board_config_size = ARRAY_SIZE(ldp_config);
omap2_init_common_hw(NULL, NULL);
omap_init_irq();
- omap_gpio_init();
ldp_init_smsc911x();
}
diff --git a/arch/arm/mach-omap2/board-n8x0.c b/arch/arm/mach-omap2/board-n8x0.c
index ebd460e..d022301 100644
--- a/arch/arm/mach-omap2/board-n8x0.c
+++ b/arch/arm/mach-omap2/board-n8x0.c
@@ -743,7 +743,6 @@ static void __init n8x0_init_irq(void)
{
omap2_init_common_hw(NULL, NULL);
omap_init_irq();
- omap_gpio_init();
}
#ifdef CONFIG_OMAP_MUX
diff --git a/arch/arm/mach-omap2/board-omap3beagle.c b/arch/arm/mach-omap2/board-omap3beagle.c
index 14f4224..a4131be 100644
--- a/arch/arm/mach-omap2/board-omap3beagle.c
+++ b/arch/arm/mach-omap2/board-omap3beagle.c
@@ -490,7 +490,6 @@ static void __init omap3_beagle_init_irq(void)
#ifdef CONFIG_OMAP_32K_TIMER
omap2_gp_clockevent_set_gptimer(12);
#endif
- omap_gpio_init();
}
static struct platform_device *omap3_beagle_devices[] __initdata = {
diff --git a/arch/arm/mach-omap2/board-omap3evm.c b/arch/arm/mach-omap2/board-omap3evm.c
index b04365c..5ca0220 100644
--- a/arch/arm/mach-omap2/board-omap3evm.c
+++ b/arch/arm/mach-omap2/board-omap3evm.c
@@ -625,7 +625,6 @@ static void __init omap3_evm_init_irq(void)
omap_board_config_size = ARRAY_SIZE(omap3_evm_config);
omap2_init_common_hw(mt46h32m32lf6_sdrc_params, NULL);
omap_init_irq();
- omap_gpio_init();
}
static struct platform_device *omap3_evm_devices[] __initdata = {
diff --git a/arch/arm/mach-omap2/board-omap3logic.c b/arch/arm/mach-omap2/board-omap3logic.c
index 5f7d2c1..2632940 100644
--- a/arch/arm/mach-omap2/board-omap3logic.c
+++ b/arch/arm/mach-omap2/board-omap3logic.c
@@ -199,7 +199,6 @@ static void __init omap3logic_init_irq(void)
{
omap2_init_common_hw(NULL, NULL);
omap_init_irq();
- omap_gpio_init();
}
#ifdef CONFIG_OMAP_MUX
diff --git a/arch/arm/mach-omap2/board-omap3pandora.c b/arch/arm/mach-omap2/board-omap3pandora.c
index 89ed1be..1031d7c 100644
--- a/arch/arm/mach-omap2/board-omap3pandora.c
+++ b/arch/arm/mach-omap2/board-omap3pandora.c
@@ -639,7 +639,6 @@ static void __init omap3pandora_init_irq(void)
omap2_init_common_hw(mt46h32m32lf6_sdrc_params,
mt46h32m32lf6_sdrc_params);
omap_init_irq();
- omap_gpio_init();
}
static void pandora_wl1251_set_power(bool enable)
diff --git a/arch/arm/mach-omap2/board-omap3stalker.c b/arch/arm/mach-omap2/board-omap3stalker.c
index f252721..ea13e2a 100644
--- a/arch/arm/mach-omap2/board-omap3stalker.c
+++ b/arch/arm/mach-omap2/board-omap3stalker.c
@@ -589,7 +589,6 @@ static void __init omap3_stalker_init_irq(void)
#ifdef CONFIG_OMAP_32K_TIMER
omap2_gp_clockevent_set_gptimer(12);
#endif
- omap_gpio_init();
}
static struct platform_device *omap3_stalker_devices[] __initdata = {
diff --git a/arch/arm/mach-omap2/board-omap3touchbook.c b/arch/arm/mach-omap2/board-omap3touchbook.c
index 41104bb..2339964 100644
--- a/arch/arm/mach-omap2/board-omap3touchbook.c
+++ b/arch/arm/mach-omap2/board-omap3touchbook.c
@@ -428,7 +428,6 @@ static void __init omap3_touchbook_init_irq(void)
#ifdef CONFIG_OMAP_32K_TIMER
omap2_gp_clockevent_set_gptimer(12);
#endif
- omap_gpio_init();
}
static struct platform_device *omap3_touchbook_devices[] __initdata = {
diff --git a/arch/arm/mach-omap2/board-omap4panda.c b/arch/arm/mach-omap2/board-omap4panda.c
index 801f814..38f942b 100644
--- a/arch/arm/mach-omap2/board-omap4panda.c
+++ b/arch/arm/mach-omap2/board-omap4panda.c
@@ -79,7 +79,6 @@ static void __init omap4_panda_init_irq(void)
{
omap2_init_common_hw(NULL, NULL);
gic_init_irq();
- omap_gpio_init();
}
static const struct ehci_hcd_omap_platform_data ehci_pdata __initconst = {
diff --git a/arch/arm/mach-omap2/board-overo.c b/arch/arm/mach-omap2/board-overo.c
index 7053bc0..805b783 100644
--- a/arch/arm/mach-omap2/board-overo.c
+++ b/arch/arm/mach-omap2/board-overo.c
@@ -416,7 +416,6 @@ static void __init overo_init_irq(void)
omap2_init_common_hw(mt46h32m32lf6_sdrc_params,
mt46h32m32lf6_sdrc_params);
omap_init_irq();
- omap_gpio_init();
}
static struct platform_device *overo_devices[] __initdata = {
diff --git a/arch/arm/mach-omap2/board-rx51.c b/arch/arm/mach-omap2/board-rx51.c
index 36f2cf4..1c3b079 100644
--- a/arch/arm/mach-omap2/board-rx51.c
+++ b/arch/arm/mach-omap2/board-rx51.c
@@ -108,7 +108,6 @@ static void __init rx51_init_irq(void)
sdrc_params = rx51_get_sdram_timings();
omap2_init_common_hw(sdrc_params, sdrc_params);
omap_init_irq();
- omap_gpio_init();
}
extern void __init rx51_peripherals_init(void);
diff --git a/arch/arm/mach-omap2/board-zoom.c b/arch/arm/mach-omap2/board-zoom.c
index 3da69e4..abd864a 100644
--- a/arch/arm/mach-omap2/board-zoom.c
+++ b/arch/arm/mach-omap2/board-zoom.c
@@ -43,7 +43,6 @@ static void __init omap_zoom_init_irq(void)
h8mbx00u0mer0em_sdrc_params);
omap_init_irq();
- omap_gpio_init();
}
#ifdef CONFIG_OMAP_MUX
diff --git a/arch/arm/plat-omap/gpio.c b/arch/arm/plat-omap/gpio.c
index d04ded2..3bef1cf 100644
--- a/arch/arm/plat-omap/gpio.c
+++ b/arch/arm/plat-omap/gpio.c
@@ -2109,12 +2109,6 @@ static int __init omap_gpio_drv_reg(void)
}
postcore_initcall(omap_gpio_drv_reg);
-/* TODO: Remove omap_gpio_init() and its usage from board files */
-int __init omap_gpio_init(void)
-{
- return 0;
-}
-
static int __init omap_gpio_sysinit(void)
{
int ret = 0;
diff --git a/arch/arm/plat-omap/include/plat/gpio.h b/arch/arm/plat-omap/include/plat/gpio.h
index 24892a6..5f118ff 100644
--- a/arch/arm/plat-omap/include/plat/gpio.h
+++ b/arch/arm/plat-omap/include/plat/gpio.h
@@ -94,7 +94,6 @@ struct omap_gpio_platform_data {
/* TODO: Analyze removing gpio_bank_count usage from driver code */
extern int gpio_bank_count;
-extern int omap_gpio_init(void); /* Call from board init only */
extern void omap2_gpio_prepare_for_idle(int power_state);
extern void omap2_gpio_resume_after_idle(void);
extern void omap_set_gpio_debounce(int gpio, int enable);
--
1.7.0.4
^ permalink raw reply related [flat|nested] 29+ messages in thread* [PATCH v7 00/11] OMAP: GPIO: Implement GPIO as a platform device
2010-11-23 14:56 [PATCH v7 00/11] OMAP: GPIO: Implement GPIO as a platform device Varadarajan, Charulatha
` (10 preceding siblings ...)
2010-11-23 14:56 ` [PATCH v7 11/11] OMAP: GPIO: Remove omap_gpio_init() Varadarajan, Charulatha
@ 2010-11-25 1:40 ` Kevin Hilman
2010-11-25 4:31 ` Varadarajan, Charulatha
11 siblings, 1 reply; 29+ messages in thread
From: Kevin Hilman @ 2010-11-25 1:40 UTC (permalink / raw)
To: linux-arm-kernel
"Varadarajan, Charulatha" <charu@ti.com> writes:
> Implement OMAP GPIO module in platform device model. OMAP2+ specific GPIO
> module uses hwmod FW.
>
> Tested on OMAP2430, OMAP44430, OMAP3430 SDP boards, OMAP4430 Blaze board
> and zoom3 board. Verified that this patch series does not break the OMAP1
> build.
>
> Version History:
> ---------------
> v7 Series:
> - Use gpio iclks as main_clk in OMAP3 & OMAP4
> - Implement GPIO as a platform device (use hwmod FW for OMAP2+)
> and the implementation is similar to current GPIO code. Does not
> modify the gpio suspend/ resume/ prepare for odle and resume after
> idle code and these modifications would be done in a separate patch
> series. This was suggested by Kevin in another internal email thread.
OK, I'm ready to merge this series, and we can deal with the runtime PM
conversion in another series as that's where the tricky part lies.
However, I'd like one more rebase/retest due to some other dependencies.
Can you rebase/retest using my current pm-core branch? That includes
several dependencies that are also targetted for 2.6.38:
- misc. PM fixes
- i2c hwmod + runtime PM conversion (my pm-hwmod-i2c branch)
- several board file changes/updates (Tony's devel-board branch)
- hwmod core fixes (Paul's hwmod_a_2.6.38 branch)
- wdt hwmod cleanups (Paul's wdt_2.6.38 branch)
Also, can you collect the acks from Beno?t and update your changelogs to
include them. Thanks.
Please be sure your board file changes are updated for the board file
changes in the devel-board branch.
Thanks,
Kevin
^ permalink raw reply [flat|nested] 29+ messages in thread* [PATCH v7 00/11] OMAP: GPIO: Implement GPIO as a platform device
2010-11-25 1:40 ` [PATCH v7 00/11] OMAP: GPIO: Implement GPIO as a platform device Kevin Hilman
@ 2010-11-25 4:31 ` Varadarajan, Charulatha
2010-11-25 6:19 ` Kevin Hilman
0 siblings, 1 reply; 29+ messages in thread
From: Varadarajan, Charulatha @ 2010-11-25 4:31 UTC (permalink / raw)
To: linux-arm-kernel
Kevin,
On Thu, Nov 25, 2010 at 07:10, Kevin Hilman <khilman@deeprootsystems.com> wrote:
> "Varadarajan, Charulatha" <charu@ti.com> writes:
>
>> Implement OMAP GPIO module in platform device model. OMAP2+ specific GPIO
>> module uses hwmod FW.
>>
>> Tested on OMAP2430, OMAP44430, OMAP3430 SDP boards, OMAP4430 Blaze board
>> and zoom3 board. Verified that this patch series does not break the OMAP1
>> build.
>>
>> Version History:
>> ---------------
>> v7 Series:
>> - Use gpio iclks as main_clk in OMAP3 & OMAP4
>> - Implement GPIO as a platform device (use hwmod FW for OMAP2+)
>> ?and the implementation is similar to current GPIO code. Does not
>> ?modify the gpio suspend/ resume/ prepare for odle and resume after
>> ?idle code and these modifications would be done in a separate patch
>> ?series. This was suggested by Kevin in another internal email thread.
>
> OK, I'm ready to merge this series, and we can deal with the runtime PM
> conversion in another series as that's where the tricky part lies.
Thanks.
>
> However, I'd like one more rebase/retest due to some other dependencies.
> Can you rebase/retest using my current pm-core branch?
Sure I will do that.
> That includes
> several dependencies that are also targetted for 2.6.38:
>
> - misc. PM fixes
> - i2c hwmod + runtime PM conversion (my pm-hwmod-i2c branch)
> - several board file changes/updates (Tony's devel-board branch)
> - hwmod core fixes (Paul's hwmod_a_2.6.38 branch)
> - wdt hwmod cleanups (Paul's wdt_2.6.38 branch)
>
> Also, can you collect the acks from Beno?t and update your changelogs to
> include them. ?Thanks.
Sure.
>
> Please be sure your board file changes are updated for the board file
> changes in the devel-board branch.
Okay. But if it is different, should I send only the board files changes on
devel-board branch as a separate patch mentioning the dependencies on
my patch series?
^ permalink raw reply [flat|nested] 29+ messages in thread
* [PATCH v7 00/11] OMAP: GPIO: Implement GPIO as a platform device
2010-11-25 4:31 ` Varadarajan, Charulatha
@ 2010-11-25 6:19 ` Kevin Hilman
2010-11-25 6:20 ` Varadarajan, Charulatha
0 siblings, 1 reply; 29+ messages in thread
From: Kevin Hilman @ 2010-11-25 6:19 UTC (permalink / raw)
To: linux-arm-kernel
Hi Charu,
[...]
>>
>> Please be sure your board file changes are updated for the board file
>> changes in the devel-board branch.
>
> Okay. But if it is different, should I send only the board files changes on
> devel-board ?branch as a separate patch mentioning the dependencies on
> my patch series?
>
My pm-core includes the devel-board branch since it's part of Tony's
for-next, so that shouldn't be necessary.
However, if you find it's easier to break it into separate series feel
free, as long as the dependencies are mentioned.
Thanks,
Kevin
^ permalink raw reply [flat|nested] 29+ messages in thread
* [PATCH v7 00/11] OMAP: GPIO: Implement GPIO as a platform device
2010-11-25 6:19 ` Kevin Hilman
@ 2010-11-25 6:20 ` Varadarajan, Charulatha
0 siblings, 0 replies; 29+ messages in thread
From: Varadarajan, Charulatha @ 2010-11-25 6:20 UTC (permalink / raw)
To: linux-arm-kernel
On Thu, Nov 25, 2010 at 11:49, Kevin Hilman <khilman@deeprootsystems.com> wrote:
> Hi Charu,
>
> [...]
>
>>>
>>> Please be sure your board file changes are updated for the board file
>>> changes in the devel-board branch.
>>
>> Okay. But if it is different, should I send only the board files changes on
>> devel-board ?branch as a separate patch mentioning the dependencies on
>> my patch series?
>>
>
> My pm-core includes the devel-board branch since it's part of Tony's
> for-next, so that shouldn't be necessary.
>
> However, if you find it's easier to break it into separate series feel
> free, as long as the dependencies are mentioned.
Okay. Thanks.
>
> Thanks,
>
> Kevin
>
^ permalink raw reply [flat|nested] 29+ messages in thread