gpio: crystalcove: Use for_each_set_bit() in IRQ handler
authorAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Tue, 6 Nov 2018 12:38:55 +0000 (14:38 +0200)
committerAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Fri, 8 Feb 2019 13:55:38 +0000 (15:55 +0200)
This simplifies and standardizes the AB IRQ handler by using
the for_each_set_bit() library function.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Reviewed-by: Kuppuswamy Sathyanarayanan <sathyanarayanan.kuppuswamy@linux.intel.com>
drivers/gpio/gpio-crystalcove.c

index 58531d8..3c39d1b 100644 (file)
@@ -279,8 +279,8 @@ static struct irq_chip crystalcove_irqchip = {
 static irqreturn_t crystalcove_gpio_irq_handler(int irq, void *data)
 {
        struct crystalcove_gpio *cg = data;
+       unsigned long pending;
        unsigned int p0, p1;
-       int pending;
        int gpio;
        unsigned int virq;
 
@@ -293,11 +293,9 @@ static irqreturn_t crystalcove_gpio_irq_handler(int irq, void *data)
 
        pending = p0 | p1 << 8;
 
-       for (gpio = 0; gpio < CRYSTALCOVE_GPIO_NUM; gpio++) {
-               if (pending & BIT(gpio)) {
-                       virq = irq_find_mapping(cg->chip.irq.domain, gpio);
-                       handle_nested_irq(virq);
-               }
+       for_each_set_bit(gpio, &pending, CRYSTALCOVE_GPIO_NUM) {
+               virq = irq_find_mapping(cg->chip.irq.domain, gpio);
+               handle_nested_irq(virq);
        }
 
        return IRQ_HANDLED;