From 754389c78a7210b564e36db42b40865b357109c6 Mon Sep 17 00:00:00 2001 From: Rabin Vincent Date: Tue, 22 Nov 2011 11:03:14 +0100 Subject: [PATCH] --- yaml --- r: 288783 b: refs/heads/master c: 41c7f7424259ff11009449f87c95656f69f9b186 h: refs/heads/master i: 288781: 93a3337405275849699884e4f7c74c8bdbcd96aa 288779: d60dfd6f331f399830750476bdb632e9de01b7c6 288775: b8ef35680529ddb941e1a5161503950d3cf745fe 288767: 8bd0fe749c98e67ee4150b6eaf3b66f361413ec0 v: v3 --- [refs] | 2 +- trunk/drivers/rtc/interface.c | 15 +++++++++++++-- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/[refs] b/[refs] index 97d8fad7d6d6..67d887f48dae 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 5f9679d29c7959445d4af1eb85ee55e4ebad4a93 +refs/heads/master: 41c7f7424259ff11009449f87c95656f69f9b186 diff --git a/trunk/drivers/rtc/interface.c b/trunk/drivers/rtc/interface.c index 167e68a9ffda..dc87eda65814 100644 --- a/trunk/drivers/rtc/interface.c +++ b/trunk/drivers/rtc/interface.c @@ -776,6 +776,14 @@ static int rtc_timer_enqueue(struct rtc_device *rtc, struct rtc_timer *timer) return 0; } +static void rtc_alarm_disable(struct rtc_device *rtc) +{ + if (!rtc->ops || !rtc->ops->alarm_irq_enable) + return; + + rtc->ops->alarm_irq_enable(rtc->dev.parent, false); +} + /** * rtc_timer_remove - Removes a rtc_timer from the rtc_device timerqueue * @rtc rtc device @@ -797,8 +805,10 @@ static void rtc_timer_remove(struct rtc_device *rtc, struct rtc_timer *timer) struct rtc_wkalrm alarm; int err; next = timerqueue_getnext(&rtc->timerqueue); - if (!next) + if (!next) { + rtc_alarm_disable(rtc); return; + } alarm.time = rtc_ktime_to_tm(next->expires); alarm.enabled = 1; err = __rtc_set_alarm(rtc, &alarm); @@ -860,7 +870,8 @@ void rtc_timer_do_work(struct work_struct *work) err = __rtc_set_alarm(rtc, &alarm); if (err == -ETIME) goto again; - } + } else + rtc_alarm_disable(rtc); mutex_unlock(&rtc->ops_lock); }