summaryrefslogtreecommitdiffstats
path: root/drivers/gpio/gpio-tegra.c
diff options
context:
space:
mode:
authorMichał Mirosław <mirq-linux@rere.qmqm.pl>2017-07-18 08:35:45 -0400
committerLinus Walleij <linus.walleij@linaro.org>2017-08-02 04:42:38 -0400
commit9e9509e38fbe034782339eb09c915f0b5765ff69 (patch)
treecdabc00cf2b3a8f104c2210be59fb308879efab0 /drivers/gpio/gpio-tegra.c
parentdf1e76f28ffe87d1b065eecab2d0fbb89e6bdee5 (diff)
gpio: tegra: fix unbalanced chained_irq_enter/exit
When more than one GPIO IRQs are triggered simultaneously, tegra_gpio_irq_handler() called chained_irq_exit() multiple times for one chained_irq_enter(). Fixes: 3c92db9ac0ca3eee8e46e2424b6c074e2e394ad9 Signed-off-by: Michał Mirosław <mirq-linux@rere.qmqm.pl> [Also changed the variable to a bool] Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Diffstat (limited to 'drivers/gpio/gpio-tegra.c')
-rw-r--r--drivers/gpio/gpio-tegra.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/drivers/gpio/gpio-tegra.c b/drivers/gpio/gpio-tegra.c
index 88529d3c06c9..506c6a67c5fc 100644
--- a/drivers/gpio/gpio-tegra.c
+++ b/drivers/gpio/gpio-tegra.c
@@ -360,7 +360,7 @@ static void tegra_gpio_irq_handler(struct irq_desc *desc)
360{ 360{
361 int port; 361 int port;
362 int pin; 362 int pin;
363 int unmasked = 0; 363 bool unmasked = false;
364 int gpio; 364 int gpio;
365 u32 lvl; 365 u32 lvl;
366 unsigned long sta; 366 unsigned long sta;
@@ -384,8 +384,8 @@ static void tegra_gpio_irq_handler(struct irq_desc *desc)
384 * before executing the handler so that we don't 384 * before executing the handler so that we don't
385 * miss edges 385 * miss edges
386 */ 386 */
387 if (lvl & (0x100 << pin)) { 387 if (!unmasked && lvl & (0x100 << pin)) {
388 unmasked = 1; 388 unmasked = true;
389 chained_irq_exit(chip, desc); 389 chained_irq_exit(chip, desc);
390 } 390 }
391 391