summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJosh-Tsai <josh_tsai@compal.corp-partner.google.com>2022-12-20 19:41:30 +0800
committerChromeos LUCI <chromeos-scoped@luci-project-accounts.iam.gserviceaccount.com>2022-12-28 19:57:29 +0000
commit04698e3df16960e5cc97094f186ccd2e41a0bd34 (patch)
tree353c284419c0cf0fdc3307652bed2c73332e3bd2
parent35805c0f419505e72857be3d933eb6ee1bdb9c9e (diff)
downloadchrome-ec-04698e3df16960e5cc97094f186ccd2e41a0bd34.tar.gz
skyrim: save and store the io expander status when NCT38xx reset
Upstream Zephyr support the get_config and get_direction in nct38xx. Use the upstream API to implement the function which saves and stores the nct38xx gpio status when it is doing the reset. BRANCH=None BUG=b:260534665 LOW_COVERAGE_REASON=no unit test for skyrim board yet: b/247151116 TEST=Winterhold USBA is workable when wake up from battery cutoff Change-Id: I3394ed2c7f39be494bd5df9e076871d11ea0bcf0 Signed-off-by: Josh-Tsai <josh_tsai@compal.corp-partner.google.com> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/4115055 Reviewed-by: Keith Short <keithshort@chromium.org> Code-Coverage: Zoss <zoss-cl-coverage@prod.google.com> Reviewed-by: Elthan Huang <elthan_huang@compal.corp-partner.google.com> Commit-Queue: Keith Short <keithshort@chromium.org> Reviewed-by: Diana Z <dzigterman@chromium.org>
-rw-r--r--zephyr/program/skyrim/src/usbc_config.c15
-rw-r--r--zephyr/program/skyrim/winterhold/project.conf3
2 files changed, 15 insertions, 3 deletions
diff --git a/zephyr/program/skyrim/src/usbc_config.c b/zephyr/program/skyrim/src/usbc_config.c
index 5319504069..4f2c43ce4c 100644
--- a/zephyr/program/skyrim/src/usbc_config.c
+++ b/zephyr/program/skyrim/src/usbc_config.c
@@ -244,7 +244,10 @@ static void reset_nct38xx_port(int port)
const struct gpio_dt_spec *reset_gpio_l;
const struct device *ioex_port0, *ioex_port1;
- /* TODO(b/225189538): Save and restore ioex signals */
+ /* The maximum pin numbers of the NCT38xx IO expander port is 8 */
+ gpio_flags_t saved_port0_flags[8] = { 0 };
+ gpio_flags_t saved_port1_flags[8] = { 0 };
+
if (port == USBC_PORT_C0) {
reset_gpio_l = GPIO_DT_FROM_NODELABEL(gpio_usb_c0_tcpc_rst_l);
ioex_port0 = DEVICE_DT_GET(DT_NODELABEL(ioex_c0_port0));
@@ -257,6 +260,10 @@ static void reset_nct38xx_port(int port)
/* Invalid port: do nothing */
return;
}
+ gpio_save_port_config(ioex_port0, saved_port0_flags,
+ ARRAY_SIZE(saved_port0_flags));
+ gpio_save_port_config(ioex_port1, saved_port1_flags,
+ ARRAY_SIZE(saved_port1_flags));
gpio_pin_set_dt(reset_gpio_l, 0);
msleep(NCT38XX_RESET_HOLD_DELAY_MS);
@@ -266,8 +273,10 @@ static void reset_nct38xx_port(int port)
msleep(NCT3807_RESET_POST_DELAY_MS);
/* Re-enable the IO expander pins */
- gpio_reset_port(ioex_port0);
- gpio_reset_port(ioex_port1);
+ gpio_restore_port_config(ioex_port0, saved_port0_flags,
+ ARRAY_SIZE(saved_port0_flags));
+ gpio_restore_port_config(ioex_port1, saved_port1_flags,
+ ARRAY_SIZE(saved_port1_flags));
}
void board_reset_pd_mcu(void)
diff --git a/zephyr/program/skyrim/winterhold/project.conf b/zephyr/program/skyrim/winterhold/project.conf
index 5c8087ddd8..4c0aba19ab 100644
--- a/zephyr/program/skyrim/winterhold/project.conf
+++ b/zephyr/program/skyrim/winterhold/project.conf
@@ -48,3 +48,6 @@ CONFIG_PLATFORM_EC_BODY_DETECTION=y
CONFIG_PLATFORM_EC_BODY_DETECTION_ALWAYS_ENABLE_IN_S0=y
CONFIG_PLATFORM_EC_BODY_DETECTION_NOTIFY_MODE_CHANGE=y
CONFIG_PLATFORM_EC_GESTURE_HOST_DETECTION=y
+
+# GPIO configuration
+CONFIG_GPIO_GET_CONFIG=y