pinctrl: intel: Read back TX buffer state
authorAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Thu, 24 Aug 2017 08:19:33 +0000 (11:19 +0300)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 6 Aug 2018 14:23:02 +0000 (16:23 +0200)
commit d68b42e30bbacd24354d644f430d088435b15e83 upstream.

In the same way as it's done in pinctrl-cherryview.c we would provide
a readback TX buffer state.

Fixes: 17fab473693 ("pinctrl: intel: Set pin direction properly")
Reported-by: "Bourque, Francis" <francis.bourque@intel.com>
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Acked-by: Mika Westerberg <mika.westerberg@linux.intel.com>
Tested-by: "Bourque, Francis" <francis.bourque@intel.com>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Cc: Anthony de Boer <adb@adb.ca>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/pinctrl/intel/pinctrl-intel.c

index b40a074..15aeeb2 100644 (file)
@@ -604,12 +604,17 @@ static int intel_gpio_get(struct gpio_chip *chip, unsigned offset)
 {
        struct intel_pinctrl *pctrl = gpiochip_get_data(chip);
        void __iomem *reg;
+       u32 padcfg0;
 
        reg = intel_get_padcfg(pctrl, offset, PADCFG0);
        if (!reg)
                return -EINVAL;
 
-       return !!(readl(reg) & PADCFG0_GPIORXSTATE);
+       padcfg0 = readl(reg);
+       if (!(padcfg0 & PADCFG0_GPIOTXDIS))
+               return !!(padcfg0 & PADCFG0_GPIOTXSTATE);
+
+       return !!(padcfg0 & PADCFG0_GPIORXSTATE);
 }
 
 static void intel_gpio_set(struct gpio_chip *chip, unsigned offset, int value)