summaryrefslogtreecommitdiff
path: root/power
diff options
context:
space:
mode:
authorVincent Palatin <vpalatin@chromium.org>2014-07-10 11:41:14 -0700
committerchrome-internal-fetch <chrome-internal-fetch@google.com>2014-07-29 02:20:54 +0000
commita36a871d12dbb265e33023849ba72e3878125eb3 (patch)
tree6baa2364b1245ecf15a521d0c24ed65f14f06d43 /power
parente9d8a8cfb5d4088c2af806d6bc4261792cff3355 (diff)
downloadchrome-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.c10
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",