From: Grygorii Strashko <grygorii.strashko@xxxxxx> Edge interrupts are already cleared in omap_gpio_irq_handler, so clearing them again in omap_gpio_ack_irq causes lost interrupts. Cc: stable@xxxxxxxxxxxxxxx Signed-off-by: Grygorii Strashko <grygorii.strashko@xxxxxx> Signed-off-by: Ladislav Michl <ladis@xxxxxxxxxxxxxx> --- drivers/gpio/gpio-omap.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/drivers/gpio/gpio-omap.c b/drivers/gpio/gpio-omap.c index dbf869fb63ce..a25738862129 100644 --- a/drivers/gpio/gpio-omap.c +++ b/drivers/gpio/gpio-omap.c @@ -811,7 +811,12 @@ static void omap_gpio_ack_irq(struct irq_data *d) struct gpio_bank *bank = omap_irq_data_get_bank(d); unsigned offset = d->hwirq; - omap_clear_gpio_irqstatus(bank, offset); + /* + * Edge GPIOs are already cleared during handling, clearing + * them here again will cause lost interrupts. + */ + if (bank->level_mask & BIT(offset)) + omap_clear_gpio_irqstatus(bank, offset); } static void omap_gpio_mask_irq(struct irq_data *d) -- 2.11.0 -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html