Commit 93b7c722 authored by Robert Jarzmik's avatar Robert Jarzmik Committed by Greg Kroah-Hartman

gpio: pxa: handle corner case of unprobed device

[ Upstream commit 9ce3ebe9 ]

In the corner case where the gpio driver probe fails, for whatever
reason, the suspend and resume handlers will still be called as they
have to be registered as syscore operations. This applies as well when
no probe was called while the driver has been built in the kernel.

Nicolas tracked this in :
https://bugzilla.kernel.org/show_bug.cgi?id=200905

Therefore, add a failsafe in these function, and test if a proper probe
succeeded and the driver is functional.
Signed-off-by: default avatarRobert Jarzmik <robert.jarzmik@free.fr>
Reported-by: default avatarNicolas Chauvet <kwizart@gmail.com>
Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
parent 13cc3e6b
...@@ -777,6 +777,9 @@ static int pxa_gpio_suspend(void) ...@@ -777,6 +777,9 @@ static int pxa_gpio_suspend(void)
struct pxa_gpio_bank *c; struct pxa_gpio_bank *c;
int gpio; int gpio;
if (!pchip)
return 0;
for_each_gpio_bank(gpio, c, pchip) { for_each_gpio_bank(gpio, c, pchip) {
c->saved_gplr = readl_relaxed(c->regbase + GPLR_OFFSET); c->saved_gplr = readl_relaxed(c->regbase + GPLR_OFFSET);
c->saved_gpdr = readl_relaxed(c->regbase + GPDR_OFFSET); c->saved_gpdr = readl_relaxed(c->regbase + GPDR_OFFSET);
...@@ -795,6 +798,9 @@ static void pxa_gpio_resume(void) ...@@ -795,6 +798,9 @@ static void pxa_gpio_resume(void)
struct pxa_gpio_bank *c; struct pxa_gpio_bank *c;
int gpio; int gpio;
if (!pchip)
return;
for_each_gpio_bank(gpio, c, pchip) { for_each_gpio_bank(gpio, c, pchip) {
/* restore level with set/clear */ /* restore level with set/clear */
writel_relaxed(c->saved_gplr, c->regbase + GPSR_OFFSET); writel_relaxed(c->saved_gplr, c->regbase + GPSR_OFFSET);
......
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