|
@@ -166,18 +166,8 @@ static void dwc3_ep_inc_deq(struct dwc3_ep *dep)
|
|
|
dwc3_ep_inc_trb(&dep->trb_dequeue);
|
|
|
}
|
|
|
|
|
|
-/**
|
|
|
- * dwc3_gadget_giveback - call struct usb_request's ->complete callback
|
|
|
- * @dep: The endpoint to whom the request belongs to
|
|
|
- * @req: The request we're giving back
|
|
|
- * @status: completion code for the request
|
|
|
- *
|
|
|
- * Must be called with controller's lock held and interrupts disabled. This
|
|
|
- * function will unmap @req and call its ->complete() callback to notify upper
|
|
|
- * layers that it has completed.
|
|
|
- */
|
|
|
-void dwc3_gadget_giveback(struct dwc3_ep *dep, struct dwc3_request *req,
|
|
|
- int status)
|
|
|
+void dwc3_gadget_del_and_unmap_request(struct dwc3_ep *dep,
|
|
|
+ struct dwc3_request *req, int status)
|
|
|
{
|
|
|
struct dwc3 *dwc = dep->dwc;
|
|
|
|
|
@@ -190,18 +180,35 @@ void dwc3_gadget_giveback(struct dwc3_ep *dep, struct dwc3_request *req,
|
|
|
|
|
|
if (req->trb)
|
|
|
usb_gadget_unmap_request_by_dev(dwc->sysdev,
|
|
|
- &req->request, req->direction);
|
|
|
+ &req->request, req->direction);
|
|
|
|
|
|
req->trb = NULL;
|
|
|
-
|
|
|
trace_dwc3_gadget_giveback(req);
|
|
|
|
|
|
+ if (dep->number > 1)
|
|
|
+ pm_runtime_put(dwc->dev);
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * dwc3_gadget_giveback - call struct usb_request's ->complete callback
|
|
|
+ * @dep: The endpoint to whom the request belongs to
|
|
|
+ * @req: The request we're giving back
|
|
|
+ * @status: completion code for the request
|
|
|
+ *
|
|
|
+ * Must be called with controller's lock held and interrupts disabled. This
|
|
|
+ * function will unmap @req and call its ->complete() callback to notify upper
|
|
|
+ * layers that it has completed.
|
|
|
+ */
|
|
|
+void dwc3_gadget_giveback(struct dwc3_ep *dep, struct dwc3_request *req,
|
|
|
+ int status)
|
|
|
+{
|
|
|
+ struct dwc3 *dwc = dep->dwc;
|
|
|
+
|
|
|
+ dwc3_gadget_del_and_unmap_request(dep, req, status);
|
|
|
+
|
|
|
spin_unlock(&dwc->lock);
|
|
|
usb_gadget_giveback_request(&dep->endpoint, &req->request);
|
|
|
spin_lock(&dwc->lock);
|
|
|
-
|
|
|
- if (dep->number > 1)
|
|
|
- pm_runtime_put(dwc->dev);
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -1227,7 +1234,7 @@ static int __dwc3_gadget_kick_transfer(struct dwc3_ep *dep)
|
|
|
if (req->trb)
|
|
|
memset(req->trb, 0, sizeof(struct dwc3_trb));
|
|
|
dep->queued_requests--;
|
|
|
- dwc3_gadget_giveback(dep, req, ret);
|
|
|
+ dwc3_gadget_del_and_unmap_request(dep, req, ret);
|
|
|
return ret;
|
|
|
}
|
|
|
|