diff options
author | Felipe Balbi <felipe.balbi@linux.intel.com> | 2018-03-29 13:23:53 +0300 |
---|---|---|
committer | Felipe Balbi <felipe.balbi@linux.intel.com> | 2018-05-21 10:00:54 +0300 |
commit | fe990cea8ed5563af1f3e646d2d06c6c93c0399d (patch) | |
tree | 9ce1f4068cd8c102945a7dff53263d857433c832 | |
parent | 4d588a145b3e5e096804b71714db6a8bb82e8f49 (diff) | |
download | linux-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.c | 18 |
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); } |