summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWai-Hong Tam <waihong@google.com>2020-03-02 14:36:51 -0800
committerCommit Bot <commit-bot@chromium.org>2020-03-10 03:09:24 +0000
commitb56e4bd42417aabe3d1a487a66aab78bcb9bc25e (patch)
tree2e337a278c17e58bd46c0020171f04d2554ca03c
parentb3742671427a7ac7a06920a76feab3d947273d2d (diff)
downloadchrome-ec-b56e4bd42417aabe3d1a487a66aab78bcb9bc25e.tar.gz
sc7180, sdm845: Clear invalid request on the power-on/off check
The power-on, power-off, and reset request is stored in the same flag. When a user calls 'apshutdown' in S5, the request is saved. When another event triggers the power-on sequence, like power button, the flag was still carried forward and then request to shutdown. The similar problem also happens on power-off. Should clear invalid request on the check to avoid this issue. BRANCH=None BUG=b:150481751 TEST=Manually tested the scenario: dut-control power_state:on dut-control power_state:off dut-control power_state:off dut-control power_state:on Change-Id: Ica6033668845a839f01900e1c98b6c92e0a12bcb Signed-off-by: Wai-Hong Tam <waihong@google.com> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2083443 Reviewed-by: Nicolas Boichat <drinkcat@chromium.org>
-rw-r--r--power/sc7180.c8
-rw-r--r--power/sdm845.c8
2 files changed, 10 insertions, 6 deletions
diff --git a/power/sc7180.c b/power/sc7180.c
index 7919218492..046c88d7b0 100644
--- a/power/sc7180.c
+++ b/power/sc7180.c
@@ -560,12 +560,12 @@ static uint8_t check_for_power_on_event(void)
if (power_request == POWER_REQ_ON) {
power_request = POWER_REQ_NONE;
return POWER_ON_BY_POWER_REQ_ON;
- }
-
- if (power_request == POWER_REQ_RESET) {
+ } else if (power_request == POWER_REQ_RESET) {
power_request = POWER_REQ_NONE;
return POWER_ON_BY_POWER_REQ_RESET;
}
+ /* Clear invalid request */
+ power_request = POWER_REQ_NONE;
/* power on requested at EC startup for recovery */
if (auto_power_on) {
@@ -609,6 +609,8 @@ static uint8_t check_for_power_off_event(void)
*/
return POWER_OFF_BY_POWER_REQ_RESET;
}
+ /* Clear invalid request */
+ power_request = POWER_REQ_NONE;
/*
* Check for power button press.
diff --git a/power/sdm845.c b/power/sdm845.c
index 85bfa33438..5add75e95a 100644
--- a/power/sdm845.c
+++ b/power/sdm845.c
@@ -561,12 +561,12 @@ static uint8_t check_for_power_on_event(void)
if (power_request == POWER_REQ_ON) {
power_request = POWER_REQ_NONE;
return POWER_ON_BY_POWER_REQ_ON;
- }
-
- if (power_request == POWER_REQ_RESET) {
+ } else if (power_request == POWER_REQ_RESET) {
power_request = POWER_REQ_NONE;
return POWER_ON_BY_POWER_REQ_RESET;
}
+ /* Clear invalid request */
+ power_request = POWER_REQ_NONE;
/* check if system is already ON */
if (power_get_signals() & IN_POWER_GOOD) {
@@ -629,6 +629,8 @@ static uint8_t check_for_power_off_event(void)
*/
return POWER_OFF_BY_POWER_REQ_RESET;
}
+ /* Clear invalid request */
+ power_request = POWER_REQ_NONE;
/*
* Check for power button press.