aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/usb/dwc3/gadget.c
diff options
context:
space:
mode:
authorFelipe Balbi <felipe.balbi@linux.intel.com>2018-08-01 13:37:53 +0300
committerFelipe Balbi <felipe.balbi@linux.intel.com>2018-11-26 09:08:29 +0200
commitc3acd59014148470dc58519870fbc779785b4bf7 (patch)
tree63630bac769bc1d17702a92fe5aa6540936ac090 /drivers/usb/dwc3/gadget.c
parentusb: dwc3: gadget: track number of TRBs per request (diff)
downloadlinux-dev-c3acd59014148470dc58519870fbc779785b4bf7.tar.xz
linux-dev-c3acd59014148470dc58519870fbc779785b4bf7.zip
usb: dwc3: gadget: use num_trbs when skipping TRBs on ->dequeue()
Now that we track how many TRBs a request uses, it's easier to skip over them in case of a call to usb_ep_dequeue(). Let's do so and simplify the code a bit. Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
Diffstat (limited to 'drivers/usb/dwc3/gadget.c')
-rw-r--r--drivers/usb/dwc3/gadget.c28
1 files changed, 4 insertions, 24 deletions
diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c
index 70a8ff1112bb..1510490acfa5 100644
--- a/drivers/usb/dwc3/gadget.c
+++ b/drivers/usb/dwc3/gadget.c
@@ -1502,6 +1502,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);
@@ -1539,32 +1541,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;
}
@@ -1575,8 +1557,6 @@ static int dwc3_gadget_ep_dequeue(struct usb_ep *ep,
}
out1:
- /* giveback the request */
-
dwc3_gadget_giveback(dep, req, -ECONNRESET);
out0: