summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTing Shen <phoenixshen@google.com>2021-08-20 16:24:28 +0800
committerCommit Bot <commit-bot@chromium.org>2021-08-25 09:40:15 +0000
commiteacc8beb99351134912cd5c71280abfa3a857111 (patch)
tree81d8167374c4216df2c6b78ae99b857692d5ed52
parent5837e32e2dfbbbe50e5ba51eb6464b0c2b6f4103 (diff)
downloadchrome-ec-eacc8beb99351134912cd5c71280abfa3a857111.tar.gz
cherry: enable FRS
BUG=b:190348051 TEST=Verify FRS workable BRANCH=none Signed-off-by: Ting Shen <phoenixshen@google.com> Change-Id: Ie612cb2e5448db4432772f32e2f84ea6a471d4b6 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/3084323 Commit-Queue: Ting Shen <phoenixshen@chromium.org> Tested-by: Ting Shen <phoenixshen@chromium.org> Reviewed-by: Eric Yilun Lin <yllin@google.com>
-rw-r--r--baseboard/cherry/baseboard.c39
-rw-r--r--baseboard/cherry/baseboard.h1
2 files changed, 37 insertions, 3 deletions
diff --git a/baseboard/cherry/baseboard.c b/baseboard/cherry/baseboard.c
index 72f1a68881..93f898dad0 100644
--- a/baseboard/cherry/baseboard.c
+++ b/baseboard/cherry/baseboard.c
@@ -343,7 +343,7 @@ const struct i2c_port_t i2c_ports[] = {
{"bat_chg", IT83XX_I2C_CH_A, 100, GPIO_I2C_A_SCL, GPIO_I2C_A_SDA},
{"sensor", IT83XX_I2C_CH_B, 400, GPIO_I2C_B_SCL, GPIO_I2C_B_SDA},
{"usb0", IT83XX_I2C_CH_C, 400, GPIO_I2C_C_SCL, GPIO_I2C_C_SDA},
- {"usb1", IT83XX_I2C_CH_E, 400, GPIO_I2C_E_SCL, GPIO_I2C_E_SDA},
+ {"usb1", IT83XX_I2C_CH_E, 1000, GPIO_I2C_E_SCL, GPIO_I2C_E_SDA},
};
const unsigned int i2c_ports_used = ARRAY_SIZE(i2c_ports);
@@ -411,16 +411,25 @@ int rt1718s_gpio_ctrl(enum rt1718s_gpio_state state)
__override int board_rt1718s_init(int port)
{
- /* set GPIO1 is push pull, as output, output low. */
+ /* set GPIO 1~3 as push pull, as output, output low. */
RETURN_ERROR(rt1718s_update_bits8(port, RT1718S_GPIO1_CTRL,
RT1718S_GPIOX_OD_N | RT1718S_GPIOX_OE |
RT1718S_GPIOX_CTRL_GPIOX_O,
RT1718S_GPIOX_OD_N | RT1718S_GPIOX_OE));
- /* set GPIO2 is push pull, as output, output low. */
RETURN_ERROR(rt1718s_update_bits8(port, RT1718S_GPIO2_CTRL,
RT1718S_GPIOX_OD_N | RT1718S_GPIOX_OE |
RT1718S_GPIOX_CTRL_GPIOX_O,
RT1718S_GPIOX_OD_N | RT1718S_GPIOX_OE));
+ RETURN_ERROR(rt1718s_update_bits8(port, RT1718S_GPIO3_CTRL,
+ RT1718S_GPIOX_OD_N | RT1718S_GPIOX_OE |
+ RT1718S_GPIOX_CTRL_GPIOX_O,
+ RT1718S_GPIOX_OD_N | RT1718S_GPIOX_OE));
+
+ /* gpio 1/2 output high when receiving frx signal */
+ RETURN_ERROR(rt1718s_update_bits8(port, RT1718S_GPIO1_VBUS_CTRL,
+ RT1718S_GPIO1_VBUS_CTRL_FRS_RX_VBUS, 0xFF));
+ RETURN_ERROR(rt1718s_update_bits8(port, RT1718S_GPIO2_VBUS_CTRL,
+ RT1718S_GPIO2_VBUS_CTRL_FRS_RX_VBUS, 0xFF));
/* Turn on SBU switch */
RETURN_ERROR(rt1718s_update_bits8(port, RT1718S_RT2_SBU_CTRL_01,
@@ -428,6 +437,15 @@ __override int board_rt1718s_init(int port)
RT1718S_RT2_SBU_CTRL_01_SBU2_SWEN |
RT1718S_RT2_SBU_CTRL_01_SBU1_SWEN,
0xFF));
+ /* Trigger GPIO 1/2 change when FRS signal received */
+ RETURN_ERROR(rt1718s_update_bits8(port, RT1718S_FRS_CTRL3,
+ RT1718S_FRS_CTRL3_FRS_RX_WAIT_GPIO2 |
+ RT1718S_FRS_CTRL3_FRS_RX_WAIT_GPIO1,
+ RT1718S_FRS_CTRL3_FRS_RX_WAIT_GPIO2));
+ /* Set FRS signal detect time to 46.875us */
+ RETURN_ERROR(rt1718s_update_bits8(port, RT1718S_FRS_CTRL1,
+ RT1718S_FRS_CTRL1_FRSWAPRX_MASK,
+ 0xFF));
return EC_SUCCESS;
}
@@ -597,3 +615,18 @@ static void baseboard_init(void)
gpio_enable_interrupt(GPIO_USB_C0_BC12_INT_ODL);
}
DECLARE_HOOK(HOOK_INIT, baseboard_init, HOOK_PRIO_DEFAULT - 1);
+
+__override int board_pd_set_frs_enable(int port, int enable)
+{
+ int value;
+
+ if (port == 0)
+ return EC_SUCCESS;
+
+ value = RT1718S_GPIOX_OD_N | RT1718S_GPIOX_OE;
+ if (enable)
+ value |= RT1718S_GPIOX_CTRL_GPIOX_O;
+
+ /* Use write instead of update to save 1 i2c read in FRS path */
+ return rt1718s_write8(port, RT1718S_GPIO3_CTRL, value);
+}
diff --git a/baseboard/cherry/baseboard.h b/baseboard/cherry/baseboard.h
index 83a3557149..21ad6a5e5c 100644
--- a/baseboard/cherry/baseboard.h
+++ b/baseboard/cherry/baseboard.h
@@ -135,6 +135,7 @@
#define CONFIG_USB_PD_DP_HPD_GPIO_CUSTOM
#define CONFIG_USB_PD_DUAL_ROLE
#define CONFIG_USB_PD_DUAL_ROLE_AUTO_TOGGLE
+#define CONFIG_USB_PD_FRS_PPC
#define CONFIG_USB_PD_ITE_ACTIVE_PORT_COUNT 1
#define CONFIG_USB_PD_LOGGING
#define CONFIG_USB_PD_PORT_MAX_COUNT 2