summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Yilun Lin <yllin@chromium.org>2023-05-11 14:43:39 +0800
committerChromeos LUCI <chromeos-scoped@luci-project-accounts.iam.gserviceaccount.com>2023-05-12 09:46:40 +0000
commit71411640b887ca37c80783bef8ab4ec1d5a15c28 (patch)
tree254575bc7ac6c5491cfe9a00af055ae6207395b5
parent940d056342f76d940074a4ab889cca1504c9f305 (diff)
downloadchrome-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.c28
-rw-r--r--driver/tcpm/rt1718s.h9
-rw-r--r--zephyr/program/corsola/src/npcx_usbc.c10
-rw-r--r--zephyr/program/corsola/src/usb_pd_policy.c13
-rw-r--r--zephyr/test/krabby/src/usbc_config.c23
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);