diff options
author | Felipe Balbi <balbi@ti.com> | 2011-09-08 18:17:12 +0300 |
---|---|---|
committer | Felipe Balbi <balbi@ti.com> | 2011-09-09 13:05:28 +0300 |
commit | d742220b357769fa0a764d238373b8667116cf64 (patch) | |
tree | e9a115381c22ab17df21203181051629c56c5dd0 /drivers/usb/dwc3 | |
parent | bb7ea2841e9c8669ac31e4262f585729bf779bff (diff) | |
download | linux-3.10-d742220b357769fa0a764d238373b8667116cf64.tar.gz linux-3.10-d742220b357769fa0a764d238373b8667116cf64.tar.bz2 linux-3.10-d742220b357769fa0a764d238373b8667116cf64.zip |
usb: dwc3: ep0: giveback requests on stall_and_restart
if we don't, the list will be busy forever.
Signed-off-by: Felipe Balbi <balbi@ti.com>
Diffstat (limited to 'drivers/usb/dwc3')
-rw-r--r-- | drivers/usb/dwc3/ep0.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/drivers/usb/dwc3/ep0.c b/drivers/usb/dwc3/ep0.c index 48d3770bd76..4cc72fdc057 100644 --- a/drivers/usb/dwc3/ep0.c +++ b/drivers/usb/dwc3/ep0.c @@ -214,9 +214,19 @@ out: static void dwc3_ep0_stall_and_restart(struct dwc3 *dwc) { + struct dwc3_ep *dep = dwc->eps[0]; + /* stall is always issued on EP0 */ __dwc3_gadget_ep_set_halt(dwc->eps[0], 1); dwc->eps[0]->flags = DWC3_EP_ENABLED; + + if (!list_empty(&dep->request_list)) { + struct dwc3_request *req; + + req = next_request(&dep->request_list); + dwc3_gadget_giveback(dep, req, -ECONNRESET); + } + dwc->ep0state = EP0_SETUP_PHASE; dwc3_ep0_out_start(dwc); } |