usb: gadget: net2280: unconditionally reset dma in usb_reset
authorMian Yousaf Kaukab <yousaf.kaukab@intel.com>
Sat, 16 May 2015 20:33:32 +0000 (22:33 +0200)
committerFelipe Balbi <balbi@ti.com>
Tue, 26 May 2015 15:39:56 +0000 (10:39 -0500)
If ep->dma is set, abort_dma() takes care of dma clean-up. If ep->dma
is not set, unconditionally reset dma channel.

Tested-by: Ricardo Ribalda Delgado <ricardo.ribalda@gmail.com>
Signed-off-by: Mian Yousaf Kaukab <yousaf.kaukab@intel.com>
Signed-off-by: Felipe Balbi <balbi@ti.com>
drivers/usb/gadget/udc/net2280.c

index a91da3640ded8783d3681841b6669d352ac83ea4..07e0dba3be077b20cf2c1d4732b6a12e9ab0a7a6 100644 (file)
@@ -1979,9 +1979,15 @@ static void usb_reset_338x(struct net2280 *dev)
        /* clear old dma and irq state */
        for (tmp = 0; tmp < 4; tmp++) {
                struct net2280_ep *ep = &dev->ep[tmp + 1];
+               struct net2280_dma_regs __iomem *dma;
 
-               if (ep->dma)
+               if (ep->dma) {
                        abort_dma(ep);
+               } else {
+                       dma = &dev->dma[tmp];
+                       writel(BIT(DMA_ABORT), &dma->dmastat);
+                       writel(0, &dma->dmactl);
+               }
        }
 
        writel(~0, &dev->regs->irqstat0), writel(~0, &dev->regs->irqstat1);