gpio: pca953x: return IRQ_NONE when appropriate
[firefly-linux-kernel-4.4.55.git] / drivers / gpio / gpio-pca953x.c
index d550d8e58705524b78753289b372abd7ae39818c..83cc2c8f105f7a0271829abf6b9e8e56d1a02a54 100644 (file)
@@ -503,10 +503,11 @@ static irqreturn_t pca953x_irq_handler(int irq, void *devid)
        struct pca953x_chip *chip = devid;
        u8 pending[MAX_BANK];
        u8 level;
+       unsigned nhandled = 0;
        int i;
 
        if (!pca953x_irq_pending(chip, pending))
-               return IRQ_HANDLED;
+               return IRQ_NONE;
 
        for (i = 0; i < NBANK(chip); i++) {
                while (pending[i]) {
@@ -514,10 +515,11 @@ static irqreturn_t pca953x_irq_handler(int irq, void *devid)
                        handle_nested_irq(irq_find_mapping(chip->domain,
                                                        level + (BANK_SZ * i)));
                        pending[i] &= ~(1 << level);
+                       nhandled++;
                }
        }
 
-       return IRQ_HANDLED;
+       return (nhandled > 0) ? IRQ_HANDLED : IRQ_NONE;
 }
 
 static int pca953x_gpio_irq_map(struct irq_domain *d, unsigned int irq,