diff options
author | Daisuke Nojiri <dnojiri@chromium.org> | 2017-01-04 09:36:12 -0800 |
---|---|---|
committer | chrome-bot <chrome-bot@chromium.org> | 2017-05-03 19:40:24 -0700 |
commit | 4444702e858a8fa3d51c948f509450e136a9482a (patch) | |
tree | 196329247f4cdcc8f6c80cd899e539978ba2a6d4 | |
parent | 993e6f24fa201e135670457b8c3affe356c951f2 (diff) | |
download | chrome-ec-4444702e858a8fa3d51c948f509450e136a9482a.tar.gz |
keyboard: Clear typematic when disabling keyboard
This patch clears the typematic buffer when disabling keyboard scan.
When the device goes to tablet mode with a key being pressed, this
should prevent keyboard_protocol_task from sending scan codes to the
host.
BUG=b:35585725
BRANCH=none
TEST=make buildall. Tested on Electro.
Change-Id: I73e9d2948b472458814967307412aebeb410ff2e
Signed-off-by: Daisuke Nojiri <dnojiri@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/425075
Reviewed-by: Aaron Durbin <adurbin@chromium.org>
-rw-r--r-- | common/keyboard_8042.c | 2 | ||||
-rw-r--r-- | common/keyboard_mkbp.c | 3 | ||||
-rw-r--r-- | common/keyboard_scan.c | 6 | ||||
-rw-r--r-- | include/keyboard_scan.h | 5 |
4 files changed, 13 insertions, 3 deletions
diff --git a/common/keyboard_8042.c b/common/keyboard_8042.c index 931583ecfd..834fcf866d 100644 --- a/common/keyboard_8042.c +++ b/common/keyboard_8042.c @@ -382,7 +382,7 @@ static void set_typematic_key(const uint8_t *scan_code, int32_t len) typematic_len = len; } -static void clear_typematic_key(void) +void clear_typematic_key(void) { typematic_len = 0; } diff --git a/common/keyboard_mkbp.c b/common/keyboard_mkbp.c index 204268e76f..e6d06c30fb 100644 --- a/common/keyboard_mkbp.c +++ b/common/keyboard_mkbp.c @@ -356,6 +356,9 @@ void keyboard_send_battery_key(void) keyboard_fifo_add(state); } +void clear_typematic_key(void) +{ } + /*****************************************************************************/ /* Host commands */ static uint32_t get_supported_buttons(void) diff --git a/common/keyboard_scan.c b/common/keyboard_scan.c index 876d06c9fc..fa8ce3d98f 100644 --- a/common/keyboard_scan.c +++ b/common/keyboard_scan.c @@ -122,10 +122,12 @@ static int keyboard_scan_is_enabled(void) void keyboard_scan_enable(int enable, enum kb_scan_disable_masks mask) { /* Access atomically */ - if (enable) + if (enable) { atomic_clear((uint32_t *)&disable_scanning_mask, mask); - else + } else { atomic_or((uint32_t *)&disable_scanning_mask, mask); + clear_typematic_key(); + } /* Let the task figure things out */ task_wake(TASK_ID_KEYSCAN); diff --git a/include/keyboard_scan.h b/include/keyboard_scan.h index faba74ffe1..94457dd16d 100644 --- a/include/keyboard_scan.h +++ b/include/keyboard_scan.h @@ -98,6 +98,11 @@ enum kb_scan_disable_masks { * @param mask Disable reasons from kb_scan_disable_masks */ void keyboard_scan_enable(int enable, enum kb_scan_disable_masks mask); + +/** + * Clears typematic key + */ +void clear_typematic_key(void); #else static inline void keyboard_scan_enable(int enable, enum kb_scan_disable_masks mask) { } |