|
|
@@ -1368,6 +1368,8 @@ static int dwc3_gadget_ep_dequeue(struct usb_ep *ep,
|
|
|
break;
|
|
|
}
|
|
|
if (r == req) {
|
|
|
+ int i;
|
|
|
+
|
|
|
/* wait until it is processed */
|
|
|
dwc3_stop_active_transfer(dep, true);
|
|
|
|
|
|
@@ -1405,32 +1407,12 @@ static int dwc3_gadget_ep_dequeue(struct usb_ep *ep,
|
|
|
if (!r->trb)
|
|
|
goto out0;
|
|
|
|
|
|
- if (r->num_pending_sgs) {
|
|
|
+ for (i = 0; i < r->num_trbs; i++) {
|
|
|
struct dwc3_trb *trb;
|
|
|
- int i = 0;
|
|
|
-
|
|
|
- for (i = 0; i < r->num_pending_sgs; i++) {
|
|
|
- trb = r->trb + i;
|
|
|
- trb->ctrl &= ~DWC3_TRB_CTRL_HWO;
|
|
|
- dwc3_ep_inc_deq(dep);
|
|
|
- }
|
|
|
-
|
|
|
- if (r->needs_extra_trb) {
|
|
|
- trb = r->trb + r->num_pending_sgs + 1;
|
|
|
- trb->ctrl &= ~DWC3_TRB_CTRL_HWO;
|
|
|
- dwc3_ep_inc_deq(dep);
|
|
|
- }
|
|
|
- } else {
|
|
|
- struct dwc3_trb *trb = r->trb;
|
|
|
|
|
|
+ trb = r->trb + i;
|
|
|
trb->ctrl &= ~DWC3_TRB_CTRL_HWO;
|
|
|
dwc3_ep_inc_deq(dep);
|
|
|
-
|
|
|
- if (r->needs_extra_trb) {
|
|
|
- trb = r->trb + 1;
|
|
|
- trb->ctrl &= ~DWC3_TRB_CTRL_HWO;
|
|
|
- dwc3_ep_inc_deq(dep);
|
|
|
- }
|
|
|
}
|
|
|
goto out1;
|
|
|
}
|
|
|
@@ -1441,8 +1423,6 @@ static int dwc3_gadget_ep_dequeue(struct usb_ep *ep,
|
|
|
}
|
|
|
|
|
|
out1:
|
|
|
- /* giveback the request */
|
|
|
-
|
|
|
dwc3_gadget_giveback(dep, req, -ECONNRESET);
|
|
|
|
|
|
out0:
|