summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/acpi/acpigen_ps2_keybd.c20
-rw-r--r--src/ec/google/chromeec/ec_acpi.c3
-rw-r--r--src/include/acpi/acpigen_ps2_keybd.h5
3 files changed, 18 insertions, 10 deletions
diff --git a/src/acpi/acpigen_ps2_keybd.c b/src/acpi/acpigen_ps2_keybd.c
index 7928dad9da..67e92a9a3b 100644
--- a/src/acpi/acpigen_ps2_keybd.c
+++ b/src/acpi/acpigen_ps2_keybd.c
@@ -209,7 +209,8 @@ static void ssdt_generate_keymap(struct acpi_dp *dp, 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_scrnlock_key,
+ bool has_alpha_num_punct_keys)
{
struct acpi_dp *dp_array;
enum ps2_action_key key;
@@ -261,10 +262,14 @@ static void ssdt_generate_keymap(struct acpi_dp *dp, uint8_t num_top_row_keys,
total++;
}
- /* Write out keymap for rest of keys */
- for (i = 0; i < ARRAY_SIZE(rest_of_keymaps); i++) {
- keymap = rest_of_keymaps[i];
- acpi_dp_add_integer(dp_array, NULL, keymap);
+ /* Provide alphanumeric and punctuation keys (rest of the keyboard) if
+ * present
+ */
+ if (has_alpha_num_punct_keys) {
+ for (i = 0; i < ARRAY_SIZE(rest_of_keymaps); i++) {
+ keymap = rest_of_keymaps[i];
+ acpi_dp_add_integer(dp_array, NULL, keymap);
+ }
}
total += ARRAY_SIZE(rest_of_keymaps);
@@ -277,7 +282,8 @@ 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_scrnlock_key,
+ bool has_alpha_num_punct_keys)
{
struct acpi_dp *dsd;
@@ -298,7 +304,7 @@ 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_scrnlock_key, has_alpha_num_punct_keys);
acpi_dp_write(dsd);
acpigen_pop_len(); /* Scope */
}
diff --git a/src/ec/google/chromeec/ec_acpi.c b/src/ec/google/chromeec/ec_acpi.c
index 53a4e75e59..3367cfa39f 100644
--- a/src/ec/google/chromeec/ec_acpi.c
+++ b/src/ec/google/chromeec/ec_acpi.c
@@ -251,7 +251,8 @@ static void fill_ssdt_ps2_keyboard(const struct device *dev)
ps2_action_keys,
!!(keybd.capabilities & KEYBD_CAP_FUNCTION_KEYS),
!!(keybd.capabilities & KEYBD_CAP_NUMERIC_KEYPAD),
- !!(keybd.capabilities & KEYBD_CAP_SCRNLOCK_KEY));
+ !!(keybd.capabilities & KEYBD_CAP_SCRNLOCK_KEY),
+ true);
}
static const char *ec_acpi_name(const struct device *dev)
diff --git a/src/include/acpi/acpigen_ps2_keybd.h b/src/include/acpi/acpigen_ps2_keybd.h
index 7dd82822f7..bac991bf36 100644
--- a/src/include/acpi/acpigen_ps2_keybd.h
+++ b/src/include/acpi/acpigen_ps2_keybd.h
@@ -29,12 +29,13 @@ enum ps2_action_key {
PS2_KEY_MENU,
};
-#define PS2_MIN_TOP_ROW_KEYS 10
+#define PS2_MIN_TOP_ROW_KEYS 2
#define PS2_MAX_TOP_ROW_KEYS 15
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_numeric_keypad, bool has_scrnlock_key,
+ bool has_alpha_num_punct_keys);
#endif /* __ACPI_ACPIGEN_PS2_KEYBD_H__ */