diff options
author | Keith Short <keithshort@chromium.org> | 2022-02-16 10:17:47 -0700 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2022-02-24 21:48:48 +0000 |
commit | 785059da65abf05d45ac800b086f116465161e5e (patch) | |
tree | 2d23bec110f1e46303873116e2274ec36b54f2cd | |
parent | 059d49052511843f5396fb9fc68ab47e23f71e2a (diff) | |
download | chrome-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.c | 24 | ||||
-rw-r--r-- | zephyr/drivers/cros_kb_raw/cros_kb_raw_xec.c | 16 | ||||
-rw-r--r-- | zephyr/dts/bindings/gpio/gpio-enum-name.yaml | 1 | ||||
-rw-r--r-- | zephyr/include/drivers/cros_kb_raw.h | 38 | ||||
-rw-r--r-- | zephyr/projects/brya/brya/gpio.dts | 4 | ||||
-rw-r--r-- | zephyr/projects/corsola/gpio_kingler.dts | 4 | ||||
-rw-r--r-- | zephyr/projects/herobrine/gpio.dts | 4 | ||||
-rw-r--r-- | zephyr/projects/intelrvp/adlrvp/adlrvp_npcx/gpio.dts | 4 | ||||
-rw-r--r-- | zephyr/projects/nissa/nivviks_generated.dts | 1 | ||||
-rw-r--r-- | zephyr/projects/nissa/nivviks_overlay.dts | 1 | ||||
-rw-r--r-- | zephyr/projects/npcx_evb/npcx7/include/gpio_map.h | 5 | ||||
-rw-r--r-- | zephyr/projects/npcx_evb/npcx9/include/gpio_map.h | 5 | ||||
-rw-r--r-- | zephyr/projects/skyrim/gpio.dts | 3 | ||||
-rw-r--r-- | zephyr/projects/skyrim/guybrush.dts | 1 | ||||
-rw-r--r-- | zephyr/projects/skyrim/skyrim.dts | 1 | ||||
-rw-r--r-- | zephyr/projects/trogdor/lazor/gpio.dts | 4 | ||||
-rw-r--r-- | zephyr/projects/volteer/volteer/gpio.dts | 4 | ||||
-rw-r--r-- | zephyr/test/drivers/overlay.dts | 4 |
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"; |