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>
        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.
                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