* [PATCH] OMAP: GPIO: Fix OMAP4 GPIO reg access issues
@ 2010-03-22 14:38 Charulatha V
2010-04-06 8:21 ` Varadarajan, Charulatha
2010-04-06 22:51 ` Kevin Hilman
0 siblings, 2 replies; 5+ messages in thread
From: Charulatha V @ 2010-03-22 14:38 UTC (permalink / raw)
To: linux-omap; +Cc: Charulatha V
Access to some of the OMAP4 GPIO registers are not properly handled.
This patch fixes it.
Signed-off-by: Charulatha V <charu@ti.com>
---
arch/arm/plat-omap/gpio.c | 61 +++++++++++++++++++++++++++++++++++---------
1 files changed, 55 insertions(+), 12 deletions(-)
diff --git a/arch/arm/plat-omap/gpio.c b/arch/arm/plat-omap/gpio.c
index 76a347b..3a9891c 100644
--- a/arch/arm/plat-omap/gpio.c
+++ b/arch/arm/plat-omap/gpio.c
@@ -137,7 +137,11 @@
#define OMAP4_GPIO_IRQSTATUSCLR1 0x0040
#define OMAP4_GPIO_IRQWAKEN0 0x0044
#define OMAP4_GPIO_IRQWAKEN1 0x0048
-#define OMAP4_GPIO_SYSSTATUS 0x0104
+#define OMAP4_GPIO_SYSSTATUS 0x0114
+#define OMAP4_GPIO_IRQENABLE1 0x011c
+#define OMAP4_GPIO_WAKE_EN 0x0120
+#define OMAP4_GPIO_IRQSTATUS2 0x0128
+#define OMAP4_GPIO_IRQENABLE2 0x012c
#define OMAP4_GPIO_CTRL 0x0130
#define OMAP4_GPIO_OE 0x0134
#define OMAP4_GPIO_DATAIN 0x0138
@@ -148,6 +152,10 @@
#define OMAP4_GPIO_FALLINGDETECT 0x014c
#define OMAP4_GPIO_DEBOUNCENABLE 0x0150
#define OMAP4_GPIO_DEBOUNCINGTIME 0x0154
+#define OMAP4_GPIO_CLEARIRQENABLE1 0x0160
+#define OMAP4_GPIO_SETIRQENABLE1 0x0164
+#define OMAP4_GPIO_CLEARWKUENA 0x0180
+#define OMAP4_GPIO_SETWKUENA 0x0184
#define OMAP4_GPIO_CLEARDATAOUT 0x0190
#define OMAP4_GPIO_SETDATAOUT 0x0194
/*
@@ -591,12 +599,16 @@ static int _get_gpio_dataout(struct gpio_bank *bank, int gpio)
reg += OMAP7XX_GPIO_DATA_OUTPUT;
break;
#endif
-#ifdef CONFIG_ARCH_OMAP2PLUS
+#if defined(CONFIG_ARCH_OMAP2) || defined(CONFIG_ARCH_OMAP3)
case METHOD_GPIO_24XX:
- case METHOD_GPIO_44XX:
reg += OMAP24XX_GPIO_DATAOUT;
break;
#endif
+#ifdef CONFIG_ARCH_OMAP4
+ case METHOD_GPIO_44XX:
+ reg += OMAP4_GPIO_DATAOUT;
+ break;
+#endif
default:
return -EINVAL;
}
@@ -1200,11 +1215,17 @@ static int omap_gpio_request(struct gpio_chip *chip, unsigned offset)
#endif
if (!cpu_class_is_omap1()) {
if (!bank->mod_usage) {
+ void __iomem *reg = bank->base;
u32 ctrl;
- ctrl = __raw_readl(bank->base + OMAP24XX_GPIO_CTRL);
- ctrl &= 0xFFFFFFFE;
+
+ if (cpu_is_omap24xx() || cpu_is_omap34xx())
+ reg += OMAP24XX_GPIO_CTRL;
+ else if (cpu_is_omap44xx())
+ reg += OMAP4_GPIO_CTRL;
+ ctrl = __raw_readl(reg);
/* Module is enabled, clocks are not gated */
- __raw_writel(ctrl, bank->base + OMAP24XX_GPIO_CTRL);
+ ctrl &= 0xFFFFFFFE;
+ __raw_writel(ctrl, reg);
}
bank->mod_usage |= 1 << offset;
}
@@ -1226,22 +1247,34 @@ static void omap_gpio_free(struct gpio_chip *chip, unsigned offset)
__raw_writel(1 << offset, reg);
}
#endif
-#ifdef CONFIG_ARCH_OMAP2PLUS
- if ((bank->method == METHOD_GPIO_24XX) ||
- (bank->method == METHOD_GPIO_44XX)) {
+#if defined(CONFIG_ARCH_OMAP2) || defined(CONFIG_ARCH_OMAP3)
+ if (bank->method == METHOD_GPIO_24XX) {
/* Disable wake-up during idle for dynamic tick */
void __iomem *reg = bank->base + OMAP24XX_GPIO_CLEARWKUENA;
__raw_writel(1 << offset, reg);
}
#endif
+#ifdef CONFIG_ARCH_OMAP4
+ if (bank->method == METHOD_GPIO_44XX) {
+ /* Disable wake-up during idle for dynamic tick */
+ void __iomem *reg = bank->base + OMAP4_GPIO_IRQWAKEN0;
+ __raw_writel(1 << offset, reg);
+ }
+#endif
if (!cpu_class_is_omap1()) {
bank->mod_usage &= ~(1 << offset);
if (!bank->mod_usage) {
+ void __iomem *reg = bank->base;
u32 ctrl;
- ctrl = __raw_readl(bank->base + OMAP24XX_GPIO_CTRL);
+
+ if (cpu_is_omap24xx() || cpu_is_omap34xx())
+ reg += OMAP24XX_GPIO_CTRL;
+ else if (cpu_is_omap44xx())
+ reg += OMAP4_GPIO_CTRL;
+ ctrl = __raw_readl(reg);
/* Module is disabled, clocks are gated */
ctrl |= 1;
- __raw_writel(ctrl, bank->base + OMAP24XX_GPIO_CTRL);
+ __raw_writel(ctrl, reg);
}
}
_reset_gpio(bank, bank->chip.base + offset);
@@ -1570,9 +1603,14 @@ static int gpio_is_input(struct gpio_bank *bank, int mask)
reg += OMAP7XX_GPIO_DIR_CONTROL;
break;
case METHOD_GPIO_24XX:
- case METHOD_GPIO_44XX:
reg += OMAP24XX_GPIO_OE;
break;
+ case METHOD_GPIO_44XX:
+ reg += OMAP4_GPIO_OE;
+ break;
+ default:
+ WARN_ON(1);
+ return -EINVAL;
}
return __raw_readl(reg) & mask;
}
--
1.6.3.3
^ permalink raw reply related [flat|nested] 5+ messages in thread
* RE: [PATCH] OMAP: GPIO: Fix OMAP4 GPIO reg access issues
2010-03-22 14:38 [PATCH] OMAP: GPIO: Fix OMAP4 GPIO reg access issues Charulatha V
@ 2010-04-06 8:21 ` Varadarajan, Charulatha
2010-04-06 22:51 ` Kevin Hilman
1 sibling, 0 replies; 5+ messages in thread
From: Varadarajan, Charulatha @ 2010-04-06 8:21 UTC (permalink / raw)
To: linux-omap
Tony,
If there are no review comments, can you please push this patch?
-V Charulatha
> -----Original Message-----
> From: Varadarajan, Charulatha
> Sent: Monday, March 22, 2010 8:08 PM
> To: linux-omap@vger.kernel.org
> Cc: Varadarajan, Charulatha
> Subject: [PATCH] OMAP: GPIO: Fix OMAP4 GPIO reg access issues
>
> Access to some of the OMAP4 GPIO registers are not properly handled.
> This patch fixes it.
>
> Signed-off-by: Charulatha V <charu@ti.com>
> ---
> arch/arm/plat-omap/gpio.c | 61 +++++++++++++++++++++++++++++++++++---------
> 1 files changed, 55 insertions(+), 12 deletions(-)
>
> diff --git a/arch/arm/plat-omap/gpio.c b/arch/arm/plat-omap/gpio.c
> index 76a347b..3a9891c 100644
> --- a/arch/arm/plat-omap/gpio.c
> +++ b/arch/arm/plat-omap/gpio.c
> @@ -137,7 +137,11 @@
> #define OMAP4_GPIO_IRQSTATUSCLR1 0x0040
> #define OMAP4_GPIO_IRQWAKEN0 0x0044
> #define OMAP4_GPIO_IRQWAKEN1 0x0048
> -#define OMAP4_GPIO_SYSSTATUS 0x0104
> +#define OMAP4_GPIO_SYSSTATUS 0x0114
> +#define OMAP4_GPIO_IRQENABLE1 0x011c
> +#define OMAP4_GPIO_WAKE_EN 0x0120
> +#define OMAP4_GPIO_IRQSTATUS2 0x0128
> +#define OMAP4_GPIO_IRQENABLE2 0x012c
> #define OMAP4_GPIO_CTRL 0x0130
> #define OMAP4_GPIO_OE 0x0134
> #define OMAP4_GPIO_DATAIN 0x0138
> @@ -148,6 +152,10 @@
> #define OMAP4_GPIO_FALLINGDETECT 0x014c
> #define OMAP4_GPIO_DEBOUNCENABLE 0x0150
> #define OMAP4_GPIO_DEBOUNCINGTIME 0x0154
> +#define OMAP4_GPIO_CLEARIRQENABLE1 0x0160
> +#define OMAP4_GPIO_SETIRQENABLE1 0x0164
> +#define OMAP4_GPIO_CLEARWKUENA 0x0180
> +#define OMAP4_GPIO_SETWKUENA 0x0184
> #define OMAP4_GPIO_CLEARDATAOUT 0x0190
> #define OMAP4_GPIO_SETDATAOUT 0x0194
> /*
> @@ -591,12 +599,16 @@ static int _get_gpio_dataout(struct gpio_bank *bank, int
> gpio)
> reg += OMAP7XX_GPIO_DATA_OUTPUT;
> break;
> #endif
> -#ifdef CONFIG_ARCH_OMAP2PLUS
> +#if defined(CONFIG_ARCH_OMAP2) || defined(CONFIG_ARCH_OMAP3)
> case METHOD_GPIO_24XX:
> - case METHOD_GPIO_44XX:
> reg += OMAP24XX_GPIO_DATAOUT;
> break;
> #endif
> +#ifdef CONFIG_ARCH_OMAP4
> + case METHOD_GPIO_44XX:
> + reg += OMAP4_GPIO_DATAOUT;
> + break;
> +#endif
> default:
> return -EINVAL;
> }
> @@ -1200,11 +1215,17 @@ static int omap_gpio_request(struct gpio_chip *chip,
> unsigned offset)
> #endif
> if (!cpu_class_is_omap1()) {
> if (!bank->mod_usage) {
> + void __iomem *reg = bank->base;
> u32 ctrl;
> - ctrl = __raw_readl(bank->base + OMAP24XX_GPIO_CTRL);
> - ctrl &= 0xFFFFFFFE;
> +
> + if (cpu_is_omap24xx() || cpu_is_omap34xx())
> + reg += OMAP24XX_GPIO_CTRL;
> + else if (cpu_is_omap44xx())
> + reg += OMAP4_GPIO_CTRL;
> + ctrl = __raw_readl(reg);
> /* Module is enabled, clocks are not gated */
> - __raw_writel(ctrl, bank->base + OMAP24XX_GPIO_CTRL);
> + ctrl &= 0xFFFFFFFE;
> + __raw_writel(ctrl, reg);
> }
> bank->mod_usage |= 1 << offset;
> }
> @@ -1226,22 +1247,34 @@ static void omap_gpio_free(struct gpio_chip *chip,
> unsigned offset)
> __raw_writel(1 << offset, reg);
> }
> #endif
> -#ifdef CONFIG_ARCH_OMAP2PLUS
> - if ((bank->method == METHOD_GPIO_24XX) ||
> - (bank->method == METHOD_GPIO_44XX)) {
> +#if defined(CONFIG_ARCH_OMAP2) || defined(CONFIG_ARCH_OMAP3)
> + if (bank->method == METHOD_GPIO_24XX) {
> /* Disable wake-up during idle for dynamic tick */
> void __iomem *reg = bank->base + OMAP24XX_GPIO_CLEARWKUENA;
> __raw_writel(1 << offset, reg);
> }
> #endif
> +#ifdef CONFIG_ARCH_OMAP4
> + if (bank->method == METHOD_GPIO_44XX) {
> + /* Disable wake-up during idle for dynamic tick */
> + void __iomem *reg = bank->base + OMAP4_GPIO_IRQWAKEN0;
> + __raw_writel(1 << offset, reg);
> + }
> +#endif
> if (!cpu_class_is_omap1()) {
> bank->mod_usage &= ~(1 << offset);
> if (!bank->mod_usage) {
> + void __iomem *reg = bank->base;
> u32 ctrl;
> - ctrl = __raw_readl(bank->base + OMAP24XX_GPIO_CTRL);
> +
> + if (cpu_is_omap24xx() || cpu_is_omap34xx())
> + reg += OMAP24XX_GPIO_CTRL;
> + else if (cpu_is_omap44xx())
> + reg += OMAP4_GPIO_CTRL;
> + ctrl = __raw_readl(reg);
> /* Module is disabled, clocks are gated */
> ctrl |= 1;
> - __raw_writel(ctrl, bank->base + OMAP24XX_GPIO_CTRL);
> + __raw_writel(ctrl, reg);
> }
> }
> _reset_gpio(bank, bank->chip.base + offset);
> @@ -1570,9 +1603,14 @@ static int gpio_is_input(struct gpio_bank *bank, int mask)
> reg += OMAP7XX_GPIO_DIR_CONTROL;
> break;
> case METHOD_GPIO_24XX:
> - case METHOD_GPIO_44XX:
> reg += OMAP24XX_GPIO_OE;
> break;
> + case METHOD_GPIO_44XX:
> + reg += OMAP4_GPIO_OE;
> + break;
> + default:
> + WARN_ON(1);
> + return -EINVAL;
> }
> return __raw_readl(reg) & mask;
> }
> --
> 1.6.3.3
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] OMAP: GPIO: Fix OMAP4 GPIO reg access issues
2010-03-22 14:38 [PATCH] OMAP: GPIO: Fix OMAP4 GPIO reg access issues Charulatha V
2010-04-06 8:21 ` Varadarajan, Charulatha
@ 2010-04-06 22:51 ` Kevin Hilman
2010-04-07 2:32 ` Varadarajan, Charulatha
1 sibling, 1 reply; 5+ messages in thread
From: Kevin Hilman @ 2010-04-06 22:51 UTC (permalink / raw)
To: Charulatha V; +Cc: linux-omap
Charulatha V <charu@ti.com> writes:
> Access to some of the OMAP4 GPIO registers are not properly handled.
> This patch fixes it.
>
Tested on... ?
> Signed-off-by: Charulatha V <charu@ti.com>
> ---
> arch/arm/plat-omap/gpio.c | 61 +++++++++++++++++++++++++++++++++++---------
> 1 files changed, 55 insertions(+), 12 deletions(-)
>
> diff --git a/arch/arm/plat-omap/gpio.c b/arch/arm/plat-omap/gpio.c
> index 76a347b..3a9891c 100644
> --- a/arch/arm/plat-omap/gpio.c
> +++ b/arch/arm/plat-omap/gpio.c
> @@ -137,7 +137,11 @@
> #define OMAP4_GPIO_IRQSTATUSCLR1 0x0040
> #define OMAP4_GPIO_IRQWAKEN0 0x0044
> #define OMAP4_GPIO_IRQWAKEN1 0x0048
> -#define OMAP4_GPIO_SYSSTATUS 0x0104
> +#define OMAP4_GPIO_SYSSTATUS 0x0114
> +#define OMAP4_GPIO_IRQENABLE1 0x011c
> +#define OMAP4_GPIO_WAKE_EN 0x0120
> +#define OMAP4_GPIO_IRQSTATUS2 0x0128
> +#define OMAP4_GPIO_IRQENABLE2 0x012c
> #define OMAP4_GPIO_CTRL 0x0130
> #define OMAP4_GPIO_OE 0x0134
> #define OMAP4_GPIO_DATAIN 0x0138
> @@ -148,6 +152,10 @@
> #define OMAP4_GPIO_FALLINGDETECT 0x014c
> #define OMAP4_GPIO_DEBOUNCENABLE 0x0150
> #define OMAP4_GPIO_DEBOUNCINGTIME 0x0154
> +#define OMAP4_GPIO_CLEARIRQENABLE1 0x0160
> +#define OMAP4_GPIO_SETIRQENABLE1 0x0164
> +#define OMAP4_GPIO_CLEARWKUENA 0x0180
> +#define OMAP4_GPIO_SETWKUENA 0x0184
> #define OMAP4_GPIO_CLEARDATAOUT 0x0190
[...]
> @@ -1570,9 +1603,14 @@ static int gpio_is_input(struct gpio_bank *bank, int mask)
> reg += OMAP7XX_GPIO_DIR_CONTROL;
> break;
> case METHOD_GPIO_24XX:
> - case METHOD_GPIO_44XX:
> reg += OMAP24XX_GPIO_OE;
> break;
> + case METHOD_GPIO_44XX:
> + reg += OMAP4_GPIO_OE;
> + break;
> + default:
> + WARN_ON(1);
> + return -EINVAL;
If you add a WARN, please add a helpful string.
Otherwise, this looks OK to me.
Acked-by: Kevin Hilman <khilman@deeprootsystems.com>
^ permalink raw reply [flat|nested] 5+ messages in thread
* RE: [PATCH] OMAP: GPIO: Fix OMAP4 GPIO reg access issues
2010-04-06 22:51 ` Kevin Hilman
@ 2010-04-07 2:32 ` Varadarajan, Charulatha
2010-04-07 15:09 ` Kevin Hilman
0 siblings, 1 reply; 5+ messages in thread
From: Varadarajan, Charulatha @ 2010-04-07 2:32 UTC (permalink / raw)
To: Kevin Hilman; +Cc: linux-omap
________________________________________
> From: Kevin Hilman [khilman@deeprootsystems.com]
> Sent: Wednesday, April 07, 2010 4:21 AM
> To: Varadarajan, Charulatha
> Cc: linux-omap@vger.kernel.org
> Subject: Re: [PATCH] OMAP: GPIO: Fix OMAP4 GPIO reg access issues
>
> Charulatha V <charu@ti.com> writes:
>
> > Access to some of the OMAP4 GPIO registers are not properly handled.
> > This patch fixes it.
> >
>
> Tested on... ?
Tested on 3430SDP and 4430SDP.
> > Signed-off-by: Charulatha V <charu@ti.com>
> ---
[...]
> > @@ -1570,9 +1603,14 @@ static int gpio_is_input(struct gpio_bank *bank, int mask)
> > reg += OMAP7XX_GPIO_DIR_CONTROL;
> > break;
> > case METHOD_GPIO_24XX:
> > - case METHOD_GPIO_44XX:
> > reg += OMAP24XX_GPIO_OE;
> > break;
> > + case METHOD_GPIO_44XX:
> > + reg += OMAP4_GPIO_OE;
> > + break;
> > + default:
> > + WARN_ON(1);
> > + return -EINVAL;
>
> If you add a WARN, please add a helpful string.
Added this WARN in the same way as in other functions
of the same file.
>
> Otherwise, this looks OK to me.
>
> Acked-by: Kevin Hilman <khilman@deeprootsystems.com>
Thanks.
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] OMAP: GPIO: Fix OMAP4 GPIO reg access issues
2010-04-07 2:32 ` Varadarajan, Charulatha
@ 2010-04-07 15:09 ` Kevin Hilman
0 siblings, 0 replies; 5+ messages in thread
From: Kevin Hilman @ 2010-04-07 15:09 UTC (permalink / raw)
To: Varadarajan, Charulatha; +Cc: linux-omap
"Varadarajan, Charulatha" <charu@ti.com> writes:
> ________________________________________
>> From: Kevin Hilman [khilman@deeprootsystems.com]
>> Sent: Wednesday, April 07, 2010 4:21 AM
>> To: Varadarajan, Charulatha
>> Cc: linux-omap@vger.kernel.org
>> Subject: Re: [PATCH] OMAP: GPIO: Fix OMAP4 GPIO reg access issues
>>
>> Charulatha V <charu@ti.com> writes:
>>
>> > Access to some of the OMAP4 GPIO registers are not properly handled.
>> > This patch fixes it.
>> >
>>
>> Tested on... ?
>
> Tested on 3430SDP and 4430SDP.
Please update changelog accordingly.
>> > Signed-off-by: Charulatha V <charu@ti.com>
>> ---
>
> [...]
>
>> > @@ -1570,9 +1603,14 @@ static int gpio_is_input(struct gpio_bank *bank, int mask)
>> > reg += OMAP7XX_GPIO_DIR_CONTROL;
>> > break;
>> > case METHOD_GPIO_24XX:
>> > - case METHOD_GPIO_44XX:
>> > reg += OMAP24XX_GPIO_OE;
>> > break;
>> > + case METHOD_GPIO_44XX:
>> > + reg += OMAP4_GPIO_OE;
>> > + break;
>> > + default:
>> > + WARN_ON(1);
>> > + return -EINVAL;
>>
>> If you add a WARN, please add a helpful string.
>
> Added this WARN in the same way as in other functions
> of the same file.
That still doesn't make it helpful.
Repeating an error does not make it correct.
Kevin
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2010-04-07 15:09 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2010-03-22 14:38 [PATCH] OMAP: GPIO: Fix OMAP4 GPIO reg access issues Charulatha V
2010-04-06 8:21 ` Varadarajan, Charulatha
2010-04-06 22:51 ` Kevin Hilman
2010-04-07 2:32 ` Varadarajan, Charulatha
2010-04-07 15:09 ` Kevin Hilman
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).