]> git.kernelconcepts.de Git - karo-tx-linux.git/blobdiff - drivers/mfd/arizona-irq.c
mfd: arizona: Check if AOD interrupts are pending before dispatching
[karo-tx-linux.git] / drivers / mfd / arizona-irq.c
index edeb4951366a0d1db3bf3a14c49c03a50d469ed1..5e18d3c77582b02050da45db97ee87fc1777bab9 100644 (file)
@@ -109,8 +109,20 @@ static irqreturn_t arizona_irq_thread(int irq, void *data)
        do {
                poll = false;
 
-               if (arizona->aod_irq_chip)
-                       handle_nested_irq(irq_find_mapping(arizona->virq, 0));
+               if (arizona->aod_irq_chip) {
+                       /*
+                        * Check the AOD status register to determine whether
+                        * the nested IRQ handler should be called.
+                        */
+                       ret = regmap_read(arizona->regmap,
+                                         ARIZONA_AOD_IRQ1, &val);
+                       if (ret)
+                               dev_warn(arizona->dev,
+                                       "Failed to read AOD IRQ1 %d\n", ret);
+                       else if (val)
+                               handle_nested_irq(
+                                       irq_find_mapping(arizona->virq, 0));
+               }
 
                /*
                 * Check if one of the main interrupts is asserted and only