diff options
author | Alec Berg <alecaberg@chromium.org> | 2014-03-14 09:27:31 -0700 |
---|---|---|
committer | chrome-internal-fetch <chrome-internal-fetch@google.com> | 2014-03-27 18:44:14 +0000 |
commit | 242f1957714153075e2eb9d5541923d28f05ec7c (patch) | |
tree | 72e26d49e5e8c063a8f8df864d10f98bc741016c /common/keyboard_scan.c | |
parent | 6d745d8fd3016c6dc1b17ad1cd9b21ce65671a5a (diff) | |
download | chrome-ec-242f1957714153075e2eb9d5541923d28f05ec7c.tar.gz |
rambi: glimmer: Disable key scanning in suspend when lid is open
Added ability to disable the keyboard to wake from suspend when the lid
is outside a certain angle range. This has been added to glimmer by
defining CONFIG_LID_ANGLE_KEY_SCAN in its board.h.
Also modified the lid angle calculation to include a reliability
flag which can be used to tell when the hinge aligns too closely
with gravity and the lid angle value is unreliable.
BUG=none
BRANCH=rambi
TEST=Tested on a glimmer:
In S3, verified that when the lid is open past ~180 deg, the keyboard
does not wake the machine. Also verified that if you align hinge with
gravity, the keyboard enabled/disabled status remains the same (since
we can't actually trust the lid angle value).
Change-Id: I45b2c7c3c4bbcae61d3a0f8b5baa461ab8dabfb0
Original-Change-Id: If1a1592d259902d38941936961854b81b3a75b95
Signed-off-by: Alec Berg <alecaberg@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/190061
Reviewed-on: https://chromium-review.googlesource.com/191612
Reviewed-by: Randall Spangler <rspangler@chromium.org>
Diffstat (limited to 'common/keyboard_scan.c')
-rw-r--r-- | common/keyboard_scan.c | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/common/keyboard_scan.c b/common/keyboard_scan.c index 8af50de209..da918bbc8b 100644 --- a/common/keyboard_scan.c +++ b/common/keyboard_scan.c @@ -93,7 +93,7 @@ static int enable_scanning = 1; /* Must init to 1 for scanning at boot */ /* Constantly incrementing counter of the number of times we polled */ static volatile int kbd_polls; -static int is_scanning_enabled(void) +int keyboard_scan_is_enabled(void) { #ifdef CONFIG_LID_SWITCH /* Scanning is never enabled when lid is closed */ @@ -201,7 +201,7 @@ static int read_matrix(uint8_t *state) for (c = 0; c < KEYBOARD_COLS; c++) { /* * Stop if scanning becomes disabled. Check enable_cscanning - * instead of is_scanning_enabled() so that we can scan the + * instead of keyboard_scan_is_enabled() so that we can scan the * matrix at boot time before the lid switch is readable. */ if (!enable_scanning) @@ -404,7 +404,7 @@ static int check_keys_changed(uint8_t *state) #ifdef CONFIG_KEYBOARD_PROTOCOL_8042 /* Inform keyboard module if scanning is enabled */ - if (is_scanning_enabled()) + if (keyboard_scan_is_enabled()) keyboard_state_changed(i, c, new_mask ? 1 : 0); #endif } @@ -567,7 +567,7 @@ void keyboard_scan_task(void) while (1) { /* Enable all outputs */ CPRINTF("[%T KB wait]\n"); - if (is_scanning_enabled()) + if (keyboard_scan_is_enabled()) keyboard_raw_drive_column(KEYBOARD_COLUMN_ALL); keyboard_raw_enable_interrupt(1); @@ -579,9 +579,10 @@ void keyboard_scan_task(void) * user pressing a key and enable_interrupt() * starting to pay attention to edges. */ - if (!keyboard_raw_read_rows() || !is_scanning_enabled()) + if (!keyboard_raw_read_rows() || + !keyboard_scan_is_enabled()) task_wait_event(-1); - } while (!is_scanning_enabled()); + } while (!keyboard_scan_is_enabled()); /* Enter polling mode */ CPRINTF("[%T KB poll]\n"); @@ -589,7 +590,7 @@ void keyboard_scan_task(void) keyboard_raw_drive_column(KEYBOARD_COLUMN_NONE); /* Busy polling keyboard state. */ - while (is_scanning_enabled()) { + while (keyboard_scan_is_enabled()) { start = get_time(); /* Check for keys down */ |