diff options
Diffstat (limited to 'drivers/rtc/rtc-sysfs.c')
-rw-r--r-- | drivers/rtc/rtc-sysfs.c | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/drivers/rtc/rtc-sysfs.c b/drivers/rtc/rtc-sysfs.c index 4d27ccc4fc06..2531ce4c9db0 100644 --- a/drivers/rtc/rtc-sysfs.c +++ b/drivers/rtc/rtc-sysfs.c | |||
@@ -145,6 +145,8 @@ rtc_sysfs_set_wakealarm(struct device *dev, struct device_attribute *attr, | |||
145 | unsigned long now, alarm; | 145 | unsigned long now, alarm; |
146 | struct rtc_wkalrm alm; | 146 | struct rtc_wkalrm alm; |
147 | struct rtc_device *rtc = to_rtc_device(dev); | 147 | struct rtc_device *rtc = to_rtc_device(dev); |
148 | char *buf_ptr; | ||
149 | int adjust = 0; | ||
148 | 150 | ||
149 | /* Only request alarms that trigger in the future. Disable them | 151 | /* Only request alarms that trigger in the future. Disable them |
150 | * by writing another time, e.g. 0 meaning Jan 1 1970 UTC. | 152 | * by writing another time, e.g. 0 meaning Jan 1 1970 UTC. |
@@ -154,7 +156,15 @@ rtc_sysfs_set_wakealarm(struct device *dev, struct device_attribute *attr, | |||
154 | return retval; | 156 | return retval; |
155 | rtc_tm_to_time(&alm.time, &now); | 157 | rtc_tm_to_time(&alm.time, &now); |
156 | 158 | ||
157 | alarm = simple_strtoul(buf, NULL, 0); | 159 | buf_ptr = (char *)buf; |
160 | if (*buf_ptr == '+') { | ||
161 | buf_ptr++; | ||
162 | adjust = 1; | ||
163 | } | ||
164 | alarm = simple_strtoul(buf_ptr, NULL, 0); | ||
165 | if (adjust) { | ||
166 | alarm += now; | ||
167 | } | ||
158 | if (alarm > now) { | 168 | if (alarm > now) { |
159 | /* Avoid accidentally clobbering active alarms; we can't | 169 | /* Avoid accidentally clobbering active alarms; we can't |
160 | * entirely prevent that here, without even the minimal | 170 | * entirely prevent that here, without even the minimal |