aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/gpio/gpio-omap.c14
1 files changed, 8 insertions, 6 deletions
diff --git a/drivers/gpio/gpio-omap.c b/drivers/gpio/gpio-omap.c
index f4e9921fa966..7f33024b6d83 100644
--- a/drivers/gpio/gpio-omap.c
+++ b/drivers/gpio/gpio-omap.c
@@ -883,14 +883,16 @@ static void omap_gpio_unmask_irq(struct irq_data *d)
883 if (trigger) 883 if (trigger)
884 omap_set_gpio_triggering(bank, offset, trigger); 884 omap_set_gpio_triggering(bank, offset, trigger);
885 885
886 /* For level-triggered GPIOs, the clearing must be done after 886 omap_set_gpio_irqenable(bank, offset, 1);
887 * the HW source is cleared, thus after the handler has run */ 887
888 if (bank->level_mask & BIT(offset)) { 888 /*
889 omap_set_gpio_irqenable(bank, offset, 0); 889 * For level-triggered GPIOs, clearing must be done after the source
890 * is cleared, thus after the handler has run. OMAP4 needs this done
891 * after enabing the interrupt to clear the wakeup status.
892 */
893 if (bank->level_mask & BIT(offset))
890 omap_clear_gpio_irqstatus(bank, offset); 894 omap_clear_gpio_irqstatus(bank, offset);
891 }
892 895
893 omap_set_gpio_irqenable(bank, offset, 1);
894 raw_spin_unlock_irqrestore(&bank->lock, flags); 896 raw_spin_unlock_irqrestore(&bank->lock, flags);
895} 897}
896 898