Skip to content

Commit

Permalink
unicore32: pwm: Use managed resource allocations
Browse files Browse the repository at this point in the history
This commit uses the managed resource allocation functions to simplify
the cleanup paths on error and removal.

Signed-off-by: Thierry Reding <thierry.reding@avionic-design.de>
Tested-by: Qin Rui <qinrui@mprc.pku.edu.cn>
Acked-by: Guan Xuetao <gxt@mprc.pku.edu.cn>
  • Loading branch information
Thierry Reding committed Oct 5, 2012
1 parent e551fad commit 5384e27
Showing 1 changed file with 9 additions and 38 deletions.
47 changes: 9 additions & 38 deletions arch/unicore32/kernel/pwm.c
Original file line number Diff line number Diff line change
Expand Up @@ -160,19 +160,17 @@ static int __devinit pwm_probe(struct platform_device *pdev)
{
struct pwm_device *pwm;
struct resource *r;
int ret = 0;

pwm = kzalloc(sizeof(struct pwm_device), GFP_KERNEL);
pwm = devm_kzalloc(&pdev->dev, sizeof(struct pwm_device), GFP_KERNEL);
if (pwm == NULL) {
dev_err(&pdev->dev, "failed to allocate memory\n");
return -ENOMEM;
}

pwm->clk = clk_get(NULL, "OST_CLK");
if (IS_ERR(pwm->clk)) {
ret = PTR_ERR(pwm->clk);
goto err_free;
}
pwm->clk = devm_clk_get(&pdev->dev, "OST_CLK");
if (IS_ERR(pwm->clk))
return PTR_ERR(pwm->clk);

pwm->clk_enabled = 0;

pwm->use_count = 0;
Expand All @@ -182,41 +180,21 @@ static int __devinit 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;
}

pwm->base = ioremap_nocache(r->start, resource_size(r));
if (pwm->base == NULL) {
dev_err(&pdev->dev, "failed to remap memory resource\n");
ret = -EADDRNOTAVAIL;
goto err_release_mem;
}
pwm->base = devm_request_and_ioremap(&pdev->dev, r);
if (pwm->base == NULL)
return -EADDRNOTAVAIL;

__add_pwm(pwm);
platform_set_drvdata(pdev, pwm);
return 0;

err_release_mem:
release_mem_region(r->start, resource_size(r));
err_free_clk:
clk_put(pwm->clk);
err_free:
kfree(pwm);
return ret;
}

static int __devexit pwm_remove(struct platform_device *pdev)
{
struct pwm_device *pwm;
struct resource *r;

pwm = platform_get_drvdata(pdev);
if (pwm == NULL)
Expand All @@ -226,13 +204,6 @@ static int __devexit pwm_remove(struct platform_device *pdev)
list_del(&pwm->node);
mutex_unlock(&pwm_lock);

iounmap(pwm->base);

r = platform_get_resource(pdev, IORESOURCE_MEM, 0);
release_mem_region(r->start, resource_size(r));

clk_put(pwm->clk);
kfree(pwm);
return 0;
}

Expand Down

0 comments on commit 5384e27

Please sign in to comment.