diff options
Diffstat (limited to 'drivers/rtc/interface.c')
| -rw-r--r-- | drivers/rtc/interface.c | 28 | 
1 files changed, 27 insertions, 1 deletions
diff --git a/drivers/rtc/interface.c b/drivers/rtc/interface.c index 8ec6b069a7f5..ef6316acec43 100644 --- a/drivers/rtc/interface.c +++ b/drivers/rtc/interface.c @@ -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); @@ -454,7 +480,7 @@ EXPORT_SYMBOL_GPL(rtc_update_irq_enable);   * @rtc: pointer to the rtc device   *   * This function is called when an AIE, UIE or PIE mode interrupt - * has occured (or been emulated). + * has occurred (or been emulated).   *   * Triggers the registered irq_task function callback.   */  |