diff options
-rw-r--r-- | baseboard/kalista/baseboard.h | 2 | ||||
-rw-r--r-- | baseboard/kukui/baseboard.h | 2 | ||||
-rw-r--r-- | baseboard/trogdor/baseboard.h | 2 | ||||
-rw-r--r-- | board/ambassador/board.h | 2 | ||||
-rw-r--r-- | board/cheza/board.h | 2 | ||||
-rw-r--r-- | board/coachz/board.h | 2 | ||||
-rw-r--r-- | board/dooly/board.h | 2 | ||||
-rw-r--r-- | board/endeavour/board.h | 2 | ||||
-rw-r--r-- | board/fizz/board.h | 2 | ||||
-rw-r--r-- | board/flapjack/board.h | 2 | ||||
-rw-r--r-- | board/genesis/board.h | 2 | ||||
-rw-r--r-- | board/homestar/board.h | 2 | ||||
-rw-r--r-- | board/kakadu/board.h | 1 | ||||
-rw-r--r-- | board/katsu/board.h | 1 | ||||
-rw-r--r-- | board/kodama/board.h | 1 | ||||
-rw-r--r-- | board/kukui/board.h | 1 | ||||
-rw-r--r-- | board/lazor/board.h | 1 | ||||
-rw-r--r-- | board/marzipan/board.h | 1 | ||||
-rw-r--r-- | board/nocturne/board.h | 2 | ||||
-rw-r--r-- | board/pompom/board.h | 1 | ||||
-rw-r--r-- | board/poppy/board.h | 2 | ||||
-rw-r--r-- | board/puff/board.h | 2 | ||||
-rw-r--r-- | board/rainier/board.h | 2 | ||||
-rw-r--r-- | board/scarlet/board.h | 3 | ||||
-rw-r--r-- | board/trogdor/board.h | 1 | ||||
-rw-r--r-- | common/keyboard_mkbp.c | 66 | ||||
-rw-r--r-- | common/mkbp_input_devices.c | 67 |
27 files changed, 94 insertions, 82 deletions
diff --git a/baseboard/kalista/baseboard.h b/baseboard/kalista/baseboard.h index 5cda6c310c..7579acd2d7 100644 --- a/baseboard/kalista/baseboard.h +++ b/baseboard/kalista/baseboard.h @@ -25,7 +25,7 @@ #define CONFIG_DEDICATED_RECOVERY_BUTTON #define CONFIG_EMULATED_SYSRQ #define CONFIG_LED_COMMON -#define CONFIG_KEYBOARD_PROTOCOL_MKBP +#define CONFIG_MKBP_INPUT_DEVICES #define CONFIG_MKBP_USE_HOST_EVENT #define CONFIG_DPTF #define CONFIG_FLASH_SIZE_BYTES 0x80000 diff --git a/baseboard/kukui/baseboard.h b/baseboard/kukui/baseboard.h index 9aa1362534..f4869ce943 100644 --- a/baseboard/kukui/baseboard.h +++ b/baseboard/kukui/baseboard.h @@ -239,8 +239,6 @@ #undef CONFIG_PSTORE #define CONFIG_TASK_PROFILING -#define CONFIG_KEYBOARD_PROTOCOL_MKBP -#define CONFIG_MKBP_EVENT #define CONFIG_MKBP_USE_GPIO /* diff --git a/baseboard/trogdor/baseboard.h b/baseboard/trogdor/baseboard.h index 8e3dbe4b1e..570bf16f83 100644 --- a/baseboard/trogdor/baseboard.h +++ b/baseboard/trogdor/baseboard.h @@ -44,8 +44,6 @@ #define CONFIG_HOSTCMD_SPS #define CONFIG_HOST_COMMAND_STATUS #define CONFIG_HOSTCMD_SECTION_SORTED -#define CONFIG_MKBP_EVENT -#define CONFIG_KEYBOARD_PROTOCOL_MKBP #define CONFIG_KEYBOARD_COL2_INVERTED #define CONFIG_MKBP_USE_GPIO diff --git a/board/ambassador/board.h b/board/ambassador/board.h index d44a0ec681..52412b4bfe 100644 --- a/board/ambassador/board.h +++ b/board/ambassador/board.h @@ -34,7 +34,7 @@ #define CONFIG_CROS_BOARD_INFO #define CONFIG_EMULATED_SYSRQ #undef CONFIG_KEYBOARD_BOOT_KEYS -#define CONFIG_KEYBOARD_PROTOCOL_MKBP +#define CONFIG_MKBP_INPUT_DEVICES #define CONFIG_MKBP_USE_HOST_EVENT #undef CONFIG_KEYBOARD_RUNTIME_KEYS #undef CONFIG_HIBERNATE diff --git a/board/cheza/board.h b/board/cheza/board.h index 45a1927c82..f30219aaf5 100644 --- a/board/cheza/board.h +++ b/board/cheza/board.h @@ -54,7 +54,7 @@ #define CONFIG_HOST_COMMAND_STATUS #define CONFIG_HOSTCMD_SECTION_SORTED /* Host commands are sorted. */ #define CONFIG_MKBP_EVENT -#define CONFIG_KEYBOARD_PROTOCOL_MKBP +#define CONFIG_MKBP_INPUT_DEVICES #define CONFIG_MKBP_USE_GPIO #define CONFIG_BOARD_VERSION_GPIO diff --git a/board/coachz/board.h b/board/coachz/board.h index f60ce352d9..268dcb5b89 100644 --- a/board/coachz/board.h +++ b/board/coachz/board.h @@ -51,6 +51,8 @@ #define CONFIG_GMR_TABLET_MODE #define CONFIG_FRONT_PROXIMITY_SWITCH +#define CONFIG_MKBP_INPUT_DEVICES + #define CONFIG_DETACHABLE_BASE #define CONFIG_BASE_ATTACHED_SWITCH diff --git a/board/dooly/board.h b/board/dooly/board.h index 6043ad6aeb..51259c006b 100644 --- a/board/dooly/board.h +++ b/board/dooly/board.h @@ -69,7 +69,7 @@ #define CONFIG_CROS_BOARD_INFO #define CONFIG_EMULATED_SYSRQ #undef CONFIG_KEYBOARD_BOOT_KEYS -#define CONFIG_KEYBOARD_PROTOCOL_MKBP +#define CONFIG_MKBP_INPUT_DEVICES #define CONFIG_MKBP_USE_HOST_EVENT #undef CONFIG_KEYBOARD_RUNTIME_KEYS #undef CONFIG_HIBERNATE diff --git a/board/endeavour/board.h b/board/endeavour/board.h index a3d871604f..eca98dad6d 100644 --- a/board/endeavour/board.h +++ b/board/endeavour/board.h @@ -24,7 +24,7 @@ #define CONFIG_DEDICATED_RECOVERY_BUTTON #define CONFIG_EMULATED_SYSRQ #define CONFIG_LED_COMMON -#define CONFIG_KEYBOARD_PROTOCOL_MKBP +#define CONFIG_MKBP_INPUT_DEVICES #define CONFIG_MKBP_USE_HOST_EVENT #define CONFIG_DPTF #define CONFIG_FLASH_SIZE_BYTES 0x80000 diff --git a/board/fizz/board.h b/board/fizz/board.h index da48944973..160680edb6 100644 --- a/board/fizz/board.h +++ b/board/fizz/board.h @@ -25,7 +25,7 @@ #define CONFIG_DEDICATED_RECOVERY_BUTTON #define CONFIG_EMULATED_SYSRQ #define CONFIG_LED_COMMON -#define CONFIG_KEYBOARD_PROTOCOL_MKBP +#define CONFIG_MKBP_INPUT_DEVICES #define CONFIG_MKBP_USE_HOST_EVENT #define CONFIG_DPTF #define CONFIG_FLASH_SIZE_BYTES 0x80000 diff --git a/board/flapjack/board.h b/board/flapjack/board.h index 4d077ad21d..be9ec8b9b4 100644 --- a/board/flapjack/board.h +++ b/board/flapjack/board.h @@ -251,7 +251,7 @@ /* Enable Accel over SPI */ #define CONFIG_SPI_ACCEL_PORT 0 /* The first SPI master port (SPI2) */ -#define CONFIG_KEYBOARD_PROTOCOL_MKBP +#define CONFIG_MKBP_INPUT_DEVICES #define CONFIG_MKBP_EVENT #define CONFIG_MKBP_USE_GPIO /* Define the host events which are allowed to wakeup AP in S3. */ diff --git a/board/genesis/board.h b/board/genesis/board.h index de82b84540..b380ac28f9 100644 --- a/board/genesis/board.h +++ b/board/genesis/board.h @@ -34,7 +34,7 @@ #define CONFIG_CROS_BOARD_INFO #define CONFIG_EMULATED_SYSRQ #undef CONFIG_KEYBOARD_BOOT_KEYS -#define CONFIG_KEYBOARD_PROTOCOL_MKBP +#define CONFIG_MKBP_INPUT_DEVICES #define CONFIG_MKBP_USE_HOST_EVENT #undef CONFIG_KEYBOARD_RUNTIME_KEYS #undef CONFIG_HIBERNATE diff --git a/board/homestar/board.h b/board/homestar/board.h index 12bfb53879..4267d8bacb 100644 --- a/board/homestar/board.h +++ b/board/homestar/board.h @@ -71,6 +71,8 @@ #define GMR_TABLET_MODE_GPIO_L GPIO_LID_OPEN_EC #define GPIO_SWITCHCAP_PG_INT_L GPIO_LN9310_INT +#define CONFIG_MKBP_INPUT_DEVICES + #ifndef __ASSEMBLER__ #include "gpio_signal.h" diff --git a/board/kakadu/board.h b/board/kakadu/board.h index 2dd4ff2c5d..6cecfaed2b 100644 --- a/board/kakadu/board.h +++ b/board/kakadu/board.h @@ -65,6 +65,7 @@ EC_HOST_EVENT_MASK(EC_HOST_EVENT_MODE_CHANGE)) /* MKBP */ +#define CONFIG_MKBP_INPUT_DEVICES #define CONFIG_MKBP_EVENT #define CONFIG_MKBP_EVENT_WAKEUP_MASK \ (BIT(EC_MKBP_EVENT_SENSOR_FIFO) | BIT(EC_MKBP_EVENT_HOST_EVENT)) diff --git a/board/katsu/board.h b/board/katsu/board.h index 44d6e9de59..bdc552a9c5 100644 --- a/board/katsu/board.h +++ b/board/katsu/board.h @@ -65,6 +65,7 @@ EC_HOST_EVENT_MASK(EC_HOST_EVENT_MODE_CHANGE)) /* MKBP */ +#define CONFIG_MKBP_INPUT_DEVICES #define CONFIG_MKBP_EVENT #define CONFIG_MKBP_EVENT_WAKEUP_MASK \ (BIT(EC_MKBP_EVENT_SENSOR_FIFO) | BIT(EC_MKBP_EVENT_HOST_EVENT)) diff --git a/board/kodama/board.h b/board/kodama/board.h index 60bace8cc8..98e9b219ac 100644 --- a/board/kodama/board.h +++ b/board/kodama/board.h @@ -63,6 +63,7 @@ #define I2C_PORT_VIRTUAL_BATTERY I2C_PORT_BATTERY /* Define the host events which are allowed to wakeup AP in S3. */ +#define CONFIG_MKBP_INPUT_DEVICES #define CONFIG_MKBP_HOST_EVENT_WAKEUP_MASK \ (EC_HOST_EVENT_MASK(EC_HOST_EVENT_LID_OPEN) |\ EC_HOST_EVENT_MASK(EC_HOST_EVENT_POWER_BUTTON)) diff --git a/board/kukui/board.h b/board/kukui/board.h index 28f0c80cf1..bbb66d4e41 100644 --- a/board/kukui/board.h +++ b/board/kukui/board.h @@ -94,6 +94,7 @@ EC_HOST_EVENT_MASK(EC_HOST_EVENT_MODE_CHANGE)) /* MKBP */ +#define CONFIG_MKBP_INPUT_DEVICES #define CONFIG_MKBP_EVENT #define CONFIG_MKBP_EVENT_WAKEUP_MASK \ (BIT(EC_MKBP_EVENT_SENSOR_FIFO) | BIT(EC_MKBP_EVENT_HOST_EVENT)) diff --git a/board/lazor/board.h b/board/lazor/board.h index 3a1edee983..d4f4426d05 100644 --- a/board/lazor/board.h +++ b/board/lazor/board.h @@ -17,6 +17,7 @@ #define CONFIG_LN9310 /* Keyboard */ +#define CONFIG_KEYBOARD_PROTOCOL_MKBP #define CONFIG_KEYBOARD_BOARD_CONFIG #define CONFIG_PWM_KBLIGHT diff --git a/board/marzipan/board.h b/board/marzipan/board.h index bc070bc02f..54054456eb 100644 --- a/board/marzipan/board.h +++ b/board/marzipan/board.h @@ -14,6 +14,7 @@ #define CONFIG_FLASH_SIZE_BYTES (512 * 1024) /* 512KB internal spi flash */ /* Keyboard */ +#define CONFIG_KEYBOARD_PROTOCOL_MKBP #define CONFIG_KEYBOARD_BOARD_CONFIG #define CONFIG_PWM_KBLIGHT diff --git a/board/nocturne/board.h b/board/nocturne/board.h index 046b41d7db..a009cc118a 100644 --- a/board/nocturne/board.h +++ b/board/nocturne/board.h @@ -89,7 +89,7 @@ /* MKBP */ #define CONFIG_MKBP_EVENT #define CONFIG_MKBP_EVENT_WAKEUP_MASK (1<<EC_MKBP_EVENT_SWITCH) -#define CONFIG_KEYBOARD_PROTOCOL_MKBP +#define CONFIG_MKBP_INPUT_DEVICES #define CONFIG_MKBP_USE_GPIO_AND_HOST_EVENT /* Sensors */ diff --git a/board/pompom/board.h b/board/pompom/board.h index 8152d7f113..6cbe7a4d27 100644 --- a/board/pompom/board.h +++ b/board/pompom/board.h @@ -15,6 +15,7 @@ #define CONFIG_FLASH_SIZE_BYTES (512 * 1024) /* 512KB internal spi flash */ /* Keyboard */ +#define CONFIG_KEYBOARD_PROTOCOL_MKBP #define CONFIG_KEYBOARD_BOARD_CONFIG #define CONFIG_KEYBOARD_REFRESH_ROW3 #define CONFIG_PWM_KBLIGHT diff --git a/board/poppy/board.h b/board/poppy/board.h index 607108a8e5..7f0b3eb95a 100644 --- a/board/poppy/board.h +++ b/board/poppy/board.h @@ -120,7 +120,7 @@ #define CONFIG_TEMP_SENSOR_BD99992GW #define CONFIG_THERMISTOR_NCP15WB -#define CONFIG_KEYBOARD_PROTOCOL_MKBP +#define CONFIG_MKBP_INPUT_DEVICES #define CONFIG_MKBP_EVENT #define CONFIG_MKBP_USE_HOST_EVENT #define CONFIG_ACCELGYRO_BMI160 diff --git a/board/puff/board.h b/board/puff/board.h index 10885d8449..11d6deaae3 100644 --- a/board/puff/board.h +++ b/board/puff/board.h @@ -34,7 +34,7 @@ #define CONFIG_CROS_BOARD_INFO #define CONFIG_EMULATED_SYSRQ #undef CONFIG_KEYBOARD_BOOT_KEYS -#define CONFIG_KEYBOARD_PROTOCOL_MKBP +#define CONFIG_MKBP_INPUT_DEVICES #define CONFIG_MKBP_USE_HOST_EVENT #undef CONFIG_KEYBOARD_RUNTIME_KEYS #undef CONFIG_HIBERNATE diff --git a/board/rainier/board.h b/board/rainier/board.h index 20c0de975e..01a9950af9 100644 --- a/board/rainier/board.h +++ b/board/rainier/board.h @@ -131,7 +131,7 @@ /* Enable Accel over SPI */ #define CONFIG_SPI_ACCEL_PORT 0 /* The first SPI master port (SPI2) */ -#define CONFIG_KEYBOARD_PROTOCOL_MKBP +#define CONFIG_MKBP_INPUT_DEVICES #define CONFIG_MKBP_EVENT #define CONFIG_MKBP_USE_GPIO /* Define the host events which are allowed to wakeup AP in S3. */ diff --git a/board/scarlet/board.h b/board/scarlet/board.h index 12d4d14c87..318ec0911d 100644 --- a/board/scarlet/board.h +++ b/board/scarlet/board.h @@ -181,7 +181,8 @@ /* Enable Accel over SPI */ #define CONFIG_SPI_ACCEL_PORT 0 /* The first SPI master port (SPI2) */ -#define CONFIG_KEYBOARD_PROTOCOL_MKBP +#define CONFIG_KEYBOARD_PROTOCOL_ +#define CONFIG_MKBP_INPUT_DEVICES #define CONFIG_MKBP_EVENT #define CONFIG_MKBP_USE_GPIO /* Define the host events which are allowed to wakeup AP in S3. */ diff --git a/board/trogdor/board.h b/board/trogdor/board.h index f41c5d2fe6..1fe7668d39 100644 --- a/board/trogdor/board.h +++ b/board/trogdor/board.h @@ -25,6 +25,7 @@ #define CONFIG_FLASH_SIZE_BYTES (512 * 1024) /* 512KB internal spi flash */ /* Keyboard */ +#define CONFIG_KEYBOARD_PROTOCOL_MKBP #define CONFIG_KEYBOARD_BOARD_CONFIG #define CONFIG_PWM_KBLIGHT diff --git a/common/keyboard_mkbp.c b/common/keyboard_mkbp.c index eabb4c5829..d8e9f8d909 100644 --- a/common/keyboard_mkbp.c +++ b/common/keyboard_mkbp.c @@ -31,9 +31,7 @@ #define BATTERY_KEY_ROW_MASK BIT(BATTERY_KEY_ROW) #ifndef HAS_TASK_KEYSCAN -/* Keys simulated-pressed */ -static uint8_t __bss_slow simulated_key[KEYBOARD_COLS_MAX]; -uint8_t keyboard_cols = KEYBOARD_COLS_MAX; +#error "Task KEYSCAN has to be enabled for MKBP keyboard" #endif /* !defined(HAS_TASK_KEYSCAN) */ /* Config for mkbp protocol; does not include fields from scan config */ @@ -98,67 +96,6 @@ void keyboard_send_battery_key(void) void clear_typematic_key(void) { } -#ifndef HAS_TASK_KEYSCAN -/* For boards without a keyscan task, try and simulate keyboard presses. */ -static void simulate_key(int row, int col, int pressed) -{ - if ((simulated_key[col] & BIT(row)) == ((pressed ? 1 : 0) << row)) - return; /* No change */ - - simulated_key[col] &= ~BIT(row); - if (pressed) - simulated_key[col] |= BIT(row); - - mkbp_keyboard_add(simulated_key); -} - -static int command_mkbp_keyboard_press(int argc, char **argv) -{ - if (argc == 1) { - int i, j; - - ccputs("Simulated keys:\n"); - for (i = 0; i < keyboard_cols; ++i) { - if (simulated_key[i] == 0) - continue; - for (j = 0; j < KEYBOARD_ROWS; ++j) - if (simulated_key[i] & BIT(j)) - ccprintf("\t%d %d\n", i, j); - } - - } else if (argc == 3 || argc == 4) { - int r, c, p; - char *e; - - c = strtoi(argv[1], &e, 0); - if (*e || c < 0 || c >= keyboard_cols) - return EC_ERROR_PARAM1; - - r = strtoi(argv[2], &e, 0); - if (*e || r < 0 || r >= KEYBOARD_ROWS) - return EC_ERROR_PARAM2; - - if (argc == 3) { - /* Simulate a press and release */ - simulate_key(r, c, 1); - simulate_key(r, c, 0); - } else { - p = strtoi(argv[3], &e, 0); - if (*e || p < 0 || p > 1) - return EC_ERROR_PARAM3; - - simulate_key(r, c, p); - } - } - - return EC_SUCCESS; -} -DECLARE_CONSOLE_COMMAND(kbpress, command_mkbp_keyboard_press, - "[col row [0 | 1]]", - "Simulate keypress"); -#endif /* !defined(HAS_TASK_KEYSCAN) */ - -#ifdef HAS_TASK_KEYSCAN static void set_keyscan_config(const struct ec_mkbp_config *src, struct ec_mkbp_protocol_config *dst, uint32_t valid_mask, uint8_t new_flags) @@ -285,4 +222,3 @@ host_command_mkbp_get_config(struct host_cmd_handler_args *args) DECLARE_HOST_COMMAND(EC_CMD_MKBP_GET_CONFIG, host_command_mkbp_get_config, EC_VER_MASK(0)); -#endif /* HAS_TASK_KEYSCAN */ diff --git a/common/mkbp_input_devices.c b/common/mkbp_input_devices.c index 56d2234775..e058c9d320 100644 --- a/common/mkbp_input_devices.c +++ b/common/mkbp_input_devices.c @@ -11,6 +11,7 @@ #include "hooks.h" #include "host_command.h" #include "keyboard_mkbp.h" +#include "keyboard_scan.h" #include "lid_switch.h" #include "mkbp_event.h" #include "mkbp_fifo.h" @@ -176,3 +177,69 @@ static int sysrq_get_next_event(uint8_t *out) } DECLARE_EVENT_SOURCE(EC_MKBP_EVENT_SYSRQ, sysrq_get_next_event); #endif + +/************************ Keyboard press simulation ************************/ +#ifndef HAS_TASK_KEYSCAN +/* Keys simulated-pressed */ +static uint8_t __bss_slow simulated_key[KEYBOARD_COLS_MAX]; +uint8_t keyboard_cols = KEYBOARD_COLS_MAX; + +/* For boards without a keyscan task, try and simulate keyboard presses. */ +static void simulate_key(int row, int col, int pressed) +{ + if ((simulated_key[col] & BIT(row)) == ((pressed ? 1 : 0) << row)) + return; /* No change */ + + simulated_key[col] &= ~BIT(row); + if (pressed) + simulated_key[col] |= BIT(row); + + mkbp_fifo_add((uint8_t)EC_MKBP_EVENT_KEY_MATRIX, simulated_key); +} + +static int command_mkbp_keyboard_press(int argc, char **argv) +{ + if (argc == 1) { + int i, j; + + ccputs("Simulated keys:\n"); + for (i = 0; i < keyboard_cols; ++i) { + if (simulated_key[i] == 0) + continue; + for (j = 0; j < KEYBOARD_ROWS; ++j) + if (simulated_key[i] & BIT(j)) + ccprintf("\t%d %d\n", i, j); + } + + } else if (argc == 3 || argc == 4) { + int r, c, p; + char *e; + + c = strtoi(argv[1], &e, 0); + if (*e || c < 0 || c >= keyboard_cols) + return EC_ERROR_PARAM1; + + r = strtoi(argv[2], &e, 0); + if (*e || r < 0 || r >= KEYBOARD_ROWS) + return EC_ERROR_PARAM2; + + if (argc == 3) { + /* Simulate a press and release */ + simulate_key(r, c, 1); + simulate_key(r, c, 0); + } else { + p = strtoi(argv[3], &e, 0); + if (*e || p < 0 || p > 1) + return EC_ERROR_PARAM3; + + simulate_key(r, c, p); + } + } + + return EC_SUCCESS; +} +DECLARE_CONSOLE_COMMAND(kbpress, command_mkbp_keyboard_press, + "[col row [0 | 1]]", + "Simulate keypress"); + +#endif /* !defined(HAS_TASK_KEYSCAN) */ |