diff options
Diffstat (limited to 'drivers/pwm/pwm-imx.c')
| -rw-r--r-- | drivers/pwm/pwm-imx.c | 57 | 
1 files changed, 10 insertions, 47 deletions
| diff --git a/drivers/pwm/pwm-imx.c b/drivers/pwm/pwm-imx.c index 900d14562de8..2a0b35333972 100644 --- a/drivers/pwm/pwm-imx.c +++ b/drivers/pwm/pwm-imx.c @@ -159,18 +159,16 @@ static int __devinit imx_pwm_probe(struct platform_device *pdev)  	struct resource *r;  	int ret = 0; -	imx = kzalloc(sizeof(*imx), GFP_KERNEL); +	imx = devm_kzalloc(&pdev->dev, sizeof(*imx), GFP_KERNEL);  	if (imx == NULL) {  		dev_err(&pdev->dev, "failed to allocate memory\n");  		return -ENOMEM;  	} -	imx->clk = clk_get(&pdev->dev, "pwm"); +	imx->clk = devm_clk_get(&pdev->dev, "pwm"); -	if (IS_ERR(imx->clk)) { -		ret = PTR_ERR(imx->clk); -		goto err_free; -	} +	if (IS_ERR(imx->clk)) +		return PTR_ERR(imx->clk);  	imx->chip.ops = &imx_pwm_ops;  	imx->chip.dev = &pdev->dev; @@ -182,65 +180,30 @@ static int __devinit imx_pwm_probe(struct platform_device *pdev)  	r = platform_get_resource(pdev, IORESOURCE_MEM, 0);  	if (r == NULL) {  		dev_err(&pdev->dev, "no memory resource defined\n"); -		ret = -ENODEV; -		goto err_free_clk; -	} - -	r = request_mem_region(r->start, resource_size(r), pdev->name); -	if (r == NULL) { -		dev_err(&pdev->dev, "failed to request memory resource\n"); -		ret = -EBUSY; -		goto err_free_clk; +		return -ENODEV;  	} -	imx->mmio_base = ioremap(r->start, resource_size(r)); -	if (imx->mmio_base == NULL) { -		dev_err(&pdev->dev, "failed to ioremap() registers\n"); -		ret = -ENODEV; -		goto err_free_mem; -	} +	imx->mmio_base = devm_request_and_ioremap(&pdev->dev, r); +	if (imx->mmio_base == NULL) +		return -EADDRNOTAVAIL;  	ret = pwmchip_add(&imx->chip);  	if (ret < 0) -		goto err_iounmap; +		return ret;  	platform_set_drvdata(pdev, imx);  	return 0; - -err_iounmap: -	iounmap(imx->mmio_base); -err_free_mem: -	release_mem_region(r->start, resource_size(r)); -err_free_clk: -	clk_put(imx->clk); -err_free: -	kfree(imx); -	return ret;  }  static int __devexit imx_pwm_remove(struct platform_device *pdev)  {  	struct imx_chip *imx; -	struct resource *r; -	int ret;  	imx = platform_get_drvdata(pdev);  	if (imx == NULL)  		return -ENODEV; -	ret = pwmchip_remove(&imx->chip); -	if (ret) -		return ret; - -	iounmap(imx->mmio_base); - -	r = platform_get_resource(pdev, IORESOURCE_MEM, 0); -	release_mem_region(r->start, resource_size(r)); - -	clk_put(imx->clk); - -	kfree(imx); -	return 0; +	return pwmchip_remove(&imx->chip);  }  static struct platform_driver imx_pwm_driver = { | 

