RE: usb: dwc3: use devm_xxx functions

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Oh, I've got message after sending email.
I've got Greg's email address using get_maintainer.pl in your dwc source tree.
Thank you.

> -----Original Message-----
> From: linux-usb-owner@xxxxxxxxxxxxxxx [mailto:linux-usb-
> owner@xxxxxxxxxxxxxxx] On Behalf Of Felipe Balbi
> Sent: Wednesday, February 15, 2012 6:37 PM
> To: Chanho Park
> Cc: balbi@xxxxxx; linux-usb@xxxxxxxxxxxxxxx; Kyungmin Park; Greg KH
> Subject: Re: usb: dwc3: use devm_xxx functions
> 
> Greg's mail has changed.
> 
> On Wed, Feb 15, 2012 at 06:27:55PM +0900, Chanho Park wrote:
> > 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@xxxxxxxxxxx>
> > Signed-off-by: Kyungmin Park <kyungmin.park@xxxxxxxxxxx>
> > ---
> >  drivers/usb/dwc3/core.c      |   84 ++++++++++++++++++----------------------
> -
> >  drivers/usb/dwc3/dwc3-omap.c |   85 ++++++++++++++++-------------------
> ------
> >  drivers/usb/dwc3/dwc3-pci.c  |   46 ++++++++++------------
> >  3 files changed, 90 insertions(+), 125 deletions(-)
> >
> > diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c index
> > d119a1f..c181f3e 100644
> > --- a/drivers/usb/dwc3/core.c
> > +++ b/drivers/usb/dwc3/core.c
> > @@ -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;
> >  }
> > diff --git a/drivers/usb/dwc3/dwc3-omap.c
> > b/drivers/usb/dwc3/dwc3-omap.c index 64e29c3..f2e6b05 100644
> > --- a/drivers/usb/dwc3/dwc3-omap.c
> > +++ b/drivers/usb/dwc3/dwc3-omap.c
> > @@ -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;
> >  }
> > diff --git a/drivers/usb/dwc3/dwc3-pci.c b/drivers/usb/dwc3/dwc3-pci.c
> > index 64e1f7c..05d3a3e 100644
> > --- a/drivers/usb/dwc3/dwc3-pci.c
> > +++ b/drivers/usb/dwc3/dwc3-pci.c
> > @@ -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) = {
> > --
> > 1.7.5.4
> >
> 
> --
> balbi

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux