usb: typec: tipd: Add short-circuit for no irqs
authorSven Peter <sven@svenpeter.dev>
Tue, 28 Sep 2021 15:54:59 +0000 (17:54 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 5 Oct 2021 10:43:05 +0000 (12:43 +0200)
If no interrupts are set in IntEventX directly skip to the end of the
interrupt handler and return IRQ_NONE instead of IRQ_HANDLED.
This possibly allows to detect spurious interrupts if the i2c bus is fast
enough.

Reviewed-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
Signed-off-by: Sven Peter <sven@svenpeter.dev>
Link: https://lore.kernel.org/r/20210928155502.71372-4-sven@svenpeter.dev
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/usb/typec/tipd/core.c

index 172715c..e785e4a 100644 (file)
@@ -479,6 +479,9 @@ static irqreturn_t tps6598x_interrupt(int irq, void *data)
        }
        trace_tps6598x_irq(event1, event2);
 
+       if (!(event1 | event2))
+               goto err_unlock;
+
        if (!tps6598x_read_status(tps, &status))
                goto err_clear_ints;
 
@@ -501,7 +504,9 @@ err_clear_ints:
 err_unlock:
        mutex_unlock(&tps->lock);
 
-       return IRQ_HANDLED;
+       if (event1 | event2)
+               return IRQ_HANDLED;
+       return IRQ_NONE;
 }
 
 static int tps6598x_check_mode(struct tps6598x *tps)