diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2011-12-20 14:42:38 -0500 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2011-12-20 14:42:38 -0500 |
| commit | 5fbd305dd2b661a243013cf444d2a32bfec2f701 (patch) | |
| tree | 4e90099fef21c0ad7aec77d772b12a0b2094d64e /drivers/rtc | |
| parent | a205b082189bf914959a667a5c83ea145bba3fb5 (diff) | |
| parent | b1b73d095084e754562961c443aa8f6587a55f8e (diff) | |
Merge branch 'timers-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
* 'timers-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
time/clocksource: Fix kernel-doc warnings
rtc: m41t80: Workaround broken alarm functionality
rtc: Expire alarms after the time is set.
Diffstat (limited to 'drivers/rtc')
| -rw-r--r-- | drivers/rtc/interface.c | 6 | ||||
| -rw-r--r-- | drivers/rtc/rtc-m41t80.c | 9 |
2 files changed, 15 insertions, 0 deletions
diff --git a/drivers/rtc/interface.c b/drivers/rtc/interface.c index fa4d9f324189..3bcc7cfcaba7 100644 --- a/drivers/rtc/interface.c +++ b/drivers/rtc/interface.c | |||
| @@ -73,6 +73,8 @@ int rtc_set_time(struct rtc_device *rtc, struct rtc_time *tm) | |||
| 73 | err = -EINVAL; | 73 | err = -EINVAL; |
| 74 | 74 | ||
| 75 | mutex_unlock(&rtc->ops_lock); | 75 | mutex_unlock(&rtc->ops_lock); |
| 76 | /* A timer might have just expired */ | ||
| 77 | schedule_work(&rtc->irqwork); | ||
| 76 | return err; | 78 | return err; |
| 77 | } | 79 | } |
| 78 | EXPORT_SYMBOL_GPL(rtc_set_time); | 80 | EXPORT_SYMBOL_GPL(rtc_set_time); |
| @@ -112,6 +114,8 @@ int rtc_set_mmss(struct rtc_device *rtc, unsigned long secs) | |||
| 112 | err = -EINVAL; | 114 | err = -EINVAL; |
| 113 | 115 | ||
| 114 | mutex_unlock(&rtc->ops_lock); | 116 | mutex_unlock(&rtc->ops_lock); |
| 117 | /* A timer might have just expired */ | ||
| 118 | schedule_work(&rtc->irqwork); | ||
| 115 | 119 | ||
| 116 | return err; | 120 | return err; |
| 117 | } | 121 | } |
| @@ -403,6 +407,8 @@ int rtc_initialize_alarm(struct rtc_device *rtc, struct rtc_wkalrm *alarm) | |||
| 403 | timerqueue_add(&rtc->timerqueue, &rtc->aie_timer.node); | 407 | timerqueue_add(&rtc->timerqueue, &rtc->aie_timer.node); |
| 404 | } | 408 | } |
| 405 | mutex_unlock(&rtc->ops_lock); | 409 | mutex_unlock(&rtc->ops_lock); |
| 410 | /* maybe that was in the past.*/ | ||
| 411 | schedule_work(&rtc->irqwork); | ||
| 406 | return err; | 412 | return err; |
| 407 | } | 413 | } |
| 408 | EXPORT_SYMBOL_GPL(rtc_initialize_alarm); | 414 | EXPORT_SYMBOL_GPL(rtc_initialize_alarm); |
diff --git a/drivers/rtc/rtc-m41t80.c b/drivers/rtc/rtc-m41t80.c index eda128fc1d38..64aedd8cc095 100644 --- a/drivers/rtc/rtc-m41t80.c +++ b/drivers/rtc/rtc-m41t80.c | |||
| @@ -357,10 +357,19 @@ static int m41t80_rtc_read_alarm(struct device *dev, struct rtc_wkalrm *t) | |||
| 357 | static struct rtc_class_ops m41t80_rtc_ops = { | 357 | static struct rtc_class_ops m41t80_rtc_ops = { |
| 358 | .read_time = m41t80_rtc_read_time, | 358 | .read_time = m41t80_rtc_read_time, |
| 359 | .set_time = m41t80_rtc_set_time, | 359 | .set_time = m41t80_rtc_set_time, |
| 360 | /* | ||
| 361 | * XXX - m41t80 alarm functionality is reported broken. | ||
| 362 | * until it is fixed, don't register alarm functions. | ||
| 363 | * | ||
| 360 | .read_alarm = m41t80_rtc_read_alarm, | 364 | .read_alarm = m41t80_rtc_read_alarm, |
| 361 | .set_alarm = m41t80_rtc_set_alarm, | 365 | .set_alarm = m41t80_rtc_set_alarm, |
| 366 | */ | ||
| 362 | .proc = m41t80_rtc_proc, | 367 | .proc = m41t80_rtc_proc, |
| 368 | /* | ||
| 369 | * See above comment on broken alarm | ||
| 370 | * | ||
| 363 | .alarm_irq_enable = m41t80_rtc_alarm_irq_enable, | 371 | .alarm_irq_enable = m41t80_rtc_alarm_irq_enable, |
| 372 | */ | ||
| 364 | }; | 373 | }; |
| 365 | 374 | ||
| 366 | #if defined(CONFIG_RTC_INTF_SYSFS) || defined(CONFIG_RTC_INTF_SYSFS_MODULE) | 375 | #if defined(CONFIG_RTC_INTF_SYSFS) || defined(CONFIG_RTC_INTF_SYSFS_MODULE) |
