diff options
| -rw-r--r-- | drivers/pinctrl/pinctrl-amd.c | 10 |
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 | } |
