diff options
author | Randall Spangler <rspangler@chromium.org> | 2012-09-27 15:28:06 -0700 |
---|---|---|
committer | Gerrit <chrome-bot@google.com> | 2012-09-28 11:31:16 -0700 |
commit | f847d3374003d1b2fb3ff832068005b233121e19 (patch) | |
tree | ff1c64964390dc8c8395d7a4f3948fc95968331e | |
parent | 194ad20c5b327e2c7690dc0f082883703158eae5 (diff) | |
download | chrome-ec-f847d3374003d1b2fb3ff832068005b233121e19.tar.gz |
Re-enable keyboard scanning at end of debounce interval
This fixes a problem where a very short power button press would
disable scanning, but not debounce to down so we'd never have a
debounced release to re-enable scanning.
BUG=chrome-os-partner:14678
BRANCH=link
TEST=tap power button very quickly, then see if keyboard still works
(may need to repeat that a few times to be sure it always works)
Change-Id: I3dd3d3f2d892f309a507463d7ad6accf32df30c4
Signed-off-by: Randall Spangler <rspangler@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/34225
Reviewed-by: Yung-Chieh Lo <yjlou@chromium.org>
-rw-r--r-- | chip/lm4/power_button.c | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/chip/lm4/power_button.c b/chip/lm4/power_button.c index db96cc1625..3407d7e701 100644 --- a/chip/lm4/power_button.c +++ b/chip/lm4/power_button.c @@ -194,7 +194,6 @@ static void power_button_released(uint64_t tnow) tnext_state = tnow; *memmap_switches &= ~EC_SWITCH_POWER_BUTTON_PRESSED; keyboard_set_power_button(0); - keyboard_enable_scanning(1); } @@ -262,7 +261,6 @@ static void power_button_changed(uint64_t tnow) * told the PCH the power button was released. */ CPRINTF("[%T PB ignoring release]\n"); pwrbtn_state = PWRBTN_STATE_IDLE; - keyboard_enable_scanning(1); return; } @@ -420,12 +418,10 @@ static void state_machine(uint64_t tnow) * recovery combination doesn't cause the chipset to shut back * down. */ set_pwrbtn_to_pch(1); - if (get_power_button_pressed()) { + if (get_power_button_pressed()) pwrbtn_state = PWRBTN_STATE_EAT_RELEASE; - } else { + else pwrbtn_state = PWRBTN_STATE_IDLE; - keyboard_enable_scanning(1); - } break; case PWRBTN_STATE_WAS_OFF: /* Done stretching initial power button signal, so show the @@ -464,6 +460,14 @@ void power_button_task(void) /* Handle debounce timeouts for power button and lid switch */ if (tdebounce_pwr && t >= tdebounce_pwr) { tdebounce_pwr = 0; + + /* + * Re-enable keyboard scanning if the power button is + * no longer pressed. + */ + if (!get_power_button_pressed()) + keyboard_enable_scanning(1); + if (get_power_button_pressed() != debounced_power_pressed) power_button_changed(t); |