Commit b982ff0e authored by Rabin Vincent's avatar Rabin Vincent Committed by Linus Walleij

gpio/nomadik: don't set SLPM to 1 for non-wakeup pins

Setting GPIOs' SLPM value to 1 (WAKEUP_DISABLE) is seen to cause
increased power consumption in sleep/deep-sleep. So remove the code
which disables SLPM based on the wakeup settings and only ensure
it is on as needed.
Signed-off-by: default avatarRabin Vincent <rabin.vincent@stericsson.com>
Reviewed-by: default avatarSrinidhi Kasagar <srinidhi.kasagar@stericsson.com>
Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
parent 66f75a5d
...@@ -58,7 +58,6 @@ struct nmk_gpio_chip { ...@@ -58,7 +58,6 @@ struct nmk_gpio_chip {
u32 real_wake; u32 real_wake;
u32 rwimsc; u32 rwimsc;
u32 fwimsc; u32 fwimsc;
u32 slpm;
u32 pull_up; u32 pull_up;
}; };
...@@ -583,10 +582,14 @@ static void __nmk_gpio_irq_modify(struct nmk_gpio_chip *nmk_chip, ...@@ -583,10 +582,14 @@ static void __nmk_gpio_irq_modify(struct nmk_gpio_chip *nmk_chip,
static void __nmk_gpio_set_wake(struct nmk_gpio_chip *nmk_chip, static void __nmk_gpio_set_wake(struct nmk_gpio_chip *nmk_chip,
int gpio, bool on) int gpio, bool on)
{ {
if (nmk_chip->sleepmode) { /*
* Ensure WAKEUP_ENABLE is on. No need to disable it if wakeup is
* disabled, since setting SLPM to 1 increases power consumption, and
* wakeup is anyhow controlled by the RIMSC and FIMSC registers.
*/
if (nmk_chip->sleepmode && on) {
__nmk_gpio_set_slpm(nmk_chip, gpio - nmk_chip->chip.base, __nmk_gpio_set_slpm(nmk_chip, gpio - nmk_chip->chip.base,
on ? NMK_GPIO_SLPM_WAKEUP_ENABLE NMK_GPIO_SLPM_WAKEUP_ENABLE);
: NMK_GPIO_SLPM_WAKEUP_DISABLE);
} }
__nmk_gpio_irq_modify(nmk_chip, gpio, WAKE, on); __nmk_gpio_irq_modify(nmk_chip, gpio, WAKE, on);
...@@ -1016,13 +1019,6 @@ void nmk_gpio_wakeups_suspend(void) ...@@ -1016,13 +1019,6 @@ void nmk_gpio_wakeups_suspend(void)
writel(chip->fwimsc & chip->real_wake, writel(chip->fwimsc & chip->real_wake,
chip->addr + NMK_GPIO_FWIMSC); chip->addr + NMK_GPIO_FWIMSC);
if (chip->sleepmode) {
chip->slpm = readl(chip->addr + NMK_GPIO_SLPC);
/* 0 -> wakeup enable */
writel(~chip->real_wake, chip->addr + NMK_GPIO_SLPC);
}
clk_disable(chip->clk); clk_disable(chip->clk);
} }
} }
...@@ -1042,9 +1038,6 @@ void nmk_gpio_wakeups_resume(void) ...@@ -1042,9 +1038,6 @@ void nmk_gpio_wakeups_resume(void)
writel(chip->rwimsc, chip->addr + NMK_GPIO_RWIMSC); writel(chip->rwimsc, chip->addr + NMK_GPIO_RWIMSC);
writel(chip->fwimsc, chip->addr + NMK_GPIO_FWIMSC); writel(chip->fwimsc, chip->addr + NMK_GPIO_FWIMSC);
if (chip->sleepmode)
writel(chip->slpm, chip->addr + NMK_GPIO_SLPC);
clk_disable(chip->clk); clk_disable(chip->clk);
} }
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment