summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorben chen <ben.chen2@quanta.corp-partner.google.com>2022-11-30 13:22:59 +0800
committerChromeos LUCI <chromeos-scoped@luci-project-accounts.iam.gserviceaccount.com>2022-12-01 03:03:31 +0000
commit45ddf1adb92ec9a77b98e4c0b77623dbbc100a2c (patch)
tree0215a8740b4459f74d935ae59a437083781279d1
parent1f0e75baabd0ad6b3b2f99146f831cefefe4c374 (diff)
downloadchrome-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.dtsi22
-rw-r--r--zephyr/program/nissa/craask/keyboard.dtsi4
-rw-r--r--zephyr/program/nissa/craask/project.conf2
-rw-r--r--zephyr/program/nissa/craask/src/keyboard.c59
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