summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--zephyr/projects/nissa/yaviks/src/keyboard.c60
1 files changed, 58 insertions, 2 deletions
diff --git a/zephyr/projects/nissa/yaviks/src/keyboard.c b/zephyr/projects/nissa/yaviks/src/keyboard.c
index 1e5ac7a953..46d6083dbf 100644
--- a/zephyr/projects/nissa/yaviks/src/keyboard.c
+++ b/zephyr/projects/nissa/yaviks/src/keyboard.c
@@ -2,11 +2,17 @@
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
+#include <zephyr/logging/log.h>
+#include "cros_cbi.h"
#include "ec_commands.h"
+#include "hooks.h"
+#include "keyboard_8042_sharedlib.h"
#include "keyboard_scan.h"
#include "timer.h"
+LOG_MODULE_DECLARE(nissa, CONFIG_NISSA_LOG_LEVEL);
+
/* Keyboard scan setting */
__override struct keyboard_scan_config keyscan_config = {
/* Increase from 50 us, because KSO_02 passes through the H1. */
@@ -23,7 +29,7 @@ __override struct keyboard_scan_config keyscan_config = {
},
};
-static const struct ec_response_keybd_config yaviks_kb_legacy = {
+static const struct ec_response_keybd_config yaviks_kb_w_kb_light = {
.num_top_row_keys = 13,
.action_keys = {
TK_BACK, /* T1 */
@@ -43,8 +49,58 @@ static const struct ec_response_keybd_config yaviks_kb_legacy = {
.capabilities = KEYBD_CAP_NUMERIC_KEYPAD,
};
+static const struct ec_response_keybd_config yaviks_kb_wo_kb_light = {
+ .num_top_row_keys = 13,
+ .action_keys = {
+ TK_BACK, /* T1 */
+ TK_REFRESH, /* T2 */
+ TK_FULLSCREEN, /* T3 */
+ TK_OVERVIEW, /* T4 */
+ TK_SNAPSHOT, /* T5 */
+ TK_BRIGHTNESS_DOWN, /* T6 */
+ TK_BRIGHTNESS_UP, /* T7 */
+ TK_PLAY_PAUSE, /* T8 */
+ TK_MICMUTE, /* T9 */
+ TK_VOL_MUTE, /* T10 */
+ TK_VOL_DOWN, /* T11 */
+ TK_VOL_UP, /* T12 */
+ TK_MENU, /* T13 */
+ },
+ .capabilities = KEYBD_CAP_NUMERIC_KEYPAD,
+};
+
__override const struct ec_response_keybd_config *
board_vivaldi_keybd_config(void)
{
- return &yaviks_kb_legacy;
+ uint32_t val;
+
+ cros_cbi_get_fw_config(FW_KB_BACKLIGHT, &val);
+
+ if (val == FW_KB_BACKLIGHT_OFF)
+ return &yaviks_kb_wo_kb_light;
+ else
+ return &yaviks_kb_w_kb_light;
+}
+
+/*
+ * Keyboard layout decided by FW config.
+ */
+static void kb_layout_init(void)
+{
+ int ret;
+ uint32_t val;
+
+ ret = cros_cbi_get_fw_config(FW_KB_LAYOUT, &val);
+ if (ret != 0) {
+ LOG_ERR("Error retrieving CBI FW_CONFIG field %d",
+ FW_KB_LAYOUT);
+ return;
+ }
+ /*
+ * If keyboard is US2(FW_KB_LAYOUT_US2), we need translate right ctrl
+ * to backslash(\|) key.
+ */
+ if (val == FW_KB_LAYOUT_US2)
+ set_scancode_set2(4, 0, get_scancode_set2(2, 7));
}
+DECLARE_HOOK(HOOK_INIT, kb_layout_init, HOOK_PRIO_POST_FIRST);