diff options
| -rw-r--r-- | drivers/rtc/class.c | 8 | ||||
| -rw-r--r-- | drivers/rtc/hctosys.c | 4 | ||||
| -rw-r--r-- | drivers/rtc/rtc-sysfs.c | 6 | ||||
| -rw-r--r-- | include/linux/rtc.h | 2 | 
4 files changed, 15 insertions, 5 deletions
diff --git a/drivers/rtc/class.c b/drivers/rtc/class.c index 37b1d82fda0..f8a0aab218c 100644 --- a/drivers/rtc/class.c +++ b/drivers/rtc/class.c @@ -31,8 +31,12 @@ static void rtc_device_release(struct device *dev)  	kfree(rtc);  } -#if defined(CONFIG_PM) && defined(CONFIG_RTC_HCTOSYS_DEVICE) +#ifdef CONFIG_RTC_HCTOSYS_DEVICE +/* Result of the last RTC to system clock attempt. */ +int rtc_hctosys_ret = -ENODEV; +#endif +#if defined(CONFIG_PM) && defined(CONFIG_RTC_HCTOSYS_DEVICE)  /*   * On suspend(), measure the delta between one RTC and the   * system's wall clock; restore it on resume(). @@ -84,6 +88,7 @@ static int rtc_resume(struct device *dev)  	struct timespec		new_system, new_rtc;  	struct timespec		sleep_time; +	rtc_hctosys_ret = -ENODEV;  	if (strcmp(dev_name(&rtc->dev), CONFIG_RTC_HCTOSYS_DEVICE) != 0)  		return 0; @@ -117,6 +122,7 @@ static int rtc_resume(struct device *dev)  	if (sleep_time.tv_sec >= 0)  		timekeeping_inject_sleeptime(&sleep_time); +	rtc_hctosys_ret = 0;  	return 0;  } diff --git a/drivers/rtc/hctosys.c b/drivers/rtc/hctosys.c index bc90b091f19..4aa60d74004 100644 --- a/drivers/rtc/hctosys.c +++ b/drivers/rtc/hctosys.c @@ -22,8 +22,6 @@   * the best guess is to add 0.5s.   */ -int rtc_hctosys_ret = -ENODEV; -  static int __init rtc_hctosys(void)  {  	int err = -ENODEV; @@ -56,7 +54,7 @@ static int __init rtc_hctosys(void)  	rtc_tm_to_time(&tm, &tv.tv_sec); -	do_settimeofday(&tv); +	err = do_settimeofday(&tv);  	dev_info(rtc->dev.parent,  		"setting system clock to " diff --git a/drivers/rtc/rtc-sysfs.c b/drivers/rtc/rtc-sysfs.c index 380083ca572..b70e2bb6364 100644 --- a/drivers/rtc/rtc-sysfs.c +++ b/drivers/rtc/rtc-sysfs.c @@ -102,6 +102,12 @@ rtc_sysfs_set_max_user_freq(struct device *dev, struct device_attribute *attr,  	return n;  } +/** + * rtc_sysfs_show_hctosys - indicate if the given RTC set the system time + * + * Returns 1 if the system clock was set by this RTC at the last + * boot or resume event. + */  static ssize_t  rtc_sysfs_show_hctosys(struct device *dev, struct device_attribute *attr,  		char *buf) diff --git a/include/linux/rtc.h b/include/linux/rtc.h index f071b3922c6..20ec4d3bed7 100644 --- a/include/linux/rtc.h +++ b/include/linux/rtc.h @@ -276,7 +276,7 @@ static inline bool is_leap_year(unsigned int year)  	return (!(year % 4) && (year % 100)) || !(year % 400);  } -#ifdef CONFIG_RTC_HCTOSYS +#ifdef CONFIG_RTC_HCTOSYS_DEVICE  extern int rtc_hctosys_ret;  #else  #define rtc_hctosys_ret -ENODEV  |