gpio/omap: (re)fix wakeups on level-triggered GPIOs
authorKevin Hilman <khilman@ti.com>
Thu, 17 May 2012 23:42:16 +0000 (16:42 -0700)
committerKevin Hilman <khilman@ti.com>
Fri, 18 May 2012 14:05:06 +0000 (07:05 -0700)
commit 1b1287032 (gpio/omap: fix missing check in *_runtime_suspend())
broke wakeups on level-triggered GPIOs by adding the enabled
non-wakeup GPIO check before the workaround that enables wakeups
on level-triggered IRQs, effectively disabling that workaround.

To fix, move the enabled non-wakeup GPIO check after the
level-triggered IRQ workaround.

Reported-by: Tony Lindgren <tony@atomide.com>
Tested-by: Tony Lindgren <tony@atomide.com>
Acked-by: Santosh Shilimkar <santosh.shilimkar@ti.com>
Acked-by: Tarun Kanti DebBarma <tarun.kanti@ti.com>
Tested-by: Tarun Kanti DebBarma <tarun.kanti@ti.com>
Signed-off-by: Kevin Hilman <khilman@ti.com>
drivers/gpio/gpio-omap.c

index b570a6a..c4ed172 100644 (file)
@@ -1157,9 +1157,6 @@ static int omap_gpio_runtime_suspend(struct device *dev)
 
        spin_lock_irqsave(&bank->lock, flags);
 
-       if (!bank->enabled_non_wakeup_gpios)
-               goto update_gpio_context_count;
-
        /*
         * Only edges can generate a wakeup event to the PRCM.
         *
@@ -1180,6 +1177,9 @@ static int omap_gpio_runtime_suspend(struct device *dev)
                __raw_writel(wake_hi | bank->context.risingdetect,
                             bank->base + bank->regs->risingdetect);
 
+       if (!bank->enabled_non_wakeup_gpios)
+               goto update_gpio_context_count;
+
        if (bank->power_mode != OFF_MODE) {
                bank->power_mode = 0;
                goto update_gpio_context_count;