Hi Thinh, >dwc3_gadget_endpoint_transfer_in_progress(struct dwc3_ep *dep, >> stop = true; >> } >> >> + /* >> + * Delete the timer that was started in __dwc3_gadget_kick_transfer() >> + * for stream capable endpoints. >> + */ >> + if (dep->stream_capable) >> + del_timer(&dep->stream_timeout_timer); >> + >> dwc3_gadget_ep_cleanup_completed_requests(dep, event, status); >> >> if (stop) { >> @@ -2486,6 +2505,14 @@ static void dwc3_endpoint_interrupt(struct dwc3 *dwc, >> } >> break; >> case DWC3_DEPEVT_STREAMEVT: >> + switch (event->status) { >> + case DEPEVT_STREAMEVT_FOUND: >> + del_timer(&dep->stream_timeout_timer); >> + break; >> + case DEPEVT_STREAMEVT_NOTFOUND: >> + default: >> + dev_err(dwc->dev, "unable to find suitable stream"); >> + } >Add break after this. Also, it's probably easier to read if we use if-else case here. > Thanks for correcting the code, will fix it in next series of patch Thanks, Anurag Kumar Vulisha >> case DWC3_DEPEVT_RXTXFIFOEVT: >> break; >> } >> @@ -2587,6 +2614,18 @@ static void dwc3_stop_active_transfer(struct dwc3_ep >*dep, bool force) >> } >> } >> >> +static void stream_timeout_function(struct timer_list *arg) { >> + struct dwc3_ep *dep = from_timer(dep, arg, stream_timeout_timer); >> + struct dwc3 *dwc = dep->dwc; >> + unsigned long flags; >> + >> + spin_lock_irqsave(&dwc->lock, flags); >> + dwc3_stop_active_transfer(dep, true); >> + __dwc3_gadget_kick_transfer(dep); >> + spin_unlock_irqrestore(&dwc->lock, flags); } >> + >> static void dwc3_clear_stall_all_ep(struct dwc3 *dwc) { >> u32 epnum; > >Thinh