pinctrl: intel: Actually disable Tx and Rx buffers on GPIO request
authorAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Tue, 8 Dec 2020 18:24:03 +0000 (20:24 +0200)
committerLinus Walleij <linus.walleij@linaro.org>
Wed, 9 Dec 2020 08:08:18 +0000 (09:08 +0100)
Mistakenly the buffers (input and output) become enabled together for a short
period of time during GPIO request. This is problematic, because instead of
initial motive to disable them in the commit af7e3eeb84e2
("pinctrl: intel: Disable input and output buffer when switching to GPIO"),
the driven value on the pin, which might be used as an IRQ line, brings
firmwares of some touch pads to an awkward state that needs a full power off
to recover. Fix this, as stated in the culprit commit, by disabling the buffers.

Fixes: af7e3eeb84e2 ("pinctrl: intel: Disable input and output buffer when switching to GPIO")
BugLink: https://bugzilla.kernel.org/show_bug.cgi?id=210497
Reported-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Acked-by: Mika Westerberg <mika.westerberg@linux.intel.com>
Tested-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Tested-by: Kai-Heng Feng <kai.heng.feng@canonical.com>
Link: https://lore.kernel.org/r/20201208182403.40435-1-andriy.shevchenko@linux.intel.com
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
drivers/pinctrl/intel/pinctrl-intel.c

index 1c10ab18478347680e23046d9bdcaa35aca80e26..b6ef1911c1dd16a3060a1e95d08e21f41d3fe8d3 100644 (file)
@@ -442,8 +442,8 @@ static void intel_gpio_set_gpio_mode(void __iomem *padcfg0)
        value |= PADCFG0_PMODE_GPIO;
 
        /* Disable input and output buffers */
-       value &= ~PADCFG0_GPIORXDIS;
-       value &= ~PADCFG0_GPIOTXDIS;
+       value |= PADCFG0_GPIORXDIS;
+       value |= PADCFG0_GPIOTXDIS;
 
        /* Disable SCI/SMI/NMI generation */
        value &= ~(PADCFG0_GPIROUTIOXAPIC | PADCFG0_GPIROUTSCI);