aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/watchdog/ts72xx_wdt.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2013-07-13 16:42:54 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2013-07-13 16:42:54 -0400
commit833e68340d108d88f4cb79b7d7223f6859d362ca (patch)
tree89f960431365ce2d47178c0620634b66979497fa /drivers/watchdog/ts72xx_wdt.c
parentc55244137306b626bc64023fd7160985443205a7 (diff)
parentcce78da76601b64305c050f602767bf58cebcf5d (diff)
Merge git://www.linux-watchdog.org/linux-watchdog
Pull watchdog updates from Wim Van Sebroeck: - lots of devm_ conversions and cleanup - platform_set_drvdata cleanups - s3c2410: dev_err/dev_info + dev_pm_ops - watchdog_core: don't try to stop device if not running fix - wdrtas: use print_hex_dump - xilinx cleanups - orion_wdt fixes - softdog cleanup - hpwdt: check on UEFI bits - deletion of mpcore_wdt driver - addition of broadcom BCM2835 watchdog timer driver - addition of MEN A21 watcdog devices * git://www.linux-watchdog.org/linux-watchdog: (38 commits) watchdog: hpwdt: Add check for UEFI bits watchdog: softdog: remove replaceable ping operation watchdog: New watchdog driver for MEN A21 watchdogs Watchdog: fix clearing of the watchdog interrupt Watchdog: allow orion_wdt to be built for Dove watchdog: Add Broadcom BCM2835 watchdog timer driver watchdog: delete mpcore_wdt driver watchdog: xilinx: Setup the origin compatible string watchdog: xilinx: Fix driver header watchdog: wdrtas: don't use custom version of print_hex_dump watchdog: core: don't try to stop device if not running watchdog: jz4740: Pass device to clk_get watchdog: twl4030: Remove redundant platform_set_drvdata() watchdog: mpcore: Remove redundant platform_set_drvdata() watchdog: da9055: use platform_{get,set}_drvdata() watchdog: da9052: use platform_{get,set}_drvdata() watchdog: cpwd: use platform_{get,set}_drvdata() watchdog: s3c2410_wdt: convert s3c2410wdt to dev_pm_ops watchdog: s3c2410_wdt: use dev_err()/dev_info() instead of pr_err()/pr_info() watchdog: wm831x: use platform_{get,set}_drvdata() ...
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