diff options
author | Daisuke Nojiri <dnojiri@chromium.org> | 2019-03-08 10:34:48 -0800 |
---|---|---|
committer | chrome-bot <chrome-bot@chromium.org> | 2019-03-12 07:16:04 -0700 |
commit | 2e1ab32b8e5e28032dd397d9fbf06acbe19a65de (patch) | |
tree | 7bdd2d24491008c7d8b6def6f6a6bac402ab7d4a /power/common.c | |
parent | 60efadb3772a4990a31f5b70ad0a65a4aceda558 (diff) | |
download | chrome-ec-2e1ab32b8e5e28032dd397d9fbf06acbe19a65de.tar.gz |
power: Refactor POWER_G3 state logic
This patch refactors the logic for POWER_G3 state.
This patch additionally makes the power task sleep instead of break
and return from power_common_state if system_hibernate returns,
which shouldn't happen. Other than that, there is no functionality
change.
Signed-off-by: Daisuke Nojiri <dnojiri@chromium.org>
BUG=none
BRANCH=nami,strago,coral
TEST=Verify Vayne hibernates when it's left idle in s5 for 60 mins.
Change-Id: Ib4a0e9a0e26fdc867395950e3f77bb06e6977f8b
Reviewed-on: https://chromium-review.googlesource.com/1512622
Commit-Ready: ChromeOS CL Exonerator Bot <chromiumos-cl-exonerator@appspot.gserviceaccount.com>
Tested-by: Daisuke Nojiri <dnojiri@chromium.org>
Reviewed-by: Aseda Aboagye <aaboagye@chromium.org>
Reviewed-by: Jett Rink <jettrink@chromium.org>
Diffstat (limited to 'power/common.c')
-rw-r--r-- | power/common.c | 31 |
1 files changed, 13 insertions, 18 deletions
diff --git a/power/common.c b/power/common.c index 8a2770e03b..c548425296 100644 --- a/power/common.c +++ b/power/common.c @@ -298,33 +298,28 @@ static enum power_state power_common_state(enum power_state state) in_want = 0; #ifdef CONFIG_HIBERNATE - if (extpower_is_present()) - task_wait_event(-1); - else { - uint64_t target_time; - uint64_t time_now = get_time().val; + { + uint64_t target, now, wait; uint32_t delay = hibernate_delay; + if (extpower_is_present()) { + task_wait_event(-1); + break; + } + + now = get_time().val; #ifdef CONFIG_HIBERNATE_BATT_PCT if (charge_get_percent() <= CONFIG_HIBERNATE_BATT_PCT && CONFIG_HIBERNATE_BATT_SEC < delay) delay = CONFIG_HIBERNATE_BATT_SEC; #endif - target_time = last_shutdown_time + delay * 1000000ull; - if (time_now > target_time) { - /* - * Time's up. Hibernate until wake pin - * asserted. - */ + target = last_shutdown_time + delay * SECOND; + if (now > target) { CPRINTS("hibernating"); system_hibernate(0, 0); - } else { - uint64_t wait = target_time - time_now; - if (wait > TASK_MAX_WAIT_US) - wait = TASK_MAX_WAIT_US; - - /* Wait for a message */ - task_wait_event(wait); } + + wait = MIN(target - now, TASK_MAX_WAIT_US); + task_wait_event(wait); } #else /* !CONFIG_HIBERNATE */ task_wait_event(-1); |