the epoch by default, or if there's a leading +, seconds in the
                 future, or if there is a leading +=, seconds ahead of the current
                 alarm.
+offset:                 The amount which the rtc clock has been adjusted in firmware.
+                Visible only if the driver supports clock offset adjustment.
+                The unit is parts per billion, i.e. The number of clock ticks
+                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.
 
 IOCTL INTERFACE
 ---------------
 
 }
 static DEVICE_ATTR_RW(wakealarm);
 
+static ssize_t
+offset_show(struct device *dev, struct device_attribute *attr, char *buf)
+{
+       ssize_t retval;
+       long offset;
+
+       retval = rtc_read_offset(to_rtc_device(dev), &offset);
+       if (retval == 0)
+               retval = sprintf(buf, "%ld\n", offset);
+
+       return retval;
+}
+
+static ssize_t
+offset_store(struct device *dev, struct device_attribute *attr,
+            const char *buf, size_t n)
+{
+       ssize_t retval;
+       long offset;
+
+       retval = kstrtol(buf, 10, &offset);
+       if (retval == 0)
+               retval = rtc_set_offset(to_rtc_device(dev), offset);
+
+       return (retval < 0) ? retval : n;
+}
+static DEVICE_ATTR_RW(offset);
+
 static struct attribute *rtc_attrs[] = {
        &dev_attr_name.attr,
        &dev_attr_date.attr,
        &dev_attr_max_user_freq.attr,
        &dev_attr_hctosys.attr,
        &dev_attr_wakealarm.attr,
+       &dev_attr_offset.attr,
        NULL,
 };
 
        struct rtc_device *rtc = to_rtc_device(dev);
        umode_t mode = attr->mode;
 
-       if (attr == &dev_attr_wakealarm.attr)
+       if (attr == &dev_attr_wakealarm.attr) {
                if (!rtc_does_wakealarm(rtc))
                        mode = 0;
+       } else if (attr == &dev_attr_offset.attr) {
+               if (!rtc->ops->set_offset)
+                       mode = 0;
+       }
 
        return mode;
 }