[for-4.19.y,3/3] powerpc/4xx/uic: clear pending interrupt after irq type/pol change

Message ID 1564517799-16880-3-git-send-email-amit.pundir@linaro.org
State New
Headers show
Series
  • [for-4.19.y,1/3] usb: dwc2: Disable all EP's on disconnect
Related show

Commit Message

Amit Pundir July 30, 2019, 8:16 p.m.
From: Christian Lamparter <chunkeey@gmail.com>


commit 3ab3a0689e74e6aa5b41360bc18861040ddef5b1 upstream.

When testing out gpio-keys with a button, a spurious
interrupt (and therefore a key press or release event)
gets triggered as soon as the driver enables the irq
line for the first time.

This patch clears any potential bogus generated interrupt
that was caused by the switching of the associated irq's
type and polarity.

Signed-off-by: Christian Lamparter <chunkeey@gmail.com>

Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>

Signed-off-by: Amit Pundir <amit.pundir@linaro.org>

---
Cherry-picked from lede/openwrt tree
https://git.lede-project.org/?p=source.git.
To be picked up for 4.14.y as well.

 arch/powerpc/platforms/4xx/uic.c | 1 +
 1 file changed, 1 insertion(+)

-- 
2.7.4

Comments

Greg KH July 31, 2019, 9:46 a.m. | #1
On Wed, Jul 31, 2019 at 01:46:39AM +0530, Amit Pundir wrote:
> From: Christian Lamparter <chunkeey@gmail.com>

> 

> commit 3ab3a0689e74e6aa5b41360bc18861040ddef5b1 upstream.

> 

> When testing out gpio-keys with a button, a spurious

> interrupt (and therefore a key press or release event)

> gets triggered as soon as the driver enables the irq

> line for the first time.

> 

> This patch clears any potential bogus generated interrupt

> that was caused by the switching of the associated irq's

> type and polarity.

> 

> Signed-off-by: Christian Lamparter <chunkeey@gmail.com>

> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>

> Signed-off-by: Amit Pundir <amit.pundir@linaro.org>

> ---

> Cherry-picked from lede/openwrt tree

> https://git.lede-project.org/?p=source.git.

> To be picked up for 4.14.y as well.


This is already in the 4.14.135 kernel release.

thanks,

greg k-h

Patch

diff --git a/arch/powerpc/platforms/4xx/uic.c b/arch/powerpc/platforms/4xx/uic.c
index 8b4dd0da0839..9e27cfe27026 100644
--- a/arch/powerpc/platforms/4xx/uic.c
+++ b/arch/powerpc/platforms/4xx/uic.c
@@ -158,6 +158,7 @@  static int uic_set_irq_type(struct irq_data *d, unsigned int flow_type)
 
 	mtdcr(uic->dcrbase + UIC_PR, pr);
 	mtdcr(uic->dcrbase + UIC_TR, tr);
+	mtdcr(uic->dcrbase + UIC_SR, ~mask);
 
 	raw_spin_unlock_irqrestore(&uic->lock, flags);