pinctrl-sx150x: Simplify interrupt handler
authorAndrey Smirnov <andrew.smirnov@gmail.com>
Mon, 7 Nov 2016 16:53:20 +0000 (08:53 -0800)
committerLinus Walleij <linus.walleij@linaro.org>
Tue, 8 Nov 2016 08:46:13 +0000 (09:46 +0100)
Make use of for_each_set_bit macro and reduce boilerplate code.

Tested-by: Neil Armstrong <narmstrong@baylibre.com>
Acked-by: Neil Armstrong <narmstrong@baylibre.com>
Signed-off-by: Andrey Smirnov <andrew.smirnov@gmail.com>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
drivers/pinctrl/pinctrl-sx150x.c

index f2ec072a2134a04b83e96d8215111e89ae19f550..78e15c9a73a2e27289066c2ae43a226b87b98533 100644 (file)
@@ -465,11 +465,9 @@ static int sx150x_irq_set_type(struct irq_data *d, unsigned int flow_type)
 static irqreturn_t sx150x_irq_thread_fn(int irq, void *dev_id)
 {
        struct sx150x_pinctrl *pctl = (struct sx150x_pinctrl *)dev_id;
-       unsigned int nhandled = 0;
-       unsigned int sub_irq;
-       unsigned int n;
-       s32 err;
+       unsigned long n, status;
        unsigned int val;
+       int err;
 
        err = regmap_read(pctl->regmap, pctl->data->reg_irq_src, &val);
        if (err < 0)
@@ -479,15 +477,11 @@ static irqreturn_t sx150x_irq_thread_fn(int irq, void *dev_id)
        if (err < 0)
                return IRQ_NONE;
 
-       for (n = 0; n < pctl->data->ngpios; ++n) {
-               if (val & BIT(n)) {
-                       sub_irq = irq_find_mapping(pctl->gpio.irqdomain, n);
-                       handle_nested_irq(sub_irq);
-                       ++nhandled;
-               }
-       }
+       status = val;
+       for_each_set_bit(n, &status, pctl->data->ngpios)
+               handle_nested_irq(irq_find_mapping(pctl->gpio.irqdomain, n));
 
-       return (nhandled > 0 ? IRQ_HANDLED : IRQ_NONE);
+       return IRQ_HANDLED;
 }
 
 static void sx150x_irq_bus_lock(struct irq_data *d)