Re: [PATCH 1/1] usb: s3c-hsotg: Use devm_* functions in s3c-hsotg.c file

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

 



ping..
Any comments about this patch?

On 18/05/2012, Sachin Kamat <sachin.kamat@xxxxxxxxxx> wrote:
> devm_* functions are used to replace kzalloc, request_mem_region, ioremap
> and request_irq functions in probe call. With the usage of devm_* functions
> explicit freeing and unmapping is not required.
>
> Signed-off-by: Sachin Kamat <sachin.kamat@xxxxxxxxxx>
> ---
>  drivers/usb/gadget/s3c-hsotg.c |   51
> ++++++++-------------------------------
>  1 files changed, 11 insertions(+), 40 deletions(-)
>
> diff --git a/drivers/usb/gadget/s3c-hsotg.c
> b/drivers/usb/gadget/s3c-hsotg.c
> index f4abb0e..d375851 100644
> --- a/drivers/usb/gadget/s3c-hsotg.c
> +++ b/drivers/usb/gadget/s3c-hsotg.c
> @@ -136,7 +136,6 @@ struct s3c_hsotg_ep {
>   * @driver: USB gadget driver
>   * @plat: The platform specific configuration data.
>   * @regs: The memory area mapped for accessing registers.
> - * @regs_res: The resource that was allocated when claiming register
> space.
>   * @irq: The IRQ number we are using
>   * @supplies: Definition of USB power supplies
>   * @dedicated_fifos: Set if the hardware has dedicated IN-EP fifos.
> @@ -158,7 +157,6 @@ struct s3c_hsotg {
>  	struct s3c_hsotg_plat	 *plat;
>
>  	void __iomem		*regs;
> -	struct resource		*regs_res;
>  	int			irq;
>  	struct clk		*clk;
>
> @@ -3477,7 +3475,7 @@ static int __devinit s3c_hsotg_probe(struct
> platform_device *pdev)
>  		return -EINVAL;
>  	}
>
> -	hsotg = kzalloc(sizeof(struct s3c_hsotg), GFP_KERNEL);
> +	hsotg = devm_kzalloc(&pdev->dev, sizeof(struct s3c_hsotg), GFP_KERNEL);
>  	if (!hsotg) {
>  		dev_err(dev, "cannot get memory\n");
>  		return -ENOMEM;
> @@ -3489,46 +3487,33 @@ static int __devinit s3c_hsotg_probe(struct
> platform_device *pdev)
>  	hsotg->clk = clk_get(&pdev->dev, "otg");
>  	if (IS_ERR(hsotg->clk)) {
>  		dev_err(dev, "cannot get otg clock\n");
> -		ret = PTR_ERR(hsotg->clk);
> -		goto err_mem;
> +		return PTR_ERR(hsotg->clk);
>  	}
>
>  	platform_set_drvdata(pdev, hsotg);
>
>  	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
> -	if (!res) {
> -		dev_err(dev, "cannot find register resource 0\n");
> -		ret = -EINVAL;
> -		goto err_clk;
> -	}
> -
> -	hsotg->regs_res = request_mem_region(res->start, resource_size(res),
> -					     dev_name(dev));
> -	if (!hsotg->regs_res) {
> -		dev_err(dev, "cannot reserve registers\n");
> -		ret = -ENOENT;
> -		goto err_clk;
> -	}
>
> -	hsotg->regs = ioremap(res->start, resource_size(res));
> +	hsotg->regs = devm_request_and_ioremap(&pdev->dev, res);
>  	if (!hsotg->regs) {
>  		dev_err(dev, "cannot map registers\n");
>  		ret = -ENXIO;
> -		goto err_regs_res;
> +		goto err_clk;
>  	}
>
>  	ret = platform_get_irq(pdev, 0);
>  	if (ret < 0) {
>  		dev_err(dev, "cannot find IRQ\n");
> -		goto err_regs;
> +		goto err_clk;
>  	}
>
>  	hsotg->irq = ret;
>
> -	ret = request_irq(ret, s3c_hsotg_irq, 0, dev_name(dev), hsotg);
> +	ret = devm_request_irq(&pdev->dev, hsotg->irq, s3c_hsotg_irq, 0,
> +				dev_name(dev), hsotg);
>  	if (ret < 0) {
>  		dev_err(dev, "cannot claim IRQ\n");
> -		goto err_regs;
> +		goto err_clk;
>  	}
>
>  	dev_info(dev, "regs %p, irq %d\n", hsotg->regs, hsotg->irq);
> @@ -3558,7 +3543,7 @@ static int __devinit s3c_hsotg_probe(struct
> platform_device *pdev)
>  				 hsotg->supplies);
>  	if (ret) {
>  		dev_err(dev, "failed to request supplies: %d\n", ret);
> -		goto err_irq;
> +		goto err_clk;
>  	}
>
>  	ret = regulator_bulk_enable(ARRAY_SIZE(hsotg->supplies),
> @@ -3642,19 +3627,11 @@ err_ep_mem:
>  err_supplies:
>  	s3c_hsotg_phy_disable(hsotg);
>  	regulator_bulk_free(ARRAY_SIZE(hsotg->supplies), hsotg->supplies);
> -err_irq:
> -	free_irq(hsotg->irq, hsotg);
> -err_regs:
> -	iounmap(hsotg->regs);
> -
> -err_regs_res:
> -	release_resource(hsotg->regs_res);
> -	kfree(hsotg->regs_res);
> +
>  err_clk:
>  	clk_disable_unprepare(hsotg->clk);
>  	clk_put(hsotg->clk);
> -err_mem:
> -	kfree(hsotg);
> +
>  	return ret;
>  }
>
> @@ -3675,12 +3652,6 @@ static int __devexit s3c_hsotg_remove(struct
> platform_device *pdev)
>  		usb_gadget_unregister_driver(hsotg->driver);
>  	}
>
> -	free_irq(hsotg->irq, hsotg);
> -	iounmap(hsotg->regs);
> -
> -	release_resource(hsotg->regs_res);
> -	kfree(hsotg->regs_res);
> -
>  	s3c_hsotg_phy_disable(hsotg);
>  	regulator_bulk_free(ARRAY_SIZE(hsotg->supplies), hsotg->supplies);
>
> --
> 1.7.4.1
>
>


-- 
With warm regards,
Sachin
--
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