aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorUli Luckas <u.luckas@road-gmbh.de>2006-02-22 16:12:07 -0500
committerRussell King <rmk+kernel@arm.linux.org.uk>2006-02-22 16:12:07 -0500
commit75d2f18088ded458f5bc4014b6c4e2d9651d41d4 (patch)
treece564f2a6909a20b5ecc86dd290c8c8386980755
parentbc66d4496f106a8e3a936dc24c9965a2f9c13e50 (diff)
[ARM] 3345/1: Fix interday RTC alarms
Patch from Uli Luckas This is a bugfix. The comment in arch/arm/common/rtctime.c explains it: * FIXME: for now, we just copy the alarm time because we're lazy (and * is therefore buggy - setting a 10am alarm at 8pm will not result in * the alarm triggering.) This patch adds one day to the alarm iff the alarm wrapped beyond midnight and therefore appears to be in the past. Signed-off-by: Uli Luckas <u.luckas@road-gmbh.de> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
-rw-r--r--arch/arm/common/rtctime.c16
1 files changed, 12 insertions, 4 deletions
diff --git a/arch/arm/common/rtctime.c b/arch/arm/common/rtctime.c
index 48b1e19b131f..e851d86c212c 100644
--- a/arch/arm/common/rtctime.c
+++ b/arch/arm/common/rtctime.c
@@ -128,19 +128,27 @@ EXPORT_SYMBOL(rtc_tm_to_time);
128/* 128/*
129 * Calculate the next alarm time given the requested alarm time mask 129 * Calculate the next alarm time given the requested alarm time mask
130 * and the current time. 130 * and the current time.
131 *
132 * FIXME: for now, we just copy the alarm time because we're lazy (and
133 * is therefore buggy - setting a 10am alarm at 8pm will not result in
134 * the alarm triggering.)
135 */ 131 */
136void rtc_next_alarm_time(struct rtc_time *next, struct rtc_time *now, struct rtc_time *alrm) 132void rtc_next_alarm_time(struct rtc_time *next, struct rtc_time *now, struct rtc_time *alrm)
137{ 133{
134 unsigned long next_time;
135 unsigned long now_time;
136
138 next->tm_year = now->tm_year; 137 next->tm_year = now->tm_year;
139 next->tm_mon = now->tm_mon; 138 next->tm_mon = now->tm_mon;
140 next->tm_mday = now->tm_mday; 139 next->tm_mday = now->tm_mday;
141 next->tm_hour = alrm->tm_hour; 140 next->tm_hour = alrm->tm_hour;
142 next->tm_min = alrm->tm_min; 141 next->tm_min = alrm->tm_min;
143 next->tm_sec = alrm->tm_sec; 142 next->tm_sec = alrm->tm_sec;
143
144 rtc_tm_to_time(now, &now_time);
145 rtc_tm_to_time(next, &next_time);
146
147 if (next_time < now_time) {
148 /* Advance one day */
149 next_time += 60 * 60 * 24;
150 rtc_time_to_tm(next_time, next);
151 }
144} 152}
145 153
146static inline int rtc_read_time(struct rtc_ops *ops, struct rtc_time *tm) 154static inline int rtc_read_time(struct rtc_ops *ops, struct rtc_time *tm)