diff options
author | Eric Yilun Lin <yllin@chromium.org> | 2023-05-11 14:43:39 +0800 |
---|---|---|
committer | Chromeos LUCI <chromeos-scoped@luci-project-accounts.iam.gserviceaccount.com> | 2023-05-12 09:46:40 +0000 |
commit | 71411640b887ca37c80783bef8ab4ec1d5a15c28 (patch) | |
tree | 254575bc7ac6c5491cfe9a00af055ae6207395b5 | |
parent | 940d056342f76d940074a4ab889cca1504c9f305 (diff) | |
download | chrome-ec-71411640b887ca37c80783bef8ab4ec1d5a15c28.tar.gz |
rt1718s: integrate board src enable functions
Integrate the source enable functions into the driver.
Also, reorder the TCPCI call and the board hook call to ensure
the board hook is called later in case that the GPIO config auto-reload
clobbers the GPIO values.
BUG=b:276661970
TEST=test voltorb C1 source/sink
Change-Id: Ifff3ae116c088f13ee5e7eec3418810a35ead884
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/4522688
Reviewed-by: Ting Shen <phoenixshen@chromium.org>
Auto-Submit: Eric Yilun Lin <yllin@google.com>
Tested-by: Eric Yilun Lin <yllin@google.com>
Commit-Queue: Ting Shen <phoenixshen@chromium.org>
-rw-r--r-- | driver/tcpm/rt1718s.c | 28 | ||||
-rw-r--r-- | driver/tcpm/rt1718s.h | 9 | ||||
-rw-r--r-- | zephyr/program/corsola/src/npcx_usbc.c | 10 | ||||
-rw-r--r-- | zephyr/program/corsola/src/usb_pd_policy.c | 13 | ||||
-rw-r--r-- | zephyr/test/krabby/src/usbc_config.c | 23 |
5 files changed, 41 insertions, 42 deletions
diff --git a/driver/tcpm/rt1718s.c b/driver/tcpm/rt1718s.c index e8ee85368a..a1cdf06c9a 100644 --- a/driver/tcpm/rt1718s.c +++ b/driver/tcpm/rt1718s.c @@ -551,15 +551,37 @@ __overridable int board_rt1718s_set_snk_enable(int port, int enable) return EC_SUCCESS; } +__overridable int board_rt1718s_set_src_enable(int port, int enable) +{ + return EC_SUCCESS; +} + static int rt1718s_tcpm_set_snk_ctrl(int port, int enable) { int rv; - rv = board_rt1718s_set_snk_enable(port, enable); + /* The order matters. Board hook should run after the tcpm call to + * prevent the GPIO config auto-reload overwriting a wrong value. + */ + rv = tcpci_tcpm_set_snk_ctrl(port, enable); + if (rv) + return rv; + + return board_rt1718s_set_snk_enable(port, enable); +} + +static int rt1718s_tcpm_set_src_ctrl(int port, int enable) +{ + int rv; + + /* The order matters. Board hook should run after the tcpm call to + * prevent the GPIO config auto-reload overwriting a wrong value. + */ + rv = tcpci_tcpm_set_src_ctrl(port, enable); if (rv) return rv; - return tcpci_tcpm_set_snk_ctrl(port, enable); + return board_rt1718s_set_src_enable(port, enable); } static void rt1718s_alert(int port) @@ -806,7 +828,7 @@ const struct tcpm_drv rt1718s_tcpm_drv = { #endif .get_chip_info = &tcpci_get_chip_info, .set_snk_ctrl = &rt1718s_tcpm_set_snk_ctrl, - .set_src_ctrl = &tcpci_tcpm_set_src_ctrl, + .set_src_ctrl = &rt1718s_tcpm_set_src_ctrl, #ifdef CONFIG_USB_PD_TCPC_LOW_POWER .enter_low_power_mode = &rt1718s_enter_low_power_mode, #endif diff --git a/driver/tcpm/rt1718s.h b/driver/tcpm/rt1718s.h index d14e2bd498..d036c6901a 100644 --- a/driver/tcpm/rt1718s.h +++ b/driver/tcpm/rt1718s.h @@ -274,4 +274,13 @@ int rt1718s_sw_reset(int port); * @return EC_SUCCESS if success, EC_ERROR_UNKNOWN otherwise. */ __override_proto int board_rt1718s_set_snk_enable(int port, int enable); + +/** + * Board hook for rt1718s_set_src_enable + * + * @param port USB-C port + * @param enable enable/disable source + * @return EC_SUCCESS if success, EC_ERROR_UNKNOWN otherwise. + */ +__override_proto int board_rt1718s_set_src_enable(int port, int enable); #endif /* __CROS_EC_USB_PD_TCPM_MT6370_H */ diff --git a/zephyr/program/corsola/src/npcx_usbc.c b/zephyr/program/corsola/src/npcx_usbc.c index 2e1d8d11c5..8e9cd09e55 100644 --- a/zephyr/program/corsola/src/npcx_usbc.c +++ b/zephyr/program/corsola/src/npcx_usbc.c @@ -179,9 +179,13 @@ int board_vbus_source_enabled(int port) #if CONFIG_USB_PD_PORT_MAX_COUNT > 1 __override int board_rt1718s_set_snk_enable(int port, int enable) { - if (port == USBC_PORT_C1) { - rt1718s_gpio_set_level(port, GPIO_EN_USB_C1_SINK, enable); - } + rt1718s_gpio_set_level(port, GPIO_EN_USB_C1_SINK, enable); + + return EC_SUCCESS; +} +__override int board_rt1718s_set_src_enable(int port, int enable) +{ + rt1718s_gpio_set_level(port, GPIO_EN_USB_C1_SOURCE, enable); return EC_SUCCESS; } diff --git a/zephyr/program/corsola/src/usb_pd_policy.c b/zephyr/program/corsola/src/usb_pd_policy.c index 30ded99aba..4b7e46cb74 100644 --- a/zephyr/program/corsola/src/usb_pd_policy.c +++ b/zephyr/program/corsola/src/usb_pd_policy.c @@ -229,12 +229,6 @@ void pd_power_supply_reset(int port) prev_en = ppc_is_sourcing_vbus(port); -#if defined(CONFIG_USB_PD_TCPM_RT1718S) && CONFIG_USB_PD_PORT_MAX_COUNT > 1 - if (port == USBC_PORT_C1) { - rt1718s_gpio_set_level(port, GPIO_EN_USB_C1_SOURCE, 0); - } -#endif - /* Disable VBUS. */ ppc_vbus_source_enable(port, 0); @@ -254,13 +248,6 @@ int pd_set_power_supply_ready(int port) pd_set_vbus_discharge(port, 0); -#if defined(CONFIG_USB_PD_TCPM_RT1718S) && CONFIG_USB_PD_PORT_MAX_COUNT > 1 - /* Provide Vbus. */ - if (port == USBC_PORT_C1) { - rt1718s_gpio_set_level(port, GPIO_EN_USB_C1_SOURCE, 1); - } -#endif - RETURN_ERROR(ppc_vbus_source_enable(port, 1)); /* Notify host of power info change. */ diff --git a/zephyr/test/krabby/src/usbc_config.c b/zephyr/test/krabby/src/usbc_config.c index 909a8f38a7..16d31d20de 100644 --- a/zephyr/test/krabby/src/usbc_config.c +++ b/zephyr/test/krabby/src/usbc_config.c @@ -8,10 +8,8 @@ #include "charge_manager.h" #include "driver/ppc/syv682x.h" #include "driver/ppc/syv682x_public.h" -#include "driver/tcpm/rt1718s.h" #include "emul/emul_common_i2c.h" #include "emul/emul_syv682x.h" -#include "emul/tcpc/emul_rt1718s.h" #include "i2c/i2c.h" #include "test_state.h" #include "usb_pd.h" @@ -33,17 +31,6 @@ static bool ppc_sink_enabled(int port) return !(val & (SYV682X_CONTROL_1_PWR_ENB | SYV682X_CONTROL_1_HV_DR)); } -static bool usb_c1_source_gpio_enabled(void) -{ - const struct emul *emul = EMUL_DT_GET(DT_NODELABEL(rt1718s_emul)); - uint16_t val = 0; - - rt1718s_emul_get_reg(emul, RT1718S_GPIO_CTRL(GPIO_EN_USB_C1_SOURCE), - &val); - - return val & RT1718S_GPIO_CTRL_O; -} - ZTEST(usbc_config, test_set_active_charge_port) { /* reset ppc state */ @@ -119,16 +106,6 @@ ZTEST(usbc_config, test_set_active_charge_port_fail) zassert_false(ppc_sink_enabled(1), NULL); } -ZTEST(usbc_config, test_rt1718s_gpio_toggle) -{ - /* toggle sourcing on port 1, expect rt1718s gpio also changes */ - zassert_false(usb_c1_source_gpio_enabled()); - zassert_ok(pd_set_power_supply_ready(1)); - zassert_true(usb_c1_source_gpio_enabled()); - pd_power_supply_reset(1); - zassert_false(usb_c1_source_gpio_enabled()); -} - ZTEST(usbc_config, test_adc_channel) { zassert_equal(board_get_vbus_adc(0), ADC_VBUS_C0, NULL); |