summaryrefslogtreecommitdiff
path: root/src/acpi
diff options
context:
space:
mode:
authorAseda Aboagye <aaboagye@google.com>2024-03-20 15:40:34 -0500
committerFelix Held <felix-coreboot@felixheld.de>2024-04-19 17:22:48 +0000
commitfef07f2c3a6ee017b1370e2dced0e7e776f17c37 (patch)
treedb84064fc78242134e4157a146cf4df15b0cd212 /src/acpi
parent00b40090aecff2d54b3dee2585a0919bc2573e3d (diff)
acpigen_ps2_keybd: Add Fn key to linux,keymap
Some devices may generate scancodes for the Fn key if they have one. If they do, we should add them to the linux,keymap binding. BUG=b:333096023 TEST=Flash DUT that emits a scancode for the Fn key, verify that it is mapped to KEY_FN in the Linux kernel using `evtest` when pressing the Fn key. Change-Id: Ie4daa64bc6b619392276d0b5f16e2d195d5bd68c Signed-off-by: Aseda Aboagye <aaboagye@google.com> Reviewed-on: https://review.coreboot.org/c/coreboot/+/81895 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Shelley Chen <shchen@google.com>
Diffstat (limited to 'src/acpi')
-rw-r--r--src/acpi/Kconfig8
-rw-r--r--src/acpi/acpigen_ps2_keybd.c7
2 files changed, 15 insertions, 0 deletions
diff --git a/src/acpi/Kconfig b/src/acpi/Kconfig
index 417ff60abb..2bb56ba91d 100644
--- a/src/acpi/Kconfig
+++ b/src/acpi/Kconfig
@@ -14,6 +14,14 @@ config ACPI_CPU_STRING
Specifies the ACPI name format string used by the acpigen
function to generate the processor scope. Default is CPxx.
+config ACPI_FNKEY_GEN_SCANCODE
+ int
+ default 0
+ help
+ Specifies the scancode, if any, which is generated when the Fn key is
+ pressed. A value of 0 is ignored, which is the default since most
+ keyboards do not emit a scancode for the Fn key.
+
config ACPI_HAVE_PCAT_8259
def_bool y if !ACPI_NO_PCAT_8259
diff --git a/src/acpi/acpigen_ps2_keybd.c b/src/acpi/acpigen_ps2_keybd.c
index 6590e6688d..cc21d5df5a 100644
--- a/src/acpi/acpigen_ps2_keybd.c
+++ b/src/acpi/acpigen_ps2_keybd.c
@@ -244,6 +244,13 @@ static void ssdt_generate_keymap(struct acpi_dp *dp, uint8_t num_top_row_keys,
acpi_dp_add_integer(dp_array, NULL, keymap);
}
+ /* Add the Fn-key */
+ if (CONFIG_ACPI_FNKEY_GEN_SCANCODE != 0) {
+ acpi_dp_add_integer(dp_array, NULL, KEYMAP(CONFIG_ACPI_FNKEY_GEN_SCANCODE,
+ KEY_FN));
+ total++;
+ }
+
total += num_top_row_keys;
}