diff options
-rw-r--r-- | drivers/usb/dwc3/gadget.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c index c99568eb4292..c2813c2b005a 100644 --- a/drivers/usb/dwc3/gadget.c +++ b/drivers/usb/dwc3/gadget.c | |||
@@ -1029,6 +1029,7 @@ static void __dwc3_gadget_start_isoc(struct dwc3 *dwc, | |||
1029 | if (list_empty(&dep->request_list)) { | 1029 | if (list_empty(&dep->request_list)) { |
1030 | dev_vdbg(dwc->dev, "ISOC ep %s run out for requests.\n", | 1030 | dev_vdbg(dwc->dev, "ISOC ep %s run out for requests.\n", |
1031 | dep->name); | 1031 | dep->name); |
1032 | dep->flags |= DWC3_EP_PENDING_REQUEST; | ||
1032 | return; | 1033 | return; |
1033 | } | 1034 | } |
1034 | 1035 | ||
@@ -1092,6 +1093,17 @@ static int __dwc3_gadget_ep_queue(struct dwc3_ep *dep, struct dwc3_request *req) | |||
1092 | if (dep->flags & DWC3_EP_PENDING_REQUEST) { | 1093 | if (dep->flags & DWC3_EP_PENDING_REQUEST) { |
1093 | int ret; | 1094 | int ret; |
1094 | 1095 | ||
1096 | /* | ||
1097 | * If xfernotready is already elapsed and it is a case | ||
1098 | * of isoc transfer, then issue END TRANSFER, so that | ||
1099 | * you can receive xfernotready again and can have | ||
1100 | * notion of current microframe. | ||
1101 | */ | ||
1102 | if (usb_endpoint_xfer_isoc(dep->endpoint.desc)) { | ||
1103 | dwc3_stop_active_transfer(dwc, dep->number); | ||
1104 | return 0; | ||
1105 | } | ||
1106 | |||
1095 | ret = __dwc3_gadget_kick_transfer(dep, 0, true); | 1107 | ret = __dwc3_gadget_kick_transfer(dep, 0, true); |
1096 | if (ret && ret != -EBUSY) { | 1108 | if (ret && ret != -EBUSY) { |
1097 | struct dwc3 *dwc = dep->dwc; | 1109 | struct dwc3 *dwc = dep->dwc; |