usb: dwc3: move generic dwc3 code from gadget into core
authorSebastian Andrzej Siewior <bigeasy@linutronix.de>
Mon, 31 Oct 2011 21:25:41 +0000 (22:25 +0100)
committerFelipe Balbi <balbi@ti.com>
Mon, 12 Dec 2011 09:48:27 +0000 (11:48 +0200)
A few inits like the scale value or the removal of the DISSCRAMBLE is
done in the gadget code however it touches a general register.
Move this piece to the core.c file since it is likely to be requied by
both, parts of the core (device and host).

Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Signed-off-by: Felipe Balbi <balbi@ti.com>
drivers/usb/dwc3/core.c
drivers/usb/dwc3/gadget.c

index 217547514faa14b9e855fb1cbdc634d5e402ac90..6910a2d14d93c072897adea292bd8ae696fd2926 100644 (file)
@@ -349,6 +349,29 @@ static int __devinit dwc3_core_init(struct dwc3 *dwc)
 
        dwc3_cache_hwparams(dwc);
 
+       reg = dwc3_readl(dwc->regs, DWC3_GCTL);
+       reg &= ~DWC3_GCTL_SCALEDOWN(3);
+       reg &= ~DWC3_GCTL_DISSCRAMBLE;
+
+       switch (DWC3_GHWPARAMS1_EN_PWROPT(dwc->hwparams.hwparams0)) {
+       case DWC3_GHWPARAMS1_EN_PWROPT_CLK:
+               reg &= ~DWC3_GCTL_DSBLCLKGTNG;
+               break;
+       default:
+               dev_dbg(dwc->dev, "No power optimization available\n");
+       }
+
+       /*
+        * WORKAROUND: DWC3 revisions <1.90a have a bug
+        * when The device fails to connect at SuperSpeed
+        * and falls back to high-speed mode which causes
+        * the device to enter in a Connect/Disconnect loop
+        */
+       if (dwc->revision < DWC3_REVISION_190A)
+               reg |= DWC3_GCTL_U2RSTECN;
+
+       dwc3_writel(dwc->regs, DWC3_GCTL, reg);
+
        ret = dwc3_alloc_event_buffers(dwc, DWC3_EVENT_BUFFERS_SIZE);
        if (ret) {
                dev_err(dwc->dev, "failed to allocate event buffers\n");
index fab4ee0082e23aa2d527061deecfe85bf472d7b7..8aff490a1ae149eb2def62745416c7f52951f16f 100644 (file)
@@ -1155,30 +1155,6 @@ static int dwc3_gadget_start(struct usb_gadget *g,
        dwc->gadget_driver      = driver;
        dwc->gadget.dev.driver  = &driver->driver;
 
-       reg = dwc3_readl(dwc->regs, DWC3_GCTL);
-
-       reg &= ~DWC3_GCTL_SCALEDOWN(3);
-       reg &= ~DWC3_GCTL_DISSCRAMBLE;
-
-       switch (DWC3_GHWPARAMS1_EN_PWROPT(dwc->hwparams.hwparams0)) {
-       case DWC3_GHWPARAMS1_EN_PWROPT_CLK:
-               reg &= ~DWC3_GCTL_DSBLCLKGTNG;
-               break;
-       default:
-               dev_dbg(dwc->dev, "No power optimization available\n");
-       }
-
-       /*
-        * WORKAROUND: DWC3 revisions <1.90a have a bug
-        * when The device fails to connect at SuperSpeed
-        * and falls back to high-speed mode which causes
-        * the device to enter in a Connect/Disconnect loop
-        */
-       if (dwc->revision < DWC3_REVISION_190A)
-               reg |= DWC3_GCTL_U2RSTECN;
-
-       dwc3_writel(dwc->regs, DWC3_GCTL, reg);
-
        reg = dwc3_readl(dwc->regs, DWC3_DCFG);
        reg &= ~(DWC3_DCFG_SPEED_MASK);
        reg |= dwc->maximum_speed;