writel(VT8500_RTC_CR_ENABLE,
               vt8500_rtc->regbase + VT8500_RTC_CR);
 
-       vt8500_rtc->rtc = rtc_device_register("vt8500-rtc", &pdev->dev,
+       vt8500_rtc->rtc = devm_rtc_device_register(&pdev->dev, "vt8500-rtc",
                                              &vt8500_rtc_ops, THIS_MODULE);
        if (IS_ERR(vt8500_rtc->rtc)) {
                ret = PTR_ERR(vt8500_rtc->rtc);
        if (ret < 0) {
                dev_err(&pdev->dev, "can't get irq %i, err %d\n",
                        vt8500_rtc->irq_alarm, ret);
-               goto err_unreg;
+               goto err_return;
        }
 
        return 0;
 
-err_unreg:
-       rtc_device_unregister(vt8500_rtc->rtc);
 err_return:
        return ret;
 }
 {
        struct vt8500_rtc *vt8500_rtc = platform_get_drvdata(pdev);
 
-       rtc_device_unregister(vt8500_rtc->rtc);
-
        /* Disable alarm matching */
        writel(0, vt8500_rtc->regbase + VT8500_RTC_IS);