diff options
| -rw-r--r-- | drivers/rtc/interface.c | 15 | 
1 files changed, 13 insertions, 2 deletions
diff --git a/drivers/rtc/interface.c b/drivers/rtc/interface.c index 167e68a9ffd..dc87eda6581 100644 --- a/drivers/rtc/interface.c +++ b/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 @@ again:  		err = __rtc_set_alarm(rtc, &alarm);  		if (err == -ETIME)  			goto again; -	} +	} else +		rtc_alarm_disable(rtc);  	mutex_unlock(&rtc->ops_lock);  }  |