diff options
author | Peter Robinson <pbrobinson@gmail.com> | 2018-09-15 23:59:08 +0100 |
---|---|---|
committer | Peter Robinson <pbrobinson@gmail.com> | 2018-09-15 23:59:08 +0100 |
commit | 7ee000f18c69931c01f514dc1382a5d18c09aac7 (patch) | |
tree | ff5e65f667aad061184cb031a7caf791f2da0028 | |
parent | 720da7cddae4bcab5f654be8839ff63b9ad3498b (diff) | |
download | kernel-7ee000f18c69931c01f514dc1382a5d18c09aac7.tar.gz kernel-7ee000f18c69931c01f514dc1382a5d18c09aac7.tar.xz kernel-7ee000f18c69931c01f514dc1382a5d18c09aac7.zip |
arm: gpio: fix a driver that blocks suspend for a number of devices
-rw-r--r-- | gpio-pxa-handle-corner-case-of-unprobed-device.patch | 56 | ||||
-rw-r--r-- | kernel.spec | 2 |
2 files changed, 58 insertions, 0 deletions
diff --git a/gpio-pxa-handle-corner-case-of-unprobed-device.patch b/gpio-pxa-handle-corner-case-of-unprobed-device.patch new file mode 100644 index 000000000..f42af913d --- /dev/null +++ b/gpio-pxa-handle-corner-case-of-unprobed-device.patch @@ -0,0 +1,56 @@ +From patchwork Sat Aug 25 08:44:17 2018 +Content-Type: text/plain; charset="utf-8" +MIME-Version: 1.0 +Content-Transfer-Encoding: 7bit +Subject: gpio: pxa: handle corner case of unprobed device +X-Patchwork-Submitter: Robert Jarzmik <robert.jarzmik@free.fr> +X-Patchwork-Id: 962145 +Message-Id: <20180825084417.13526-1-robert.jarzmik@free.fr> +To: Robert Jarzmik <robert.jarzmik@free.fr>, + Linus Walleij <linus.walleij@linaro.org> +Cc: linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org +Date: Sat, 25 Aug 2018 10:44:17 +0200 +From: Robert Jarzmik <robert.jarzmik@free.fr> +List-Id: <linux-gpio.vger.kernel.org> + +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: Robert Jarzmik <robert.jarzmik@free.fr> +Reported-by: Nicolas Chauvet <kwizart@gmail.com> +--- + drivers/gpio/gpio-pxa.c | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/drivers/gpio/gpio-pxa.c b/drivers/gpio/gpio-pxa.c +index c18712dabf93..bfe4c5c9f41c 100644 +--- a/drivers/gpio/gpio-pxa.c ++++ b/drivers/gpio/gpio-pxa.c +@@ -776,6 +776,9 @@ static int pxa_gpio_suspend(void) + struct pxa_gpio_bank *c; + int gpio; + ++ if (!pchip) ++ return 0; ++ + for_each_gpio_bank(gpio, c, pchip) { + c->saved_gplr = readl_relaxed(c->regbase + GPLR_OFFSET); + c->saved_gpdr = readl_relaxed(c->regbase + GPDR_OFFSET); +@@ -794,6 +797,9 @@ static void pxa_gpio_resume(void) + struct pxa_gpio_bank *c; + int gpio; + ++ if (!pchip) ++ return; ++ + for_each_gpio_bank(gpio, c, pchip) { + /* restore level with set/clear */ + writel_relaxed(c->saved_gplr, c->regbase + GPSR_OFFSET); diff --git a/kernel.spec b/kernel.spec index a33c8eee4..1f2f03719 100644 --- a/kernel.spec +++ b/kernel.spec @@ -588,6 +588,8 @@ Patch307: arm64-ZynqMP-firmware-clock-drivers-core.patch Patch308: arm64-96boards-Rock960-CE-board-support.patch +Patch309: gpio-pxa-handle-corner-case-of-unprobed-device.patch + Patch330: bcm2835-cpufreq-add-CPU-frequency-control-driver.patch # https://patchwork.freedesktop.org/patch/240917/ |