summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRussell King <rmk+kernel@armlinux.org.uk>2017-09-23 10:30:24 +0100
committerRussell King (Oracle) <rmk+kernel@armlinux.org.uk>2022-05-23 16:41:06 +0100
commit928fc9db0494c7ae3eee37d25312159ef5891f7d (patch)
tree86fbe6cd7a5532281ecd670941608fa68f9cde37
parent4b0986a3613c92f4ec1bdc7f60ec66fea135991f (diff)
rtc: export RTC setting offset via sysfs
Export the RTC time set offset via sysfs so the value can be read and tweaked as necessary. This is useful when determining the correct setting for a RTC, as it eliminates the need to rebuild/install/reboot from the test cycle. Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
-rw-r--r--drivers/rtc/sysfs.c26
1 files changed, 26 insertions, 0 deletions
diff --git a/drivers/rtc/sysfs.c b/drivers/rtc/sysfs.c
index 00f1945bcb7e..92b348f742bb 100644
--- a/drivers/rtc/sysfs.c
+++ b/drivers/rtc/sysfs.c
@@ -243,6 +243,31 @@ offset_store(struct device *dev, struct device_attribute *attr,
static DEVICE_ATTR_RW(offset);
static ssize_t
+set_offset_nsec_show(struct device *dev, struct device_attribute *attr,
+ char *buf)
+{
+ return sprintf(buf, "%ld\n", to_rtc_device(dev)->set_offset_nsec);
+}
+
+static ssize_t
+set_offset_nsec_store(struct device *dev, struct device_attribute *attr,
+ const char *buf, size_t n)
+{
+ struct rtc_device *rtc = to_rtc_device(dev);
+ long val;
+ int err;
+
+ err = kstrtol(buf, 0, &val);
+ if (err)
+ return err;
+
+ rtc->set_offset_nsec = val;
+
+ return n;
+}
+static DEVICE_ATTR_RW(set_offset_nsec);
+
+static ssize_t
range_show(struct device *dev, struct device_attribute *attr, char *buf)
{
return sprintf(buf, "[%lld,%llu]\n", to_rtc_device(dev)->range_min,
@@ -259,6 +284,7 @@ static struct attribute *rtc_attrs[] = {
&dev_attr_hctosys.attr,
&dev_attr_wakealarm.attr,
&dev_attr_offset.attr,
+ &dev_attr_set_offset_nsec.attr,
&dev_attr_range.attr,
NULL,
};