summaryrefslogtreecommitdiffstats
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-04-02 10:47:54 +0100
commit84384c000229b4338dab2ebc6671233db3e489f5 (patch)
tree81c8f01d3550d471b2fcc3c68649b640c22b9a09
parentf443e374ae131c168a065ea1748feac6b2e76613 (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,
};