]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
pinctrl: intel: Move debounce validation out of the lock
authorAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Thu, 29 Aug 2024 13:59:15 +0000 (16:59 +0300)
committerAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Fri, 30 Aug 2024 18:44:37 +0000 (21:44 +0300)
There is no need to validate debounce value under the lock.
Move it outside.

It also results in a smaller binary:

  add/remove: 0/0 grow/shrink: 0/1 up/down: 0/-11 (-11)
  Total: Before=15374, After=15363, chg -0.07%

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 89bd7ce6711a1361413de6e7f2e2013df9d687a1..959413c8f4c9f8fc39d9bb7e89679893386d267f 100644 (file)
@@ -758,6 +758,15 @@ static int intel_config_set_debounce(struct intel_pinctrl *pctrl,
 {
        void __iomem *padcfg0, *padcfg2;
        u32 value0, value2;
+       unsigned long v;
+
+       if (debounce) {
+               v = order_base_2(debounce * NSEC_PER_USEC / DEBOUNCE_PERIOD_NSEC);
+               if (v < 3 || v > 15)
+                       return -EINVAL;
+       } else {
+               v = 0;
+       }
 
        padcfg2 = intel_get_padcfg(pctrl, pin, PADCFG2);
        if (!padcfg2)
@@ -770,21 +779,15 @@ static int intel_config_set_debounce(struct intel_pinctrl *pctrl,
        value0 = readl(padcfg0);
        value2 = readl(padcfg2);
 
-       /* Disable glitch filter and debouncer */
-       value0 &= ~PADCFG0_PREGFRXSEL;
-       value2 &= ~(PADCFG2_DEBEN | PADCFG2_DEBOUNCE_MASK);
-
-       if (debounce) {
-               unsigned long v;
-
-               v = order_base_2(debounce * NSEC_PER_USEC / DEBOUNCE_PERIOD_NSEC);
-               if (v < 3 || v > 15)
-                       return -EINVAL;
-
+       value2 = (value2 & ~PADCFG2_DEBOUNCE_MASK) | (v << PADCFG2_DEBOUNCE_SHIFT);
+       if (v) {
                /* Enable glitch filter and debouncer */
                value0 |= PADCFG0_PREGFRXSEL;
-               value2 |= v << PADCFG2_DEBOUNCE_SHIFT;
                value2 |= PADCFG2_DEBEN;
+       } else {
+               /* Disable glitch filter and debouncer */
+               value0 &= ~PADCFG0_PREGFRXSEL;
+               value2 &= ~PADCFG2_DEBEN;
        }
 
        writel(value0, padcfg0);