timer fixes
Linus,
Please pull the latest timer-fixes-for-linus git tree from:
git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip.git timer-fixes-for-linus
Thanks,
Ingo
------------------>
Feng Tang (1):
RTC: rtc-mrst: follow on to the change of rtc_device_register()
John Stultz (1):
RTC: Fix early irqs caused by calling rtc_set_alarm too early
Mike Frysinger (1):
RTC: add missing "return 0" in new alarm func for rtc-bfin.c
Vasily Khoruzhick (1):
RTC: Fix s3c compile error due to missing s3c_rtc_setpie
drivers/rtc/class.c | 2 +- drivers/rtc/interface.c | 26 ++++++++++++++++++++++++++ drivers/rtc/rtc-bfin.c | 2 ++ drivers/rtc/rtc-s3c.c | 2 -- include/linux/rtc.h | 2 ++ 5 files changed, 31 insertions(+), 3 deletions(-)
drivers/rtc/class.c +1 -1
@@ -171,7 +171,7 @@ struct rtc_device *rtc_device_register(const char *name, struct device *dev, err =__rtc_read_alarm (rtc, &alrm);if (!err && !rtc_valid_tm (&alrm.time)) -rtc_set_alarm (rtc, &alrm); +rtc_initialize_alarm (rtc, &alrm);strlcpy (rtc->name, name,RTC_DEVICE_NAME_SIZE );dev_set_name (&rtc->dev,"rtc%d" , id);
drivers/rtc/interface.c +26 -0
@@ -375,6 +375,32 @@ int rtc_set_alarm(struct rtc_device *rtc, struct rtc_wkalrm *alarm) }EXPORT_SYMBOL_GPL (rtc_set_alarm); +/* Called once per device from rtc_device_register */ +int rtc_initialize_alarm (struct rtc_device *rtc,struct rtc_wkalrm *alarm) +{ +int err; + + err =rtc_valid_tm (&alarm->time); +if (err !=0 ) +return err; + + err =mutex_lock_interruptible (&rtc->ops_lock); +if (err) +return err; + + rtc->aie_timer.node.expires =rtc_tm_to_ktime (alarm->time); + rtc->aie_timer.period =ktime_set (0 ,0 ); +if (alarm->enabled) { + rtc->aie_timer.enabled =1 ; +timerqueue_add (&rtc->timerqueue, &rtc->aie_timer.node); + } +mutex_unlock (&rtc->ops_lock); +return err; +} +EXPORT_SYMBOL_GPL (rtc_initialize_alarm); + + +int rtc_alarm_irq_enable (struct rtc_device *rtc,unsigned int enabled) {int err =mutex_lock_interruptible (&rtc->ops_lock);
drivers/rtc/rtc-bfin.c +2 -0
@@ -250,6 +250,8 @@ static int bfin_rtc_alarm_irq_enable(struct device *dev, unsigned int enabled)bfin_rtc_int_set_alarm (rtc); else bfin_rtc_int_clear(~(RTC_ISTAT_ALARM | RTC_ISTAT_ALARM_DAY)); + +return 0 ; }static int bfin_rtc_read_time (struct device *dev,struct rtc_time *tm)
drivers/rtc/rtc-s3c.c +0 -2
@@ -336,7 +336,6 @@ static void s3c_rtc_release(struct device *dev)/* do not clear AIE here, it may be needed for wake */ -s3c_rtc_setpie (dev,0 );free_irq (s3c_rtc_alarmno, rtc_dev);free_irq (s3c_rtc_tickno, rtc_dev); }
@@ -408,7 +407,6 @@ static int __devexit s3c_rtc_remove(struct platform_device *dev)platform_set_drvdata (dev,NULL );rtc_device_unregister (rtc); -s3c_rtc_setpie (&dev->dev,0 );s3c_rtc_setaie (&dev->dev,0 );clk_disable (rtc_clk);
include/linux/rtc.h +2 -0
@@ -228,6 +228,8 @@ extern int rtc_read_alarm(struct rtc_device *rtc, struct rtc_wkalrm *alrm);extern int rtc_set_alarm (struct rtc_device *rtc,struct rtc_wkalrm *alrm); +extern int rtc_initialize_alarm (struct rtc_device *rtc, +struct rtc_wkalrm *alrm);extern void rtc_update_irq (struct rtc_device *rtc,unsigned long num,unsigned long events);