Thread (11 messages) 11 messages, 3 authors, 2018-09-19

[PATCH] gpio: omap: Add level wakeup handling for omap4 based SoCs

From: Linus Walleij <hidden>
Date: 2018-09-18 23:28:47
Also in: linux-gpio, linux-omap

On Mon, Sep 10, 2018 at 1:06 PM Tony Lindgren [off-list ref] wrote:
I noticed that unlike omap2 and 3 based SoCs, omap4 based SoCs keep
the GPIO clocks enabled for GPIO level interrupts with wakeup enabled.
This blocks deeper idle states as the whole domain will stay busy.

The GPIO clock seems to stay enabled if the wakeup register is enabled
and a level interrupt is triggered. In that case the only way to have
the GPIO module idle is to reset it. It is possible this has gone
unnoticed with OSWR (Open SWitch Retention) and off mode during idle
resetting GPIO context most GPIO instances in the earlier Android trees
for example.

Looks like the way to deal with this is to have omap4 based SoCs
only set wake for the duration of idle and clear level registers for
the idle. With level interrupts we can do this as the level interrupt
from device will be still there on resume.

I've taken the long path to fixing this to avoid yet more hard to
read code. I've set up a quirks flag, and a struct for function
pointers so we can use these to clean up other quirk handling easier
in the later patches. The current level quirk handling is moved to
the new functions.

Cc: Grygorii Strashko <grygorii.strashko@ti.com>
Cc: Keerthy <j-keerthy@ti.com>
Cc: Tero Kristo <redacted>
Signed-off-by: Tony Lindgren <tony@atomide.com>
Do we have a conclusion on this? Shall I apply the patch on
an immutable branch and pull into next, or do you folks need
more time?

Yours,
Linus Walleij
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help