diff options
-rw-r--r-- | drivers/gpio/gpio-omap.c | 14 |
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 | ||