aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/pinctrl/pinctrl-amd.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/drivers/pinctrl/pinctrl-amd.c b/drivers/pinctrl/pinctrl-amd.c
index 3f6b34febbf1..433af328d981 100644
--- a/drivers/pinctrl/pinctrl-amd.c
+++ b/drivers/pinctrl/pinctrl-amd.c
@@ -534,8 +534,16 @@ static irqreturn_t amd_gpio_irq_handler(int irq, void *dev_id)
534 continue; 534 continue;
535 irq = irq_find_mapping(gc->irqdomain, irqnr + i); 535 irq = irq_find_mapping(gc->irqdomain, irqnr + i);
536 generic_handle_irq(irq); 536 generic_handle_irq(irq);
537 /* Clear interrupt */ 537
538 /* Clear interrupt.
539 * We must read the pin register again, in case the
540 * value was changed while executing
541 * generic_handle_irq() above.
542 */
543 raw_spin_lock_irqsave(&gpio_dev->lock, flags);
544 regval = readl(regs + i);
538 writel(regval, regs + i); 545 writel(regval, regs + i);
546 raw_spin_unlock_irqrestore(&gpio_dev->lock, flags);
539 ret = IRQ_HANDLED; 547 ret = IRQ_HANDLED;
540 } 548 }
541 } 549 }