1. 11 Apr, 2019 2 commits
    • Russell King's avatar
      gpio: gpio-omap: Remove conditional pm_runtime handling for GPIO interrupts · 044e499a
      Russell King authored
      Commit b764a586 ("gpio: omap: Remove custom PM calls and use cpu_pm
      instead") moved interrupt using GPIO banks to idle with cpu_pm in order
      to drop the use of pm_runtime_irq_safe() in a later patch. The GPIO
      banks with no interrupts claimed are still being idled based on PM
      runtime calls. However this caused a regression for am437x suspend for
      rtc+ddr idle mode where the device cannot enter idle state as reported
      by Keerthy <j-keerthy@ti.com>.
      
      To fix the issue, we must not fail the pm_runtime callbacks. For GPIO
      interrupts, we already have irq_chip_pm_get increment the PM runtime
      use count as pointed out by Grygorii Strashko <grygorii.strashko@ti.com>.
      
      So all we need to do is remove the conditional handling in the
      runtime_suspend and resume functions and let the CPU PM notifier idle
      the GPIO banks.
      
      Cc: Aaro Koskinen <aaro.koskinen@iki.fi>
      Cc: Grygorii Strashko <grygorii.strashko@ti.com>
      Cc: Keerthy <j-keerthy@ti.com>
      Cc: Peter Ujfalusi <peter.ujfalusi@ti.com>
      Cc: Tero Kristo <t-kristo@ti.com>
      Fixes: b764a586 ("gpio: omap: Remove custom PM calls and use cpu_pm instead")
      Reported-by: default avatarKeerthy <j-keerthy@ti.com>
      Signed-off-by: default avatarRussell King <rmk+kernel@armlinux.org.uk>
      [tony@atomide.com: updated patch description, dropped runtime count changes]
      Signed-off-by: default avatarTony Lindgren <tony@atomide.com>
      Tested-by: default avatarKeerthy <j-keerthy@ti.com>
      Reviewed-by: default avatarKeerthy <j-keerthy@ti.com>
      Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
      044e499a
    • Russell King's avatar
      gpio: gpio-omap: configure edge detection for level IRQs for idle wakeup · e6818d29
      Russell King authored
      The GPIO block can enter idle independently of the CPU power management
      calls via smart-idle.  When the GPIO block enters idle, level detection
      stops working due to clocks being shut off, and an alternative form of
      edge detection is used.  However, this needs the edge detection
      registers set to mark the appropriate edges.
      
      Arrange to configure the edge detection enables along with the level
      detection to ensure that any transition to active interrupt state that
      occurs while the block is idle is detected as a wake-up event.
      
      Since we enable the edge detection when configuring the IRQ, both
      omap2_gpio_enable_level_quirk() nor omap2_gpio_disable_level_quirk()
      become redundant, which also means OMAP_GPIO_QUIRK_IDLE_REMOVE_TRIGGER
      can be removed. This can be now done without regressions as patch
      "gpio: gpio-omap: fix level interrupt idling" allows level interrupts
      to idle on omap4 without a workaround.
      
      Cc: Aaro Koskinen <aaro.koskinen@iki.fi>
      Cc: Grygorii Strashko <grygorii.strashko@ti.com>
      Cc: Keerthy <j-keerthy@ti.com>
      Cc: Peter Ujfalusi <peter.ujfalusi@ti.com>
      Cc: Tero Kristo <t-kristo@ti.com>
      Signed-off-by: default avatarRussell King <rmk+kernel@armlinux.org.uk>
      [tony@atomide.com: update description for the fix dependency]
      Signed-off-by: default avatarTony Lindgren <tony@atomide.com>
      Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
      e6818d29
  2. 08 Apr, 2019 7 commits
  3. 04 Apr, 2019 31 commits