Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit cb3a58d2 authored by David Brownell's avatar David Brownell Committed by Linus Torvalds
Browse files

rtc: update to class device removal patches



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: default avatarDavid Brownell <dbrownell@users.sourceforge.net>
Cc: Alessandro Zummo <a.zummo@towertech.it>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 61a7c36a
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -156,6 +156,8 @@ struct rtc_device *rtc_device_register(const char *name, struct device *dev,
	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;
+5 −0
Original line number Diff line number Diff line
@@ -2,6 +2,7 @@

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);

@@ -15,6 +16,10 @@ static inline void rtc_dev_exit(void)
{
}

static inline void rtc_dev_prepare(struct rtc_device *rtc)
{
}

static inline void rtc_dev_add_device(struct rtc_device *rtc)
{
}
+4 −1
Original line number Diff line number Diff line
@@ -396,7 +396,7 @@ static const struct file_operations rtc_dev_fops = {

/* insertion/removal hooks */

void rtc_dev_add_device(struct rtc_device *rtc)
void rtc_dev_prepare(struct rtc_device *rtc)
{
	if (!rtc_devt)
		return;
@@ -418,7 +418,10 @@ void rtc_dev_add_device(struct rtc_device *rtc)

	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);