{
        struct rtc_device *rtc;
 
+       rtc = devm_rtc_allocate_device(&pdev->dev);
+       if (IS_ERR(rtc))
+               return PTR_ERR(rtc);
+
        if (pdev->dev.of_node &&
            (of_property_read_bool(pdev->dev.of_node, "wakeup-source") ||
             of_property_read_bool(pdev->dev.of_node, "has-tpo")/* legacy */)) {
                opal_rtc_ops.alarm_irq_enable = opal_tpo_alarm_irq_enable;
        }
 
-       rtc = devm_rtc_device_register(&pdev->dev, DRVNAME, &opal_rtc_ops,
-                                      THIS_MODULE);
-       if (IS_ERR(rtc))
-               return PTR_ERR(rtc);
-
+       rtc->ops = &opal_rtc_ops;
+       rtc->range_min = RTC_TIMESTAMP_BEGIN_0000;
+       rtc->range_max = RTC_TIMESTAMP_END_9999;
        rtc->uie_unsupported = 1;
 
-       return 0;
+       return devm_rtc_register_device(rtc);
 }
 
 static const struct of_device_id opal_rtc_match[] = {