summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRandall Spangler <rspangler@chromium.org>2013-08-08 14:38:58 -0700
committerRandall Spangler <rspangler@chromium.org>2013-08-09 17:50:42 -0700
commit4c23bf103a3cd78b96e19f469c956b3e89c8624d (patch)
tree5caa5163aca0ff90f292c40645fb1d3f3972c2ab
parent9f8c3d7323239d82140633374971d9b143bc5ca7 (diff)
downloadchrome-ec-4c23bf103a3cd78b96e19f469c956b3e89c8624d.tar.gz
Fix leaving keyboard scanning disabled on brief power button press
If the power button is pressed for a shorter period than the debounce timeout, then the debounced state never changes. This was causing the power button state machine to disable scanning (in the interrupt handler) but never re-enable it (in the deferred handler). Easy fix; just re-enable based on whether the current state is released, not whether the debounced state is transitioning to released. BUG=chrome-os-partner:21772 BRANCH=all (falco, pit, etc.) TEST=type on console. briefly flick power button. type more; should work. Orig-Change-Id: I9723a6aa10f122fcee62702b85ce7981b1c8103a Signed-off-by: Randall Spangler <rspangler@chromium.org> Reviewed-on: https://gerrit.chromium.org/gerrit/65238 Reviewed-by: Duncan Laurie <dlaurie@chromium.org> (cherry picked from commit ffed16cae4c34a4326eead22af690ff101b3780d) Change-Id: Ifa169162df54fba8bb965029567a3d467413b5cb Reviewed-on: https://gerrit.chromium.org/gerrit/65424 Commit-Queue: Randall Spangler <rspangler@chromium.org> Reviewed-by: Randall Spangler <rspangler@chromium.org> Tested-by: Randall Spangler <rspangler@chromium.org>
-rw-r--r--common/power_button.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/common/power_button.c b/common/power_button.c
index c26fb8d5d4..bbbe205ba6 100644
--- a/common/power_button.c
+++ b/common/power_button.c
@@ -67,6 +67,10 @@ static void power_button_change_deferred(void)
{
const int new_pressed = raw_power_button_pressed();
+ /* Re-enable keyboard scanning if power button is no longer pressed */
+ if (!new_pressed)
+ keyboard_scan_enable(1);
+
/* If power button hasn't changed state, nothing to do */
if (new_pressed == debounced_power_pressed)
return;
@@ -75,10 +79,6 @@ static void power_button_change_deferred(void)
CPRINTF("[%T power button %s]\n", new_pressed ? "pressed" : "released");
- /* Re-enable keyboard scanning if power button is no longer pressed */
- if (!new_pressed)
- keyboard_scan_enable(1);
-
/* Call hooks */
hook_notify(HOOK_POWER_BUTTON_CHANGE);