|
@@ -195,6 +195,8 @@ struct rtc_device *rtc_device_register(const char *name, struct device *dev,
|
|
|
goto exit_ida;
|
|
|
}
|
|
|
|
|
|
+ device_initialize(&rtc->dev);
|
|
|
+
|
|
|
rtc->id = id;
|
|
|
rtc->ops = ops;
|
|
|
rtc->owner = owner;
|
|
@@ -233,14 +235,19 @@ struct rtc_device *rtc_device_register(const char *name, struct device *dev,
|
|
|
|
|
|
rtc_dev_prepare(rtc);
|
|
|
|
|
|
- err = device_register(&rtc->dev);
|
|
|
+ err = cdev_device_add(&rtc->char_dev, &rtc->dev);
|
|
|
if (err) {
|
|
|
+ dev_warn(&rtc->dev, "%s: failed to add char device %d:%d\n",
|
|
|
+ rtc->name, MAJOR(rtc->dev.devt), rtc->id);
|
|
|
+
|
|
|
/* This will free both memory and the ID */
|
|
|
put_device(&rtc->dev);
|
|
|
goto exit;
|
|
|
+ } else {
|
|
|
+ dev_dbg(&rtc->dev, "%s: dev (%d:%d)\n", rtc->name,
|
|
|
+ MAJOR(rtc->dev.devt), rtc->id);
|
|
|
}
|
|
|
|
|
|
- rtc_dev_add_device(rtc);
|
|
|
rtc_proc_add_device(rtc);
|
|
|
|
|
|
dev_info(dev, "rtc core: registered %s as %s\n",
|
|
@@ -271,9 +278,8 @@ void rtc_device_unregister(struct rtc_device *rtc)
|
|
|
* Remove innards of this RTC, then disable it, before
|
|
|
* letting any rtc_class_open() users access it again
|
|
|
*/
|
|
|
- rtc_dev_del_device(rtc);
|
|
|
rtc_proc_del_device(rtc);
|
|
|
- device_del(&rtc->dev);
|
|
|
+ cdev_device_del(&rtc->char_dev, &rtc->dev);
|
|
|
rtc->ops = NULL;
|
|
|
mutex_unlock(&rtc->ops_lock);
|
|
|
put_device(&rtc->dev);
|