OSDN Git Service

gpio: omap: simplify omap_toggle_gpio_edge_triggering()
authorRussell King <rmk+kernel@armlinux.org.uk>
Mon, 10 Jun 2019 17:10:56 +0000 (20:10 +0300)
committerLinus Walleij <linus.walleij@linaro.org>
Wed, 12 Jun 2019 09:14:30 +0000 (11:14 +0200)
This function open-codes an exclusive-or bitwise operation using an
if() statement and explicitly setting or clearing the bit. Instead,
use an exclusive-or operation instead, and simplify the function.

We can combine the preprocessor conditional using IS_ENABLED() and
gain some additional compilation coverage.

Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
Signed-off-by: Grygorii Strashko <grygorii.strashko@ti.com>
Tested-by: Tony Lindgren <tony@atomide.com>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
drivers/gpio/gpio-omap.c

index 1a08905..097ed8d 100644 (file)
@@ -326,32 +326,18 @@ static inline void omap_set_gpio_trigger(struct gpio_bank *bank, int gpio,
        }
 }
 
-#ifdef CONFIG_ARCH_OMAP1
 /*
  * This only applies to chips that can't do both rising and falling edge
  * detection at once.  For all other chips, this function is a noop.
  */
 static void omap_toggle_gpio_edge_triggering(struct gpio_bank *bank, int gpio)
 {
-       void __iomem *reg = bank->base;
-       u32 l = 0;
-
-       if (!bank->regs->irqctrl)
-               return;
-
-       reg += bank->regs->irqctrl;
+       if (IS_ENABLED(CONFIG_ARCH_OMAP1) && bank->regs->irqctrl) {
+               void __iomem *reg = bank->base + bank->regs->irqctrl;
 
-       l = readl_relaxed(reg);
-       if ((l >> gpio) & 1)
-               l &= ~(BIT(gpio));
-       else
-               l |= BIT(gpio);
-
-       writel_relaxed(l, reg);
+               writel_relaxed(readl_relaxed(reg) ^ BIT(gpio), reg);
+       }
 }
-#else
-static void omap_toggle_gpio_edge_triggering(struct gpio_bank *bank, int gpio) {}
-#endif
 
 static int omap_set_gpio_triggering(struct gpio_bank *bank, int gpio,
                                    unsigned trigger)