gpio: pch: Get rid of unneeded variable in IRQ handler
authorAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Tue, 14 Apr 2020 17:48:58 +0000 (20:48 +0300)
committerAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Thu, 16 Apr 2020 17:40:14 +0000 (20:40 +0300)
There is no need to have an additional variable in IRQ handler. We may simple
rely on the fact of having non-zero register value we read from the hardware.

While here, drop repetitive messages in time critical function.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
drivers/gpio/gpio-pch.c

index 03eeacd..708272d 100644 (file)
@@ -303,14 +303,15 @@ static irqreturn_t pch_gpio_handler(int irq, void *dev_id)
 {
        struct pch_gpio *chip = dev_id;
        unsigned long reg_val = ioread32(&chip->reg->istatus);
-       int i, ret = IRQ_NONE;
+       int i;
 
-       for_each_set_bit(i, &reg_val, gpio_pins[chip->ioh]) {
-               dev_dbg(chip->dev, "[%d]:irq=%d  status=0x%lx\n", i, irq, reg_val);
+       dev_dbg(chip->dev, "irq=%d  status=0x%lx\n", irq, reg_val);
+
+       reg_val &= BIT(gpio_pins[chip->ioh]) - 1;
+       for_each_set_bit(i, &reg_val, gpio_pins[chip->ioh])
                generic_handle_irq(chip->irq_base + i);
-               ret = IRQ_HANDLED;
-       }
-       return ret;
+
+       return IRQ_RETVAL(reg_val);
 }
 
 static int pch_gpio_alloc_generic_chip(struct pch_gpio *chip,