From: Felipe Balbi <felipe.balbi@linux.intel.com>
Date: Thu, 29 Mar 2018 10:23:53 +0000 (+0300)
Subject: usb: dwc3: gadget: simplify queueing of isoc transfers
X-Git-Url: http://git.maquefel.me/?a=commitdiff_plain;h=fe990cea8ed5563af1f3e646d2d06c6c93c0399d;p=linux.git

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>
---

diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c
index 452f76e8ea974..ffa84e04488c2 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);
 }