diff options
author | YH Lin <yueherngl@chromium.org> | 2020-12-21 15:12:59 +0000 |
---|---|---|
committer | Commit Bot <commit-bot@chromium.org> | 2020-12-22 21:16:26 +0000 |
commit | 2998fbcc036338a16f2d66483b8cecb317316df0 (patch) | |
tree | 756a0e6b83b53d15f1c2ad63264e42d73086b420 | |
parent | 7e00bb887ad83857cb2020295d7ad50ecf55021f (diff) | |
download | chrome-ec-2998fbcc036338a16f2d66483b8cecb317316df0.tar.gz |
Revert "driver: Richtek update rt1715 driver code"
This reverts commit 7238cb2f23505aff739d60fa7fcd06bb934f4d4e.
Reason for revert: Initial merge was for unblocking the factory. Now build(s) have been done we can revert the CL.
Original change's description:
> driver: Richtek update rt1715 driver code
>
> Add rt1715 USB C PHY initial setting for better IOP compatibility.
> Add Rt1715_init_cc_params function to setup rt1715 PHY noise filter
> according to port partner’s CC status.rt1715_get_cc, rt1715_set_cc,
> rt1715_set_polarity functions and replace tcpci_tcpm_get_cc,
> tcpci_tcpm_set_cc, tcpci_tcpm_set_polarity.
>
> BUG=b:173023411, b:171461736
> BRANCH=master
> TEST=Pass TDA.2.1.2.1 BMC PHY RX BUSIDL with Volteer+RT1715
>
> Change-Id: I1bac27a155e152d42d4d35d72e2791909964da14
> Signed-off-by: Ben Chen <ben.chen2@quanta.corp-partner.google.com>
> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2583884
> Tested-by: Abe Levkoy <alevkoy@chromium.org>
> Reviewed-by: Abe Levkoy <alevkoy@chromium.org>
> Commit-Queue: Abe Levkoy <alevkoy@chromium.org>
Bug: b:173023411
Bug: b:171461736
Change-Id: I01e9765a0b369f6da93391bd0bb27581a5feee37
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2599759
Reviewed-by: YH Lin <yueherngl@chromium.org>
Reviewed-by: Keith Short <keithshort@chromium.org>
Commit-Queue: YH Lin <yueherngl@chromium.org>
Tested-by: YH Lin <yueherngl@chromium.org>
-rw-r--r-- | driver/tcpm/rt1715.c | 157 | ||||
-rw-r--r-- | driver/tcpm/rt1715.h | 44 |
2 files changed, 19 insertions, 182 deletions
diff --git a/driver/tcpm/rt1715.c b/driver/tcpm/rt1715.c index 007018006c..0455153a1b 100644 --- a/driver/tcpm/rt1715.c +++ b/driver/tcpm/rt1715.c @@ -2,6 +2,7 @@ * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ + /* Richtek RT1715 Type-C port controller */ #include "common.h" @@ -10,190 +11,52 @@ #include "tcpm.h" #include "timer.h" #include "usb_pd.h" -#include "usb_pd_tcpm.h" #ifndef CONFIG_USB_PD_TCPM_TCPCI #error "RT1715 is using a standard TCPCI interface" #error "Please upgrade your board configuration" #endif -static int rt1715_polarity[CONFIG_USB_PD_PORT_MAX_COUNT]; - static int rt1715_enable_ext_messages(int port, int enable) { return tcpc_update8(port, RT1715_REG_VENDOR_5, - RT1715_REG_VENDOR_5_ENEXTMSG, - enable ? MASK_SET : MASK_CLR); + RT1715_REG_VENDOR_5_ENEXTMSG, + enable ? MASK_SET : MASK_CLR); } static int rt1715_tcpci_tcpm_init(int port) { int rv; + /* RT1715 has a vendor-defined register reset */ rv = tcpc_update8(port, RT1715_REG_VENDOR_7, - RT1715_REG_VENDOR_7_SOFT_RESET, MASK_SET); + RT1715_REG_VENDOR_7_SOFT_RESET, MASK_SET); if (rv) return rv; msleep(10); - rv = tcpc_update8(port, RT1715_REG_VENDOR_5, - RT1715_REG_VENDOR_5_SHUTDOWN_OFF, MASK_SET); + RT1715_REG_VENDOR_5_SHUTDOWN_OFF, MASK_SET); if (rv) return rv; if (IS_ENABLED(CONFIG_USB_PD_REV30)) rt1715_enable_ext_messages(port, 1); - - rv = tcpc_write(port, RT1715_REG_I2CRST_CTRL, - (RT1715_REG_I2CRST_CTRL_EN | - RT1715_REG_I2CRST_CTRL_TOUT_200MS)); - if (rv) - return rv; - - /* tTCPCfilter : (26.7 * val) us */ - rv = tcpc_write(port, RT1715_REG_TTCPC_FILTER, - RT1715_REG_TTCPC_FILTER_400US); - if (rv) - return rv; - - /* DRP Duty : (51.2 + 6.4 * val) ms */ - rv = tcpc_write(port, RT1715_REG_DRP_TOGGLE_CYCLE, - RT1715_REG_DRP_TOGGLE_CYCLE_76MS); - if (rv) - return rv; - - /* dcSRC.DRP : 40% */ - rv = tcpc_write16(port, RT1715_REG_DRP_DUTY_CTRL, - RT1715_REG_DRP_DUTY_CTRL_40PERCENT); - if (rv) - return rv; - - /* PHY control */ - rv = tcpc_write(port, RT1715_REG_PHY_CTRL1, 0xF1); - if (rv) - return rv; - - rv = tcpc_write(port, RT1715_REG_PHY_CTRL2, 0x36); - if (rv) - return rv; - return tcpci_tcpm_init(port); } -/* - * Selects the CC PHY noise filter voltage level according to the current - * CC voltage level. - * - * @param cc_level The CC voltage level for the port's current role - * @return EC_SUCCESS if writes succeed; failure code otherwise - */ -static inline int rt1715_init_cc_params(int port, int cc_level) -{ - int rv, en, sel; - - if (cc_level == TYPEC_CC_VOLT_RP_DEF) { - /* RXCC threshold : 0.55V */ - en = 0; - - sel = RT1715_REG_BMCIO_RXDZSEL_OCCTRL_600MA - | RT1715_REG_BMCIO_RXDZSEL_MASK; - } else { - /* RD threshold : 0.35V & RP threshold : 0.75V */ - en = 1; - - sel = RT1715_REG_BMCIO_RXDZSEL_OCCTRL_600MA - | RT1715_REG_BMCIO_RXDZSEL_MASK; - } - - rv = tcpc_write(port, RT1715_REG_BMCIO_RXDZEN, en); - if (!rv) - rv = tcpc_write(port, RT1715_REG_BMCIO_RXDZSEL, sel); - - return rv; -} - -static int rt1715_get_cc(int port, enum tcpc_cc_voltage_status *cc1, - enum tcpc_cc_voltage_status *cc2) -{ - int status; - int rv; - int role, is_snk; - - rv = tcpc_read(port, TCPC_REG_CC_STATUS, &status); - /* If tcpc read fails, return error and CC as open */ - if (rv) { - *cc1 = TYPEC_CC_VOLT_OPEN; - - *cc2 = TYPEC_CC_VOLT_OPEN; - - return rv; - } - *cc1 = TCPC_REG_CC_STATUS_CC1(status); - - *cc2 = TCPC_REG_CC_STATUS_CC2(status); - - /* - * If status is not open, then OR in termination to convert to - * enum tcpc_cc_voltage_status. - * - * RT1715 TCPC follows TCPCI 0.6 protocol. When DRP not auto-toggling, - * it will not update the DRP_RESULT bits in TCPC_REG_CC_STATUS, - * instead, we should check CC1/CC2 bits in TCPC_REG_ROLE_CTRL. - */ - rv = tcpc_read(port, TCPC_REG_ROLE_CTRL, &role); - if (rv) - return rv; - - if (TCPC_REG_ROLE_CTRL_DRP(role)) - is_snk = TCPC_REG_CC_STATUS_TERM(status); - else - /* CC1/CC2 states are the same, checking one-side is enough. */ - is_snk = TCPC_REG_ROLE_CTRL_CC1(role) == TYPEC_CC_RD; - - if (is_snk) { - if (*cc1 != TYPEC_CC_VOLT_OPEN) - *cc1 |= 0x04; - - if (*cc2 != TYPEC_CC_VOLT_OPEN) - *cc2 |= 0x04; - } - rv = rt1715_init_cc_params(port, rt1715_polarity[port] ? *cc2 : *cc1); - - return rv; -} - -static int rt1715_set_cc(int port, int pull) -{ - if (pull == TYPEC_CC_RD) - rt1715_init_cc_params(port, TYPEC_CC_VOLT_RP_DEF); - - return tcpci_tcpm_set_cc(port, pull); -} - -static int rt1715_set_polarity(int port, enum tcpc_cc_polarity polarity) -{ - enum tcpc_cc_voltage_status cc1, cc2; - - rt1715_polarity[port] = polarity; - - rt1715_get_cc(port, &cc1, &cc2); - - return tcpci_tcpm_set_polarity(port, polarity); -} - const struct tcpm_drv rt1715_tcpm_drv = { .init = &rt1715_tcpci_tcpm_init, .release = &tcpci_tcpm_release, - .get_cc = &rt1715_get_cc, + .get_cc = &tcpci_tcpm_get_cc, #ifdef CONFIG_USB_PD_VBUS_DETECT_TCPC .check_vbus_level = &tcpci_tcpm_check_vbus_level, #endif .select_rp_value = &tcpci_tcpm_select_rp_value, - .set_cc = &rt1715_set_cc, - .set_polarity = &rt1715_set_polarity, + .set_cc = &tcpci_tcpm_set_cc, + .set_polarity = &tcpci_tcpm_set_polarity, #ifdef CONFIG_USB_PD_DECODE_SOP - .sop_prime_enable = &tcpci_tcpm_sop_prime_enable, + .sop_prime_enable = &tcpci_tcpm_sop_prime_enable, #endif .set_vconn = &tcpci_tcpm_set_vconn, .set_msg_header = &tcpci_tcpm_set_msg_header, diff --git a/driver/tcpm/rt1715.h b/driver/tcpm/rt1715.h index 9629f108c8..f9d2395446 100644 --- a/driver/tcpm/rt1715.h +++ b/driver/tcpm/rt1715.h @@ -2,49 +2,23 @@ * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ + /* Richtek RT1715 Type-C port controller */ + #ifndef __CROS_EC_USB_PD_TCPM_RT1715_H #define __CROS_EC_USB_PD_TCPM_RT1715_H /* I2C interface */ -#define RT1715_I2C_ADDR_FLAGS 0x4E - -#define RT1715_VENDOR_ID 0x29CF - -#define RT1715_REG_VENDOR_7 0xA0 -#define RT1715_REG_VENDOR_7_SOFT_RESET BIT(0) - -#define RT1715_REG_PHY_CTRL1 0x80 - -#define RT1715_REG_PHY_CTRL2 0x81 - -#define RT1715_REG_BMCIO_RXDZSEL 0x93 -#define RT1715_REG_BMCIO_RXDZSEL_OCCTRL_600MA BIT(7) -#define RT1715_REG_BMCIO_RXDZSEL_MASK BIT(0) - -#define RT1715_REG_VENDOR_5 0x9B -#define RT1715_REG_VENDOR_5_SHUTDOWN_OFF BIT(5) -#define RT1715_REG_VENDOR_5_ENEXTMSG BIT(4) - -#define RT1715_REG_I2CRST_CTRL 0x9E -/* I2C reset : (val + 1) * 12.5ms */ -#define RT1715_REG_I2CRST_CTRL_TOUT_200MS 0x0F -#define RT1715_REG_I2CRST_CTRL_TOUT_150MS 0x0B -#define RT1715_REG_I2CRST_CTRL_TOUT_100MS 0x07 -#define RT1715_REG_I2CRST_CTRL_EN BIT(7) - - -#define RT1715_REG_TTCPC_FILTER 0xA1 -#define RT1715_REG_TTCPC_FILTER_400US 0x0F - -#define RT1715_REG_DRP_TOGGLE_CYCLE 0xA2 -#define RT1715_REG_DRP_TOGGLE_CYCLE_76MS 0x04 +#define RT1715_I2C_ADDR_FLAGS 0x4E -#define RT1715_REG_DRP_DUTY_CTRL 0xA3 -#define RT1715_REG_DRP_DUTY_CTRL_40PERCENT 400 +#define RT1715_VENDOR_ID 0x29CF -#define RT1715_REG_BMCIO_RXDZEN 0xAF +#define RT1715_REG_VENDOR_5 0x9B +#define RT1715_REG_VENDOR_5_SHUTDOWN_OFF BIT(5) +#define RT1715_REG_VENDOR_5_ENEXTMSG BIT(4) +#define RT1715_REG_VENDOR_7 0xA0 +#define RT1715_REG_VENDOR_7_SOFT_RESET BIT(0) extern const struct tcpm_drv rt1715_tcpm_drv; |