diff options
author | Firas Sammoura <fsammoura@google.com> | 2022-06-17 16:41:11 +0000 |
---|---|---|
committer | Firas Sammoura <fsammoura@google.com> | 2022-06-17 16:41:11 +0000 |
commit | 6c1587ca70f558b4f96b3f0b18ad8b027d3ba99d (patch) | |
tree | 9a15b4a98d7987870a1805a33883d0cf9123fc05 /driver/tcpm/rt1718s.c | |
parent | 63a8a1366e390b757c37e167927102be0fc4fb63 (diff) | |
parent | a46d3f3feaac0d69012f61b66f652bff991d05a7 (diff) | |
download | chrome-ec-6c1587ca70f558b4f96b3f0b18ad8b027d3ba99d.tar.gz |
Merge remote-tracking branch cros/main into firmware-fpmcu-dartmonkey-release
Generated by: ./util/update_release_branch.py --board dartmonkey --relevant_paths_file ./util/fingerprint-relevant-paths.txt firmware-fpmcu-dartmonkey-release
Relevant changes:
git log --oneline 63a8a1366e..a46d3f3fea -- board/nocturne_fp
board/dartmonkey common/fpsensor docs/fingerprint driver/fingerprint
util/getversion.sh
981fb88cf8 docs/fingerprint: Resolve contradictory FPMCU factory flashing instructions
60032a8828 docs/fingerprint: Clean up formatting in fingerprint-factory-quick-guide.md
f49eb6f894 docs/fingerprint: Run mdformat
64aa5fc7bb docs/fingerprint: Add links to info on fuzz testing
8bd99cc434 fpsensor: Use correct return type
2b2d7a991d fpsensor: Use correct return type
BRANCH=None
BUG=b:234772776 b:234181908
TEST=`make -j buildall`
Cq-Include-Trybots: chromeos/cq:cq-orchestrator
Signed-off-by: Firas Sammoura <fsammoura@google.com>
Change-Id: I1714a77d292aad81bdc71982c88b2b067cfdada7
Diffstat (limited to 'driver/tcpm/rt1718s.c')
-rw-r--r-- | driver/tcpm/rt1718s.c | 63 |
1 files changed, 61 insertions, 2 deletions
diff --git a/driver/tcpm/rt1718s.c b/driver/tcpm/rt1718s.c index d90e09805d..e985419668 100644 --- a/driver/tcpm/rt1718s.c +++ b/driver/tcpm/rt1718s.c @@ -207,7 +207,7 @@ static int rt1718s_workaround(int port) 0xFF)); RETURN_ERROR(rt1718s_update_bits8(port, RT1718S_VCON_CTRL4, RT1718S_VCON_CTRL4_UVP_CP_EN | - RT1718S_VCON_CTRL4_OVP_CP_EN, + RT1718S_VCON_CTRL4_OCP_CP_EN, 0)); RETURN_ERROR(rt1718s_update_bits8(port, RT1718S_VCONN_CONTROL_2, RT1718S_VCONN_CONTROL_2_OVP_EN_CC1 | @@ -222,6 +222,42 @@ static int rt1718s_workaround(int port) return EC_SUCCESS; } +static int rt1718s_set_vconn(int port, int enable) +{ + if (enable) { + /* + * b/233698718#comment9: The initial output spike will be likely + * trigger the Vconn OCP. Workaround this by disabling the OCP + * at the beginning of sourcing Vconn, and then enable OCP back + * after Vconn sourced. + */ + RETURN_ERROR(rt1718s_update_bits8(port, RT1718S_VCON_CTRL3, + RT1718S_VCON_LIMIT_MODE, + 0xFF)); + + /* Enable Vconn RVP */ + RETURN_ERROR(rt1718s_update_bits8( + port, RT1718S_VCONN_CONTROL_2, + RT1718S_VCONN_CONTROL_2_RVP_EN, 0xFF)); + } + + RETURN_ERROR(tcpci_tcpm_set_vconn(port, enable)); + + if (enable) { + /* It takes 10ms that we can switch back to shutdown mode. */ + msleep(10); + RETURN_ERROR(rt1718s_update_bits8(port, RT1718S_VCON_CTRL3, + RT1718S_VCON_LIMIT_MODE, 0)); + } else { + /* Disable Vconn RVP */ + RETURN_ERROR(rt1718s_update_bits8( + port, RT1718S_VCONN_CONTROL_2, + RT1718S_VCONN_CONTROL_2_RVP_EN, 0x0)); + } + + return EC_SUCCESS; +} + static int rt1718s_init(int port) { static bool need_sw_reset = true; @@ -242,6 +278,10 @@ static int rt1718s_init(int port) RETURN_ERROR(rt1718s_update_bits8(port, RT1718S_VCONN_CONTROL_3, RT1718S_VCONN_CONTROL_3_VCONN_OCP_SEL, 0x7F)); + /* Increase the Vconn OCP shoot detection from 200ns to 3~5us */ + RETURN_ERROR(rt1718s_update_bits8(port, RT1718S_VCON_CTRL4, + RT1718S_VCON_CTRL4_OCP_CP_EN, 0)); + /* Disable FOD function */ RETURN_ERROR(rt1718s_update_bits8(port, 0xCF, 0x40, 0x00)); @@ -722,6 +762,22 @@ static int command_rt1718s_gpio(int argc, char **argv) } DECLARE_CONSOLE_COMMAND(rt1718s_gpio, command_rt1718s_gpio, "", "RT1718S GPIO"); +#ifdef CONFIG_USB_PD_TCPM_SBU +static int rt1718s_set_sbu(int port, bool enable) +{ + /* + * The `enable` here means to enable the SBU line (set 1) + * - true: connect SBU lines from outer to the host + * - false: isolate the SBU lines + */ + return rt1718s_update_bits8(port, RT1718S_RT2_SBU_CTRL_01, + RT1718S_RT2_SBU_CTRL_01_SBU_VIEN | + RT1718S_RT2_SBU_CTRL_01_SBU1_SWEN | + RT1718S_RT2_SBU_CTRL_01_SBU2_SWEN, + enable ? 0xFF : 0); +} +#endif + /* RT1718S is a TCPCI compatible port controller */ const struct tcpm_drv rt1718s_tcpm_drv = { .init = &rt1718s_init, @@ -736,7 +792,7 @@ const struct tcpm_drv rt1718s_tcpm_drv = { #ifdef CONFIG_USB_PD_DECODE_SOP .sop_prime_enable = &tcpci_tcpm_sop_prime_enable, #endif - .set_vconn = &tcpci_tcpm_set_vconn, + .set_vconn = &rt1718s_set_vconn, .set_msg_header = &tcpci_tcpm_set_msg_header, .set_rx_enable = &tcpci_tcpm_set_rx_enable, .get_message_raw = &tcpci_tcpm_get_message_raw, @@ -758,6 +814,9 @@ const struct tcpm_drv rt1718s_tcpm_drv = { .set_frs_enable = &rt1718s_set_frs_enable, #endif .set_bist_test_mode = &tcpci_set_bist_test_mode, +#ifdef CONFIG_USB_PD_TCPM_SBU + .set_sbu = &rt1718s_set_sbu, +#endif }; const struct bc12_drv rt1718s_bc12_drv = { |