usb: dwc3: use devm_xxx functions
authorChanho Park <chanho61.park@samsung.com>
Wed, 15 Feb 2012 09:27:55 +0000 (18:27 +0900)
committerFelipe Balbi <balbi@ti.com>
Fri, 2 Mar 2012 10:11:59 +0000 (12:11 +0200)
This patch enables to use devm_xxx functions during probing driver.
The devm_xxx series functions are able to release resource when the
driver is detatched. We can remove several codes to release resources
in the probe function.

Signed-off-by: Chanho Park <chanho61.park@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
Signed-off-by: Felipe Balbi <balbi@ti.com>
drivers/usb/dwc3/core.c
drivers/usb/dwc3/dwc3-omap.c
drivers/usb/dwc3/dwc3-pci.c

index d119a1f..c181f3e 100644 (file)
@@ -408,6 +408,7 @@ static int __devinit dwc3_probe(struct platform_device *pdev)
        struct device_node      *node = pdev->dev.of_node;
        struct resource         *res;
        struct dwc3             *dwc;
+       struct device           *dev = &pdev->dev;
 
        int                     ret = -ENOMEM;
        int                     irq;
@@ -417,39 +418,39 @@ static int __devinit dwc3_probe(struct platform_device *pdev)
 
        u8                      mode;
 
-       mem = kzalloc(sizeof(*dwc) + DWC3_ALIGN_MASK, GFP_KERNEL);
+       mem = devm_kzalloc(dev, sizeof(*dwc) + DWC3_ALIGN_MASK, GFP_KERNEL);
        if (!mem) {
-               dev_err(&pdev->dev, "not enough memory\n");
-               goto err0;
+               dev_err(dev, "not enough memory\n");
+               return -ENOMEM;
        }
        dwc = PTR_ALIGN(mem, DWC3_ALIGN_MASK + 1);
        dwc->mem = mem;
 
        res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
        if (!res) {
-               dev_err(&pdev->dev, "missing resource\n");
-               goto err1;
+               dev_err(dev, "missing resource\n");
+               return -ENODEV;
        }
 
        dwc->res = res;
 
-       res = request_mem_region(res->start, resource_size(res),
-                       dev_name(&pdev->dev));
+       res = devm_request_mem_region(dev, res->start, resource_size(res),
+                       dev_name(dev));
        if (!res) {
-               dev_err(&pdev->dev, "can't request mem region\n");
-               goto err1;
+               dev_err(dev, "can't request mem region\n");
+               return -ENOMEM;
        }
 
-       regs = ioremap(res->start, resource_size(res));
+       regs = devm_ioremap(dev, res->start, resource_size(res));
        if (!regs) {
-               dev_err(&pdev->dev, "ioremap failed\n");
-               goto err2;
+               dev_err(dev, "ioremap failed\n");
+               return -ENOMEM;
        }
 
        irq = platform_get_irq(pdev, 0);
        if (irq < 0) {
-               dev_err(&pdev->dev, "missing IRQ\n");
-               goto err3;
+               dev_err(dev, "missing IRQ\n");
+               return -ENODEV;
        }
 
        spin_lock_init(&dwc->lock);
@@ -457,7 +458,7 @@ static int __devinit dwc3_probe(struct platform_device *pdev)
 
        dwc->regs       = regs;
        dwc->regs_size  = resource_size(res);
-       dwc->dev        = &pdev->dev;
+       dwc->dev        = dev;
        dwc->irq        = irq;
 
        if (!strncmp("super", maximum_speed, 5))
@@ -474,14 +475,14 @@ static int __devinit dwc3_probe(struct platform_device *pdev)
        if (of_get_property(node, "tx-fifo-resize", NULL))
                dwc->needs_fifo_resize = true;
 
-       pm_runtime_enable(&pdev->dev);
-       pm_runtime_get_sync(&pdev->dev);
-       pm_runtime_forbid(&pdev->dev);
+       pm_runtime_enable(dev);
+       pm_runtime_get_sync(dev);
+       pm_runtime_forbid(dev);
 
        ret = dwc3_core_init(dwc);
        if (ret) {
-               dev_err(&pdev->dev, "failed to initialize core\n");
-               goto err3;
+               dev_err(dev, "failed to initialize core\n");
+               return ret;
        }
 
        mode = DWC3_MODE(dwc->hwparams.hwparams0);
@@ -491,49 +492,49 @@ static int __devinit dwc3_probe(struct platform_device *pdev)
                dwc3_set_mode(dwc, DWC3_GCTL_PRTCAP_DEVICE);
                ret = dwc3_gadget_init(dwc);
                if (ret) {
-                       dev_err(&pdev->dev, "failed to initialize gadget\n");
-                       goto err4;
+                       dev_err(dev, "failed to initialize gadget\n");
+                       goto err1;
                }
                break;
        case DWC3_MODE_HOST:
                dwc3_set_mode(dwc, DWC3_GCTL_PRTCAP_HOST);
                ret = dwc3_host_init(dwc);
                if (ret) {
-                       dev_err(&pdev->dev, "failed to initialize host\n");
-                       goto err4;
+                       dev_err(dev, "failed to initialize host\n");
+                       goto err1;
                }
                break;
        case DWC3_MODE_DRD:
                dwc3_set_mode(dwc, DWC3_GCTL_PRTCAP_OTG);
                ret = dwc3_host_init(dwc);
                if (ret) {
-                       dev_err(&pdev->dev, "failed to initialize host\n");
-                       goto err4;
+                       dev_err(dev, "failed to initialize host\n");
+                       goto err1;
                }
 
                ret = dwc3_gadget_init(dwc);
                if (ret) {
-                       dev_err(&pdev->dev, "failed to initialize gadget\n");
-                       goto err4;
+                       dev_err(dev, "failed to initialize gadget\n");
+                       goto err1;
                }
                break;
        default:
-               dev_err(&pdev->dev, "Unsupported mode of operation %d\n", mode);
-               goto err4;
+               dev_err(dev, "Unsupported mode of operation %d\n", mode);
+               goto err1;
        }
        dwc->mode = mode;
 
        ret = dwc3_debugfs_init(dwc);
        if (ret) {
-               dev_err(&pdev->dev, "failed to initialize debugfs\n");
-               goto err5;
+               dev_err(dev, "failed to initialize debugfs\n");
+               goto err2;
        }
 
-       pm_runtime_allow(&pdev->dev);
+       pm_runtime_allow(dev);
 
        return 0;
 
-err5:
+err2:
        switch (mode) {
        case DWC3_MODE_DEVICE:
                dwc3_gadget_exit(dwc);
@@ -550,19 +551,9 @@ err5:
                break;
        }
 
-err4:
-       dwc3_core_exit(dwc);
-
-err3:
-       iounmap(regs);
-
-err2:
-       release_mem_region(res->start, resource_size(res));
-
 err1:
-       kfree(dwc->mem);
+       dwc3_core_exit(dwc);
 
-err0:
        return ret;
 }
 
@@ -595,9 +586,6 @@ static int __devexit dwc3_remove(struct platform_device *pdev)
        }
 
        dwc3_core_exit(dwc);
-       release_mem_region(res->start, resource_size(res));
-       iounmap(dwc->regs);
-       kfree(dwc->mem);
 
        return 0;
 }
index 64e29c3..f2e6b05 100644 (file)
@@ -203,6 +203,7 @@ static int __devinit dwc3_omap_probe(struct platform_device *pdev)
        struct platform_device  *dwc3;
        struct dwc3_omap        *omap;
        struct resource         *res;
+       struct device           *dev = &pdev->dev;
 
        int                     devid;
        int                     size;
@@ -215,59 +216,57 @@ static int __devinit dwc3_omap_probe(struct platform_device *pdev)
        void __iomem            *base;
        void                    *context;
 
-       omap = kzalloc(sizeof(*omap), GFP_KERNEL);
+       omap = devm_kzalloc(dev, sizeof(*omap), GFP_KERNEL);
        if (!omap) {
-               dev_err(&pdev->dev, "not enough memory\n");
-               goto err0;
+               dev_err(dev, "not enough memory\n");
+               return -ENOMEM;
        }
 
        platform_set_drvdata(pdev, omap);
 
        irq = platform_get_irq(pdev, 1);
        if (irq < 0) {
-               dev_err(&pdev->dev, "missing IRQ resource\n");
-               ret = -EINVAL;
-               goto err1;
+               dev_err(dev, "missing IRQ resource\n");
+               return -EINVAL;
        }
 
        res = platform_get_resource(pdev, IORESOURCE_MEM, 1);
        if (!res) {
-               dev_err(&pdev->dev, "missing memory base resource\n");
-               ret = -EINVAL;
-               goto err1;
+               dev_err(dev, "missing memory base resource\n");
+               return -EINVAL;
        }
 
-       base = ioremap_nocache(res->start, resource_size(res));
+       base = devm_ioremap_nocache(dev, res->start, resource_size(res));
        if (!base) {
-               dev_err(&pdev->dev, "ioremap failed\n");
-               goto err1;
+               dev_err(dev, "ioremap failed\n");
+               return -ENOMEM;
        }
 
        devid = dwc3_get_device_id();
        if (devid < 0)
-               goto err2;
+               return -ENODEV;
 
        dwc3 = platform_device_alloc("dwc3", devid);
        if (!dwc3) {
-               dev_err(&pdev->dev, "couldn't allocate dwc3 device\n");
-               goto err3;
+               dev_err(dev, "couldn't allocate dwc3 device\n");
+               goto err1;
        }
 
-       context = kzalloc(resource_size(res), GFP_KERNEL);
+       context = devm_kzalloc(dev, resource_size(res), GFP_KERNEL);
        if (!context) {
-               dev_err(&pdev->dev, "couldn't allocate dwc3 context memory\n");
-               goto err4;
+               dev_err(dev, "couldn't allocate dwc3 context memory\n");
+               goto err2;
        }
 
        spin_lock_init(&omap->lock);
-       dma_set_coherent_mask(&dwc3->dev, pdev->dev.coherent_dma_mask);
+       dma_set_coherent_mask(&dwc3->dev, dev->coherent_dma_mask);
 
-       dwc3->dev.parent = &pdev->dev;
-       dwc3->dev.dma_mask = pdev->dev.dma_mask;
-       dwc3->dev.dma_parms = pdev->dev.dma_parms;
+       dwc3->dev.parent = dev;
+       dwc3->dev.dma_mask = dev->dma_mask;
+       dwc3->dev.dma_parms = dev->dma_parms;
        omap->resource_size = resource_size(res);
        omap->context   = context;
-       omap->dev       = &pdev->dev;
+       omap->dev       = dev;
        omap->irq       = irq;
        omap->base      = base;
        omap->dwc3      = dwc3;
@@ -279,7 +278,7 @@ static int __devinit dwc3_omap_probe(struct platform_device *pdev)
                reg |= *utmi_mode;
        } else {
                if (!pdata) {
-                       dev_dbg(&pdev->dev, "missing platform data\n");
+                       dev_dbg(dev, "missing platform data\n");
                } else {
                        switch (pdata->utmi_mode) {
                        case DWC3_OMAP_UTMI_MODE_SW:
@@ -289,7 +288,7 @@ static int __devinit dwc3_omap_probe(struct platform_device *pdev)
                                reg &= ~USBOTGSS_UTMI_OTG_STATUS_SW_MODE;
                                break;
                        default:
-                               dev_dbg(&pdev->dev, "UNKNOWN utmi mode %d\n",
+                               dev_dbg(dev, "UNKNOWN utmi mode %d\n",
                                                pdata->utmi_mode);
                        }
                }
@@ -310,12 +309,12 @@ static int __devinit dwc3_omap_probe(struct platform_device *pdev)
 
        dwc3_writel(omap->base, USBOTGSS_SYSCONFIG, reg);
 
-       ret = request_irq(omap->irq, dwc3_omap_interrupt, 0,
+       ret = devm_request_irq(dev, omap->irq, dwc3_omap_interrupt, 0,
                        "dwc3-omap", omap);
        if (ret) {
-               dev_err(&pdev->dev, "failed to request IRQ #%d --> %d\n",
+               dev_err(dev, "failed to request IRQ #%d --> %d\n",
                                omap->irq, ret);
-               goto err5;
+               goto err2;
        }
 
        /* enable all IRQs */
@@ -337,37 +336,24 @@ static int __devinit dwc3_omap_probe(struct platform_device *pdev)
        ret = platform_device_add_resources(dwc3, pdev->resource,
                        pdev->num_resources);
        if (ret) {
-               dev_err(&pdev->dev, "couldn't add resources to dwc3 device\n");
-               goto err6;
+               dev_err(dev, "couldn't add resources to dwc3 device\n");
+               goto err2;
        }
 
        ret = platform_device_add(dwc3);
        if (ret) {
-               dev_err(&pdev->dev, "failed to register dwc3 device\n");
-               goto err6;
+               dev_err(dev, "failed to register dwc3 device\n");
+               goto err2;
        }
 
        return 0;
 
-err6:
-       free_irq(omap->irq, omap);
-
-err5:
-       kfree(omap->context);
-
-err4:
-       platform_device_put(dwc3);
-
-err3:
-       dwc3_put_device_id(devid);
-
 err2:
-       iounmap(base);
+       platform_device_put(dwc3);
 
 err1:
-       kfree(omap);
+       dwc3_put_device_id(devid);
 
-err0:
        return ret;
 }
 
@@ -378,11 +364,6 @@ static int __devexit dwc3_omap_remove(struct platform_device *pdev)
        platform_device_unregister(omap->dwc3);
 
        dwc3_put_device_id(omap->dwc3->id);
-       free_irq(omap->irq, omap);
-       iounmap(omap->base);
-
-       kfree(omap->context);
-       kfree(omap);
 
        return 0;
 }
index 64e1f7c..05d3a3e 100644 (file)
@@ -61,19 +61,20 @@ static int __devinit dwc3_pci_probe(struct pci_dev *pci,
        struct dwc3_pci         *glue;
        int                     ret = -ENOMEM;
        int                     devid;
+       struct device           *dev = &pci->dev;
 
-       glue = kzalloc(sizeof(*glue), GFP_KERNEL);
+       glue = devm_kzalloc(dev, sizeof(*glue), GFP_KERNEL);
        if (!glue) {
-               dev_err(&pci->dev, "not enough memory\n");
-               goto err0;
+               dev_err(dev, "not enough memory\n");
+               return -ENOMEM;
        }
 
-       glue->dev       = &pci->dev;
+       glue->dev       = dev;
 
        ret = pci_enable_device(pci);
        if (ret) {
-               dev_err(&pci->dev, "failed to enable pci device\n");
-               goto err1;
+               dev_err(dev, "failed to enable pci device\n");
+               return -ENODEV;
        }
 
        pci_set_power_state(pci, PCI_D0);
@@ -81,12 +82,12 @@ static int __devinit dwc3_pci_probe(struct pci_dev *pci,
 
        devid = dwc3_get_device_id();
        if (devid < 0)
-               goto err2;
+               goto err1;
 
        dwc3 = platform_device_alloc("dwc3", devid);
        if (!dwc3) {
-               dev_err(&pci->dev, "couldn't allocate dwc3 device\n");
-               goto err3;
+               dev_err(dev, "couldn't allocate dwc3 device\n");
+               goto err1;
        }
 
        memset(res, 0x00, sizeof(struct resource) * ARRAY_SIZE(res));
@@ -102,41 +103,37 @@ static int __devinit dwc3_pci_probe(struct pci_dev *pci,
 
        ret = platform_device_add_resources(dwc3, res, ARRAY_SIZE(res));
        if (ret) {
-               dev_err(&pci->dev, "couldn't add resources to dwc3 device\n");
-               goto err4;
+               dev_err(dev, "couldn't add resources to dwc3 device\n");
+               goto err2;
        }
 
        pci_set_drvdata(pci, glue);
 
-       dma_set_coherent_mask(&dwc3->dev, pci->dev.coherent_dma_mask);
+       dma_set_coherent_mask(&dwc3->dev, dev->coherent_dma_mask);
 
-       dwc3->dev.dma_mask = pci->dev.dma_mask;
-       dwc3->dev.dma_parms = pci->dev.dma_parms;
-       dwc3->dev.parent = &pci->dev;
+       dwc3->dev.dma_mask = dev->dma_mask;
+       dwc3->dev.dma_parms = dev->dma_parms;
+       dwc3->dev.parent = dev;
        glue->dwc3      = dwc3;
 
        ret = platform_device_add(dwc3);
        if (ret) {
-               dev_err(&pci->dev, "failed to register dwc3 device\n");
-               goto err4;
+               dev_err(dev, "failed to register dwc3 device\n");
+               goto err3;
        }
 
        return 0;
 
-err4:
+err3:
        pci_set_drvdata(pci, NULL);
        platform_device_put(dwc3);
 
-err3:
-       dwc3_put_device_id(devid);
-
 err2:
-       pci_disable_device(pci);
+       dwc3_put_device_id(devid);
 
 err1:
-       kfree(glue);
+       pci_disable_device(pci);
 
-err0:
        return ret;
 }
 
@@ -148,7 +145,6 @@ static void __devexit dwc3_pci_remove(struct pci_dev *pci)
        platform_device_unregister(glue->dwc3);
        pci_set_drvdata(pci, NULL);
        pci_disable_device(pci);
-       kfree(glue);
 }
 
 static DEFINE_PCI_DEVICE_TABLE(dwc3_pci_id_table) = {