usb: dwc3: core: move event buffer allocation out of dwc3_core_init()
authorFelipe Balbi <balbi@ti.com>
Thu, 11 Oct 2012 10:54:36 +0000 (13:54 +0300)
committerFelipe Balbi <balbi@ti.com>
Mon, 15 Oct 2012 11:58:56 +0000 (14:58 +0300)
This patch is in preparation for adding PM support
dwc3 driver. We want to re-use dwc3_core_init and
dwc3_core_exit() functions on resume() and suspend()
callbacks respectively.

Moving even buffer allocation away from dwc3_core_init()
will allow us to reuse the event buffer which was allocated
long ago on our probe() routine.

Signed-off-by: Felipe Balbi <balbi@ti.com>
drivers/usb/dwc3/core.c

index 8d543ea4352aa2a722286593b94c003f6d0d3e28..b923183c43cb474c60444847c5e1e401505f0fc5 100644 (file)
@@ -381,24 +381,14 @@ static int __devinit dwc3_core_init(struct dwc3 *dwc)
 
        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");
-               ret = -ENOMEM;
-               goto err1;
-       }
-
        ret = dwc3_event_buffers_setup(dwc);
        if (ret) {
                dev_err(dwc->dev, "failed to setup event buffers\n");
-               goto err1;
+               goto err0;
        }
 
        return 0;
 
-err1:
-       dwc3_free_event_buffers(dwc);
-
 err0:
        return ret;
 }
@@ -406,7 +396,6 @@ err0:
 static void dwc3_core_exit(struct dwc3 *dwc)
 {
        dwc3_event_buffers_cleanup(dwc);
-       dwc3_free_event_buffers(dwc);
 }
 
 #define DWC3_ALIGN_MASK                (16 - 1)
@@ -509,10 +498,17 @@ static int __devinit dwc3_probe(struct platform_device *pdev)
        pm_runtime_get_sync(dev);
        pm_runtime_forbid(dev);
 
+       ret = dwc3_alloc_event_buffers(dwc, DWC3_EVENT_BUFFERS_SIZE);
+       if (ret) {
+               dev_err(dwc->dev, "failed to allocate event buffers\n");
+               ret = -ENOMEM;
+               goto err0;
+       }
+
        ret = dwc3_core_init(dwc);
        if (ret) {
                dev_err(dev, "failed to initialize core\n");
-               return ret;
+               goto err0;
        }
 
        mode = DWC3_MODE(dwc->hwparams.hwparams0);
@@ -584,6 +580,9 @@ err2:
 err1:
        dwc3_core_exit(dwc);
 
+err0:
+       dwc3_free_event_buffers(dwc);
+
        return ret;
 }