device_init_wakeup(&pdev->dev, 1);
 
-       info->rtc_dev = rtc_device_register("max77686-rtc", &pdev->dev,
-                       &max77686_rtc_ops, THIS_MODULE);
+       info->rtc_dev = devm_rtc_device_register(&pdev->dev, "max77686-rtc",
+                                       &max77686_rtc_ops, THIS_MODULE);
 
        if (IS_ERR(info->rtc_dev)) {
                dev_info(&pdev->dev, "%s: fail\n", __func__);
                goto err_rtc;
        info->virq = virq;
 
-       ret = request_threaded_irq(virq, NULL, max77686_rtc_alarm_irq, 0,
-                       "rtc-alarm0", info);
+       ret = devm_request_threaded_irq(&pdev->dev, virq, NULL,
+                               max77686_rtc_alarm_irq, 0, "rtc-alarm0", info);
        if (ret < 0) {
                dev_err(&pdev->dev, "Failed to request alarm IRQ: %d: %d\n",
                        info->virq, ret);
 
 static int max77686_rtc_remove(struct platform_device *pdev)
 {
-       struct max77686_rtc_info *info = platform_get_drvdata(pdev);
-
-       if (info) {
-               free_irq(info->virq, info);
-               rtc_device_unregister(info->rtc_dev);
-       }
-
        return 0;
 }