summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWai-Hong Tam <waihong@google.com>2018-11-29 11:35:11 -0800
committerchrome-bot <chrome-bot@chromium.org>2018-12-10 16:00:37 -0800
commit02b3b17f3f7650e04611548e6327d2a131310868 (patch)
treec203bb619a6d020fce975ec63e05c3d9a427d903
parent524201e4a83b17b51bdf68669f95b736a2b728c6 (diff)
downloadchrome-ec-02b3b17f3f7650e04611548e6327d2a131310868.tar.gz
cheza: Wait power button release before actually boot AP
The power button hold may be a recovery boot trigger, i.e. long holding the key combination: power button + volume up + volume down. We don't want AP up during the long-hold. BRANCH=none BUG=b:119628964 TEST=Holding Power button 8s to shutdown; holding the combo Power + VolUp + VolDn and saw: * power state machine staying at S5S3 (AP still down) * after 8s, H1 issuing EC reboot and EC waiting VolDn release * releasing VolDn and EC boot continue * power state machine staying at S5S3 (AP still down) * releasing VolUp and Power button to boot into S0 Change-Id: I637fe54ad9e51050df5d950647c1f00c6da72c52 Signed-off-by: Wai-Hong Tam <waihong@google.com> Reviewed-on: https://chromium-review.googlesource.com/1355369 Reviewed-by: Stephen Boyd <swboyd@chromium.org>
-rw-r--r--power/sdm845.c39
1 files changed, 17 insertions, 22 deletions
diff --git a/power/sdm845.c b/power/sdm845.c
index 837a54875d..eb70c82113 100644
--- a/power/sdm845.c
+++ b/power/sdm845.c
@@ -746,30 +746,25 @@ enum power_state power_handle_state(enum power_state state)
break;
case POWER_S5S3:
+ /*
+ * Wait for power button release before actually boot AP.
+ * It may be a long-hold power button with volume buttons
+ * to trigger the recovery button. We don't want AP up
+ * during the long-hold.
+ */
+ power_button_wait_for_release(-1);
+
power_on();
- if (power_wait_signals(IN_POWER_GOOD) == EC_SUCCESS) {
- CPRINTS("POWER_GOOD seen");
- if (power_button_wait_for_release(
- DELAY_SHUTDOWN_ON_POWER_HOLD) ==
- EC_SUCCESS) {
- power_button_was_pressed = 0;
-
- /* Call hooks now that AP is running */
- hook_notify(HOOK_CHIPSET_STARTUP);
-
- return POWER_S3;
- }
- CPRINTS("long-press button, shutdown");
- /*
- * Since the AP may be up already, but the resume
- * hook is not called, return S3S5 to power off
- * AP and wait the release of the power button.
- */
- return POWER_S3S5;
+ if (power_wait_signals(IN_POWER_GOOD) != EC_SUCCESS) {
+ CPRINTS("POWER_GOOD not seen in time");
+ set_system_power(0);
+ return POWER_S5;
}
- CPRINTS("POWER_GOOD not seen in time");
- set_system_power(0);
- return POWER_S5;
+
+ CPRINTS("POWER_GOOD seen");
+ /* Call hooks now that AP is running */
+ hook_notify(HOOK_CHIPSET_STARTUP);
+ return POWER_S3;
case POWER_S3:
if (shutdown_from_s0) {