diff options
Diffstat (limited to 'drivers/rtc/class.c')
| -rw-r--r-- | drivers/rtc/class.c | 16 | 
1 files changed, 14 insertions, 2 deletions
| diff --git a/drivers/rtc/class.c b/drivers/rtc/class.c index 589351ef75d0..38e26be705be 100644 --- a/drivers/rtc/class.c +++ b/drivers/rtc/class.c @@ -53,6 +53,7 @@ static int rtc_suspend(struct device *dev)  	struct rtc_device	*rtc = to_rtc_device(dev);  	struct rtc_time		tm;  	struct timespec		delta, delta_delta; +	int err;  	if (has_persistent_clock())  		return 0; @@ -61,7 +62,12 @@ static int rtc_suspend(struct device *dev)  		return 0;  	/* snapshot the current RTC and system time at suspend*/ -	rtc_read_time(rtc, &tm); +	err = rtc_read_time(rtc, &tm); +	if (err < 0) { +		pr_debug("%s:  fail to read rtc time\n", dev_name(&rtc->dev)); +		return 0; +	} +  	getnstimeofday(&old_system);  	rtc_tm_to_time(&tm, &old_rtc.tv_sec); @@ -94,6 +100,7 @@ static int rtc_resume(struct device *dev)  	struct rtc_time		tm;  	struct timespec		new_system, new_rtc;  	struct timespec		sleep_time; +	int err;  	if (has_persistent_clock())  		return 0; @@ -104,7 +111,12 @@ static int rtc_resume(struct device *dev)  	/* snapshot the current rtc and system time at resume */  	getnstimeofday(&new_system); -	rtc_read_time(rtc, &tm); +	err = rtc_read_time(rtc, &tm); +	if (err < 0) { +		pr_debug("%s:  fail to read rtc time\n", dev_name(&rtc->dev)); +		return 0; +	} +  	if (rtc_valid_tm(&tm) != 0) {  		pr_debug("%s:  bogus resume time\n", dev_name(&rtc->dev));  		return 0; | 
