aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/usb/dwc3/gadget.c
diff options
context:
space:
mode:
authorPratyush Anand <pratyush.anand@st.com>2012-06-15 02:24:36 -0400
committerFelipe Balbi <balbi@ti.com>2012-06-15 07:43:44 -0400
commit1591633ed6c4c3994944f31ddb59bc072a2ed0ca (patch)
treeda7f53396443065797f8be878ba4186a74b3fbf3 /drivers/usb/dwc3/gadget.c
parentdcae3573b98b2205961bfa5821427f5664422cd8 (diff)
usb: dwc3: giveback all queued request when ep disabled or reset received
In case of ep_disable and reset interrupt is received and, still there was at least one request queued for dma transfer, then endpoint is stopped first. Once endpoint is stopped, callback for all queued request must be called. Signed-off-by: Pratyush Anand <pratyush.anand@st.com> Signed-off-by: Felipe Balbi <balbi@ti.com>
Diffstat (limited to 'drivers/usb/dwc3/gadget.c')
-rw-r--r--drivers/usb/dwc3/gadget.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c
index 38cd13ffae9d..f6fb42da2e64 100644
--- a/drivers/usb/dwc3/gadget.c
+++ b/drivers/usb/dwc3/gadget.c
@@ -579,8 +579,11 @@ static void dwc3_remove_requests(struct dwc3 *dwc, struct dwc3_ep *dep)
579 */ 579 */
580 udelay(100); 580 udelay(100);
581 581
582 req = next_request(&dep->req_queued); 582 while (!list_empty(&dep->req_queued)) {
583 dwc3_gadget_giveback(dep, req, -ESHUTDOWN); 583 req = next_request(&dep->req_queued);
584
585 dwc3_gadget_giveback(dep, req, -ESHUTDOWN);
586 }
584 } 587 }
585 588
586 while (!list_empty(&dep->request_list)) { 589 while (!list_empty(&dep->request_list)) {