]>
Commit | Line | Data |
---|---|---|
93e8e996 GKH |
1 | From 687ef9817df7ed960d14575b9033dde3d04631fe Mon Sep 17 00:00:00 2001 |
2 | From: Felipe Balbi <balbi@ti.com> | |
3 | Date: Wed, 16 Apr 2014 10:30:33 -0500 | |
4 | Subject: usb: dwc3: gadget: clear stall when disabling endpoint | |
5 | ||
6 | From: Felipe Balbi <balbi@ti.com> | |
7 | ||
8 | commit 687ef9817df7ed960d14575b9033dde3d04631fe upstream. | |
9 | ||
10 | so it seems like DWC3 IP doesn't clear stalls | |
11 | automatically when we disable an endpoint, because | |
12 | of that, we _must_ make sure stalls are cleared | |
13 | before clearing the proper bit in DALEPENA register. | |
14 | ||
15 | Reported-by: Johannes Stezenbach <js@sig21.net> | |
16 | Signed-off-by: Felipe Balbi <balbi@ti.com> | |
17 | Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | |
18 | ||
19 | --- | |
20 | drivers/usb/dwc3/gadget.c | 4 ++++ | |
21 | 1 file changed, 4 insertions(+) | |
22 | ||
23 | --- a/drivers/usb/dwc3/gadget.c | |
24 | +++ b/drivers/usb/dwc3/gadget.c | |
25 | @@ -531,6 +531,10 @@ static int __dwc3_gadget_ep_disable(stru | |
26 | ||
27 | dwc3_remove_requests(dwc, dep); | |
28 | ||
29 | + /* make sure HW endpoint isn't stalled */ | |
30 | + if (dep->flags & DWC3_EP_STALL) | |
31 | + __dwc3_gadget_ep_set_halt(dep, 0); | |
32 | + | |
33 | reg = dwc3_readl(dwc->regs, DWC3_DALEPENA); | |
34 | reg &= ~DWC3_DALEPENA_EP(dep->number); | |
35 | dwc3_writel(dwc->regs, DWC3_DALEPENA, reg); |