summaryrefslogtreecommitdiff
path: root/common/keyboard_mkbp.c
diff options
context:
space:
mode:
authorDaisuke Nojiri <dnojiri@chromium.org>2018-10-16 15:16:29 -0700
committerchrome-bot <chrome-bot@chromium.org>2018-10-19 23:21:56 -0700
commit9a890ad22965daa7e9365a0b2cb8c734ae41a842 (patch)
tree27e3f1f0845031e685fc46ffdad44d8cb87adfeb /common/keyboard_mkbp.c
parent4d4d8f06e91090336c2eb29ee00ca86fea2bb796 (diff)
downloadchrome-ec-9a890ad22965daa7e9365a0b2cb8c734ae41a842.tar.gz
Keyboard: Allow keyboard size to be set at run time
Currently, the keyboard size (i.e. number of columns) is static. This patch allows it to be configured at run time. It's required to support a keyboard with/without keypad in a single image. KEYBOARD_COLS_MAX has the build time col size. It's used to allocate exact spaces for arrays. Actual keyboard scanning is done using keyboard_cols, which holds a runtime col size. Signed-off-by: Daisuke Nojiri <dnojiri@chromium.org> BUG=b:117126568 BRANCH=none TEST=Verify keyboard functionality on Sona and Veyron. Change-Id: I4b3552be0b4b315c3fe5a6884cf25e10aba8be7c Reviewed-on: https://chromium-review.googlesource.com/1285292 Commit-Ready: Daisuke Nojiri <dnojiri@chromium.org> Tested-by: Daisuke Nojiri <dnojiri@chromium.org> Reviewed-by: Randall Spangler <rspangler@chromium.org>
Diffstat (limited to 'common/keyboard_mkbp.c')
-rw-r--r--common/keyboard_mkbp.c13
1 files changed, 7 insertions, 6 deletions
diff --git a/common/keyboard_mkbp.c b/common/keyboard_mkbp.c
index efd86f2e10..186475b4dd 100644
--- a/common/keyboard_mkbp.c
+++ b/common/keyboard_mkbp.c
@@ -72,7 +72,8 @@ static uint32_t mkbp_button_state;
static uint32_t mkbp_switch_state;
#ifndef HAS_TASK_KEYSCAN
/* Keys simulated-pressed */
-static uint8_t __bss_slow simulated_key[KEYBOARD_COLS];
+static uint8_t __bss_slow simulated_key[KEYBOARD_COLS_MAX];
+uint8_t keyboard_cols = KEYBOARD_COLS_MAX;
#endif /* !defined(HAS_TASK_KEYSCAN) */
/* Config for mkbp protocol; does not include fields from scan config */
@@ -99,7 +100,7 @@ static int get_data_size(enum ec_mkbp_event e)
{
switch (e) {
case EC_MKBP_EVENT_KEY_MATRIX:
- return KEYBOARD_COLS;
+ return keyboard_cols;
#ifdef CONFIG_HOST_EVENT64
case EC_MKBP_EVENT_HOST_EVENT64:
@@ -396,7 +397,7 @@ DECLARE_EVENT_SOURCE(EC_MKBP_EVENT_SYSRQ, sysrq_get_next_event);
void keyboard_send_battery_key(void)
{
- uint8_t state[KEYBOARD_COLS];
+ uint8_t state[KEYBOARD_COLS_MAX];
/* Copy debounced state and add battery pseudo-key */
memcpy(state, keyboard_scan_get_state(), sizeof(state));
@@ -456,7 +457,7 @@ static int mkbp_get_info(struct host_cmd_handler_args *args)
/* Version 0 just returns info about the keyboard. */
r->rows = KEYBOARD_ROWS;
- r->cols = KEYBOARD_COLS;
+ r->cols = keyboard_cols;
/* This used to be "switches" which was previously 0. */
r->reserved = 0;
@@ -551,7 +552,7 @@ static int command_mkbp_keyboard_press(int argc, char **argv)
int i, j;
ccputs("Simulated keys:\n");
- for (i = 0; i < KEYBOARD_COLS; ++i) {
+ for (i = 0; i < keyboard_cols; ++i) {
if (simulated_key[i] == 0)
continue;
for (j = 0; j < KEYBOARD_ROWS; ++j)
@@ -564,7 +565,7 @@ static int command_mkbp_keyboard_press(int argc, char **argv)
char *e;
c = strtoi(argv[1], &e, 0);
- if (*e || c < 0 || c >= KEYBOARD_COLS)
+ if (*e || c < 0 || c >= keyboard_cols)
return EC_ERROR_PARAM1;
r = strtoi(argv[2], &e, 0);