summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPeter Robinson <pbrobinson@gmail.com>2018-09-15 23:59:08 +0100
committerPeter Robinson <pbrobinson@gmail.com>2018-09-15 23:59:08 +0100
commit7ee000f18c69931c01f514dc1382a5d18c09aac7 (patch)
treeff5e65f667aad061184cb031a7caf791f2da0028
parent720da7cddae4bcab5f654be8839ff63b9ad3498b (diff)
downloadkernel-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.patch56
-rw-r--r--kernel.spec2
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/