RTC
   devm_rtc_device_register()
   devm_rtc_allocate_device()
+  devm_rtc_register_device()
   devm_rtc_nvmem_register()
 
 SERDEV
 
                rtc->ops = &remote_rtc_ops;
 #endif
 
-       return rtc_register_device(rtc);
+       return devm_rtc_register_device(rtc);
 }
 device_initcall(alpha_rtc_init);
 
                menelaus_write_reg(MENELAUS_RTC_CTRL, m->rtc_control);
        }
 
-       err = rtc_register_device(m->rtc);
+       err = devm_rtc_register_device(m->rtc);
        if (err) {
                if (alarm) {
                        menelaus_remove_irq_work(MENELAUS_RTCALM_IRQ);
 
  *
  * @rtc: the RTC class device to destroy
  */
-static void rtc_device_unregister(struct rtc_device *rtc)
+static void devm_rtc_unregister_device(void *data)
 {
+       struct rtc_device *rtc = data;
+
        mutex_lock(&rtc->ops_lock);
        /*
         * Remove innards of this RTC, then disable it, before
 {
        struct rtc_device *rtc = *(struct rtc_device **)res;
 
-       if (rtc->registered)
-               rtc_device_unregister(rtc);
-       else
-               put_device(&rtc->dev);
+       put_device(&rtc->dev);
 }
 
 struct rtc_device *devm_rtc_allocate_device(struct device *dev)
 }
 EXPORT_SYMBOL_GPL(devm_rtc_allocate_device);
 
-int __rtc_register_device(struct module *owner, struct rtc_device *rtc)
+int __devm_rtc_register_device(struct module *owner, struct rtc_device *rtc)
 {
        struct rtc_wkalrm alrm;
        int err;
 
        rtc_proc_add_device(rtc);
 
-       rtc->registered = true;
        dev_info(rtc->dev.parent, "registered as %s\n",
                 dev_name(&rtc->dev));
 
                rtc_hctosys(rtc);
 #endif
 
-       return 0;
+       return devm_add_action_or_reset(rtc->dev.parent,
+                                       devm_rtc_unregister_device, rtc);
 }
-EXPORT_SYMBOL_GPL(__rtc_register_device);
+EXPORT_SYMBOL_GPL(__devm_rtc_register_device);
 
 /**
  * devm_rtc_device_register - resource managed rtc_device_register()
 
        rtc->ops = ops;
 
-       err = __rtc_register_device(owner, rtc);
+       err = __devm_rtc_register_device(owner, rtc);
        if (err)
                return ERR_PTR(err);
 
 
        info->rtc_dev->ops = &pm80x_rtc_ops;
        info->rtc_dev->range_max = U32_MAX;
 
-       ret = rtc_register_device(info->rtc_dev);
+       ret = devm_rtc_register_device(info->rtc_dev);
        if (ret)
                goto out_rtc;
 
 
        info->rtc_dev->ops = &pm860x_rtc_ops;
        info->rtc_dev->range_max = U32_MAX;
 
-       ret = rtc_register_device(info->rtc_dev);
+       ret = devm_rtc_register_device(info->rtc_dev);
        if (ret)
                return ret;
 
 
                }
        }
 
-       ret = rtc_register_device(data->rtc);
+       ret = devm_rtc_register_device(data->rtc);
 
 err:
        if (ret && data->irq)
 
        data->rtc->range_min = RTC_TIMESTAMP_BEGIN_2000;
        data->rtc->range_max = RTC_TIMESTAMP_END_2099;
 
-       ret = rtc_register_device(data->rtc);
+       ret = devm_rtc_register_device(data->rtc);
        if (ret)
                return ret;
 
 
 
        platform_set_drvdata(pdev, rtc);
 
-       return rtc_register_device(rtc);
+       return devm_rtc_register_device(rtc);
 }
 
 static struct platform_driver ab3100_rtc_driver = {
 
        if (err)
                return err;
 
-       return rtc_register_device(rtc);
+       return devm_rtc_register_device(rtc);
 }
 
 static int ab8500_rtc_remove(struct platform_device *pdev)
 
                return err;
        }
 
-       return rtc_register_device(priv->rtc);
+       return devm_rtc_register_device(priv->rtc);
 }
 
 static const struct i2c_device_id abx80x_id[] = {
 
        if (ret)
                return ret;
 
-       return rtc_register_device(chip->rtc);
+       return devm_rtc_register_device(chip->rtc);
 }
 
 static int ac100_rtc_remove(struct platform_device *pdev)
 
 
        rtc->rtc_dev->range_max = U32_MAX;
 
-       return rtc_register_device(rtc->rtc_dev);
+       return devm_rtc_register_device(rtc->rtc_dev);
 }
 
 #ifdef CONFIG_PM_SLEEP
 
        rtc->rtc_dev->range_min = RTC_TIMESTAMP_BEGIN_1900;
        rtc->rtc_dev->range_max = 38814989399LL; /* 3199-12-31 23:59:59 */
 
-       return rtc_register_device(rtc->rtc_dev);
+       return devm_rtc_register_device(rtc->rtc_dev);
 }
 
 static const struct of_device_id aspeed_rtc_match[] = {
 
 
        rtc->range_min = RTC_TIMESTAMP_BEGIN_1900;
        rtc->range_max = RTC_TIMESTAMP_END_2099;
-       ret = rtc_register_device(rtc);
+       ret = devm_rtc_register_device(rtc);
        if (ret)
                goto err_clk;
 
 
                dev_warn(&pdev->dev, "%s: SET TIME!\n",
                         dev_name(&rtc->rtcdev->dev));
 
-       return rtc_register_device(rtc->rtcdev);
+       return devm_rtc_register_device(rtc->rtcdev);
 
 err_clk:
        clk_disable_unprepare(rtc->sclk);
 
 
        platform_set_drvdata(pdev, rtcdev);
 
-       return rtc_register_device(rtcdev);
+       return devm_rtc_register_device(rtcdev);
 }
 
 static struct platform_driver au1xrtc_driver = {
 
                }
        }
 
-       return rtc_register_device(rtc);
+       return devm_rtc_register_device(rtc);
 }
 
 static const struct platform_device_id bd718x7_rtc_id[] = {
 
        timer->rtc->ops = &brcmstb_waketmr_ops;
        timer->rtc->range_max = U32_MAX;
 
-       ret = rtc_register_device(timer->rtc);
+       ret = devm_rtc_register_device(timer->rtc);
        if (ret)
                goto err_notifier;
 
 
        writel(0, crtc->regs + CDNS_RTC_HMR);
        writel(CDNS_RTC_KRTCR_KRTC, crtc->regs + CDNS_RTC_KRTCR);
 
-       ret = rtc_register_device(crtc->rtc_dev);
+       ret = devm_rtc_register_device(crtc->rtc_dev);
        if (ret)
                goto err_disable_wakeup;
 
 
                cmos_rtc.rtc->ops = &cmos_rtc_ops_no_alarm;
        }
 
-       retval = rtc_register_device(cmos_rtc.rtc);
+       retval = devm_rtc_register_device(cmos_rtc.rtc);
        if (retval)
                goto cleanup2;
 
 
 
        platform_set_drvdata(pdev, rtap);
 
-       ret = rtc_register_device(rtap->rtc);
+       ret = devm_rtc_register_device(rtap->rtc);
        if (ret)
                goto out_no_rtc;
 
 
                /* ignore error and continue without wakeup support */
        }
 
-       return rtc_register_device(rtc->rtc_dev);
+       return devm_rtc_register_device(rtc->rtc_dev);
 }
 
 static const struct of_device_id cpcap_rtc_of_match[] = {
 
        cros_ec_rtc->rtc->ops = &cros_ec_rtc_ops;
        cros_ec_rtc->rtc->range_max = U32_MAX;
 
-       ret = rtc_register_device(cros_ec_rtc->rtc);
+       ret = devm_rtc_register_device(cros_ec_rtc->rtc);
        if (ret)
                return ret;
 
 
        rtc->rtc->range_min = RTC_TIMESTAMP_BEGIN_2000;
        rtc->rtc->range_max = RTC_TIMESTAMP_END_2063;
 
-       ret = rtc_register_device(rtc->rtc);
+       ret = devm_rtc_register_device(rtc->rtc);
        if (ret)
                return ret;
 
 
                dev_err(&pdev->dev, "Failed to request ALARM IRQ %d: %d\n",
                        irq_alarm, ret);
 
-       return rtc_register_device(rtc->rtc_dev);
+       return devm_rtc_register_device(rtc->rtc_dev);
 }
 
 static struct platform_driver da9063_rtc_driver = {
 
 
        device_init_wakeup(&pdev->dev, 0);
 
-       return rtc_register_device(davinci_rtc->rtc);
+       return devm_rtc_register_device(davinci_rtc->rtc);
 }
 
 static int __exit davinci_rtc_remove(struct platform_device *pdev)
 
        rtc->rtc_dev->ops = &dc_rtc_ops;
        rtc->rtc_dev->range_max = U32_MAX;
 
-       return rtc_register_device(rtc->rtc_dev);
+       return devm_rtc_register_device(rtc->rtc_dev);
 }
 
 static const struct of_device_id dc_dt_ids[] = {
 
        rtc->ops = &dm355evm_rtc_ops;
        rtc->range_max = U32_MAX;
 
-       return rtc_register_device(rtc);
+       return devm_rtc_register_device(rtc);
 }
 
 /*
 
        ds1305->rtc->range_max = RTC_TIMESTAMP_END_2099;
 
        ds1305_nvmem_cfg.priv = ds1305;
-       status = rtc_register_device(ds1305->rtc);
+       status = devm_rtc_register_device(ds1305->rtc);
        if (status)
                return status;
 
 
        if (err)
                return err;
 
-       err = rtc_register_device(ds1307->rtc);
+       err = devm_rtc_register_device(ds1307->rtc);
        if (err)
                return err;
 
 
                dev_err(&spi->dev,
                        "unable to create sysfs entries for rtc ds1343\n");
 
-       res = rtc_register_device(priv->rtc);
+       res = devm_rtc_register_device(priv->rtc);
        if (res)
                return res;
 
 
        rtc->range_min = RTC_TIMESTAMP_BEGIN_0000;
        rtc->range_max = RTC_TIMESTAMP_END_9999;
 
-       return rtc_register_device(rtc);
+       return devm_rtc_register_device(rtc);
 }
 
 static struct spi_driver ds1347_driver = {
 
        ds1374->rtc->ops = &ds1374_rtc_ops;
        ds1374->rtc->range_max = U32_MAX;
 
-       ret = rtc_register_device(ds1374->rtc);
+       ret = devm_rtc_register_device(ds1374->rtc);
        if (ret)
                return ret;
 
 
 
        pdata->rtc->ops = &ds1511_rtc_ops;
 
-       ret = rtc_register_device(pdata->rtc);
+       ret = devm_rtc_register_device(pdata->rtc);
        if (ret)
                return ret;
 
 
 
        pdata->rtc->ops = &ds1553_rtc_ops;
 
-       ret = rtc_register_device(pdata->rtc);
+       ret = devm_rtc_register_device(pdata->rtc);
        if (ret)
                return ret;
 
 
        rtc->ops = &ds1672_rtc_ops;
        rtc->range_max = U32_MAX;
 
-       err = rtc_register_device(rtc);
+       err = devm_rtc_register_device(rtc);
        if (err)
                return err;
 
 
        if (ret)
                return ret;
 
-       return rtc_register_device(rtc_dev);
+       return devm_rtc_register_device(rtc_dev);
 }
 
 /**
 
 
        rtc->ops = &ds1742_rtc_ops;
 
-       ret = rtc_register_device(rtc);
+       ret = devm_rtc_register_device(rtc);
        if (ret)
                return ret;
 
 
        chip->rtc->ops = &ds2404_rtc_ops;
        chip->rtc->range_max = U32_MAX;
 
-       retval = rtc_register_device(chip->rtc);
+       retval = devm_rtc_register_device(chip->rtc);
        if (retval)
                return retval;
 
 
        if (err)
                return err;
 
-       return rtc_register_device(ep93xx_rtc->rtc);
+       return devm_rtc_register_device(ep93xx_rtc->rtc);
 }
 
 static struct platform_driver ep93xx_rtc_driver = {
 
        if (ret)
                dev_err(&pdev->dev, "failed to enable irq wake\n");
 
-       ret = rtc_register_device(rtc->rtc_dev);
+       ret = devm_rtc_register_device(rtc->rtc_dev);
        if (ret) {
                dev_err(&pdev->dev, "can't register rtc device\n");
                return ret;
 
        if (unlikely(ret))
                return ret;
 
-       return rtc_register_device(rtc->rtc_dev);
+       return devm_rtc_register_device(rtc->rtc_dev);
 }
 
 static int ftrtc010_rtc_remove(struct platform_device *pdev)
 
        if (err)
                return err;
 
-       return rtc_register_device(rtcdrv->rtc);
+       return devm_rtc_register_device(rtcdrv->rtc);
 }
 
 static const struct of_device_id goldfish_rtc_of_match[] = {
 
        imx_sc_rtc->range_min = 0;
        imx_sc_rtc->range_max = U32_MAX;
 
-       ret = rtc_register_device(imx_sc_rtc);
+       ret = devm_rtc_register_device(imx_sc_rtc);
        if (ret)
                return ret;
 
 
        imxdi->rtc->ops = &dryice_rtc_ops;
        imxdi->rtc->range_max = U32_MAX;
 
-       rc = rtc_register_device(imxdi->rtc);
+       rc = devm_rtc_register_device(imxdi->rtc);
        if (rc)
                goto err;
 
 
        if (ret)
                return ret;
 
-       return rtc_register_device(priv->rtc);
+       return devm_rtc_register_device(priv->rtc);
 }
 
 static int isl12026_remove(struct i2c_client *client)
 
        if (rc)
                return rc;
 
-       return rtc_register_device(isl1208->rtc);
+       return devm_rtc_register_device(isl1208->rtc);
 }
 
 static struct i2c_driver isl1208_driver = {
 
        /* Each 1 Hz pulse should happen after (rate) ticks */
        jz4740_rtc_reg_write(rtc, JZ_REG_RTC_REGULATOR, rate - 1);
 
-       ret = rtc_register_device(rtc->rtc);
+       ret = devm_rtc_register_device(rtc->rtc);
        if (ret)
                return ret;
 
 
        rtc->rtc->ops = &lpc32xx_rtc_ops;
        rtc->rtc->range_max = U32_MAX;
 
-       err = rtc_register_device(rtc->rtc);
+       err = devm_rtc_register_device(rtc->rtc);
        if (err)
                return err;
 
 
        rtcdev->range_min = RTC_TIMESTAMP_BEGIN_1900;
        rtcdev->range_max = RTC_TIMESTAMP_END_2099;
 
-       return rtc_register_device(rtcdev);
+       return devm_rtc_register_device(rtcdev);
 }
 
 static struct platform_driver  ls1x_rtc_driver = {
 
                m41t80_sqw_register_clk(m41t80_data);
 #endif
 
-       rc = rtc_register_device(m41t80_data->rtc);
+       rc = devm_rtc_register_device(m41t80_data->rtc);
        if (rc)
                return rc;
 
 
        if (ret)
                return ret;
 
-       ret = rtc_register_device(m48t59->rtc);
+       ret = devm_rtc_register_device(m48t59->rtc);
        if (ret)
                return ret;
 
 
 
        info->rtc->ops = &m48t86_rtc_ops;
 
-       err = rtc_register_device(info->rtc);
+       err = devm_rtc_register_device(info->rtc);
        if (err)
                return err;
 
 
 
        mc13xxx_unlock(mc13xxx);
 
-       ret = rtc_register_device(priv->rtc);
+       ret = devm_rtc_register_device(priv->rtc);
        if (ret) {
                mc13xxx_lock(mc13xxx);
                goto err_irq_request;
 
                return PTR_ERR(vrtc->rtc);
 
        vrtc->rtc->ops = &meson_vrtc_ops;
-       return rtc_register_device(vrtc->rtc);
+       return devm_rtc_register_device(vrtc->rtc);
 }
 
 static int __maybe_unused meson_vrtc_suspend(struct device *dev)
 
        if (ret)
                goto out_disable_vdd;
 
-       ret = rtc_register_device(rtc->rtc);
+       ret = devm_rtc_register_device(rtc->rtc);
        if (ret)
                goto out_disable_vdd;
 
 
                rtc->rtc->range_max = U32_MAX;
        }
 
-       err = rtc_register_device(rtc->rtc);
+       err = devm_rtc_register_device(rtc->rtc);
        if (err)
                goto out_dispose2;
 
 
                }
        }
 
-       retval = rtc_register_device(mrst_rtc.rtc);
+       retval = devm_rtc_register_device(mrst_rtc.rtc);
        if (retval)
                goto cleanup0;
 
 
        mt2712_rtc->rtc->range_min = RTC_TIMESTAMP_BEGIN_2000;
        mt2712_rtc->rtc->range_max = MT2712_RTC_TIMESTAMP_END_2127;
 
-       return rtc_register_device(mt2712_rtc->rtc);
+       return devm_rtc_register_device(mt2712_rtc->rtc);
 }
 
 #ifdef CONFIG_PM_SLEEP
 
 
        rtc->rtc_dev->ops = &mtk_rtc_ops;
 
-       return rtc_register_device(rtc->rtc_dev);
+       return devm_rtc_register_device(rtc->rtc_dev);
 }
 
 #ifdef CONFIG_PM_SLEEP
 
        pdata->rtc->range_min = RTC_TIMESTAMP_BEGIN_2000;
        pdata->rtc->range_max = RTC_TIMESTAMP_END_2099;
 
-       ret = rtc_register_device(pdata->rtc);
+       ret = devm_rtc_register_device(pdata->rtc);
        if (!ret)
                return 0;
 out:
 
                        dev_err(&pdev->dev, "failed to enable irq wake\n");
        }
 
-       ret = rtc_register_device(rtc);
+       ret = devm_rtc_register_device(rtc);
 
        return ret;
 }
 
                return ret;
        }
 
-       ret = rtc_register_device(pdata->rtc);
+       ret = devm_rtc_register_device(pdata->rtc);
        if (ret < 0)
                clk_unprepare(pdata->clk);
 
 
                goto err;
        }
 
-       ret = rtc_register_device(rtc->rtc);
+       ret = devm_rtc_register_device(rtc->rtc);
        if (ret)
                goto err;
 
 
        if (err)
                return err;
 
-       return rtc_register_device(pcap_rtc->rtc);
+       return devm_rtc_register_device(pcap_rtc->rtc);
 }
 
 static int __exit pcap_rtc_remove(struct platform_device *pdev)
 
        rtc->range_max = RTC_TIMESTAMP_END_2099;
        rtc->set_start_time = true;
 
-       ret = rtc_register_device(rtc);
+       ret = devm_rtc_register_device(rtc);
        if (ret)
                return ret;
 
 
                return ret;
        }
 
-       return rtc_register_device(pcf2127->rtc);
+       return devm_rtc_register_device(pcf2127->rtc);
 }
 
 #ifdef CONFIG_OF
 
        pcf85063_clkout_register_clk(pcf85063);
 #endif
 
-       return rtc_register_device(pcf85063->rtc);
+       return devm_rtc_register_device(pcf85063->rtc);
 }
 
 #ifdef CONFIG_OF
 
                        pcf85363->rtc->ops = &rtc_ops_alarm;
        }
 
-       ret = rtc_register_device(pcf85363->rtc);
+       ret = devm_rtc_register_device(pcf85363->rtc);
 
        for (i = 0; i < config->num_nvram; i++) {
                nvmem_cfg[i].priv = pcf85363;
 
                }
        }
 
-       err = rtc_register_device(pcf8563->rtc);
+       err = devm_rtc_register_device(pcf8563->rtc);
        if (err)
                return err;
 
 
        pdata->rtc->range_min = RTC_TIMESTAMP_BEGIN_2000;
        pdata->rtc->range_max = RTC_TIMESTAMP_END_2099;
 
-       ret = rtc_register_device(pdata->rtc);
+       ret = devm_rtc_register_device(pdata->rtc);
        if (ret)
                goto err_nortc;
 
 
        if (ret)
                goto err_irq;
 
-       ret = rtc_register_device(rtc->rtc);
+       ret = devm_rtc_register_device(rtc->rtc);
        if (ret)
                goto err_reg;
 
 
        ldata->rtc->range_min = vendor->range_min;
        ldata->rtc->range_max = vendor->range_max;
 
-       ret = rtc_register_device(ldata->rtc);
+       ret = devm_rtc_register_device(ldata->rtc);
        if (ret)
                goto out;
 
 
                return rc;
        }
 
-       return rtc_register_device(rtc_dd->rtc);
+       return devm_rtc_register_device(rtc_dd->rtc);
 }
 
 #ifdef CONFIG_PM_SLEEP
 
 
        platform_set_drvdata(dev, rtc);
 
-       return rtc_register_device(rtc);
+       return devm_rtc_register_device(rtc);
 }
 
 static struct platform_driver ps3_rtc_driver = {
 
        rtc->range_min = RTC_TIMESTAMP_BEGIN_2000;
        rtc->range_max = RTC_TIMESTAMP_END_2099;
 
-       return rtc_register_device(rtc);
+       return devm_rtc_register_device(rtc);
 }
 
 static struct spi_driver r9701_driver = {
 
                dev_warn(&pdev->dev, "rc5t619 interrupt is disabled\n");
        }
 
-       return rtc_register_device(rtc->rtc);
+       return devm_rtc_register_device(rtc->rtc);
 }
 
 static struct platform_driver rc5t619_rtc_driver = {
 
                return ret;
        }
 
-       return rtc_register_device(rk808_rtc->rtc);
+       return devm_rtc_register_device(rk808_rtc->rtc);
 }
 
 static struct platform_driver rk808_rtc_driver = {
 
        if (error)
                return error;
 
-       return rtc_register_device(rtc);
+       return devm_rtc_register_device(rtc);
 }
 
 static struct platform_driver rp5c01_rtc_driver = {
 
 
        rtc->ops = &rs5c348_rtc_ops;
 
-       return rtc_register_device(rtc);
+       return devm_rtc_register_device(rtc);
 }
 
 static struct spi_driver rs5c348_driver = {
 
        rv3028->rtc->range_min = RTC_TIMESTAMP_BEGIN_2000;
        rv3028->rtc->range_max = RTC_TIMESTAMP_END_2099;
        rv3028->rtc->ops = &rv3028_rtc_ops;
-       ret = rtc_register_device(rv3028->rtc);
+       ret = devm_rtc_register_device(rv3028->rtc);
        if (ret)
                return ret;
 
 
        rv3029->rtc->range_min = RTC_TIMESTAMP_BEGIN_2000;
        rv3029->rtc->range_max = RTC_TIMESTAMP_END_2079;
 
-       rc = rtc_register_device(rv3029->rtc);
+       rc = devm_rtc_register_device(rv3029->rtc);
        if (rc)
                return rc;
 
 
        rv3032->rtc->range_min = RTC_TIMESTAMP_BEGIN_2000;
        rv3032->rtc->range_max = RTC_TIMESTAMP_END_2099;
        rv3032->rtc->ops = &rv3032_rtc_ops;
-       ret = rtc_register_device(rv3032->rtc);
+       ret = devm_rtc_register_device(rv3032->rtc);
        if (ret)
                return ret;
 
 
        rv8803->rtc->ops = &rv8803_rtc_ops;
        rv8803->rtc->range_min = RTC_TIMESTAMP_BEGIN_2000;
        rv8803->rtc->range_max = RTC_TIMESTAMP_END_2099;
-       err = rtc_register_device(rv8803->rtc);
+       err = devm_rtc_register_device(rv8803->rtc);
        if (err)
                return err;
 
 
        rx8010->rtc->range_min = RTC_TIMESTAMP_BEGIN_2000;
        rx8010->rtc->range_max = RTC_TIMESTAMP_END_2099;
 
-       return rtc_register_device(rx8010->rtc);
+       return devm_rtc_register_device(rx8010->rtc);
 }
 
 static struct i2c_driver rx8010_driver = {
 
        rx8581->rtc->start_secs = 0;
        rx8581->rtc->set_start_time = true;
 
-       ret = rtc_register_device(rx8581->rtc);
+       ret = devm_rtc_register_device(rx8581->rtc);
 
        for (i = 0; i < config->num_nvram; i++) {
                nvmem_cfg[i].priv = rx8581;
 
        if (status1 & S35390A_FLAG_INT2)
                rtc_update_irq(s35390a->rtc, 1, RTC_AF);
 
-       return rtc_register_device(s35390a->rtc);
+       return devm_rtc_register_device(s35390a->rtc);
 }
 
 static struct i2c_driver s35390a_driver = {
 
        info->rtc->max_user_freq = RTC_FREQ;
        info->rtc->range_max = U32_MAX;
 
-       ret = rtc_register_device(info->rtc);
+       ret = devm_rtc_register_device(info->rtc);
        if (ret) {
                clk_disable_unprepare(info->clk);
                return ret;
 
        rtc->rtc->ops = &sprd_rtc_ops;
        rtc->rtc->range_min = 0;
        rtc->rtc->range_max = 5662310399LL;
-       ret = rtc_register_device(rtc->rtc);
+       ret = devm_rtc_register_device(rtc->rtc);
        if (ret) {
                device_init_wakeup(&pdev->dev, 0);
                return ret;
 
        sd3078->rtc->range_min = RTC_TIMESTAMP_BEGIN_2000;
        sd3078->rtc->range_max = RTC_TIMESTAMP_END_2099;
 
-       ret = rtc_register_device(sd3078->rtc);
+       ret = devm_rtc_register_device(sd3078->rtc);
        if (ret)
                return ret;
 
 
                rtc->rtc_dev->range_max = mktime64(2098, 12, 31, 23, 59, 59);
        }
 
-       ret = rtc_register_device(rtc->rtc_dev);
+       ret = devm_rtc_register_device(rtc->rtc_dev);
        if (ret)
                goto err_unmap;
 
 
                return err;
        }
 
-       return rtc_register_device(rtcdrv->rtc);
+       return devm_rtc_register_device(rtcdrv->rtc);
 }
 
 #ifdef CONFIG_PM_SLEEP
 
        data->rtc->ops = &snvs_rtc_ops;
        data->rtc->range_max = U32_MAX;
 
-       return rtc_register_device(data->rtc);
+       return devm_rtc_register_device(data->rtc);
 }
 
 static int __maybe_unused snvs_rtc_suspend_noirq(struct device *dev)
 
        rtc->rtc_dev->range_max = U64_MAX;
        do_div(rtc->rtc_dev->range_max, rtc->clkrate);
 
-       ret = rtc_register_device(rtc->rtc_dev);
+       ret = devm_rtc_register_device(rtc->rtc_dev);
        if (ret) {
                clk_disable_unprepare(rtc->clk);
                return ret;
 
 
        platform_set_drvdata(pdev, rtc);
 
-       return rtc_register_device(rtc);
+       return devm_rtc_register_device(rtc);
 }
 
 static struct platform_driver starfire_rtc_driver = {
 
        if (ret)
                return ret;
 
-       return rtc_register_device(pdata->rtc);
+       return devm_rtc_register_device(pdata->rtc);
 }
 
 /* work with hotplug and coldplug */
 
        rtc_data->rtc->ops = &stmp3xxx_rtc_ops;
        rtc_data->rtc->range_max = U32_MAX;
 
-       err = rtc_register_device(rtc_data->rtc);
+       err = devm_rtc_register_device(rtc_data->rtc);
        if (err)
                return err;
 
 
        rtc->range_max = U64_MAX;
        platform_set_drvdata(pdev, rtc);
 
-       return rtc_register_device(rtc);
+       return devm_rtc_register_device(rtc);
 }
 
 static struct platform_driver sun4v_rtc_driver = {
 
        chip->rtc->ops = &sun6i_rtc_ops;
        chip->rtc->range_max = 2019686399LL; /* 2033-12-31 23:59:59 */
 
-       ret = rtc_register_device(chip->rtc);
+       ret = devm_rtc_register_device(chip->rtc);
        if (ret)
                return ret;
 
 
 
        chip->rtc->ops = &sunxi_rtc_ops;
 
-       return rtc_register_device(chip->rtc);
+       return devm_rtc_register_device(chip->rtc);
 }
 
 static struct platform_driver sunxi_rtc_driver = {
 
                goto disable_clk;
        }
 
-       ret = rtc_register_device(info->rtc);
+       ret = devm_rtc_register_device(info->rtc);
        if (ret)
                goto disable_clk;
 
 
        timer_setup(&rtd->alarm, test_rtc_alarm_handler, 0);
        rtd->alarm.expires = 0;
 
-       return rtc_register_device(rtd->rtc);
+       return devm_rtc_register_device(rtd->rtc);
 }
 
 static struct platform_driver test_driver = {
 
                goto fail_rtc_register;
        }
 
-       ret = rtc_register_device(rtc->rtc);
+       ret = devm_rtc_register_device(rtc->rtc);
        if (ret)
                goto fail_rtc_register;
 
 
        tps_rtc->rtc->range_min = RTC_TIMESTAMP_BEGIN_2000;
        tps_rtc->rtc->range_max = RTC_TIMESTAMP_END_2099;
 
-       return rtc_register_device(tps_rtc->rtc);
+       return devm_rtc_register_device(tps_rtc->rtc);
 }
 
 #ifdef CONFIG_PM_SLEEP
 
        if (ret)
                return ret;
 
-       return rtc_register_device(rtc);
+       return devm_rtc_register_device(rtc);
 }
 
 static int __exit tx4939_rtc_remove(struct platform_device *pdev)
 
 
        dev_info(&pdev->dev, "Real Time Clock of NEC VR4100 series\n");
 
-       retval = rtc_register_device(rtc);
+       retval = devm_rtc_register_device(rtc);
        if (retval)
                goto err_iounmap_all;
 
 
                return ret;
        }
 
-       return rtc_register_device(vt8500_rtc->rtc);
+       return devm_rtc_register_device(vt8500_rtc->rtc);
 }
 
 static int vt8500_rtc_remove(struct platform_device *pdev)
 
        rtc->range_max = RTC_TIMESTAMP_END_2099;
        rtc->owner = THIS_MODULE;
 
-       return rtc_register_device(rtc);
+       return devm_rtc_register_device(rtc);
 }
 
 static struct platform_driver wilco_ec_rtc_driver = {
 
        wm831x_rtc->rtc->ops = &wm831x_rtc_ops;
        wm831x_rtc->rtc->range_max = U32_MAX;
 
-       ret = rtc_register_device(wm831x_rtc->rtc);
+       ret = devm_rtc_register_device(wm831x_rtc->rtc);
        if (ret)
                return ret;
 
 
        pdata->rtc->ops = &xgene_rtc_ops;
        pdata->rtc->range_max = U32_MAX;
 
-       ret = rtc_register_device(pdata->rtc);
+       ret = devm_rtc_register_device(pdata->rtc);
        if (ret) {
                clk_disable_unprepare(pdata->clk);
                return ret;
 
 
        device_init_wakeup(&pdev->dev, 1);
 
-       return rtc_register_device(xrtcdev->rtc);
+       return devm_rtc_register_device(xrtcdev->rtc);
 }
 
 static int xlnx_rtc_remove(struct platform_device *pdev)
 
        size_t old_cnt = 0, add_cnt = 0, new_cnt;
        const struct attribute_group **groups, **old;
 
-       if (rtc->registered)
-               return -EINVAL;
        if (!grps)
                return -EINVAL;
 
 
         */
        long set_offset_nsec;
 
-       bool registered;
-
        time64_t range_min;
        timeu64_t range_max;
        time64_t start_secs;
                                        const struct rtc_class_ops *ops,
                                        struct module *owner);
 struct rtc_device *devm_rtc_allocate_device(struct device *dev);
-int __rtc_register_device(struct module *owner, struct rtc_device *rtc);
+int __devm_rtc_register_device(struct module *owner, struct rtc_device *rtc);
 
 extern int rtc_read_time(struct rtc_device *rtc, struct rtc_time *tm);
 extern int rtc_set_time(struct rtc_device *rtc, struct rtc_time *tm);
        return false;
 }
 
-#define rtc_register_device(device) \
-       __rtc_register_device(THIS_MODULE, device)
+#define devm_rtc_register_device(device) \
+       __devm_rtc_register_device(THIS_MODULE, device)
 
 #ifdef CONFIG_RTC_HCTOSYS_DEVICE
 extern int rtc_hctosys_ret;