diff options
author | =?UTF-8?q?Arve=20Hj=C3=B8nnev=C3=A5g?= <arve@android.com> | 2011-12-02 14:02:25 +0800 |
---|---|---|
committer | John Stultz <john.stultz@linaro.org> | 2012-02-14 14:29:59 -0800 |
commit | 350af483eb2633285ce897987e2cec4f71c4b866 (patch) | |
tree | d15bcd95a55b54c8536b95a0da6cf96e2e3f215f /include | |
parent | e203c65394fa8355e24d1201a120e4473c69cbab (diff) |
rtc: alarm: Add in-kernel alarm interface
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Drivers can now create alarms that will use an hrtimer while the
system is running and the rtc to wake up from suspend.
Signed-off-by: Arve Hjønnevåg <arve@android.com>
Diffstat (limited to 'include')
-rw-r--r-- | include/linux/android_alarm.h | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/include/linux/android_alarm.h b/include/linux/android_alarm.h index d0cafd63719..f8f14e793db 100644 --- a/include/linux/android_alarm.h +++ b/include/linux/android_alarm.h @@ -33,6 +33,50 @@ enum android_alarm_type { /* ANDROID_ALARM_TIME_CHANGE = 16 */ }; +#ifdef __KERNEL__ + +#include <linux/ktime.h> +#include <linux/rbtree.h> + +/* + * The alarm interface is similar to the hrtimer interface but adds support + * for wakeup from suspend. It also adds an elapsed realtime clock that can + * be used for periodic timers that need to keep runing while the system is + * suspended and not be disrupted when the wall time is set. + */ + +/** + * struct alarm - the basic alarm structure + * @node: red black tree node for time ordered insertion + * @type: alarm type. rtc/elapsed-realtime/systemtime, wakeup/non-wakeup. + * @softexpires: the absolute earliest expiry time of the alarm. + * @expires: the absolute expiry time. + * @function: alarm expiry callback function + * + * The alarm structure must be initialized by alarm_init() + * + */ + +struct alarm { + struct rb_node node; + enum android_alarm_type type; + ktime_t softexpires; + ktime_t expires; + void (*function)(struct alarm *); +}; + +void alarm_init(struct alarm *alarm, + enum android_alarm_type type, void (*function)(struct alarm *)); +void alarm_start_range(struct alarm *alarm, ktime_t start, ktime_t end); +int alarm_try_to_cancel(struct alarm *alarm); +int alarm_cancel(struct alarm *alarm); +ktime_t alarm_get_elapsed_realtime(void); + +/* set rtc while preserving elapsed realtime */ +int alarm_set_rtc(const struct timespec ts); + +#endif + enum android_alarm_return_flags { ANDROID_ALARM_RTC_WAKEUP_MASK = 1U << ANDROID_ALARM_RTC_WAKEUP, ANDROID_ALARM_RTC_MASK = 1U << ANDROID_ALARM_RTC, |