summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKeith Short <keithshort@chromium.org>2022-02-16 10:17:47 -0700
committerCommit Bot <commit-bot@chromium.org>2022-02-24 21:48:48 +0000
commit785059da65abf05d45ac800b086f116465161e5e (patch)
tree2d23bec110f1e46303873116e2274ec36b54f2cd
parent059d49052511843f5396fb9fc68ab47e23f71e2a (diff)
downloadchrome-ec-785059da65abf05d45ac800b086f116465161e5e.tar.gz
zephyr: update keyboard drivers to use Zephyr GPIOs
Add alias node gpio-kbd-kso2 to replace the legacy GPIO_KBD_KSO2 signal. BUG=b:218904113 BRANCH=none TEST=On herobrine, verify all keypresses Signed-off-by: Keith Short <keithshort@chromium.org> Change-Id: I834cc7af68e721597e7509187266c509a50fab12 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/3485956 Reviewed-by: Al Semjonovs <asemjonovs@google.com> Reviewed-by: Andrew McRae <amcrae@google.com> Commit-Queue: Andrew McRae <amcrae@google.com>
-rw-r--r--zephyr/drivers/cros_kb_raw/cros_kb_raw_npcx.c24
-rw-r--r--zephyr/drivers/cros_kb_raw/cros_kb_raw_xec.c16
-rw-r--r--zephyr/dts/bindings/gpio/gpio-enum-name.yaml1
-rw-r--r--zephyr/include/drivers/cros_kb_raw.h38
-rw-r--r--zephyr/projects/brya/brya/gpio.dts4
-rw-r--r--zephyr/projects/corsola/gpio_kingler.dts4
-rw-r--r--zephyr/projects/herobrine/gpio.dts4
-rw-r--r--zephyr/projects/intelrvp/adlrvp/adlrvp_npcx/gpio.dts4
-rw-r--r--zephyr/projects/nissa/nivviks_generated.dts1
-rw-r--r--zephyr/projects/nissa/nivviks_overlay.dts1
-rw-r--r--zephyr/projects/npcx_evb/npcx7/include/gpio_map.h5
-rw-r--r--zephyr/projects/npcx_evb/npcx9/include/gpio_map.h5
-rw-r--r--zephyr/projects/skyrim/gpio.dts3
-rw-r--r--zephyr/projects/skyrim/guybrush.dts1
-rw-r--r--zephyr/projects/skyrim/skyrim.dts1
-rw-r--r--zephyr/projects/trogdor/lazor/gpio.dts4
-rw-r--r--zephyr/projects/volteer/volteer/gpio.dts4
-rw-r--r--zephyr/test/drivers/overlay.dts4
18 files changed, 76 insertions, 48 deletions
diff --git a/zephyr/drivers/cros_kb_raw/cros_kb_raw_npcx.c b/zephyr/drivers/cros_kb_raw/cros_kb_raw_npcx.c
index 00965b74ca..da5378e2ea 100644
--- a/zephyr/drivers/cros_kb_raw/cros_kb_raw_npcx.c
+++ b/zephyr/drivers/cros_kb_raw/cros_kb_raw_npcx.c
@@ -9,7 +9,6 @@
#include <dt-bindings/clock/npcx_clock.h>
#include <drivers/cros_kb_raw.h>
#include <drivers/clock_control.h>
-#include <drivers/gpio.h>
#include <kernel.h>
#include <soc.h>
#include <soc/nuvoton_npcx/reg_def_cros.h>
@@ -22,6 +21,12 @@
#include <logging/log.h>
LOG_MODULE_REGISTER(cros_kb_raw, LOG_LEVEL_ERR);
+#ifdef CONFIG_PLATFORM_EC_KEYBOARD_COL2_INVERTED
+#if !DT_NODE_EXISTS(KBD_KS02_NODE)
+#error gpio_kbd_kso2 alias has to point to the keyboard column 2 output pin.
+#endif
+#endif /* CONFIG_PLATFORM_EC_KEYBOARD_COL2_INVERTED */
+
#define NPCX_MAX_KEY_COLS 18 /* Maximum rows of keyboard matrix */
#define NPCX_MAX_KEY_ROWS 8 /* Maximum columns of keyboard matrix */
#define NPCX_KB_ROW_MASK (BIT(NPCX_MAX_KEY_ROWS) - 1)
@@ -127,24 +132,19 @@ static int cros_kb_raw_npcx_drive_column(const struct device *dev, int col)
/* Drive all lines to high. ie. Key detection is disabled. */
if (col == KEYBOARD_COLUMN_NONE) {
mask = ~0;
- if (IS_ENABLED(CONFIG_PLATFORM_EC_KEYBOARD_COL2_INVERTED)) {
- gpio_set_level(GPIO_KBD_KSO2, 0);
- }
+ cros_kb_raw_set_col2(0);
}
/* Drive all lines to low for detection any key press */
else if (col == KEYBOARD_COLUMN_ALL) {
mask = ~(BIT(keyboard_cols) - 1);
- if (IS_ENABLED(CONFIG_PLATFORM_EC_KEYBOARD_COL2_INVERTED)) {
- gpio_set_level(GPIO_KBD_KSO2, 1);
- }
+ cros_kb_raw_set_col2(1);
}
/* Drive one line to low for determining which key's state changed. */
else {
- if (IS_ENABLED(CONFIG_PLATFORM_EC_KEYBOARD_COL2_INVERTED)) {
- if (col == 2)
- gpio_set_level(GPIO_KBD_KSO2, 1);
- else
- gpio_set_level(GPIO_KBD_KSO2, 0);
+ if (col == 2) {
+ cros_kb_raw_set_col2(1);
+ } else {
+ cros_kb_raw_set_col2(0);
}
mask = ~BIT(col_out);
}
diff --git a/zephyr/drivers/cros_kb_raw/cros_kb_raw_xec.c b/zephyr/drivers/cros_kb_raw/cros_kb_raw_xec.c
index 7c5909c85a..cdfa084677 100644
--- a/zephyr/drivers/cros_kb_raw/cros_kb_raw_xec.c
+++ b/zephyr/drivers/cros_kb_raw/cros_kb_raw_xec.c
@@ -21,6 +21,12 @@
#include <logging/log.h>
LOG_MODULE_REGISTER(cros_kb_raw, LOG_LEVEL_ERR);
+#ifdef CONFIG_PLATFORM_EC_KEYBOARD_COL2_INVERTED
+#if !DT_NODE_EXISTS(KBD_KS02_NODE)
+#error gpio_kbd_kso2 alias has to point to the keyboard column 2 output pin.
+#endif
+#endif /* CONFIG_PLATFORM_EC_KEYBOARD_COL2_INVERTED */
+
#define XEC_MAX_KEY_COLS 18 /* Maximum rows of keyboard matrix */
#define XEC_MAX_KEY_ROWS 8 /* Maximum columns of keyboard matrix */
#define XEC_KB_ROW_MASK (BIT(XEC_MAX_KEY_ROWS) - 1)
@@ -79,23 +85,21 @@ static int cros_kb_raw_xec_drive_column(const struct device *dev, int col)
/* Drive all lines to high. i.e. Key detection is disabled. */
if (col == KEYBOARD_COLUMN_NONE) {
inst->KSO_SEL = MCHP_KSCAN_KSO_EN;
- if (IS_ENABLED(CONFIG_PLATFORM_EC_KEYBOARD_COL2_INVERTED))
- gpio_set_level(GPIO_KBD_KSO2, 0);
+ cros_kb_raw_set_col2(0);
}
/* Drive all lines to low for detection any key press */
else if (col == KEYBOARD_COLUMN_ALL) {
inst->KSO_SEL = MCHP_KSCAN_KSO_ALL;
- if (IS_ENABLED(CONFIG_PLATFORM_EC_KEYBOARD_COL2_INVERTED))
- gpio_set_level(GPIO_KBD_KSO2, 1);
+ cros_kb_raw_set_col2(1);
}
/* Drive one line to low for determining which key's state changed. */
else if (IS_ENABLED(CONFIG_PLATFORM_EC_KEYBOARD_COL2_INVERTED)) {
if (col == 2) {
inst->KSO_SEL = MCHP_KSCAN_KSO_EN;
- gpio_set_level(GPIO_KBD_KSO2, 1);
+ cros_kb_raw_set_col2(1);
} else {
inst->KSO_SEL = col + CONFIG_KEYBOARD_KSO_BASE;
- gpio_set_level(GPIO_KBD_KSO2, 0);
+ cros_kb_raw_set_col2(0);
}
} else {
inst->KSO_SEL = col + CONFIG_KEYBOARD_KSO_BASE;
diff --git a/zephyr/dts/bindings/gpio/gpio-enum-name.yaml b/zephyr/dts/bindings/gpio/gpio-enum-name.yaml
index 361d9956d3..3ad1bc07f4 100644
--- a/zephyr/dts/bindings/gpio/gpio-enum-name.yaml
+++ b/zephyr/dts/bindings/gpio/gpio-enum-name.yaml
@@ -48,7 +48,6 @@ properties:
- GPIO_EN_S5_RAILS
- GPIO_EN_USB_A_5V
- GPIO_IMVP9_VRRDY_OD
- - GPIO_KBD_KSO2
- GPIO_LID_ACCEL_INT_L
- GPIO_LID_OPEN
- GPIO_PACKET_MODE_EN
diff --git a/zephyr/include/drivers/cros_kb_raw.h b/zephyr/include/drivers/cros_kb_raw.h
index 1724f59d95..d7c2b94f1f 100644
--- a/zephyr/include/drivers/cros_kb_raw.h
+++ b/zephyr/include/drivers/cros_kb_raw.h
@@ -1,7 +1,6 @@
-/*
- * Copyright 2020 Google LLC
- *
- * SPDX-License-Identifier: Apache-2.0
+/* Copyright 2022 The Chromium OS Authors. All rights reserved.
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
*/
/**
@@ -25,6 +24,18 @@
#include <kernel.h>
#include <device.h>
+#include <drivers/gpio.h>
+
+#include "gpio_signal.h"
+
+/*
+ * When CONFIG_PLATFORM_EC_KEYBOARD_COL2_INVERTED is enabled, the keyboard
+ * driver must drive the column 2 output to the opposite state. If the keyboard
+ * driver doesn't support push-pull operation, then the pin is set using the
+ * GPIO module. Use the presence of the alias node "gpio-kbd-kso2" to determine
+ * when this code is needed.
+ */
+#define KBD_KS02_NODE DT_ALIAS(gpio_kbd_kso2)
/**
* @brief CROS Keyboard Raw Driver APIs
@@ -163,6 +174,25 @@ static inline int z_impl_cros_kb_raw_enable_interrupt(const struct device *dev,
}
/**
+ * @brief Set the physical value of the keyboard column 2 output.
+ *
+ * When CONFIG_PLATFORM_EC_KEYBOARD_COL2_INVERTED is enabled, the keyboard
+ * driver must invert the column 2 output.
+ *
+ * @param value Physical value to set to the pin
+ */
+static inline void cros_kb_raw_set_col2(int value)
+{
+#if defined CONFIG_PLATFORM_EC_KEYBOARD_COL2_INVERTED && \
+ DT_NODE_EXISTS(KBD_KS02_NODE)
+ const struct gpio_dt_spec *kbd_dt_spec =
+ GPIO_DT_FROM_NODE(KBD_KS02_NODE);
+
+ gpio_pin_set_raw(kbd_dt_spec->port, kbd_dt_spec->pin, value);
+#endif
+}
+
+/**
* @}
*/
#include <syscalls/cros_kb_raw.h>
diff --git a/zephyr/projects/brya/brya/gpio.dts b/zephyr/projects/brya/brya/gpio.dts
index 3eb9e451f5..1d9bc14289 100644
--- a/zephyr/projects/brya/brya/gpio.dts
+++ b/zephyr/projects/brya/brya/gpio.dts
@@ -6,6 +6,7 @@
/ {
aliases {
gpio-wp = &gpio_ec_wp_l;
+ gpio-kbd-kso2 = &gpio_ec_kso_02_inv;
};
named-gpios {
@@ -118,9 +119,8 @@
gpios = <&gpio0 0 GPIO_INPUT>;
enum-name = "GPIO_AC_PRESENT";
};
- ec_kso_02_inv {
+ gpio_ec_kso_02_inv: ec_kso_02_inv {
gpios = <&gpio1 7 GPIO_OUT_LOW>;
- enum-name = "GPIO_KBD_KSO2";
};
gpio_ec_pch_wake_odl: ec_pch_wake_r_odl {
gpios = <&gpioc 0 GPIO_ODR_HIGH>;
diff --git a/zephyr/projects/corsola/gpio_kingler.dts b/zephyr/projects/corsola/gpio_kingler.dts
index cc3ee6338e..af35af16a9 100644
--- a/zephyr/projects/corsola/gpio_kingler.dts
+++ b/zephyr/projects/corsola/gpio_kingler.dts
@@ -6,6 +6,7 @@
/ {
aliases {
gpio-wp = &gpio_ec_wp_l;
+ gpio-kbd-kso2 = &gpio_ec_kso_02_inv;
};
named-gpios {
@@ -98,9 +99,8 @@
gpios = <&gpioc 1 (GPIO_ODR_HIGH | GPIO_VOLTAGE_1P8)>;
enum-name = "GPIO_EC_INT_L";
};
- ec_kso_02_inv {
+ gpio_ec_kso_02_inv: ec_kso_02_inv {
gpios = <&gpio1 7 GPIO_OUT_LOW>;
- enum-name = "GPIO_KBD_KSO2";
};
gpio_usb_c0_bc12_int_odl: usb_c0_bc12_int_odl {
gpios = <&gpio8 3 GPIO_INPUT>;
diff --git a/zephyr/projects/herobrine/gpio.dts b/zephyr/projects/herobrine/gpio.dts
index 22c9d59b68..b66f6c98eb 100644
--- a/zephyr/projects/herobrine/gpio.dts
+++ b/zephyr/projects/herobrine/gpio.dts
@@ -6,6 +6,7 @@
/ {
aliases {
gpio-wp = &gpio_ec_wp_odl;
+ gpio-kbd-kso2 = &gpio_ec_kso_02_inv;
};
named-gpios {
@@ -221,9 +222,8 @@
arm_x86 {
gpios = <&gpio6 6 GPIO_OUT_LOW>;
};
- ec_kso_02_inv {
+ gpio_ec_kso_02_inv: ec_kso_02_inv {
gpios = <&gpio1 7 GPIO_OUT_LOW>;
- enum-name = "GPIO_KBD_KSO2";
};
};
diff --git a/zephyr/projects/intelrvp/adlrvp/adlrvp_npcx/gpio.dts b/zephyr/projects/intelrvp/adlrvp/adlrvp_npcx/gpio.dts
index 617211ee5c..b0a8fb3480 100644
--- a/zephyr/projects/intelrvp/adlrvp/adlrvp_npcx/gpio.dts
+++ b/zephyr/projects/intelrvp/adlrvp/adlrvp_npcx/gpio.dts
@@ -6,6 +6,7 @@
/ {
aliases {
gpio-wp = &gpio_wp;
+ gpio-kbd-kso2 = &gpio_ec_kso_02_inv;
};
named-gpios {
@@ -269,9 +270,8 @@
me-g3-to-m3-ec {
gpios = <&gpioe 0 GPIO_INPUT>;
};
- ec-kso-02-inv {
+ gpio_ec_kso_02_inv: ec-kso-02-inv {
gpios = <&gpio1 7 GPIO_OUT_LOW>;
- enum-name = "GPIO_KBD_KSO2";
};
};
};
diff --git a/zephyr/projects/nissa/nivviks_generated.dts b/zephyr/projects/nissa/nivviks_generated.dts
index e0baf2251c..66b2defbea 100644
--- a/zephyr/projects/nissa/nivviks_generated.dts
+++ b/zephyr/projects/nissa/nivviks_generated.dts
@@ -66,7 +66,6 @@
};
gpio_ec_kso_02_inv: ec_kso_02_inv {
gpios = <&gpio1 7 GPIO_OUTPUT>;
- enum-name = "GPIO_KBD_KSO2";
};
gpio_ec_pch_wake_odl: ec_pch_wake_odl {
gpios = <&gpiob 0 GPIO_ODR_LOW>;
diff --git a/zephyr/projects/nissa/nivviks_overlay.dts b/zephyr/projects/nissa/nivviks_overlay.dts
index b730c06e1e..d789bfb8f8 100644
--- a/zephyr/projects/nissa/nivviks_overlay.dts
+++ b/zephyr/projects/nissa/nivviks_overlay.dts
@@ -9,6 +9,7 @@
aliases {
gpio-wp = &gpio_ec_wp_odl;
int-wp = &int_wp_l;
+ gpio-kbd-kso2 = &gpio_ec_kso_02_inv;
};
batteries {
diff --git a/zephyr/projects/npcx_evb/npcx7/include/gpio_map.h b/zephyr/projects/npcx_evb/npcx7/include/gpio_map.h
index b4c6591fbc..c2b81fe5c6 100644
--- a/zephyr/projects/npcx_evb/npcx7/include/gpio_map.h
+++ b/zephyr/projects/npcx_evb/npcx7/include/gpio_map.h
@@ -6,9 +6,4 @@
#ifndef __ZEPHYR_GPIO_MAP_H
#define __ZEPHYR_GPIO_MAP_H
-#include <devicetree.h>
-#include <gpio_signal.h>
-
-#define GPIO_KBD_KSO2 GPIO_UNIMPLEMENTED
-
#endif /* __ZEPHYR_GPIO_MAP_H */
diff --git a/zephyr/projects/npcx_evb/npcx9/include/gpio_map.h b/zephyr/projects/npcx_evb/npcx9/include/gpio_map.h
index b4c6591fbc..c2b81fe5c6 100644
--- a/zephyr/projects/npcx_evb/npcx9/include/gpio_map.h
+++ b/zephyr/projects/npcx_evb/npcx9/include/gpio_map.h
@@ -6,9 +6,4 @@
#ifndef __ZEPHYR_GPIO_MAP_H
#define __ZEPHYR_GPIO_MAP_H
-#include <devicetree.h>
-#include <gpio_signal.h>
-
-#define GPIO_KBD_KSO2 GPIO_UNIMPLEMENTED
-
#endif /* __ZEPHYR_GPIO_MAP_H */
diff --git a/zephyr/projects/skyrim/gpio.dts b/zephyr/projects/skyrim/gpio.dts
index 1ae02b9257..c19af3cad3 100644
--- a/zephyr/projects/skyrim/gpio.dts
+++ b/zephyr/projects/skyrim/gpio.dts
@@ -171,9 +171,8 @@
gpios = <&gpio9 7 GPIO_OUT_HIGH>;
enum-name = "GPIO_EN_KEYBOARD_BACKLIGHT";
};
- ec_kso_02_inv {
+ gpio_ec_kso_02_inv: ec_kso_02_inv {
gpios = <&gpio1 7 GPIO_OUT_LOW>;
- enum-name = "GPIO_KBD_KSO2";
};
tablet_mode {
gpios = <&gpioc 1 GPIO_INPUT>;
diff --git a/zephyr/projects/skyrim/guybrush.dts b/zephyr/projects/skyrim/guybrush.dts
index 9473106b4b..0286bc6f1f 100644
--- a/zephyr/projects/skyrim/guybrush.dts
+++ b/zephyr/projects/skyrim/guybrush.dts
@@ -6,6 +6,7 @@
/ {
aliases {
gpio-wp = &gpio_wp;
+ gpio-kbd-kso2 = &gpio_ec_kso_02_inv;
};
named-gpios {
diff --git a/zephyr/projects/skyrim/skyrim.dts b/zephyr/projects/skyrim/skyrim.dts
index f21c147804..4e75721f1d 100644
--- a/zephyr/projects/skyrim/skyrim.dts
+++ b/zephyr/projects/skyrim/skyrim.dts
@@ -7,6 +7,7 @@
aliases {
gpio-wp = &gpio_wp;
gpio-cbi-wp = &gpio_cbi_wp;
+ gpio-kbd-kso2 = &gpio_ec_kso_02_inv;
};
named-gpios {
diff --git a/zephyr/projects/trogdor/lazor/gpio.dts b/zephyr/projects/trogdor/lazor/gpio.dts
index 7f71cee210..bdf4503eeb 100644
--- a/zephyr/projects/trogdor/lazor/gpio.dts
+++ b/zephyr/projects/trogdor/lazor/gpio.dts
@@ -8,6 +8,7 @@
/ {
aliases {
gpio-wp = &gpio_ec_wp_odl;
+ gpio-kbd-kso2 = &gpio_ec_kso_02_inv;
};
named-gpios {
@@ -216,9 +217,8 @@
arm_x86 {
gpios = <&gpio6 6 GPIO_OUT_LOW>;
};
- ec_kso_02_inv {
+ gpio_ec_kso_02_inv: ec_kso_02_inv {
gpios = <&gpio1 7 GPIO_OUT_LOW>;
- enum-name = "GPIO_KBD_KSO2";
};
};
diff --git a/zephyr/projects/volteer/volteer/gpio.dts b/zephyr/projects/volteer/volteer/gpio.dts
index 5285c1475e..a4e6c9d0a3 100644
--- a/zephyr/projects/volteer/volteer/gpio.dts
+++ b/zephyr/projects/volteer/volteer/gpio.dts
@@ -6,6 +6,7 @@
/ {
aliases {
gpio-wp = &gpio_wp;
+ gpio-kbd-kso2 = &gpio_ec_kso_02_inv;
};
named-gpios {
@@ -269,9 +270,8 @@
gpio_en_pp5000_fan: en_pp5000_fan {
gpios = <&gpio6 1 GPIO_OUT_LOW>;
};
- ec_kso_02_inv {
+ gpio_ec_kso_02_inv: ec_kso_02_inv {
gpios = <&gpio1 7 GPIO_OUT_LOW>;
- enum-name = "GPIO_KBD_KSO2";
};
};
diff --git a/zephyr/test/drivers/overlay.dts b/zephyr/test/drivers/overlay.dts
index 6b4d422759..81945a2b84 100644
--- a/zephyr/test/drivers/overlay.dts
+++ b/zephyr/test/drivers/overlay.dts
@@ -20,6 +20,7 @@
lis2dw12-int = &ms_lis2dw12_accel;
tcs3400-int = &tcs3400_clear;
gpio-wp = &gpio_wp_l;
+ gpio-kbd-kso2 = &gpio_ec_kso_02_inv;
};
/*
* Keep these GPIOs in pin order.
@@ -41,6 +42,9 @@
gpios = <&gpio0 3 (GPIO_INPUT | GPIO_OUTPUT |
GPIO_ACTIVE_LOW)>;
};
+ gpio_ec_kso_02_inv: ec_kso_02_inv {
+ gpios = <&gpio0 4 (GPIO_INPUT | GPIO_OUT_LOW)>;
+ };
pg_ec_dsw_pwrok {
gpios = <&gpio0 4 GPIO_INPUT>;
enum-name = "GPIO_TEMP_SENSOR_POWER";