diff options
author | ben chen <ben.chen2@quanta.corp-partner.google.com> | 2022-11-30 13:22:59 +0800 |
---|---|---|
committer | Chromeos LUCI <chromeos-scoped@luci-project-accounts.iam.gserviceaccount.com> | 2022-12-01 03:03:31 +0000 |
commit | 45ddf1adb92ec9a77b98e4c0b77623dbbc100a2c (patch) | |
tree | 0215a8740b4459f74d935ae59a437083781279d1 | |
parent | 1f0e75baabd0ad6b3b2f99146f831cefefe4c374 (diff) | |
download | chrome-ec-45ddf1adb92ec9a77b98e4c0b77623dbbc100a2c.tar.gz |
Craask: add Fw_config structure for keyboard numeric pad control
Craask need to implement FW_KB_NUMERIC_PAD config in
bit 16 of cbi fw_config.Enable/Disable keypad control
by FW_KB_NUMERIC_PAD flag.
BUG=b:257387315,b:259498529
BRANCH=none
TEST=check keypad workable by FW_KB_NUMERIC_PAD flags.
Change-Id: I94b153d065db20e8619cd13f21877a11e76ea430
Signed-off-by: Ben Chen <ben.chen2@quanta.corp-partner.google.com>
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/4059911
Tested-by: Andrew McRae <amcrae@google.com>
Reviewed-by: Andrew McRae <amcrae@google.com>
Code-Coverage: Andrew McRae <amcrae@google.com>
Commit-Queue: Andrew McRae <amcrae@google.com>
-rw-r--r-- | zephyr/program/nissa/craask/cbi.dtsi | 22 | ||||
-rw-r--r-- | zephyr/program/nissa/craask/keyboard.dtsi | 4 | ||||
-rw-r--r-- | zephyr/program/nissa/craask/project.conf | 2 | ||||
-rw-r--r-- | zephyr/program/nissa/craask/src/keyboard.c | 59 |
4 files changed, 86 insertions, 1 deletions
diff --git a/zephyr/program/nissa/craask/cbi.dtsi b/zephyr/program/nissa/craask/cbi.dtsi index e329929227..fb87b16c39 100644 --- a/zephyr/program/nissa/craask/cbi.dtsi +++ b/zephyr/program/nissa/craask/cbi.dtsi @@ -54,6 +54,28 @@ }; /* + * FW_CONFIG field to indicate which keyboard numeric + * pad should be used. + */ + kb-numeric-pad { + enum-name = "FW_KB_NUMERIC_PAD"; + start = <16>; + size = <1>; + + no-kb-numpad { + compatible = "cros-ec,cbi-fw-config-value"; + enum-name = "FW_KB_NUMERIC_PAD_ABSENT"; + value = <0>; + default; + }; + kb-numpad-present { + compatible = "cros-ec,cbi-fw-config-value"; + enum-name = "FW_KB_NUMERIC_PAD_PRESENT"; + value = <1>; + }; + }; + + /* * FW_CONFIG field to enable fan or not. */ fan { diff --git a/zephyr/program/nissa/craask/keyboard.dtsi b/zephyr/program/nissa/craask/keyboard.dtsi index 06eb6bacfb..4b2fd8f9c2 100644 --- a/zephyr/program/nissa/craask/keyboard.dtsi +++ b/zephyr/program/nissa/craask/keyboard.dtsi @@ -27,6 +27,8 @@ &kso10_gp07 &kso11_gp06 &kso12_gp05 + &kso13_gp04 + &kso14_gp82 >; pinctrl-1 = < &ksi0_gpio_gp31 @@ -49,6 +51,8 @@ &kso10_gpio_gp07 &kso11_gpio_gp06 &kso12_gpio_gp05 + &kso13_gpio_gp04 + &kso14_gpio_gp82 >; pinctrl-names = "default", "sleep"; }; diff --git a/zephyr/program/nissa/craask/project.conf b/zephyr/program/nissa/craask/project.conf index 85cef7caba..5c0e098a67 100644 --- a/zephyr/program/nissa/craask/project.conf +++ b/zephyr/program/nissa/craask/project.conf @@ -14,4 +14,6 @@ CONFIG_PLATFORM_EC_DYNAMIC_MOTION_SENSOR_COUNT=y CONFIG_PLATFORM_EC_BUTTONS_RUNTIME_CONFIG=y +# Keyboard +CONFIG_PLATFORM_EC_KEYBOARD_KEYPAD=y CONFIG_PLATFORM_EC_KEYBOARD_FACTORY_TEST=y diff --git a/zephyr/program/nissa/craask/src/keyboard.c b/zephyr/program/nissa/craask/src/keyboard.c index 1d2102b655..93e9950bcf 100644 --- a/zephyr/program/nissa/craask/src/keyboard.c +++ b/zephyr/program/nissa/craask/src/keyboard.c @@ -3,8 +3,15 @@ * found in the LICENSE file. */ +#include "cros_cbi.h" #include "ec_commands.h" +#include "hooks.h" +#include "keyboard_raw.h" +#include "keyboard_scan.h" +LOG_MODULE_DECLARE(nissa, CONFIG_NISSA_LOG_LEVEL); + +static bool key_pad = FW_KB_NUMERIC_PAD_ABSENT; static const struct ec_response_keybd_config craask_kb = { .num_top_row_keys = 10, .action_keys = { @@ -22,11 +29,61 @@ static const struct ec_response_keybd_config craask_kb = { .capabilities = KEYBD_CAP_SCRNLOCK_KEY, }; +static const struct ec_response_keybd_config craask_kb_w_kb_numpad = { + .num_top_row_keys = 10, + .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_VOL_MUTE, /* T8 */ + TK_VOL_DOWN, /* T9 */ + TK_VOL_UP, /* T10 */ + }, + .capabilities = KEYBD_CAP_SCRNLOCK_KEY | KEYBD_CAP_NUMERIC_KEYPAD, +}; + __override const struct ec_response_keybd_config * board_vivaldi_keybd_config(void) { - return &craask_kb; + if (key_pad == FW_KB_NUMERIC_PAD_ABSENT) + return &craask_kb; + else + return &craask_kb_w_kb_numpad; +} + +/* + * Keyboard function decided by FW config. + */ +static void kb_init(void) +{ + int ret; + uint32_t val; + + ret = cros_cbi_get_fw_config(FW_KB_NUMERIC_PAD, &val); + + if (ret != 0) { + LOG_ERR("Error retrieving CBI FW_CONFIG field %d", + FW_KB_NUMERIC_PAD); + } + + if (val == FW_KB_NUMERIC_PAD_ABSENT) { + /* Disable scanning KSO13 & 14 if keypad isn't present. */ + keyboard_raw_set_cols(KEYBOARD_COLS_NO_KEYPAD); + key_pad = FW_KB_NUMERIC_PAD_ABSENT; + } else { + key_pad = FW_KB_NUMERIC_PAD_PRESENT; + /* Setting scan mask KSO11, KSO12, KSO13 and KSO14 */ + keyscan_config.actual_key_mask[11] = 0xfe; + keyscan_config.actual_key_mask[12] = 0xff; + keyscan_config.actual_key_mask[13] = 0xff; + keyscan_config.actual_key_mask[14] = 0xff; + } } +DECLARE_HOOK(HOOK_INIT, kb_init, HOOK_PRIO_POST_FIRST); /* * We have total 30 pins for keyboard connecter {-1, -1} mean |