if (pdata->irq >= 0) {
                device_init_wakeup(&pdev->dev, 1);
-               pdata->rtc = rtc_device_register(pdev->name, &pdev->dev,
+               pdata->rtc = devm_rtc_device_register(&pdev->dev, pdev->name,
                                                 &mv_rtc_alarm_ops,
                                                 THIS_MODULE);
-       } else
-               pdata->rtc = rtc_device_register(pdev->name, &pdev->dev,
+       } else {
+               pdata->rtc = devm_rtc_device_register(&pdev->dev, pdev->name,
                                                 &mv_rtc_ops, THIS_MODULE);
+       }
        if (IS_ERR(pdata->rtc)) {
                ret = PTR_ERR(pdata->rtc);
                goto out;
        if (pdata->irq >= 0)
                device_init_wakeup(&pdev->dev, 0);
 
-       rtc_device_unregister(pdata->rtc);
        if (!IS_ERR(pdata->clk))
                clk_disable_unprepare(pdata->clk);