diff options
Diffstat (limited to 'drivers/gpio/gpio-omap.c')
-rw-r--r-- | drivers/gpio/gpio-omap.c | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/drivers/gpio/gpio-omap.c b/drivers/gpio/gpio-omap.c index b281955..abb2e7e 100644 --- a/drivers/gpio/gpio-omap.c +++ b/drivers/gpio/gpio-omap.c @@ -1496,10 +1496,10 @@ static int omap2_gpio_set_edge_wakeup(struct gpio_bank *bank, bool suspend) * even if they are set for level detection only. */ __raw_writel(bank->context.edge_falling | - (bank->context.ew_leveldetect0 & wkup_status), + (bank->type_leveldetect0 & wkup_status), (bank->base + bank->regs->fallingdetect)); __raw_writel(bank->context.edge_rising | - (bank->context.ew_leveldetect1 & wkup_status), + (bank->type_leveldetect1 & wkup_status), (bank->base + bank->regs->risingdetect)); __raw_writel(0, bank->base + bank->regs->leveldetect0); __raw_writel(0, bank->base + bank->regs->leveldetect1); @@ -1566,12 +1566,15 @@ int omap2_gpio_prepare_for_idle(int off_mode, bool suspend) struct gpio_bank *bank; list_for_each_entry(bank, &omap_gpio_list, node) { + if (!bank->mod_usage) + continue; + omap2_gpio_set_wakeupenables(bank); if (omap2_gpio_set_edge_wakeup(bank, suspend)) ret = -EBUSY; - if (bank->mod_usage && bank->loses_context && off_mode) + if (bank->loses_context) if (pm_runtime_put_sync_suspend(bank->dev) < 0) dev_err(bank->dev, "%s: GPIO bank %d " "pm_runtime_put_sync failed\n", @@ -1589,7 +1592,10 @@ void omap2_gpio_resume_after_idle(int off_mode) struct gpio_bank *bank; list_for_each_entry(bank, &omap_gpio_list, node) { - if (bank->mod_usage && bank->loses_context && off_mode) + if (!bank->mod_usage) + continue; + + if (bank->loses_context) if (pm_runtime_get_sync(bank->dev) < 0) dev_err(bank->dev, "%s: GPIO bank %d " "pm_runtime_get_sync failed\n", |