summaryrefslogtreecommitdiffstats
path: root/drivers/usb/renesas_usbhs/mod.c
diff options
context:
space:
mode:
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>2012-10-18 08:14:10 -0700
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2012-10-18 08:14:10 -0700
commit6b7ced68f3fbbab6e9625b957f1ea0add22a5ac7 (patch)
tree40e367c4a0c6fd920faa69b0f948fcb0877f7b40 /drivers/usb/renesas_usbhs/mod.c
parent470809741a28c3092279f4e1f3f432e534d46068 (diff)
parent69da85edbab5cd42909d3ba65b3dad1c1fb40206 (diff)
Merge tag 'fixes-for-v3.7-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/balbi/usb into usb-linus
usb: fixes for v3.7-rc2 Here's the first set of fixes for v3.7-rc cycle. DesignWare Core USB3 Driver (dwc3) got two fixes. The first one fixes a long standing bug which would keep endpoint with BUSY flag set forever if we cancel a transfer which has already been started by the controller. The second fix will just switch PHYs back off when DWC3 driver is removed. MUSB fixed a bug which would cause a Kernel Oops at least on AM3517 when removing a device. For some reason that particular device can fall into a situation where you have both Disconnect and Endpoint IRQs happen simultaneously (have both bits set in IRQ_STATUS register) and, because Disconnect Interrupt is handled before Endpoint Interrupts, we would try to transfer data over a disconnected device, thus generating a kernel oops. Renensas' USB DRD driver got two fixes which are a) fixing an off-by-one bug on the pipe iterator implementation and b) fixing Interrupt Status Clear procedure in order to properly clear a single Interrupt event without clearing (and masking) other events we didn't handle yet.
Diffstat (limited to 'drivers/usb/renesas_usbhs/mod.c')
-rw-r--r--drivers/usb/renesas_usbhs/mod.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/drivers/usb/renesas_usbhs/mod.c b/drivers/usb/renesas_usbhs/mod.c
index 35c5208f324..61933a90e5b 100644
--- a/drivers/usb/renesas_usbhs/mod.c
+++ b/drivers/usb/renesas_usbhs/mod.c
@@ -273,9 +273,9 @@ static irqreturn_t usbhs_interrupt(int irq, void *data)
usbhs_write(priv, INTSTS0, ~irq_state.intsts0 & INTSTS0_MAGIC);
usbhs_write(priv, INTSTS1, ~irq_state.intsts1 & INTSTS1_MAGIC);
- usbhs_write(priv, BRDYSTS, 0);
- usbhs_write(priv, NRDYSTS, 0);
- usbhs_write(priv, BEMPSTS, 0);
+ usbhs_write(priv, BRDYSTS, ~irq_state.brdysts);
+ usbhs_write(priv, NRDYSTS, ~irq_state.nrdysts);
+ usbhs_write(priv, BEMPSTS, ~irq_state.bempsts);
/*
* call irq callback functions