diff options
author | Wai-Hong Tam <waihong@google.com> | 2018-11-29 11:35:11 -0800 |
---|---|---|
committer | chrome-bot <chrome-bot@chromium.org> | 2018-12-10 16:00:37 -0800 |
commit | 02b3b17f3f7650e04611548e6327d2a131310868 (patch) | |
tree | c203bb619a6d020fce975ec63e05c3d9a427d903 /power | |
parent | 524201e4a83b17b51bdf68669f95b736a2b728c6 (diff) | |
download | chrome-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>
Diffstat (limited to 'power')
-rw-r--r-- | power/sdm845.c | 39 |
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) { |