Message ID | 790323e30caff5fcf1d3514efbd53da5ff895b75.1528792580.git.hminas@synopsys.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Hi Minas: >-----Original Message----- >From: linux-usb-owner@vger.kernel.org >[mailto:linux-usb-owner@vger.kernel.org] On Behalf Of Minas Harutyunyan >Sent: Tuesday, June 12, 2018 4:37 PM >To: Felipe Balbi <balbi@kernel.org>; Greg Kroah-Hartman ><gregkh@linuxfoundation.org>; Minas Harutyunyan ><Minas.Harutyunyan@synopsys.com>; linux-usb@vger.kernel.org >Cc: John Youn <John.Youn@synopsys.com> >Subject: [PATCH] usb: dwc2: gadget: Fix issue in dwc2_gadget_start_isoc() > >In case of requests queue is empty reset EP target_frame to initial value. > >This allow restarting ISOC traffic in case when function driver queued >requests with interruptions. > >Signed-off-by: Minas Harutyunyan <hminas@synopsys.com> >--- > drivers/usb/dwc2/gadget.c | 1 + > 1 file changed, 1 insertion(+) > >diff --git a/drivers/usb/dwc2/gadget.c b/drivers/usb/dwc2/gadget.c index >7a5e265f48f7..24d23025be77 100644 >--- a/drivers/usb/dwc2/gadget.c >+++ b/drivers/usb/dwc2/gadget.c >@@ -891,6 +891,7 @@ static void dwc2_gadget_start_isoc_ddma(struct >dwc2_hsotg_ep *hs_ep) > struct dwc2_dma_desc *desc; > > if (list_empty(&hs_ep->queue)) { >+ hs_ep->target_frame = TARGET_FRAME_INITIAL; > dev_dbg(hsotg->dev, "%s: No requests in queue\n", __func__); > return; > } >-- Tested-by: Zeng Tao <prime.zeng@hisilicon.com> I have tested it on my platform using webcam gadget application. Regards Zengtao >2.11.0 > >-- >To unsubscribe from this list: send the line "unsubscribe linux-usb" in the >body of a message to majordomo@vger.kernel.org More majordomo info at >http://vger.kernel.org/majordomo-info.html
diff --git a/drivers/usb/dwc2/gadget.c b/drivers/usb/dwc2/gadget.c index 7a5e265f48f7..24d23025be77 100644 --- a/drivers/usb/dwc2/gadget.c +++ b/drivers/usb/dwc2/gadget.c @@ -891,6 +891,7 @@ static void dwc2_gadget_start_isoc_ddma(struct dwc2_hsotg_ep *hs_ep) struct dwc2_dma_desc *desc; if (list_empty(&hs_ep->queue)) { + hs_ep->target_frame = TARGET_FRAME_INITIAL; dev_dbg(hsotg->dev, "%s: No requests in queue\n", __func__); return; }
In case of requests queue is empty reset EP target_frame to initial value. This allow restarting ISOC traffic in case when function driver queued requests with interruptions. Signed-off-by: Minas Harutyunyan <hminas@synopsys.com> --- drivers/usb/dwc2/gadget.c | 1 + 1 file changed, 1 insertion(+)