Fix a goof in the revised classdev support for RTCs: make sure the /dev
node info is ready before the device is registered, not after.  Otherwise
the /sys/class/rtc/rtcN/dev attribute won't be created and then udev won't
have the information it needs to create the /dev/rtcN node.
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Cc: Alessandro Zummo <a.zummo@towertech.it>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
        strlcpy(rtc->name, name, RTC_DEVICE_NAME_SIZE);
        snprintf(rtc->dev.bus_id, BUS_ID_SIZE, "rtc%d", id);
 
+       rtc_dev_prepare(rtc);
+
        err = device_register(&rtc->dev);
        if (err)
                goto exit_kfree;
 
 
 extern void __init rtc_dev_init(void);
 extern void __exit rtc_dev_exit(void);
+extern void rtc_dev_prepare(struct rtc_device *rtc);
 extern void rtc_dev_add_device(struct rtc_device *rtc);
 extern void rtc_dev_del_device(struct rtc_device *rtc);
 
 {
 }
 
+static inline void rtc_dev_prepare(struct rtc_device *rtc)
+{
+}
+
 static inline void rtc_dev_add_device(struct rtc_device *rtc)
 {
 }
 
 
 /* insertion/removal hooks */
 
-void rtc_dev_add_device(struct rtc_device *rtc)
+void rtc_dev_prepare(struct rtc_device *rtc)
 {
        if (!rtc_devt)
                return;
 
        cdev_init(&rtc->char_dev, &rtc_dev_fops);
        rtc->char_dev.owner = rtc->owner;
+}
 
+void rtc_dev_add_device(struct rtc_device *rtc)
+{
        if (cdev_add(&rtc->char_dev, rtc->dev.devt, 1))
                printk(KERN_WARNING "%s: failed to add char device %d:%d\n",
                        rtc->name, MAJOR(rtc_devt), rtc->id);