aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/rtc/rtc-at91rm9200.c
diff options
context:
space:
mode:
authorSachin Kamat <sachin.kamat@linaro.org>2013-11-12 18:10:29 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2013-11-12 22:09:27 -0500
commitf3766250b2e9f2920c3c9ef9821827ac82fa7a84 (patch)
tree58ebedf4443ec6485bbb8921817cad4f932c7809 /drivers/rtc/rtc-at91rm9200.c
parent58f27d7d061b47f57c84cad7d9af239c6bc6977e (diff)
drivers/rtc/rtc-at91rm9200.c: use devm_* APIs
devm_* APIs are device managed and make code simpler. Signed-off-by: Sachin Kamat <sachin.kamat@linaro.org> Cc: Jingoo Han <jg1.han@samsung.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'drivers/rtc/rtc-at91rm9200.c')
-rw-r--r--drivers/rtc/rtc-at91rm9200.c28
1 files changed, 7 insertions, 21 deletions
diff --git a/drivers/rtc/rtc-at91rm9200.c b/drivers/rtc/rtc-at91rm9200.c
index 741892632ae0..8b2cd8a5a2ff 100644
--- a/drivers/rtc/rtc-at91rm9200.c
+++ b/drivers/rtc/rtc-at91rm9200.c
@@ -376,7 +376,8 @@ static int __init at91_rtc_probe(struct platform_device *pdev)
376 return -ENXIO; 376 return -ENXIO;
377 } 377 }
378 378
379 at91_rtc_regs = ioremap(regs->start, resource_size(regs)); 379 at91_rtc_regs = devm_ioremap(&pdev->dev, regs->start,
380 resource_size(regs));
380 if (!at91_rtc_regs) { 381 if (!at91_rtc_regs) {
381 dev_err(&pdev->dev, "failed to map registers, aborting.\n"); 382 dev_err(&pdev->dev, "failed to map registers, aborting.\n");
382 return -ENOMEM; 383 return -ENOMEM;
@@ -390,12 +391,12 @@ static int __init at91_rtc_probe(struct platform_device *pdev)
390 AT91_RTC_SECEV | AT91_RTC_TIMEV | 391 AT91_RTC_SECEV | AT91_RTC_TIMEV |
391 AT91_RTC_CALEV); 392 AT91_RTC_CALEV);
392 393
393 ret = request_irq(irq, at91_rtc_interrupt, 394 ret = devm_request_irq(&pdev->dev, irq, at91_rtc_interrupt,
394 IRQF_SHARED, 395 IRQF_SHARED,
395 "at91_rtc", pdev); 396 "at91_rtc", pdev);
396 if (ret) { 397 if (ret) {
397 dev_err(&pdev->dev, "IRQ %d already in use.\n", irq); 398 dev_err(&pdev->dev, "IRQ %d already in use.\n", irq);
398 goto err_unmap; 399 return ret;
399 } 400 }
400 401
401 /* cpu init code should really have flagged this device as 402 /* cpu init code should really have flagged this device as
@@ -404,23 +405,14 @@ static int __init at91_rtc_probe(struct platform_device *pdev)
404 if (!device_can_wakeup(&pdev->dev)) 405 if (!device_can_wakeup(&pdev->dev))
405 device_init_wakeup(&pdev->dev, 1); 406 device_init_wakeup(&pdev->dev, 1);
406 407
407 rtc = rtc_device_register(pdev->name, &pdev->dev, 408 rtc = devm_rtc_device_register(&pdev->dev, pdev->name,
408 &at91_rtc_ops, THIS_MODULE); 409 &at91_rtc_ops, THIS_MODULE);
409 if (IS_ERR(rtc)) { 410 if (IS_ERR(rtc))
410 ret = PTR_ERR(rtc); 411 return PTR_ERR(rtc);
411 goto err_free_irq;
412 }
413 platform_set_drvdata(pdev, rtc); 412 platform_set_drvdata(pdev, rtc);
414 413
415 dev_info(&pdev->dev, "AT91 Real Time Clock driver.\n"); 414 dev_info(&pdev->dev, "AT91 Real Time Clock driver.\n");
416 return 0; 415 return 0;
417
418err_free_irq:
419 free_irq(irq, pdev);
420err_unmap:
421 iounmap(at91_rtc_regs);
422
423 return ret;
424} 416}
425 417
426/* 418/*
@@ -428,16 +420,10 @@ err_unmap:
428 */ 420 */
429static int __exit at91_rtc_remove(struct platform_device *pdev) 421static int __exit at91_rtc_remove(struct platform_device *pdev)
430{ 422{
431 struct rtc_device *rtc = platform_get_drvdata(pdev);
432
433 /* Disable all interrupts */ 423 /* Disable all interrupts */
434 at91_rtc_write_idr(AT91_RTC_ACKUPD | AT91_RTC_ALARM | 424 at91_rtc_write_idr(AT91_RTC_ACKUPD | AT91_RTC_ALARM |
435 AT91_RTC_SECEV | AT91_RTC_TIMEV | 425 AT91_RTC_SECEV | AT91_RTC_TIMEV |
436 AT91_RTC_CALEV); 426 AT91_RTC_CALEV);
437 free_irq(irq, pdev);
438
439 rtc_device_unregister(rtc);
440 iounmap(at91_rtc_regs);
441 427
442 return 0; 428 return 0;
443} 429}