watchdog: sp805: Use devm routines

sp805 driver currently uses normal kzalloc, ioremap, etc routines. This patch
replaces these routines with devm_kzalloc and devm_request_mem_region etc, so
that we don't need to handle freeing of resources for error cases and module
removal routine.

Signed-off-by: Viresh Kumar <viresh.kumar@st.com>
Signed-off-by: Wim Van Sebroeck <wim@iguana.be>
This commit is contained in:
Viresh Kumar 2012-03-12 09:52:15 +05:30 committed by Wim Van Sebroeck
parent d2e8919bcf
commit fb35a5ad5b

View file

@ -285,32 +285,33 @@ sp805_wdt_probe(struct amba_device *adev, const struct amba_id *id)
{ {
int ret = 0; int ret = 0;
if (!request_mem_region(adev->res.start, resource_size(&adev->res), if (!devm_request_mem_region(&adev->dev, adev->res.start,
"sp805_wdt")) { resource_size(&adev->res), "sp805_wdt")) {
dev_warn(&adev->dev, "Failed to get memory region resource\n"); dev_warn(&adev->dev, "Failed to get memory region resource\n");
ret = -ENOENT; ret = -ENOENT;
goto err; goto err;
} }
wdt = kzalloc(sizeof(*wdt), GFP_KERNEL); wdt = devm_kzalloc(&adev->dev, sizeof(*wdt), GFP_KERNEL);
if (!wdt) { if (!wdt) {
dev_warn(&adev->dev, "Kzalloc failed\n"); dev_warn(&adev->dev, "Kzalloc failed\n");
ret = -ENOMEM; ret = -ENOMEM;
goto err_kzalloc; goto err;
}
wdt->base = devm_ioremap(&adev->dev, adev->res.start,
resource_size(&adev->res));
if (!wdt->base) {
ret = -ENOMEM;
dev_warn(&adev->dev, "ioremap fail\n");
goto err;
} }
wdt->clk = clk_get(&adev->dev, NULL); wdt->clk = clk_get(&adev->dev, NULL);
if (IS_ERR(wdt->clk)) { if (IS_ERR(wdt->clk)) {
dev_warn(&adev->dev, "Clock not found\n"); dev_warn(&adev->dev, "Clock not found\n");
ret = PTR_ERR(wdt->clk); ret = PTR_ERR(wdt->clk);
goto err_clk_get; goto err;
}
wdt->base = ioremap(adev->res.start, resource_size(&adev->res));
if (!wdt->base) {
ret = -ENOMEM;
dev_warn(&adev->dev, "ioremap fail\n");
goto err_ioremap;
} }
wdt->adev = adev; wdt->adev = adev;
@ -327,14 +328,7 @@ sp805_wdt_probe(struct amba_device *adev, const struct amba_id *id)
return 0; return 0;
err_misc_register: err_misc_register:
iounmap(wdt->base);
err_ioremap:
clk_put(wdt->clk); clk_put(wdt->clk);
err_clk_get:
kfree(wdt);
wdt = NULL;
err_kzalloc:
release_mem_region(adev->res.start, resource_size(&adev->res));
err: err:
dev_err(&adev->dev, "Probe Failed!!!\n"); dev_err(&adev->dev, "Probe Failed!!!\n");
return ret; return ret;
@ -343,10 +337,7 @@ err:
static int __devexit sp805_wdt_remove(struct amba_device *adev) static int __devexit sp805_wdt_remove(struct amba_device *adev)
{ {
misc_deregister(&sp805_wdt_miscdev); misc_deregister(&sp805_wdt_miscdev);
iounmap(wdt->base);
clk_put(wdt->clk); clk_put(wdt->clk);
kfree(wdt);
release_mem_region(adev->res.start, resource_size(&adev->res));
return 0; return 0;
} }