diff options
author | Ting Shen <phoenixshen@google.com> | 2023-04-18 18:00:38 +0800 |
---|---|---|
committer | Chromeos LUCI <chromeos-scoped@luci-project-accounts.iam.gserviceaccount.com> | 2023-04-20 12:09:22 +0000 |
commit | 41cfe457af4c63c7b982be1d5255a4ae38306a0d (patch) | |
tree | 08d14ae65f8f44371d5b3ede88af860e1a3f59b2 | |
parent | 1c53dfb3b78280f5648bb5e8b4dd43495070c789 (diff) | |
download | chrome-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.c | 42 | ||||
-rw-r--r-- | zephyr/program/corsola/src/npcx_usb_pd_policy.c | 50 | ||||
-rw-r--r-- | zephyr/program/corsola/src/usb_pd_policy.c | 48 | ||||
-rw-r--r-- | zephyr/test/krabby/CMakeLists.txt | 3 | ||||
-rw-r--r-- | zephyr/test/krabby/common.dtsi | 8 | ||||
-rw-r--r-- | zephyr/test/krabby/src/stubs.c | 5 | ||||
-rw-r--r-- | zephyr/test/krabby/src/usbc_config.c | 32 |
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); |