diff --git a/drivers/usb/dwc2/hcd.c b/drivers/usb/dwc2/hcd.c index 1e4702eefd09..f495101eb1dc 100644 --- a/drivers/usb/dwc2/hcd.c +++ b/drivers/usb/dwc2/hcd.c @@ -1008,11 +1008,13 @@ void dwc2_hc_halt(struct dwc2_hsotg *hsotg, struct dwc2_host_chan *chan, * uframe/frame (in the worst case), the core generates a channel * halted and disables the channel automatically. */ - if ((hsotg->params.g_dma && !hsotg->params.g_dma_desc) || + if ((hsotg->params.host_dma && !hsotg->params.dma_desc_enable) || hsotg->hw_params.arch == GHWCFG2_EXT_DMA_ARCH) { if (!chan->do_split && (chan->ep_type == USB_ENDPOINT_XFER_ISOC || - chan->ep_type == USB_ENDPOINT_XFER_INT)) { + chan->ep_type == USB_ENDPOINT_XFER_INT) && + (halt_status == DWC2_HC_XFER_URB_DEQUEUE)) { + chan->halt_status = halt_status; dev_err(hsotg->dev, "%s() Channel can't be halted\n", __func__); return;