We have introduced one interface to get the RTC range, so this patch
exports the valid range supported by RTC hardware to userspace.

Signed-off-by: Baolin Wang <baolin.w...@linaro.org>
---
 Documentation/rtc.txt   |    2 ++
 drivers/rtc/rtc-sysfs.c |   30 ++++++++++++++++++++++++++++++
 2 files changed, 32 insertions(+)

diff --git a/Documentation/rtc.txt b/Documentation/rtc.txt
index c0c9774..4fe437b 100644
--- a/Documentation/rtc.txt
+++ b/Documentation/rtc.txt
@@ -164,6 +164,8 @@ offset               The amount which the rtc clock has 
been adjusted in firmware.
                 which are added to or removed from the rtc's base clock per
                 billion ticks. A positive value makes a day pass more slowly,
                 longer, and a negative value makes a day pass more quickly.
+range_max       The maximum time values in seconds supported by RTC hardware.
+range_min       The minimum time values in seconds supported by RTC hardware.
 */nvmem                 The non volatile storage exported as a raw file, as 
described
                 in Documentation/nvmem/nvmem.txt
 ================ ==============================================================
diff --git a/drivers/rtc/rtc-sysfs.c b/drivers/rtc/rtc-sysfs.c
index 92ff2ed..60e1f6c 100644
--- a/drivers/rtc/rtc-sysfs.c
+++ b/drivers/rtc/rtc-sysfs.c
@@ -248,6 +248,34 @@
 }
 static DEVICE_ATTR_RW(offset);
 
+static ssize_t
+range_max_show(struct device *dev, struct device_attribute *attr, char *buf)
+{
+       ssize_t retval;
+       time64_t max_hw_secs, min_hw_secs;
+
+       retval = rtc_read_range(to_rtc_device(dev), &max_hw_secs, &min_hw_secs);
+       if (retval == 0)
+               retval = sprintf(buf, "%lld\n", max_hw_secs);
+
+       return retval;
+}
+static DEVICE_ATTR_RO(range_max);
+
+static ssize_t
+range_min_show(struct device *dev, struct device_attribute *attr, char *buf)
+{
+       ssize_t retval;
+       time64_t max_hw_secs, min_hw_secs;
+
+       retval = rtc_read_range(to_rtc_device(dev), &max_hw_secs, &min_hw_secs);
+       if (retval == 0)
+               retval = sprintf(buf, "%lld\n", min_hw_secs);
+
+       return retval;
+}
+static DEVICE_ATTR_RO(range_min);
+
 static struct attribute *rtc_attrs[] = {
        &dev_attr_name.attr,
        &dev_attr_date.attr,
@@ -257,6 +285,8 @@
        &dev_attr_hctosys.attr,
        &dev_attr_wakealarm.attr,
        &dev_attr_offset.attr,
+       &dev_attr_range_max.attr,
+       &dev_attr_range_min.attr,
        NULL,
 };
 
-- 
1.7.9.5

Reply via email to