From 51d42fcb65a0fd4b4f1ac9cc6c80a85172ce76d6 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Mon, 6 Jan 2020 16:45:57 +0100 Subject: [PATCH] 4.4-stable patches added patches: gpiolib-fix-up-emulated-open-drain-outputs.patch --- ...b-fix-up-emulated-open-drain-outputs.patch | 44 +++++++++++++++++++ queue-4.4/series | 1 + 2 files changed, 45 insertions(+) create mode 100644 queue-4.4/gpiolib-fix-up-emulated-open-drain-outputs.patch 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 index 00000000000..27f26d0743f --- /dev/null +++ b/queue-4.4/gpiolib-fix-up-emulated-open-drain-outputs.patch @@ -0,0 +1,44 @@ +From 256efaea1fdc4e38970489197409a26125ee0aaa Mon Sep 17 00:00:00 2001 +From: Russell King +Date: Sat, 7 Dec 2019 16:20:18 +0000 +Subject: gpiolib: fix up emulated open drain outputs + +From: Russell King + +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: +Suggested-by: Linus Walleij +Signed-off-by: Russell King +Signed-off-by: Bartosz Golaszewski +Signed-off-by: Greg Kroah-Hartman + +--- + 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; + diff --git a/queue-4.4/series b/queue-4.4/series index e0384343b58..ce24a909091 100644 --- a/queue-4.4/series +++ b/queue-4.4/series @@ -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 -- 2.47.3