usb: gadget: fusb300_udc: bug fix of not doing idma reset for each time
authorYuan-Hsin Chen <yuanlmm@gmail.com>
Tue, 2 Apr 2013 11:18:08 +0000 (11:18 +0000)
committerFelipe Balbi <balbi@ti.com>
Tue, 2 Apr 2013 13:58:39 +0000 (16:58 +0300)
Enter IDMA_RESET only when the controller has been reset or
the device has been plugged in to or out from a host. In
IDMA_RESET, we should disable the corresponding PRD interrupt.
Also there is a redundant space eliminated.

fusb300_udc driver is tested on FARADAY platform a369 with
FUSB300 FPGA v1.8

Signed-off-by: Yuan-Hsin Chen <yhchen@faraday-tech.com>
Signed-off-by: Felipe Balbi <balbi@ti.com>
drivers/usb/gadget/fusb300_udc.c

index db0d2917987aa75eed450cbe171586f2365992e7..cec8871b77f9d9acd91b2c845175b6f9150e8571 100644 (file)
@@ -930,12 +930,15 @@ static void fusb300_wait_idma_finished(struct fusb300_ep *ep)
 
        fusb300_clear_int(ep->fusb300, FUSB300_OFFSET_IGR0,
                FUSB300_IGR0_EPn_PRD_INT(ep->epnum));
+       return;
+
 IDMA_RESET:
-       fusb300_clear_int(ep->fusb300, FUSB300_OFFSET_IGER0,
-               FUSB300_IGER0_EEPn_PRD_INT(ep->epnum));
+       reg = ioread32(ep->fusb300->reg + FUSB300_OFFSET_IGER0);
+       reg &= ~FUSB300_IGER0_EEPn_PRD_INT(ep->epnum);
+       iowrite32(reg, ep->fusb300->reg + FUSB300_OFFSET_IGER0);
 }
 
-static void  fusb300_set_idma(struct fusb300_ep *ep,
+static void fusb300_set_idma(struct fusb300_ep *ep,
                        struct fusb300_request *req)
 {
        int ret;