diff options
author | Daisuke Nojiri <dnojiri@chromium.org> | 2019-03-08 10:38:03 -0800 |
---|---|---|
committer | chrome-bot <chrome-bot@chromium.org> | 2019-03-28 19:04:16 -0700 |
commit | a029c7a27f3bd1a1066db9c167c6166688fe4ef3 (patch) | |
tree | c619eee562bbc8af7cddeda7b602e41a8b086ded /board/samus | |
parent | 9c7428ea97fb6606979607457a86a1ebf8ec9b19 (diff) | |
download | chrome-ec-a029c7a27f3bd1a1066db9c167c6166688fe4ef3.tar.gz |
power: Allow board to take custom action on G3 timer expiration
This patch introduces board_system_is_idle callback function. It's
called when system is in G3. A board can customize its action taken
when system is idle in G3 using battery thresholds, expiration timer,
etc. determined at runtime.
Signed-off-by: Daisuke Nojiri <dnojiri@chromium.org>
BUG=none
BRANCH=nami,strago,coral
TEST=Verify Vayne cut off battery on G3 idle expiration while other
Nami's hibernate.
Change-Id: I6118a074ac7d844b99d9c0f3eb638b72d5894008
Reviewed-on: https://chromium-review.googlesource.com/1512623
Commit-Ready: Daisuke Nojiri <dnojiri@chromium.org>
Tested-by: Daisuke Nojiri <dnojiri@chromium.org>
Reviewed-by: Aseda Aboagye <aaboagye@chromium.org>
Reviewed-by: Daisuke Nojiri <dnojiri@chromium.org>
Diffstat (limited to 'board/samus')
-rw-r--r-- | board/samus/board.c | 21 | ||||
-rw-r--r-- | board/samus/board.h | 2 |
2 files changed, 21 insertions, 2 deletions
diff --git a/board/samus/board.c b/board/samus/board.c index 9f5bcf743a..6c948459a5 100644 --- a/board/samus/board.c +++ b/board/samus/board.c @@ -461,3 +461,24 @@ enum ec_error_list keyboard_scancode_callback(uint16_t *make_code, } return EC_SUCCESS; } + +/* + * Use to define going in to hibernate early if low on battery. + * HIBERNATE_BATT_PCT specifies the low battery threshold + * for going into hibernate early, and HIBERNATE_BATT_SEC defines + * the minimum amount of time to stay in G3 before checking for low + * battery hibernate. + */ +#define HIBERNATE_BATT_PCT 10 +#define HIBERNATE_BATT_SEC (3600 * 24) + +enum critical_shutdown board_system_is_idle(uint64_t last_shutdown_time, + uint64_t *target, uint64_t now) +{ + if (charge_get_percent() <= HIBERNATE_BATT_PCT) { + uint64_t t = last_shutdown_time + HIBERNATE_BATT_SEC * SEC_UL; + *target = MIN(*target, t); + } + return now > *target ? + CRITICAL_SHUTDOWN_HIBERNATE : CRITICAL_SHUTDOWN_IGNORE; +} diff --git a/board/samus/board.h b/board/samus/board.h index ac76ff0d4c..2bfb1574c8 100644 --- a/board/samus/board.h +++ b/board/samus/board.h @@ -64,8 +64,6 @@ #define CONFIG_GESTURE_SAMPLING_INTERVAL_MS 5 #undef CONFIG_HIBERNATE_DELAY_SEC #define CONFIG_HIBERNATE_DELAY_SEC (3600 * 24 * 7) -#define CONFIG_HIBERNATE_BATT_PCT 10 -#define CONFIG_HIBERNATE_BATT_SEC (3600 * 24) #define CONFIG_HOSTCMD_PD #define CONFIG_HOSTCMD_PD_CHG_CTRL #define CONFIG_HOSTCMD_PD_PANIC |