mirror of
https://github.com/adulau/aha.git
synced 2024-12-27 19:26:25 +00:00
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: 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>
This commit is contained in:
parent
61a7c36acb
commit
cb3a58d2ac
3 changed files with 11 additions and 1 deletions
|
@ -156,6 +156,8 @@ struct rtc_device *rtc_device_register(const char *name, struct device *dev,
|
||||||
strlcpy(rtc->name, name, RTC_DEVICE_NAME_SIZE);
|
strlcpy(rtc->name, name, RTC_DEVICE_NAME_SIZE);
|
||||||
snprintf(rtc->dev.bus_id, BUS_ID_SIZE, "rtc%d", id);
|
snprintf(rtc->dev.bus_id, BUS_ID_SIZE, "rtc%d", id);
|
||||||
|
|
||||||
|
rtc_dev_prepare(rtc);
|
||||||
|
|
||||||
err = device_register(&rtc->dev);
|
err = device_register(&rtc->dev);
|
||||||
if (err)
|
if (err)
|
||||||
goto exit_kfree;
|
goto exit_kfree;
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
extern void __init rtc_dev_init(void);
|
extern void __init rtc_dev_init(void);
|
||||||
extern void __exit rtc_dev_exit(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_add_device(struct rtc_device *rtc);
|
||||||
extern void rtc_dev_del_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)
|
static inline void rtc_dev_add_device(struct rtc_device *rtc)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
|
@ -396,7 +396,7 @@ static const struct file_operations rtc_dev_fops = {
|
||||||
|
|
||||||
/* insertion/removal hooks */
|
/* insertion/removal hooks */
|
||||||
|
|
||||||
void rtc_dev_add_device(struct rtc_device *rtc)
|
void rtc_dev_prepare(struct rtc_device *rtc)
|
||||||
{
|
{
|
||||||
if (!rtc_devt)
|
if (!rtc_devt)
|
||||||
return;
|
return;
|
||||||
|
@ -418,7 +418,10 @@ void rtc_dev_add_device(struct rtc_device *rtc)
|
||||||
|
|
||||||
cdev_init(&rtc->char_dev, &rtc_dev_fops);
|
cdev_init(&rtc->char_dev, &rtc_dev_fops);
|
||||||
rtc->char_dev.owner = rtc->owner;
|
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))
|
if (cdev_add(&rtc->char_dev, rtc->dev.devt, 1))
|
||||||
printk(KERN_WARNING "%s: failed to add char device %d:%d\n",
|
printk(KERN_WARNING "%s: failed to add char device %d:%d\n",
|
||||||
rtc->name, MAJOR(rtc_devt), rtc->id);
|
rtc->name, MAJOR(rtc_devt), rtc->id);
|
||||||
|
|
Loading…
Reference in a new issue