|
@@ -1906,12 +1906,16 @@ static void dwc3_endpoint_transfer_complete(struct dwc3 *dwc,
|
|
{
|
|
{
|
|
unsigned status = 0;
|
|
unsigned status = 0;
|
|
int clean_busy;
|
|
int clean_busy;
|
|
|
|
+ u32 is_xfer_complete;
|
|
|
|
+
|
|
|
|
+ is_xfer_complete = (event->endpoint_event == DWC3_DEPEVT_XFERCOMPLETE);
|
|
|
|
|
|
if (event->status & DEPEVT_STATUS_BUSERR)
|
|
if (event->status & DEPEVT_STATUS_BUSERR)
|
|
status = -ECONNRESET;
|
|
status = -ECONNRESET;
|
|
|
|
|
|
clean_busy = dwc3_cleanup_done_reqs(dwc, dep, event, status);
|
|
clean_busy = dwc3_cleanup_done_reqs(dwc, dep, event, status);
|
|
- if (clean_busy)
|
|
|
|
|
|
+ if (clean_busy && (is_xfer_complete ||
|
|
|
|
+ usb_endpoint_xfer_isoc(dep->endpoint.desc)))
|
|
dep->flags &= ~DWC3_EP_BUSY;
|
|
dep->flags &= ~DWC3_EP_BUSY;
|
|
|
|
|
|
/*
|
|
/*
|