diff options
Diffstat (limited to 'drivers/rtc/interface.c')
| -rw-r--r-- | drivers/rtc/interface.c | 12 | 
1 files changed, 9 insertions, 3 deletions
diff --git a/drivers/rtc/interface.c b/drivers/rtc/interface.c index f1ba2c69652..925006d3310 100644 --- a/drivers/rtc/interface.c +++ b/drivers/rtc/interface.c @@ -123,12 +123,18 @@ int rtc_read_alarm(struct rtc_device *rtc, struct rtc_wkalrm *alarm)  	err = mutex_lock_interruptible(&rtc->ops_lock);  	if (err)  		return err; -	alarm->enabled = rtc->aie_timer.enabled; -	if (alarm->enabled) +	if (rtc->ops == NULL) +		err = -ENODEV; +	else if (!rtc->ops->read_alarm) +		err = -EINVAL; +	else { +		memset(alarm, 0, sizeof(struct rtc_wkalrm)); +		alarm->enabled = rtc->aie_timer.enabled;  		alarm->time = rtc_ktime_to_tm(rtc->aie_timer.node.expires); +	}  	mutex_unlock(&rtc->ops_lock); -	return 0; +	return err;  }  EXPORT_SYMBOL_GPL(rtc_read_alarm);  |