We shouldn't return -EBUSY, that's used only internally
when the core still has transfers in flight on a given
endpoint.

Also, combine the error reporting so that we don't have
to duplicate it.

Signed-off-by: Felipe Balbi <[email protected]>
---
 drivers/usb/dwc3/gadget.c | 31 ++++++++++++-------------------
 1 file changed, 12 insertions(+), 19 deletions(-)

diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c
index 2cc6a33438dc..858d88373305 100644
--- a/drivers/usb/dwc3/gadget.c
+++ b/drivers/usb/dwc3/gadget.c
@@ -1080,10 +1080,7 @@ static int __dwc3_gadget_ep_queue(struct dwc3_ep *dep, 
struct dwc3_request *req)
        if (!usb_endpoint_xfer_isoc(dep->endpoint.desc) &&
                        !(dep->flags & DWC3_EP_BUSY)) {
                ret = __dwc3_gadget_kick_transfer(dep, 0, true);
-               if (ret && ret != -EBUSY)
-                       dev_dbg(dwc->dev, "%s: failed to kick transfers\n",
-                                       dep->name);
-               return ret;
+               goto out;
        }
 
        /*
@@ -1113,14 +1110,10 @@ static int __dwc3_gadget_ep_queue(struct dwc3_ep *dep, 
struct dwc3_request *req)
                }
 
                ret = __dwc3_gadget_kick_transfer(dep, 0, true);
-               if (ret && ret != -EBUSY)
-                       dev_dbg(dwc->dev, "%s: failed to kick transfers\n",
-                                       dep->name);
-
                if (!ret)
                        dep->flags &= ~DWC3_EP_PENDING_REQUEST;
 
-               return ret;
+               goto out;
        }
 
        /*
@@ -1134,10 +1127,7 @@ static int __dwc3_gadget_ep_queue(struct dwc3_ep *dep, 
struct dwc3_request *req)
                WARN_ON_ONCE(!dep->resource_index);
                ret = __dwc3_gadget_kick_transfer(dep, dep->resource_index,
                                false);
-               if (ret && ret != -EBUSY)
-                       dev_dbg(dwc->dev, "%s: failed to kick transfers\n",
-                                       dep->name);
-               return ret;
+               goto out;
        }
 
        /*
@@ -1145,14 +1135,17 @@ static int __dwc3_gadget_ep_queue(struct dwc3_ep *dep, 
struct dwc3_request *req)
         * right away, otherwise host will not know we have streams to be
         * handled.
         */
-       if (dep->stream_capable) {
+       if (dep->stream_capable)
                ret = __dwc3_gadget_kick_transfer(dep, 0, true);
-               if (ret && ret != -EBUSY)
-                       dev_dbg(dwc->dev, "%s: failed to kick transfers\n",
-                                       dep->name);
-       }
 
-       return 0;
+out:
+       if (ret && ret != -EBUSY)
+               dev_dbg(dwc->dev, "%s: failed to kick transfers\n",
+                               dep->name);
+       if (ret == -EBUSY)
+               ret = 0;
+
+       return ret;
 }
 
 static int dwc3_gadget_ep_queue(struct usb_ep *ep, struct usb_request *request,
-- 
2.5.0

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to