aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/watchdog/ts72xx_wdt.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/watchdog/ts72xx_wdt.c')
-rw-r--r--drivers/watchdog/ts72xx_wdt.c67
1 files changed, 10 insertions, 57 deletions
diff --git a/drivers/watchdog/ts72xx_wdt.c b/drivers/watchdog/ts72xx_wdt.c
index b8a92459f10f..4da59b4d73f0 100644
--- a/drivers/watchdog/ts72xx_wdt.c
+++ b/drivers/watchdog/ts72xx_wdt.c
@@ -396,7 +396,7 @@ static int ts72xx_wdt_probe(struct platform_device *pdev)
396 struct resource *r1, *r2; 396 struct resource *r1, *r2;
397 int error = 0; 397 int error = 0;
398 398
399 wdt = kzalloc(sizeof(struct ts72xx_wdt), GFP_KERNEL); 399 wdt = devm_kzalloc(&pdev->dev, sizeof(struct ts72xx_wdt), GFP_KERNEL);
400 if (!wdt) { 400 if (!wdt) {
401 dev_err(&pdev->dev, "failed to allocate memory\n"); 401 dev_err(&pdev->dev, "failed to allocate memory\n");
402 return -ENOMEM; 402 return -ENOMEM;
@@ -405,44 +405,22 @@ static int ts72xx_wdt_probe(struct platform_device *pdev)
405 r1 = platform_get_resource(pdev, IORESOURCE_MEM, 0); 405 r1 = platform_get_resource(pdev, IORESOURCE_MEM, 0);
406 if (!r1) { 406 if (!r1) {
407 dev_err(&pdev->dev, "failed to get memory resource\n"); 407 dev_err(&pdev->dev, "failed to get memory resource\n");
408 error = -ENODEV; 408 return -ENODEV;
409 goto fail;
410 } 409 }
411 410
412 r1 = request_mem_region(r1->start, resource_size(r1), pdev->name); 411 wdt->control_reg = devm_ioremap_resource(&pdev->dev, r1);
413 if (!r1) { 412 if (IS_ERR(wdt->control_reg))
414 dev_err(&pdev->dev, "cannot request memory region\n"); 413 return PTR_ERR(wdt->control_reg);
415 error = -EBUSY;
416 goto fail;
417 }
418
419 wdt->control_reg = ioremap(r1->start, resource_size(r1));
420 if (!wdt->control_reg) {
421 dev_err(&pdev->dev, "failed to map memory\n");
422 error = -ENODEV;
423 goto fail_free_control;
424 }
425 414
426 r2 = platform_get_resource(pdev, IORESOURCE_MEM, 1); 415 r2 = platform_get_resource(pdev, IORESOURCE_MEM, 1);
427 if (!r2) { 416 if (!r2) {
428 dev_err(&pdev->dev, "failed to get memory resource\n"); 417 dev_err(&pdev->dev, "failed to get memory resource\n");
429 error = -ENODEV; 418 return -ENODEV;
430 goto fail_unmap_control;
431 }
432
433 r2 = request_mem_region(r2->start, resource_size(r2), pdev->name);
434 if (!r2) {
435 dev_err(&pdev->dev, "cannot request memory region\n");
436 error = -EBUSY;
437 goto fail_unmap_control;
438 } 419 }
439 420
440 wdt->feed_reg = ioremap(r2->start, resource_size(r2)); 421 wdt->feed_reg = devm_ioremap_resource(&pdev->dev, r2);
441 if (!wdt->feed_reg) { 422 if (IS_ERR(wdt->feed_reg))
442 dev_err(&pdev->dev, "failed to map memory\n"); 423 return PTR_ERR(wdt->feed_reg);
443 error = -ENODEV;
444 goto fail_free_feed;
445 }
446 424
447 platform_set_drvdata(pdev, wdt); 425 platform_set_drvdata(pdev, wdt);
448 ts72xx_wdt_pdev = pdev; 426 ts72xx_wdt_pdev = pdev;
@@ -455,45 +433,20 @@ static int ts72xx_wdt_probe(struct platform_device *pdev)
455 error = misc_register(&ts72xx_wdt_miscdev); 433 error = misc_register(&ts72xx_wdt_miscdev);
456 if (error) { 434 if (error) {
457 dev_err(&pdev->dev, "failed to register miscdev\n"); 435 dev_err(&pdev->dev, "failed to register miscdev\n");
458 goto fail_unmap_feed; 436 return error;
459 } 437 }
460 438
461 dev_info(&pdev->dev, "TS-72xx Watchdog driver\n"); 439 dev_info(&pdev->dev, "TS-72xx Watchdog driver\n");
462 440
463 return 0; 441 return 0;
464
465fail_unmap_feed:
466 platform_set_drvdata(pdev, NULL);
467 iounmap(wdt->feed_reg);
468fail_free_feed:
469 release_mem_region(r2->start, resource_size(r2));
470fail_unmap_control:
471 iounmap(wdt->control_reg);
472fail_free_control:
473 release_mem_region(r1->start, resource_size(r1));
474fail:
475 kfree(wdt);
476 return error;
477} 442}
478 443
479static int ts72xx_wdt_remove(struct platform_device *pdev) 444static int ts72xx_wdt_remove(struct platform_device *pdev)
480{ 445{
481 struct ts72xx_wdt *wdt = platform_get_drvdata(pdev);
482 struct resource *res;
483 int error; 446 int error;
484 447
485 error = misc_deregister(&ts72xx_wdt_miscdev); 448 error = misc_deregister(&ts72xx_wdt_miscdev);
486 platform_set_drvdata(pdev, NULL);
487
488 iounmap(wdt->feed_reg);
489 res = platform_get_resource(pdev, IORESOURCE_MEM, 1);
490 release_mem_region(res->start, resource_size(res));
491
492 iounmap(wdt->control_reg);
493 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
494 release_mem_region(res->start, resource_size(res));
495 449
496 kfree(wdt);
497 return error; 450 return error;
498} 451}
499 452