From 87937af63afcf30551072c7967c5fcef4a4b9701 Mon Sep 17 00:00:00 2001 From: Eric Yilun Lin Date: Mon, 7 Mar 2022 17:30:42 +0800 Subject: kingler: enable FRS on C1 RT1718S_GPIO1: EN_SNK -> 0 when FRS signal rx RT1718S_GPIO2: EN_SRC -> 1 when FRS signal rx RT1718S_GPIO3: EN_FRS -> 1 when FRS enabled BUG=b:223086905 TEST=Able to do FRS when initially sinking with 20V/5V BRANCH=none Change-Id: I3d8dcfcb72a5f320c692a145d3779a6144d04332 Signed-off-by: Eric Yilun Lin Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/3506876 Reviewed-by: Ting Shen Tested-by: Eric Yilun Lin Auto-Submit: Eric Yilun Lin Commit-Queue: Eric Yilun Lin --- zephyr/projects/corsola/src/kingler/usbc_config.c | 24 ++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/zephyr/projects/corsola/src/kingler/usbc_config.c b/zephyr/projects/corsola/src/kingler/usbc_config.c index 8521013e98..bc41eda949 100644 --- a/zephyr/projects/corsola/src/kingler/usbc_config.c +++ b/zephyr/projects/corsola/src/kingler/usbc_config.c @@ -44,7 +44,8 @@ struct tcpc_config_t tcpc_config[CONFIG_USB_PD_PORT_MAX_COUNT] = { }, .drv = &anx7447_tcpm_drv, /* Alert is active-low, open-drain */ - .flags = TCPC_FLAGS_ALERT_OD | TCPC_FLAGS_VBUS_MONITOR, + .flags = TCPC_FLAGS_ALERT_OD | TCPC_FLAGS_VBUS_MONITOR | + TCPC_FLAGS_CONTROL_FRS, }, [USBC_PORT_C1] = { .bus_type = EC_BUS_TYPE_I2C, @@ -54,11 +55,11 @@ struct tcpc_config_t tcpc_config[CONFIG_USB_PD_PORT_MAX_COUNT] = { }, .drv = &rt1718s_tcpm_drv, /* Alert is active-low, open-drain */ - .flags = TCPC_FLAGS_ALERT_OD | TCPC_FLAGS_VBUS_MONITOR, + .flags = TCPC_FLAGS_ALERT_OD | TCPC_FLAGS_VBUS_MONITOR | + TCPC_FLAGS_CONTROL_FRS, } }; - struct ppc_config_t ppc_chips[CONFIG_USB_PD_PORT_MAX_COUNT] = { [USBC_PORT_C0] = { .i2c_port = I2C_PORT_USB_C0, @@ -185,9 +186,9 @@ __override int board_rt1718s_init(int port) gpio_initialized = true; } - /* gpio 1/2 output high when receiving frs signal */ + /* gpio1 low, gpio2 output high when receiving frs signal */ RETURN_ERROR(rt1718s_update_bits8(port, RT1718S_GPIO1_VBUS_CTRL, - RT1718S_GPIO1_VBUS_CTRL_FRS_RX_VBUS, 0xFF)); + RT1718S_GPIO1_VBUS_CTRL_FRS_RX_VBUS, 0)); RETURN_ERROR(rt1718s_update_bits8(port, RT1718S_GPIO2_VBUS_CTRL, RT1718S_GPIO2_VBUS_CTRL_FRS_RX_VBUS, 0xFF)); @@ -211,6 +212,19 @@ __override int board_rt1718s_init(int port) return EC_SUCCESS; } +__override int board_rt1718s_set_frs_enable(int port, int enable) +{ + if (port == USBC_PORT_C1) + /* + * Use set_flags (implemented by a single i2c write) instead + * of set_level (= i2c_update) to save one read operation in + * FRS path. + */ + rt1718s_gpio_set_flags(port, GPIO_EN_USB_C1_FRS, + enable ? GPIO_OUT_HIGH : GPIO_OUT_LOW); + return EC_SUCCESS; +} + void board_reset_pd_mcu(void) { -- cgit v1.2.1