aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/watchdog/sp805_wdt.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/watchdog/sp805_wdt.c')
-rw-r--r--drivers/watchdog/sp805_wdt.c35
1 files changed, 13 insertions, 22 deletions
diff --git a/drivers/watchdog/sp805_wdt.c b/drivers/watchdog/sp805_wdt.c
index 6e751573a2d1..bbb170e50055 100644
--- a/drivers/watchdog/sp805_wdt.c
+++ b/drivers/watchdog/sp805_wdt.c
@@ -285,32 +285,33 @@ sp805_wdt_probe(struct amba_device *adev, const struct amba_id *id)
285{ 285{
286 int ret = 0; 286 int ret = 0;
287 287
288 if (!request_mem_region(adev->res.start, resource_size(&adev->res), 288 if (!devm_request_mem_region(&adev->dev, adev->res.start,
289 "sp805_wdt")) { 289 resource_size(&adev->res), "sp805_wdt")) {
290 dev_warn(&adev->dev, "Failed to get memory region resource\n"); 290 dev_warn(&adev->dev, "Failed to get memory region resource\n");
291 ret = -ENOENT; 291 ret = -ENOENT;
292 goto err; 292 goto err;
293 } 293 }
294 294
295 wdt = kzalloc(sizeof(*wdt), GFP_KERNEL); 295 wdt = devm_kzalloc(&adev->dev, sizeof(*wdt), GFP_KERNEL);
296 if (!wdt) { 296 if (!wdt) {
297 dev_warn(&adev->dev, "Kzalloc failed\n"); 297 dev_warn(&adev->dev, "Kzalloc failed\n");
298 ret = -ENOMEM; 298 ret = -ENOMEM;
299 goto err_kzalloc; 299 goto err;
300 }
301
302 wdt->base = devm_ioremap(&adev->dev, adev->res.start,
303 resource_size(&adev->res));
304 if (!wdt->base) {
305 ret = -ENOMEM;
306 dev_warn(&adev->dev, "ioremap fail\n");
307 goto err;
300 } 308 }
301 309
302 wdt->clk = clk_get(&adev->dev, NULL); 310 wdt->clk = clk_get(&adev->dev, NULL);
303 if (IS_ERR(wdt->clk)) { 311 if (IS_ERR(wdt->clk)) {
304 dev_warn(&adev->dev, "Clock not found\n"); 312 dev_warn(&adev->dev, "Clock not found\n");
305 ret = PTR_ERR(wdt->clk); 313 ret = PTR_ERR(wdt->clk);
306 goto err_clk_get; 314 goto err;
307 }
308
309 wdt->base = ioremap(adev->res.start, resource_size(&adev->res));
310 if (!wdt->base) {
311 ret = -ENOMEM;
312 dev_warn(&adev->dev, "ioremap fail\n");
313 goto err_ioremap;
314 } 315 }
315 316
316 wdt->adev = adev; 317 wdt->adev = adev;
@@ -327,14 +328,7 @@ sp805_wdt_probe(struct amba_device *adev, const struct amba_id *id)
327 return 0; 328 return 0;
328 329
329err_misc_register: 330err_misc_register:
330 iounmap(wdt->base);
331err_ioremap:
332 clk_put(wdt->clk); 331 clk_put(wdt->clk);
333err_clk_get:
334 kfree(wdt);
335 wdt = NULL;
336err_kzalloc:
337 release_mem_region(adev->res.start, resource_size(&adev->res));
338err: 332err:
339 dev_err(&adev->dev, "Probe Failed!!!\n"); 333 dev_err(&adev->dev, "Probe Failed!!!\n");
340 return ret; 334 return ret;
@@ -343,10 +337,7 @@ err:
343static int __devexit sp805_wdt_remove(struct amba_device *adev) 337static int __devexit sp805_wdt_remove(struct amba_device *adev)
344{ 338{
345 misc_deregister(&sp805_wdt_miscdev); 339 misc_deregister(&sp805_wdt_miscdev);
346 iounmap(wdt->base);
347 clk_put(wdt->clk); 340 clk_put(wdt->clk);
348 kfree(wdt);
349 release_mem_region(adev->res.start, resource_size(&adev->res));
350 341
351 return 0; 342 return 0;
352} 343}