]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
4.4-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 6 Jan 2020 15:45:57 +0000 (16:45 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 6 Jan 2020 15:45:57 +0000 (16:45 +0100)
added patches:
gpiolib-fix-up-emulated-open-drain-outputs.patch

queue-4.4/gpiolib-fix-up-emulated-open-drain-outputs.patch [new file with mode: 0644]
queue-4.4/series

diff --git a/queue-4.4/gpiolib-fix-up-emulated-open-drain-outputs.patch b/queue-4.4/gpiolib-fix-up-emulated-open-drain-outputs.patch
new file mode 100644 (file)
index 0000000..27f26d0
--- /dev/null
@@ -0,0 +1,44 @@
+From 256efaea1fdc4e38970489197409a26125ee0aaa Mon Sep 17 00:00:00 2001
+From: Russell King <rmk+kernel@armlinux.org.uk>
+Date: Sat, 7 Dec 2019 16:20:18 +0000
+Subject: gpiolib: fix up emulated open drain outputs
+
+From: Russell King <rmk+kernel@armlinux.org.uk>
+
+commit 256efaea1fdc4e38970489197409a26125ee0aaa upstream.
+
+gpiolib has a corner case with open drain outputs that are emulated.
+When such outputs are outputting a logic 1, emulation will set the
+hardware to input mode, which will cause gpiod_get_direction() to
+report that it is in input mode. This is different from the behaviour
+with a true open-drain output.
+
+Unify the semantics here.
+
+Cc: <stable@vger.kernel.org>
+Suggested-by: Linus Walleij <linus.walleij@linaro.org>
+Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
+Signed-off-by: Bartosz Golaszewski <bgolaszewski@baylibre.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/gpio/gpiolib.c |    8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+--- a/drivers/gpio/gpiolib.c
++++ b/drivers/gpio/gpiolib.c
+@@ -163,6 +163,14 @@ int gpiod_get_direction(struct gpio_desc
+       chip = gpiod_to_chip(desc);
+       offset = gpio_chip_hwgpio(desc);
++      /*
++       * Open drain emulation using input mode may incorrectly report
++       * input here, fix that up.
++       */
++      if (test_bit(FLAG_OPEN_DRAIN, &desc->flags) &&
++          test_bit(FLAG_IS_OUT, &desc->flags))
++              return 0;
++
+       if (!chip->get_direction)
+               return status;
index e0384343b58d9e56c07f46809e87dc893e60dd4d..ce24a909091ed6a7d462e19658652c163cb1f494 100644 (file)
@@ -17,3 +17,4 @@ mips-avoid-vdso-abi-breakage-due-to-global-register-variable.patch
 locks-print-unsigned-ino-in-proc-locks.patch
 dmaengine-fix-access-to-uninitialized-dma_slave_caps.patch
 compat_ioctl-block-handle-persistent-reservations.patch
+gpiolib-fix-up-emulated-open-drain-outputs.patch