(void) __dwc3_gadget_start_isoc(dep);
 }
 
+static void dwc3_gadget_endpoint_command_complete(struct dwc3_ep *dep,
+               const struct dwc3_event_depevt *event)
+{
+       u8 cmd = DEPEVT_PARAMETER_CMD(event->parameters);
+
+       if (cmd != DWC3_DEPCMD_ENDTRANSFER)
+               return;
+
+       dep->flags &= ~DWC3_EP_END_TRANSFER_PENDING;
+       dep->flags &= ~DWC3_EP_TRANSFER_STARTED;
+       dwc3_gadget_ep_cleanup_cancelled_requests(dep);
+
+       if (dep->flags & DWC3_EP_PENDING_CLEAR_STALL) {
+               struct dwc3 *dwc = dep->dwc;
+
+               dep->flags &= ~DWC3_EP_PENDING_CLEAR_STALL;
+               if (dwc3_send_clear_stall_ep_cmd(dep)) {
+                       struct usb_ep *ep0 = &dwc->eps[0]->endpoint;
+
+                       dev_err(dwc->dev, "failed to clear STALL on %s\n", dep->name);
+                       if (dwc->delayed_status)
+                               __dwc3_gadget_ep0_set_halt(ep0, 1);
+                       return;
+               }
+
+               dep->flags &= ~(DWC3_EP_STALL | DWC3_EP_WEDGE);
+               if (dwc->delayed_status)
+                       dwc3_ep0_send_delayed_status(dwc);
+       }
+
+       if ((dep->flags & DWC3_EP_DELAY_START) &&
+           !usb_endpoint_xfer_isoc(dep->endpoint.desc))
+               __dwc3_gadget_kick_transfer(dep);
+
+       dep->flags &= ~DWC3_EP_DELAY_START;
+}
+
 static void dwc3_gadget_endpoint_stream_event(struct dwc3_ep *dep,
                const struct dwc3_event_depevt *event)
 {
 {
        struct dwc3_ep          *dep;
        u8                      epnum = event->endpoint_number;
-       u8                      cmd;
 
        dep = dwc->eps[epnum];
 
                dwc3_gadget_endpoint_transfer_not_ready(dep, event);
                break;
        case DWC3_DEPEVT_EPCMDCMPLT:
-               cmd = DEPEVT_PARAMETER_CMD(event->parameters);
-
-               if (cmd == DWC3_DEPCMD_ENDTRANSFER) {
-                       dep->flags &= ~DWC3_EP_END_TRANSFER_PENDING;
-                       dep->flags &= ~DWC3_EP_TRANSFER_STARTED;
-                       dwc3_gadget_ep_cleanup_cancelled_requests(dep);
-
-                       if (dep->flags & DWC3_EP_PENDING_CLEAR_STALL) {
-                               struct dwc3 *dwc = dep->dwc;
-
-                               dep->flags &= ~DWC3_EP_PENDING_CLEAR_STALL;
-                               if (dwc3_send_clear_stall_ep_cmd(dep)) {
-                                       struct usb_ep *ep0 = &dwc->eps[0]->endpoint;
-
-                                       dev_err(dwc->dev, "failed to clear STALL on %s\n",
-                                               dep->name);
-                                       if (dwc->delayed_status)
-                                               __dwc3_gadget_ep0_set_halt(ep0, 1);
-                                       return;
-                               }
-
-                               dep->flags &= ~(DWC3_EP_STALL | DWC3_EP_WEDGE);
-                               if (dwc->delayed_status)
-                                       dwc3_ep0_send_delayed_status(dwc);
-                       }
-
-                       if ((dep->flags & DWC3_EP_DELAY_START) &&
-                           !usb_endpoint_xfer_isoc(dep->endpoint.desc))
-                               __dwc3_gadget_kick_transfer(dep);
-
-                       dep->flags &= ~DWC3_EP_DELAY_START;
-               }
+               dwc3_gadget_endpoint_command_complete(dep, event);
                break;
        case DWC3_DEPEVT_XFERCOMPLETE:
                dwc3_gadget_endpoint_transfer_complete(dep, event);