summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFelipe Balbi <felipe.balbi@linux.intel.com>2018-03-29 13:23:53 +0300
committerFelipe Balbi <felipe.balbi@linux.intel.com>2018-05-21 10:00:54 +0300
commitfe990cea8ed5563af1f3e646d2d06c6c93c0399d (patch)
tree9ce1f4068cd8c102945a7dff53263d857433c832
parent4d588a145b3e5e096804b71714db6a8bb82e8f49 (diff)
downloadlinux-fe990cea8ed5563af1f3e646d2d06c6c93c0399d.tar.xz
usb: dwc3: gadget: simplify queueing of isoc transfers
After all the previous changes, it's now a lot clearer how isoc transfers should be managed. We don't need to try to End Transfers from ep_queue since that's already done by cleanup_requests. Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
-rw-r--r--drivers/usb/dwc3/gadget.c18
1 files changed, 6 insertions, 12 deletions
diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c
index 452f76e8ea97..ffa84e04488c 100644
--- a/drivers/usb/dwc3/gadget.c
+++ b/drivers/usb/dwc3/gadget.c
@@ -1322,24 +1322,18 @@ static int __dwc3_gadget_ep_queue(struct dwc3_ep *dep, struct dwc3_request *req)
* errors which will force us issue EndTransfer command.
*/
if (usb_endpoint_xfer_isoc(dep->endpoint.desc)) {
+ if (!(dep->flags & DWC3_EP_PENDING_REQUEST) &&
+ !(dep->flags & DWC3_EP_TRANSFER_STARTED))
+ return 0;
+
if ((dep->flags & DWC3_EP_PENDING_REQUEST)) {
- if (dep->flags & DWC3_EP_TRANSFER_STARTED) {
- dwc3_stop_active_transfer(dep, true);
- dep->flags = DWC3_EP_ENABLED;
- } else {
+ if (!(dep->flags & DWC3_EP_TRANSFER_STARTED)) {
__dwc3_gadget_start_isoc(dep);
- dep->flags &= ~DWC3_EP_PENDING_REQUEST;
+ return 0;
}
- return 0;
}
-
- if (dep->flags & DWC3_EP_TRANSFER_STARTED)
- goto out;
-
- return 0;
}
-out:
return __dwc3_gadget_kick_transfer(dep);
}