[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <20120826021931.GA20620@spacedout.fries.net>
Date: Sat, 25 Aug 2012 21:19:31 -0500
From: David Fries <david@...es.net>
To: linux-kernel@...r.kernel.org, rtc-linux@...glegroups.com
Cc: Matthew Garrett <mjg@...hat.com>,
Alessandro Zummo <a.zummo@...ertech.it>,
Uwe Kleine-König
<u.kleine-koenig@...gutronix.de>,
Andrew Morton <akpm@...ux-foundation.org>
Subject: [PATCH] rtc_sysfs_show_hctosys 0 if resume failed
The original rtc_sysfs_show_hctosys returnd 1 if this device was the
CONFIG_RTC_HCTOSYS_DEVICE device, a later patch checked
rtc_hctosys_ret from boot, this verifies boot do_settimeofday
succeeded, and sets rtc_hctosys_ret in resume to indicate when
adjusting the clock from resume fails.
This uses only CONFIG_RTC_HCTOSYS_DEVICE for conditional compilation
instead of it and CONFIG_RTC_HCTOSYS. rtc_hctosys_ret was moved to
class.c so rtc_hctosys can be removed with just a Kconfig change if
boot time setting isn't desired.
Signed-off-by: David Fries <David@...es.net>
Cc: Matthew Garrett <mjg@...hat.com>
Cc: Alessandro Zummo <a.zummo@...ertech.it>
Cc: Uwe Kleine-König <u.kleine-koenig@...gutronix.de>
Cc: Andrew Morton <akpm@...ux-foundation.org>
---
drivers/rtc/class.c | 5 ++++-
drivers/rtc/hctosys.c | 4 +---
drivers/rtc/rtc-sysfs.c | 6 ++++++
include/linux/rtc.h | 2 +-
4 files changed, 12 insertions(+), 5 deletions(-)
diff --git a/drivers/rtc/class.c b/drivers/rtc/class.c
index dc4c274..298f69a 100644
--- a/drivers/rtc/class.c
+++ b/drivers/rtc/class.c
@@ -39,7 +39,8 @@ static void rtc_device_release(struct device *dev)
*/
static struct timespec old_rtc, old_system, old_delta;
-
+/* Result of the last RTC to system clock attempt. */
+int rtc_hctosys_ret = -ENODEV;
static int rtc_suspend(struct device *dev, pm_message_t mesg)
{
@@ -84,6 +85,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 +119,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 bc90b09..4aa60d7 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 380083c..b70e2bb 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 f071b39..20ec4d3 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
--
1.7.2.5
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists