From badbd86df2a00fc8aeab05aa4059125fb0d9d575 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arve=20Hj=C3=B8nnev=C3=A5g?= Date: Fri, 26 Sep 2008 22:10:56 -0700 Subject: [PATCH] PM: Add wake lock api. (cherry picked from commit ec81142a98488552276a425d6363533368d02025) Conflicts: include/linux/wakelock.h Change-Id: I185d58274d2b1d69447981b669f5921c74f73a00 --- include/linux/wakelock.h | 87 +++++++++++++++++++++++++--------------- 1 file changed, 55 insertions(+), 32 deletions(-) diff --git a/include/linux/wakelock.h b/include/linux/wakelock.h index f4a698a22880..5b2d0f348ac6 100644 --- a/include/linux/wakelock.h +++ b/include/linux/wakelock.h @@ -1,6 +1,6 @@ /* include/linux/wakelock.h * - * Copyright (C) 2007-2012 Google, Inc. + * Copyright (C) 2007-2008 Google, Inc. * * This software is licensed under the terms of the GNU General Public * License version 2, as published by the Free Software Foundation, and @@ -16,12 +16,14 @@ #ifndef _LINUX_WAKELOCK_H #define _LINUX_WAKELOCK_H +#include #include -#include /* A wake_lock prevents the system from entering suspend or other low power * states when active. If the type is set to WAKE_LOCK_SUSPEND, the wake_lock - * prevents a full system suspend. + * prevents a full system suspend. If the type is WAKE_LOCK_IDLE, low power + * states that cause large interrupt latencies or that disable a set of + * interrupts will not entered from idle until the wake_locks are released. */ enum { @@ -30,38 +32,59 @@ enum { }; struct wake_lock { - struct wakeup_source ws; +#ifdef CONFIG_HAS_WAKELOCK + struct list_head link; + int flags; + const char *name; + unsigned long expires; +#ifdef CONFIG_WAKELOCK_STAT + struct { + int count; + int expire_count; + int wakeup_count; + ktime_t total_time; + ktime_t prevent_suspend_time; + ktime_t max_time; + ktime_t last_time; + } stat; +#endif +#endif }; +#ifdef CONFIG_HAS_WAKELOCK + +void wake_lock_init(struct wake_lock *lock, int type, const char *name); +void wake_lock_destroy(struct wake_lock *lock); +void wake_lock(struct wake_lock *lock); +void wake_lock_timeout(struct wake_lock *lock, long timeout); +void wake_unlock(struct wake_lock *lock); + +/* wake_lock_active returns a non-zero value if the wake_lock is currently + * locked. If the wake_lock has a timeout, it does not check the timeout + * but if the timeout had aready been checked it will return 0. + */ +int wake_lock_active(struct wake_lock *lock); + +/* has_wake_lock returns 0 if no wake locks of the specified type are active, + * and non-zero if one or more wake locks are held. Specifically it returns + * -1 if one or more wake locks with no timeout are active or the + * number of jiffies until all active wake locks time out. + */ +long has_wake_lock(int type); + +#else + static inline void wake_lock_init(struct wake_lock *lock, int type, - const char *name) -{ - wakeup_source_init(&lock->ws, name); -} + const char *name) {} +static inline void wake_lock_destroy(struct wake_lock *lock) {} +static inline void wake_lock(struct wake_lock *lock) {} +static inline void wake_lock_timeout(struct wake_lock *lock, long timeout) {} +static inline void wake_unlock(struct wake_lock *lock) {} -static inline void wake_lock_destroy(struct wake_lock *lock) -{ - wakeup_source_trash(&lock->ws); -} - -static inline void wake_lock(struct wake_lock *lock) -{ - __pm_stay_awake(&lock->ws); -} - -static inline void wake_lock_timeout(struct wake_lock *lock, long timeout) -{ - __pm_wakeup_event(&lock->ws, jiffies_to_msecs(timeout)); -} - -static inline void wake_unlock(struct wake_lock *lock) -{ - __pm_relax(&lock->ws); -} - -static inline int wake_lock_active(struct wake_lock *lock) -{ - return lock->ws.active; -} +static inline int wake_lock_active(struct wake_lock *lock) { return 0; } +static inline long has_wake_lock(int type) { return 0; } #endif + +#endif +