diff options
author | Vincent Palatin <vpalatin@chromium.org> | 2014-07-10 11:41:14 -0700 |
---|---|---|
committer | chrome-internal-fetch <chrome-internal-fetch@google.com> | 2014-07-29 02:20:54 +0000 |
commit | a36a871d12dbb265e33023849ba72e3878125eb3 (patch) | |
tree | 6baa2364b1245ecf15a521d0c24ed65f14f06d43 /power | |
parent | e9d8a8cfb5d4088c2af806d6bc4261792cff3355 (diff) | |
download | chrome-ec-a36a871d12dbb265e33023849ba72e3878125eb3.tar.gz |
tegra: Support firmware long-press power off timer
Some PMIC chip (e.g. TPS65913) doesn't support the 8-second long key
press power-off. For this, we have to check the state of the power
button in firmware, and do not assert PMIC_PWRON during the shutdown
sequence to prevent the AP from restarting.
Signed-off-by: Vincent Palatin <vpalatin@chromium.org>
BRANCH=none
BUG=none
TEST=with the next CL, on Ryu, do a long power button key press, and see
the AP powering off and not restarting.
Change-Id: I03f703b4ff6d86edea150dfa32f60d30f1ddffd9
Reviewed-on: https://chromium-review.googlesource.com/207381
Reviewed-by: Alec Berg <alecaberg@chromium.org>
Tested-by: Vic Yang <victoryang@chromium.org>
Commit-Queue: Vic Yang <victoryang@chromium.org>
Diffstat (limited to 'power')
-rw-r--r-- | power/tegra.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/power/tegra.c b/power/tegra.c index a52ee268e6..592127a668 100644 --- a/power/tegra.c +++ b/power/tegra.c @@ -191,13 +191,23 @@ static int check_for_power_off_event(void) now = get_time(); if (pressed) { +#ifndef CONFIG_PMIC_FW_LONG_PRESS_TIMER + /* + * Only assert PMIC_PWRON if PMIC supports long-press + * power off. + */ set_pmic_pwron(1); usleep(PMIC_PWRON_DEBOUNCE_TIME); +#endif if (!power_button_was_pressed) { power_off_deadline.val = now.val + DELAY_FORCE_SHUTDOWN; CPRINTS("power waiting for long press %u", power_off_deadline.le.lo); +#ifdef CONFIG_PMIC_FW_LONG_PRESS_TIMER + /* Ensure we will wake up to check the power key */ + timer_arm(power_off_deadline, TASK_ID_CHIPSET); +#endif } else if (timestamp_expired(power_off_deadline, &now)) { power_off_deadline.val = 0; CPRINTS("power off after long press now=%u, %u", |