summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTing Shen <phoenixshen@google.com>2023-04-18 18:00:38 +0800
committerChromeos LUCI <chromeos-scoped@luci-project-accounts.iam.gserviceaccount.com>2023-04-20 12:09:22 +0000
commit41cfe457af4c63c7b982be1d5255a4ae38306a0d (patch)
tree08d14ae65f8f44371d5b3ede88af860e1a3f59b2
parent1c53dfb3b78280f5648bb5e8b4dd43495070c789 (diff)
downloadchrome-ec-41cfe457af4c63c7b982be1d5255a4ae38306a0d.tar.gz
corsola: merge pd_power_supply_* functions
pd_power_supply_* functions are almost identical between krabby and kingler. Since the krabby version is already tested, merge them to reduce test code implementation effort. BUG=b:272664811 TEST=1) ./twister 2) zmake compare-builds krabby kingler BRANCH=none Change-Id: If00c8576589ae657447a7adfb18c46907f47538c Signed-off-by: Ting Shen <phoenixshen@google.com> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/4439254 Reviewed-by: Eric Yilun Lin <yllin@google.com> Commit-Queue: Ting Shen <phoenixshen@chromium.org> Tested-by: Ting Shen <phoenixshen@chromium.org>
-rw-r--r--zephyr/program/corsola/src/ite_usb_pd_policy.c42
-rw-r--r--zephyr/program/corsola/src/npcx_usb_pd_policy.c50
-rw-r--r--zephyr/program/corsola/src/usb_pd_policy.c48
-rw-r--r--zephyr/test/krabby/CMakeLists.txt3
-rw-r--r--zephyr/test/krabby/common.dtsi8
-rw-r--r--zephyr/test/krabby/src/stubs.c5
-rw-r--r--zephyr/test/krabby/src/usbc_config.c32
7 files changed, 86 insertions, 102 deletions
diff --git a/zephyr/program/corsola/src/ite_usb_pd_policy.c b/zephyr/program/corsola/src/ite_usb_pd_policy.c
index 71ac98d14a..c4151f94f0 100644
--- a/zephyr/program/corsola/src/ite_usb_pd_policy.c
+++ b/zephyr/program/corsola/src/ite_usb_pd_policy.c
@@ -39,48 +39,6 @@ int pd_snk_is_vbus_provided(int port)
return vbus;
}
-void pd_power_supply_reset(int port)
-{
- int prev_en;
-
- prev_en = ppc_is_sourcing_vbus(port);
-
- /* Disable VBUS. */
- ppc_vbus_source_enable(port, 0);
-
- /* Enable discharge if we were previously sourcing 5V */
- if (prev_en) {
- pd_set_vbus_discharge(port, 1);
- }
-
- /* Notify host of power info change. */
- pd_send_host_event(PD_EVENT_POWER_CHANGE);
-}
-
-int pd_set_power_supply_ready(int port)
-{
- int rv;
-
- /* Disable charging. */
- rv = ppc_vbus_sink_enable(port, 0);
- if (rv) {
- return rv;
- }
-
- pd_set_vbus_discharge(port, 0);
-
- /* Provide Vbus. */
- rv = ppc_vbus_source_enable(port, 1);
- if (rv) {
- return rv;
- }
-
- /* Notify host of power info change. */
- pd_send_host_event(PD_EVENT_POWER_CHANGE);
-
- return EC_SUCCESS;
-}
-
int board_vbus_source_enabled(int port)
{
return ppc_is_sourcing_vbus(port);
diff --git a/zephyr/program/corsola/src/npcx_usb_pd_policy.c b/zephyr/program/corsola/src/npcx_usb_pd_policy.c
index 65be43807b..39c780bddd 100644
--- a/zephyr/program/corsola/src/npcx_usb_pd_policy.c
+++ b/zephyr/program/corsola/src/npcx_usb_pd_policy.c
@@ -12,56 +12,6 @@
#define CPRINTS(format, args...) cprints(CC_USBCHARGE, format, ##args)
#define CPRINTF(format, args...) cprintf(CC_USBCHARGE, format, ##args)
-void pd_power_supply_reset(int port)
-{
- int prev_en;
-
- prev_en = ppc_is_sourcing_vbus(port);
-
- if (port == USBC_PORT_C1) {
- rt1718s_gpio_set_level(port, GPIO_EN_USB_C1_SOURCE, 0);
- }
-
- /* Disable VBUS. */
- ppc_vbus_source_enable(port, 0);
-
- /* Enable discharge if we were previously sourcing 5V */
- if (prev_en) {
- pd_set_vbus_discharge(port, 1);
- }
-
- /* Notify host of power info change. */
- pd_send_host_event(PD_EVENT_POWER_CHANGE);
-}
-
-int pd_set_power_supply_ready(int port)
-{
- int rv;
-
- /* Disable charging. */
- rv = ppc_vbus_sink_enable(port, 0);
- if (rv) {
- return rv;
- }
-
- pd_set_vbus_discharge(port, 0);
-
- /* Provide Vbus. */
- if (port == USBC_PORT_C1) {
- rt1718s_gpio_set_level(port, GPIO_EN_USB_C1_SOURCE, 1);
- }
-
- rv = ppc_vbus_source_enable(port, 1);
- if (rv) {
- return rv;
- }
-
- /* Notify host of power info change. */
- pd_send_host_event(PD_EVENT_POWER_CHANGE);
-
- return EC_SUCCESS;
-}
-
int pd_snk_is_vbus_provided(int port)
{
/* TODO: use ADC? */
diff --git a/zephyr/program/corsola/src/usb_pd_policy.c b/zephyr/program/corsola/src/usb_pd_policy.c
index a7fa22fa41..06750149b9 100644
--- a/zephyr/program/corsola/src/usb_pd_policy.c
+++ b/zephyr/program/corsola/src/usb_pd_policy.c
@@ -6,11 +6,13 @@
#include "baseboard_usbc_config.h"
#include "chipset.h"
#include "console.h"
+#include "driver/tcpm/rt1718s.h"
#include "hooks.h"
#include "timer.h"
#include "typec_control.h"
#include "usb_mux.h"
#include "usb_pd.h"
+#include "usbc_ppc.h"
#define CPRINTS(format, args...) cprints(CC_USBPD, format, ##args)
#define CPRINTF(format, args...) cprintf(CC_USBPD, format, ##args)
@@ -220,3 +222,49 @@ __override int svdm_dp_attention(int port, uint32_t *payload)
/* ack */
return 1;
}
+
+void pd_power_supply_reset(int port)
+{
+ int prev_en;
+
+ prev_en = ppc_is_sourcing_vbus(port);
+
+#ifdef CONFIG_USB_PD_TCPM_RT1718S
+ 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);
+
+ /* Enable discharge if we were previously sourcing 5V */
+ if (prev_en) {
+ pd_set_vbus_discharge(port, 1);
+ }
+
+ /* Notify host of power info change. */
+ pd_send_host_event(PD_EVENT_POWER_CHANGE);
+}
+
+int pd_set_power_supply_ready(int port)
+{
+ /* Disable charging. */
+ RETURN_ERROR(ppc_vbus_sink_enable(port, 0));
+
+ pd_set_vbus_discharge(port, 0);
+
+#ifdef CONFIG_USB_PD_TCPM_RT1718S
+ /* 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. */
+ pd_send_host_event(PD_EVENT_POWER_CHANGE);
+
+ return EC_SUCCESS;
+}
diff --git a/zephyr/test/krabby/CMakeLists.txt b/zephyr/test/krabby/CMakeLists.txt
index eb99938456..529bb24682 100644
--- a/zephyr/test/krabby/CMakeLists.txt
+++ b/zephyr/test/krabby/CMakeLists.txt
@@ -15,7 +15,8 @@ zephyr_include_directories(
target_sources(app PRIVATE
src/stubs.c
${PLATFORM_EC_PROGRAM_DIR}/corsola/src/ite_usbc.c
- ${PLATFORM_EC_PROGRAM_DIR}/corsola/src/ite_usb_pd_policy.c)
+ ${PLATFORM_EC_PROGRAM_DIR}/corsola/src/ite_usb_pd_policy.c
+ ${PLATFORM_EC_PROGRAM_DIR}/corsola/src/usb_pd_policy.c)
target_sources_ifdef(CONFIG_TEST_KRABBY
app PRIVATE
diff --git a/zephyr/test/krabby/common.dtsi b/zephyr/test/krabby/common.dtsi
index e62b044bbc..d37ef93981 100644
--- a/zephyr/test/krabby/common.dtsi
+++ b/zephyr/test/krabby/common.dtsi
@@ -47,7 +47,7 @@
compatible = "named-usbc-port";
status = "okay";
reg = <1>;
- tcpc = <&tcpci_emul>;
+ tcpc = <&rt1718s_emul>;
ppc = <&ppc1_emul>;
usb-mux-chain-1 {
compatible = "cros-ec,usb-mux-chain";
@@ -147,6 +147,12 @@
frs_en_gpio = <&gpio_ec_x_gpio1>;
alert_gpio = <&gpio_x_ec_gpio2>;
};
+
+ rt1718s_emul: rt1718s@2c {
+ compatible = "cros,rt1718s-tcpc-emul", "richtek,rt1718s-tcpc";
+ status = "okay";
+ reg = <0x2c>;
+ };
};
&adc0 {
diff --git a/zephyr/test/krabby/src/stubs.c b/zephyr/test/krabby/src/stubs.c
index df1613528d..6e1bcc3b7f 100644
--- a/zephyr/test/krabby/src/stubs.c
+++ b/zephyr/test/krabby/src/stubs.c
@@ -13,11 +13,6 @@ __override void board_set_charge_limit(int port, int supplier, int charge_ma,
{
}
-int pd_check_vconn_swap(int port)
-{
- return 0;
-}
-
int board_get_adjusted_usb_pd_port_count(int port)
{
return 2;
diff --git a/zephyr/test/krabby/src/usbc_config.c b/zephyr/test/krabby/src/usbc_config.c
index 0b6c8bc80d..909a8f38a7 100644
--- a/zephyr/test/krabby/src/usbc_config.c
+++ b/zephyr/test/krabby/src/usbc_config.c
@@ -4,12 +4,16 @@
*/
#include "adc.h"
+#include "baseboard_usbc_config.h"
#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"
#include "usbc_ppc.h"
@@ -17,7 +21,7 @@
#include <zephyr/drivers/emul.h>
#include <zephyr/ztest.h>
-bool ppc_sink_enabled(int port)
+static bool ppc_sink_enabled(int port)
{
const struct emul *emul = (port == 0) ?
EMUL_DT_GET(DT_NODELABEL(ppc0_emul)) :
@@ -29,6 +33,17 @@ 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 */
@@ -59,7 +74,7 @@ ZTEST(usbc_config, test_set_active_charge_port)
zassert_false(ppc_sink_enabled(0), NULL);
zassert_true(ppc_sink_enabled(1), NULL);
- /* turn of sourcing, sinking port 0 */
+ /* turn off sourcing, sinking port 0 */
pd_power_supply_reset(0);
zassert_ok(board_set_active_charge_port(0), NULL);
zassert_true(ppc_sink_enabled(0), NULL);
@@ -104,6 +119,16 @@ 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);
@@ -128,4 +153,5 @@ static void reset_ppc_state(void *fixture)
board_set_active_charge_port(CHARGE_PORT_NONE);
}
-ZTEST_SUITE(usbc_config, NULL, NULL, reset_ppc_state, NULL, NULL);
+ZTEST_SUITE(usbc_config, krabby_predicate_post_main, NULL, reset_ppc_state,
+ NULL, NULL);