git.samba.org
/
sfrench
/
cifs-2.6.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge tag 'pinctrl-v4.15-1' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw...
[sfrench/cifs-2.6.git]
/
drivers
/
pinctrl
/
pinctrl-amd.c
diff --git
a/drivers/pinctrl/pinctrl-amd.c
b/drivers/pinctrl/pinctrl-amd.c
index b9c0dd75319e22db0e3f85c41d1803d81391b916..61d830c2bc17d94b4b2caadd70699a914275da68 100644
(file)
--- 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)
continue;
irq = irq_find_mapping(gc->irq.domain, irqnr + i);
generic_handle_irq(irq);
continue;
irq = irq_find_mapping(gc->irq.domain, irqnr + i);
generic_handle_irq(irq);
- /* Clear interrupt */
+
+ /* Clear interrupt.
+ * We must read the pin register again, in case the
+ * value was changed while executing
+ * generic_handle_irq() above.
+ */
+ raw_spin_lock_irqsave(&gpio_dev->lock, flags);
+ regval = readl(regs + i);
writel(regval, regs + i);
writel(regval, regs + i);
+ raw_spin_unlock_irqrestore(&gpio_dev->lock, flags);
ret = IRQ_HANDLED;
}
}
ret = IRQ_HANDLED;
}
}