Configure Keyboard

Config options

Keyboard options start with CONFIG_KEYBOARD*. Evaluate whether each option is appropriate to add to baseboard.h or board.h.

Your board should select only one of these options to configure the protocol used to send keyboard events to the AP.

  • CONFIG_KEYBOARD_PROTOCOL_8042 - Systems with an x86 AP use the 8042 protocol.
  • CONFIG_KEYBOARD_PROTOCOL_MKBP - Systems without an x86 AP (e.g. ARM) typically use the MKBP protocol.

Feature Parameters

  • CONFIG_KEYBOARD_KSO_BASE <pin> - Evaluate whether this parameter is required by your board.

GPIOs and Alternate Pins

Define ALTERNATE() pin entries for all keyboard matrix signals, to connect the signals to the keyboard controller of the EC chipset.

Note that KSO_02 is purposely not configured for for alternate mode. See the H1 Special Requirements below for details.

/* Example Keyboard pin setup */
#define GPIO_KB_INPUT (GPIO_INPUT | GPIO_PULL_UP)
ALTERNATE(PIN_MASK(3, 0x03), 0, MODULE_KEYBOARD_SCAN, GPIO_KB_INPUT) /* KSI_00-01 */
ALTERNATE(PIN_MASK(2, 0xFC), 0, MODULE_KEYBOARD_SCAN, GPIO_KB_INPUT) /* KSI_02-07 */
ALTERNATE(PIN_MASK(2, 0x03), 0, MODULE_KEYBOARD_SCAN, GPIO_ODR_HIGH) /* KSO_00-01 */
ALTERNATE(PIN_MASK(1, 0x7F), 0, MODULE_KEYBOARD_SCAN, GPIO_ODR_HIGH) /* KSO_03-09 */
ALTERNATE(PIN_MASK(0, 0xF0), 0, MODULE_KEYBOARD_SCAN, GPIO_ODR_HIGH) /* KSO_10-13 */
ALTERNATE(PIN_MASK(8, 0x04), 0, MODULE_KEYBOARD_SCAN, GPIO_ODR_HIGH) /* KSO_14    */

See the GPIO documentation for additional details on the GPIO macros.

Data structures

  • struct keyboard_scan_config keyscan_config - This can be used to customize the keyboard scanner (e.g. scan frequency, debounce duration, etc.).

Tasks

The KEYSCAN task monitors the keyboard matrix for new key presses and is required by this feature. The priority is set as one of the highest priority tasks in the system, typically only below the PD_Cn and PD_INT_Cn tasks.

    TASK_NOTEST(KEYSCAN, keyboard_scan_task, NULL, TASK_STACK_SIZE) \

The KEYPROTO task handles sending and receiving 8042 protocol messages from the AP and is required when CONFIG_KEYBOARD_PROTOCOL_8042 is used. The typical priority is lower than the HOSTCMD task.

    TASK_NOTEST(KEYPROTO, keyboard_protocol_task, NULL, TASK_STACK_SIZE) \

Additional Notes

  • If you're including keyboard support, you should also define CONFIG_CMD_KEYBOARD to enable keyboard debug commands from the EC console.
  • CONFIG_KEYBOARD_PROTOCOL_MKBP automatically enables CONFIG_MKBP_EVENT.
  • Boards that enable CONFIG_KEYBOARD_PROTOCOL_8042 will often also define CONFIG_MKBP_EVENT for sensor events. In this case only motion sensor data is reported using the MKBP protocol, keyboard events are provided using the 8042 protocol. Refer to Configuring Sensors for more information.

H1 Special Requirements

On Boards that use the H1 secure microcontroller, one KSI (keyboard scan input) signal and one KSO (keyboard scan output) signal are routed through the H1 microcontroller. There are additional GPIO and configuration options that must be enabled in this case. - The KSO_02/COL2 signal is always inverted. Explicitly configure the GPIO to default low. c GPIO(KBD_KSO2, PIN(1, 7), GPIO_OUT_LOW) /* KSO_02 inverted */ - Add the define CONFIG_KEYBOARD_COL2_INVERTED to baseboard.h or board.h.