summaryrefslogtreecommitdiff
path: root/power
diff options
context:
space:
mode:
authorDaisuke Nojiri <dnojiri@chromium.org>2019-03-08 10:34:48 -0800
committerchrome-bot <chrome-bot@chromium.org>2019-03-12 07:16:04 -0700
commit2e1ab32b8e5e28032dd397d9fbf06acbe19a65de (patch)
tree7bdd2d24491008c7d8b6def6f6a6bac402ab7d4a /power
parent60efadb3772a4990a31f5b70ad0a65a4aceda558 (diff)
downloadchrome-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')
-rw-r--r--power/common.c31
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);