summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaisuke Nojiri <dnojiri@chromium.org>2019-03-08 10:34:48 -0800
committerChromeOS Commit Bot <chromeos-commit-bot@chromium.org>2019-03-14 04:27:53 +0000
commitf30f5b0cd0ad64fd2ecbfa3964ef2156d82bf4c9 (patch)
treee693029a728f00e576798ddbba142865cc8de0ee
parent24c26b3f126b26effd2a388c889dfa52f387eea0 (diff)
downloadchrome-ec-f30f5b0cd0ad64fd2ecbfa3964ef2156d82bf4c9.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/c/chromiumos/platform/ec/+/1515720 Reviewed-by: Daisuke Nojiri <dnojiri@chromium.org> Commit-Queue: Daisuke Nojiri <dnojiri@chromium.org> Tested-by: Daisuke Nojiri <dnojiri@chromium.org>
-rw-r--r--power/common.c31
1 files changed, 13 insertions, 18 deletions
diff --git a/power/common.c b/power/common.c
index 252468ace2..bdb40f3522 100644
--- a/power/common.c
+++ b/power/common.c
@@ -159,37 +159,32 @@ 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) {
#ifdef CONFIG_LOW_POWER_PSEUDO_G3
enter_pseudo_g3();
#else
CPRINTS("hibernating");
system_hibernate(0, 0);
#endif
- } 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);