rtc: add the support for alarm time relative to current time in sysfs
In current kernel if we want to set the alarm time, the absolute time the seconds relative to 1970-01-01 00:00:00) should be written into /sys/class/rtc/rtc0/wakealarm. It is not convenient. It is more reasonable to add the support for the alarm time relative to current RTC time.(the unit is second) For example: If the RTC is required to generate alarm after 2 minutes, the following will be OK. echo +120 > /sys/class/rtc/rtc0/wakealarm or echo +0x78 > /sys/class/rtc/rtc0/wakealarm Signed-off-by: Zhao Yakui <yakui.zhao@intel.com> Signed-off-by: Zhang Rui <rui.zhang@intel.com> Signed-off-by: David Brownell <dbrownell@users.sourceforge.net> Cc: Alessandro Zummo <a.zummo@towertech.it> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
e2bfe3424b
commit
c116bc2ae5
|
@ -145,6 +145,8 @@ rtc_sysfs_set_wakealarm(struct device *dev, struct device_attribute *attr,
|
|||
unsigned long now, alarm;
|
||||
struct rtc_wkalrm alm;
|
||||
struct rtc_device *rtc = to_rtc_device(dev);
|
||||
char *buf_ptr;
|
||||
int adjust = 0;
|
||||
|
||||
/* Only request alarms that trigger in the future. Disable them
|
||||
* 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,
|
|||
return retval;
|
||||
rtc_tm_to_time(&alm.time, &now);
|
||||
|
||||
alarm = simple_strtoul(buf, NULL, 0);
|
||||
buf_ptr = (char *)buf;
|
||||
if (*buf_ptr == '+') {
|
||||
buf_ptr++;
|
||||
adjust = 1;
|
||||
}
|
||||
alarm = simple_strtoul(buf_ptr, NULL, 0);
|
||||
if (adjust) {
|
||||
alarm += now;
|
||||
}
|
||||
if (alarm > now) {
|
||||
/* Avoid accidentally clobbering active alarms; we can't
|
||||
* entirely prevent that here, without even the minimal
|
||||
|
|
Loading…
Reference in New Issue