diff options
author | Hiroshi DOYU <Hiroshi.DOYU@nokia.com> | 2006-09-25 05:41:46 -0400 |
---|---|---|
committer | Tony Lindgren <tony@atomide.com> | 2006-09-25 05:41:46 -0400 |
commit | bee7930f4aa501de4e3c793640c3af31fd3867e2 (patch) | |
tree | 2df6d29c65e21ba82f1ac86ae42a5a7f16c48d74 /arch/arm/plat-omap/gpio.c | |
parent | 0d9356cbb5d7a0bc8628f74fb15fd7268372c7fe (diff) |
ARM: OMAP: GPIO: IRQSTATUS2 workaround for retention state
In OMAP2420, an incoming GPIO interrupt always sets both GPIO_IRQSTATUS1
and GPIO_IRQSTATUS2, even if the relevant bit is disabled in
GPIO_IRQENABLE1/2 and DSP doesn't use GPIO at all. GPIO_IRQSTATUS1
is for MPU and GPIO_IRQSTATUS2 is for DSP. If IRQSTATUS is set, this
will prevent the system from going to idle state. This patch also clears
IRQSTATUS2 to avoid the above situation.
Signed-off-by: Hiroshi DOYU <Hiroshi.DOYU@nokia.com>
Signed-off-by: Juha Yrjola <juha.yrjola@solidboot.com>
Signed-off-by: Tony Lindgren <tony@atomide.com>
Diffstat (limited to 'arch/arm/plat-omap/gpio.c')
-rw-r--r-- | arch/arm/plat-omap/gpio.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/arch/arm/plat-omap/gpio.c b/arch/arm/plat-omap/gpio.c index f7f929a14bf5..f1aaa5519cf3 100644 --- a/arch/arm/plat-omap/gpio.c +++ b/arch/arm/plat-omap/gpio.c | |||
@@ -94,6 +94,8 @@ | |||
94 | #define OMAP24XX_GPIO_SYSCONFIG 0x0010 | 94 | #define OMAP24XX_GPIO_SYSCONFIG 0x0010 |
95 | #define OMAP24XX_GPIO_SYSSTATUS 0x0014 | 95 | #define OMAP24XX_GPIO_SYSSTATUS 0x0014 |
96 | #define OMAP24XX_GPIO_IRQSTATUS1 0x0018 | 96 | #define OMAP24XX_GPIO_IRQSTATUS1 0x0018 |
97 | #define OMAP24XX_GPIO_IRQSTATUS2 0x0028 | ||
98 | #define OMAP24XX_GPIO_IRQENABLE2 0x002c | ||
97 | #define OMAP24XX_GPIO_IRQENABLE1 0x001c | 99 | #define OMAP24XX_GPIO_IRQENABLE1 0x001c |
98 | #define OMAP24XX_GPIO_CTRL 0x0030 | 100 | #define OMAP24XX_GPIO_CTRL 0x0030 |
99 | #define OMAP24XX_GPIO_OE 0x0034 | 101 | #define OMAP24XX_GPIO_OE 0x0034 |
@@ -529,6 +531,10 @@ static void _clear_gpio_irqbank(struct gpio_bank *bank, int gpio_mask) | |||
529 | return; | 531 | return; |
530 | } | 532 | } |
531 | __raw_writel(gpio_mask, reg); | 533 | __raw_writel(gpio_mask, reg); |
534 | |||
535 | /* Workaround for clearing DSP GPIO interrupts to allow retention */ | ||
536 | if (cpu_is_omap2420()) | ||
537 | __raw_writel(gpio_mask, bank->base + OMAP24XX_GPIO_IRQSTATUS2); | ||
532 | } | 538 | } |
533 | 539 | ||
534 | static inline void _clear_gpio_irqstatus(struct gpio_bank *bank, int gpio) | 540 | static inline void _clear_gpio_irqstatus(struct gpio_bank *bank, int gpio) |