diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2013-07-13 16:42:54 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2013-07-13 16:42:54 -0400 |
commit | 833e68340d108d88f4cb79b7d7223f6859d362ca (patch) | |
tree | 89f960431365ce2d47178c0620634b66979497fa /drivers/watchdog/ts72xx_wdt.c | |
parent | c55244137306b626bc64023fd7160985443205a7 (diff) | |
parent | cce78da76601b64305c050f602767bf58cebcf5d (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.c | 67 |
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 | |||
465 | fail_unmap_feed: | ||
466 | platform_set_drvdata(pdev, NULL); | ||
467 | iounmap(wdt->feed_reg); | ||
468 | fail_free_feed: | ||
469 | release_mem_region(r2->start, resource_size(r2)); | ||
470 | fail_unmap_control: | ||
471 | iounmap(wdt->control_reg); | ||
472 | fail_free_control: | ||
473 | release_mem_region(r1->start, resource_size(r1)); | ||
474 | fail: | ||
475 | kfree(wdt); | ||
476 | return error; | ||
477 | } | 442 | } |
478 | 443 | ||
479 | static int ts72xx_wdt_remove(struct platform_device *pdev) | 444 | static 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 | ||