acpigen_ps2_keybd: Add assistant key to linux,keymap

If the ChromiumOS EC indicates that the device has an assistant key,
we should also add it to the generated linux,keymap binding.  This
commit simply does so by examining the keyboard capabilities reported by
the EC.

BUG=b:333088656
TEST=With a device that has an assistant key, flash AP FW and verify
that the key is mapped to `KEY_ASSISTANT` in the Linux kernel using
`evtest`.

Change-Id: I217220e89bce88e3045a4fc3b124954696276442
Signed-off-by: Aseda Aboagye <aaboagye@google.com>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/81996
Reviewed-by: Jonathon Hall <jonathon.hall@puri.sm>
Reviewed-by: Paul Menzel <paulepanter@mailbox.org>
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Caveh Jalali <caveh@chromium.org>
This commit is contained in:
Aseda Aboagye 2024-03-20 21:14:08 -05:00 committed by Felix Held
parent 101685de0c
commit b55000b2d5
4 changed files with 13 additions and 2 deletions

View File

@ -211,6 +211,7 @@ static void ssdt_generate_keymap(struct acpi_dp *dp, uint8_t num_top_row_keys,
bool can_send_function_keys,
bool has_numeric_keypad,
bool has_scrnlock_key,
bool has_assistant_key,
bool has_alpha_num_punct_keys)
{
struct acpi_dp *dp_array;
@ -270,6 +271,12 @@ static void ssdt_generate_keymap(struct acpi_dp *dp, uint8_t num_top_row_keys,
total++;
}
/* Add the keymap for the assistant key if present */
if (has_assistant_key) {
acpi_dp_add_integer(dp_array, NULL, KEYMAP(0x5c, KEY_ASSISTANT));
total++;
}
/* Provide alphanumeric and punctuation keys (rest of the keyboard) if
* present
*/
@ -291,6 +298,7 @@ void acpigen_ps2_keyboard_dsd(const char *scope, uint8_t num_top_row_keys,
bool can_send_function_keys,
bool has_numeric_keypad,
bool has_scrnlock_key,
bool has_assistant_key,
bool has_alpha_num_punct_keys)
{
struct acpi_dp *dsd;
@ -312,7 +320,8 @@ void acpigen_ps2_keyboard_dsd(const char *scope, uint8_t num_top_row_keys,
ssdt_generate_physmap(dsd, num_top_row_keys, action_keys);
ssdt_generate_keymap(dsd, num_top_row_keys, action_keys,
can_send_function_keys, has_numeric_keypad,
has_scrnlock_key, has_alpha_num_punct_keys);
has_scrnlock_key, has_assistant_key,
has_alpha_num_punct_keys);
acpi_dp_write(dsd);
acpigen_pop_len(); /* Scope */
}

View File

@ -257,6 +257,7 @@ static void fill_ssdt_ps2_keyboard(const struct device *dev)
!!(keybd.capabilities & KEYBD_CAP_FUNCTION_KEYS),
!!(keybd.capabilities & KEYBD_CAP_NUMERIC_KEYPAD),
!!(keybd.capabilities & KEYBD_CAP_SCRNLOCK_KEY),
!!(keybd.capabilities & KEYBD_CAP_ASSISTANT_KEY),
true);
}

View File

@ -37,6 +37,7 @@ void acpigen_ps2_keyboard_dsd(const char *scope, uint8_t num_top_row_keys,
enum ps2_action_key action_keys[],
bool can_send_function_keys,
bool has_numeric_keypad, bool has_scrnlock_key,
bool has_assistant_key,
bool has_alpha_num_punct_keys);
#endif /* __ACPI_ACPIGEN_PS2_KEYBD_H__ */

View File

@ -19,7 +19,7 @@ static void mainboard_fill_ssdt(const struct device *dev)
PS2_KEY_VOL_UP
};
acpigen_ps2_keyboard_dsd("_SB.PCI0.PS2K", ARRAY_SIZE(ps2_action_keys),
ps2_action_keys, false, false, false, false);
ps2_action_keys, false, false, false, false, false);
}
static void mainboard_init(void *chip_info)