linux-omap.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [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).