Patch "pinctrl: intel: Set pin direction properly" has been added to the 4.9-stable tree
Subsystems (3)
This is a note to let you know that I've just added the patch titled
pinctrl: intel: Set pin direction properly
to the 4.9-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
pinctrl-intel-set-pin-direction-properly.patch
and it can be found in the queue-4.9 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From foo@baz Mon Jul 3 13:29:10 CEST 2017
From: Andy Shevchenko <[email protected]>
Date: Mon, 2 Jan 2017 14:07:22 +0200
Subject: pinctrl: intel: Set pin direction properly
From: Andy Shevchenko <[email protected]>
[ Upstream commit 17fab473693e8357a9aa6fee4fbed6c13a34bd81 ]
There are two bits in the PADCFG0 register to configure direction, one per TX/RX buffers.
For now we wrongly assume that the GPIO is always requested before it is being used, which is not true when the GPIO is used through irqchip. In this case the GPIO is never requested and we never enable RX buffer for it.
Fix this by setting both bits accordingly.
--- drivers/pinctrl/intel/pinctrl-intel.c | 30 +++++++++++++++++++----------- 1 file changed, 19 insertions(+), 11 deletions(-)
drivers/pinctrl/intel/pinctrl-intel.c +19 -11
@@ -353,6 +353,21 @@ static int intel_pinmux_set_mux(struct preturn 0 ; } +static void __intel_gpio_set_direction (void __iomem *padcfg0,bool input) +{ +u32 value; + + value =readl (padcfg0); +if (input) { + value &= ~PADCFG0_GPIORXDIS ; + value |=PADCFG0_GPIOTXDIS ; + }else { + value &= ~PADCFG0_GPIOTXDIS ; + value |=PADCFG0_GPIORXDIS ; + } +writel (value, padcfg0); +} +static int intel_gpio_request_enable (struct pinctrl_dev *pctldev,struct pinctrl_gpio_range *range,unsigned pin)
@@ -375,11 +390,11 @@ static int intel_gpio_request_enable(str/* Disable SCI/SMI/NMI generation */ value &= ~(PADCFG0_GPIROUTIOXAPIC |PADCFG0_GPIROUTSCI ); value &= ~(PADCFG0_GPIROUTSMI |PADCFG0_GPIROUTNMI ); -/* Disable TX buffer and enable RX (this will be input) */ - value &= ~PADCFG0_GPIORXDIS ; - value |=PADCFG0_GPIOTXDIS ;writel (value, padcfg0); +/* Disable TX buffer and enable RX (this will be input) */ +__intel_gpio_set_direction (padcfg0, true); +raw_spin_unlock_irqrestore (&pctrl->lock, flags);return 0 ;
@@ -392,18 +407,11 @@ static int intel_gpio_set_direction(strustruct intel_pinctrl *pctrl =pinctrl_dev_get_drvdata (pctldev);void __iomem *padcfg0;unsigned long flags; -u32 value;raw_spin_lock_irqsave (&pctrl->lock, flags); padcfg0 =intel_get_padcfg (pctrl, pin,PADCFG0 ); - - value =readl (padcfg0); -if (input) - value |=PADCFG0_GPIOTXDIS ; -else - value &= ~PADCFG0_GPIOTXDIS ; -writel (value, padcfg0); +__intel_gpio_set_direction (padcfg0, input);raw_spin_unlock_irqrestore (&pctrl->lock, flags);
Patches currently in stable-queue which might be from [email protected] are
queue-4.9/pinctrl-intel-set-pin-direction-properly.patch queue-4.9/platform-x86-ideapad-laptop-handle-acpi-event-1.patch