]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
pinctrl: intel: Refactor __intel_gpio_set_direction() to be more useful
authorAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Thu, 29 Aug 2024 13:59:16 +0000 (16:59 +0300)
committerAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Fri, 30 Aug 2024 18:44:37 +0000 (21:44 +0300)
Refactor __intel_gpio_set_direction() to be more useful, i.e.
1) use one parameter per each direction to support all combinatios;
2) move IO to the only user that needs it.

With that done, update current users and deduplicate existing code.

Acked-by: Mika Westerberg <mika.westerberg@linux.intel.com>
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
drivers/pinctrl/intel/pinctrl-intel.c

index 959413c8f4c9f8fc39d9bb7e89679893386d267f..b9f3d94a6256f8bf31ec8f80e235f6299482c000 100644 (file)
@@ -429,19 +429,19 @@ static int intel_pinmux_set_mux(struct pinctrl_dev *pctldev,
        return 0;
 }
 
-static void __intel_gpio_set_direction(void __iomem *padcfg0, bool input)
+static u32 __intel_gpio_set_direction(u32 value, bool input, bool output)
 {
-       u32 value;
-
-       value = readl(padcfg0);
-       if (input) {
+       if (input)
                value &= ~PADCFG0_GPIORXDIS;
-               value |= PADCFG0_GPIOTXDIS;
-       } else {
-               value &= ~PADCFG0_GPIOTXDIS;
+       else
                value |= PADCFG0_GPIORXDIS;
-       }
-       writel(value, padcfg0);
+
+       if (output)
+               value &= ~PADCFG0_GPIOTXDIS;
+       else
+               value |= PADCFG0_GPIOTXDIS;
+
+       return value;
 }
 
 static int __intel_gpio_get_gpio_mode(u32 value)
@@ -465,8 +465,7 @@ static void intel_gpio_set_gpio_mode(void __iomem *padcfg0)
        value |= PADCFG0_PMODE_GPIO;
 
        /* Disable TX buffer and enable RX (this will be input) */
-       value &= ~PADCFG0_GPIORXDIS;
-       value |= PADCFG0_GPIOTXDIS;
+       value = __intel_gpio_set_direction(value, true, false);
 
        /* Disable SCI/SMI/NMI generation */
        value &= ~(PADCFG0_GPIROUTIOXAPIC | PADCFG0_GPIROUTSCI);
@@ -512,12 +511,18 @@ static int intel_gpio_set_direction(struct pinctrl_dev *pctldev,
 {
        struct intel_pinctrl *pctrl = pinctrl_dev_get_drvdata(pctldev);
        void __iomem *padcfg0;
+       u32 value;
 
        padcfg0 = intel_get_padcfg(pctrl, pin, PADCFG0);
 
        guard(raw_spinlock_irqsave)(&pctrl->lock);
 
-       __intel_gpio_set_direction(padcfg0, input);
+       value = readl(padcfg0);
+       if (input)
+               value = __intel_gpio_set_direction(value, true, false);
+       else
+               value = __intel_gpio_set_direction(value, false, true);
+       writel(value, padcfg0);
 
        return 0;
 }