aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/rtc/rtc-mxc.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/rtc/rtc-mxc.c')
-rw-r--r--drivers/rtc/rtc-mxc.c30
1 files changed, 9 insertions, 21 deletions
diff --git a/drivers/rtc/rtc-mxc.c b/drivers/rtc/rtc-mxc.c
index e3e50d69baf8..cd0106293a49 100644
--- a/drivers/rtc/rtc-mxc.c
+++ b/drivers/rtc/rtc-mxc.c
@@ -343,7 +343,7 @@ static struct rtc_class_ops mxc_rtc_ops = {
343 .alarm_irq_enable = mxc_rtc_alarm_irq_enable, 343 .alarm_irq_enable = mxc_rtc_alarm_irq_enable,
344}; 344};
345 345
346static int __init mxc_rtc_probe(struct platform_device *pdev) 346static int __devinit mxc_rtc_probe(struct platform_device *pdev)
347{ 347{
348 struct resource *res; 348 struct resource *res;
349 struct rtc_device *rtc; 349 struct rtc_device *rtc;
@@ -367,14 +367,14 @@ static int __init mxc_rtc_probe(struct platform_device *pdev)
367 pdata->ioaddr = devm_ioremap(&pdev->dev, res->start, 367 pdata->ioaddr = devm_ioremap(&pdev->dev, res->start,
368 resource_size(res)); 368 resource_size(res));
369 369
370 pdata->clk = clk_get(&pdev->dev, "rtc"); 370 pdata->clk = devm_clk_get(&pdev->dev, NULL);
371 if (IS_ERR(pdata->clk)) { 371 if (IS_ERR(pdata->clk)) {
372 dev_err(&pdev->dev, "unable to get clock!\n"); 372 dev_err(&pdev->dev, "unable to get clock!\n");
373 ret = PTR_ERR(pdata->clk); 373 ret = PTR_ERR(pdata->clk);
374 goto exit_free_pdata; 374 goto exit_free_pdata;
375 } 375 }
376 376
377 clk_enable(pdata->clk); 377 clk_prepare_enable(pdata->clk);
378 rate = clk_get_rate(pdata->clk); 378 rate = clk_get_rate(pdata->clk);
379 379
380 if (rate == 32768) 380 if (rate == 32768)
@@ -426,22 +426,20 @@ static int __init mxc_rtc_probe(struct platform_device *pdev)
426exit_clr_drvdata: 426exit_clr_drvdata:
427 platform_set_drvdata(pdev, NULL); 427 platform_set_drvdata(pdev, NULL);
428exit_put_clk: 428exit_put_clk:
429 clk_disable(pdata->clk); 429 clk_disable_unprepare(pdata->clk);
430 clk_put(pdata->clk);
431 430
432exit_free_pdata: 431exit_free_pdata:
433 432
434 return ret; 433 return ret;
435} 434}
436 435
437static int __exit mxc_rtc_remove(struct platform_device *pdev) 436static int __devexit mxc_rtc_remove(struct platform_device *pdev)
438{ 437{
439 struct rtc_plat_data *pdata = platform_get_drvdata(pdev); 438 struct rtc_plat_data *pdata = platform_get_drvdata(pdev);
440 439
441 rtc_device_unregister(pdata->rtc); 440 rtc_device_unregister(pdata->rtc);
442 441
443 clk_disable(pdata->clk); 442 clk_disable_unprepare(pdata->clk);
444 clk_put(pdata->clk);
445 platform_set_drvdata(pdev, NULL); 443 platform_set_drvdata(pdev, NULL);
446 444
447 return 0; 445 return 0;
@@ -482,21 +480,11 @@ static struct platform_driver mxc_rtc_driver = {
482#endif 480#endif
483 .owner = THIS_MODULE, 481 .owner = THIS_MODULE,
484 }, 482 },
485 .remove = __exit_p(mxc_rtc_remove), 483 .probe = mxc_rtc_probe,
484 .remove = __devexit_p(mxc_rtc_remove),
486}; 485};
487 486
488static int __init mxc_rtc_init(void) 487module_platform_driver(mxc_rtc_driver)
489{
490 return platform_driver_probe(&mxc_rtc_driver, mxc_rtc_probe);
491}
492
493static void __exit mxc_rtc_exit(void)
494{
495 platform_driver_unregister(&mxc_rtc_driver);
496}
497
498module_init(mxc_rtc_init);
499module_exit(mxc_rtc_exit);
500 488
501MODULE_AUTHOR("Daniel Mack <daniel@caiaq.de>"); 489MODULE_AUTHOR("Daniel Mack <daniel@caiaq.de>");
502MODULE_DESCRIPTION("RTC driver for Freescale MXC"); 490MODULE_DESCRIPTION("RTC driver for Freescale MXC");