]> git.karo-electronics.de Git - linux-beck.git/commitdiff
usb: dwc2: gadget: Fix transfer stop programming for out endpoint
authorVardan Mikayelyan <mvardan@synopsys.com>
Thu, 26 May 2016 01:07:02 +0000 (18:07 -0700)
committerFelipe Balbi <felipe.balbi@linux.intel.com>
Tue, 21 Jun 2016 07:49:13 +0000 (10:49 +0300)
According DWC-OTG databook, "GOUTNakEff" is read only and can be
cleared only by "DCTL.CGOUTNak", but here we do not need to clear
it because DWC-OTG programming guide says that before disabling
any OUT endpoint, the application must enable Global OUT NAK mode,
so if this mode is enabled we can continue without this step.

Tested-by: John Keeping <john@metanate.com>
Signed-off-by: Vardan Mikayelyan <mvardan@synopsys.com>
Signed-off-by: John Youn <johnyoun@synopsys.com>
Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
drivers/usb/dwc2/gadget.c

index 71681727c66dee5c6950e0019da120cdb466c80a..54d242b6d2aa6728bf001e2da668e7d8a995468e 100644 (file)
@@ -2866,10 +2866,8 @@ static void dwc2_hsotg_ep_stop_xfr(struct dwc2_hsotg *hsotg,
                        dev_warn(hsotg->dev,
                                "%s: timeout DIEPINT.NAKEFF\n", __func__);
        } else {
-               /* Clear any pending nak effect interrupt */
-               dwc2_writel(GINTSTS_GOUTNAKEFF, hsotg->regs + GINTSTS);
-
-               __orr32(hsotg->regs + DCTL, DCTL_SGOUTNAK);
+               if (!(dwc2_readl(hsotg->regs + GINTSTS) & GINTSTS_GOUTNAKEFF))
+                       __orr32(hsotg->regs + DCTL, DCTL_SGOUTNAK);
 
                /* Wait for global nak to take effect */
                if (dwc2_hsotg_wait_bit_set(hsotg, GINTSTS,