diff options
-rw-r--r-- | driver/tcpm/mt6370.c | 24 | ||||
-rw-r--r-- | driver/tcpm/tcpci.h | 1 |
2 files changed, 14 insertions, 11 deletions
diff --git a/driver/tcpm/mt6370.c b/driver/tcpm/mt6370.c index a9881b34d1..c7414601a1 100644 --- a/driver/tcpm/mt6370.c +++ b/driver/tcpm/mt6370.c @@ -58,12 +58,11 @@ static int mt6370_init(int port) return rv; } -#ifndef CONFIG_USB_PD_DUAL_ROLE_AUTO_TOGGLE static int mt6370_get_cc(int port, int *cc1, int *cc2) { int status; int rv; - int role; + int role, is_snk; rv = tcpc_read(port, TCPC_REG_CC_STATUS, &status); @@ -87,24 +86,27 @@ static int mt6370_get_cc(int port, int *cc1, int *cc2) */ rv = tcpc_read(port, TCPC_REG_ROLE_CTRL, &role); - if (*cc1 != TYPEC_CC_VOLT_OPEN) - *cc1 |= (TCPC_REG_ROLE_CTRL_CC1(role) == TYPEC_CC_RD) << 2; - if (*cc2 != TYPEC_CC_VOLT_OPEN) - *cc2 |= (TCPC_REG_ROLE_CTRL_CC2(role) == TYPEC_CC_RD) << 2; + 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_CC_STATUS_CC1(role) == TYPEC_CC_RD; + + if (is_snk) { + if (*cc1 != TYPEC_CC_VOLT_OPEN) + *cc1 |= 0x04; + if (*cc2 != TYPEC_CC_VOLT_OPEN) + *cc2 |= 0x04; + } return rv; } -#endif /* MT6370 is a TCPCI compatible port controller */ const struct tcpm_drv mt6370_tcpm_drv = { .init = &mt6370_init, .release = &tcpci_tcpm_release, -#ifdef CONFIG_USB_PD_DUAL_ROLE_AUTO_TOGGLE - .get_cc = &tcpci_tcpm_get_cc, -#else .get_cc = &mt6370_get_cc, -#endif #ifdef CONFIG_USB_PD_VBUS_DETECT_TCPC .get_vbus_level = &tcpci_tcpm_get_vbus_level, #endif diff --git a/driver/tcpm/tcpci.h b/driver/tcpm/tcpci.h index 877e510210..1af01d9b60 100644 --- a/driver/tcpm/tcpci.h +++ b/driver/tcpm/tcpci.h @@ -54,6 +54,7 @@ #define TCPC_REG_ROLE_CTRL 0x1a #define TCPC_REG_ROLE_CTRL_SET(drp, rp, cc1, cc2) \ ((drp) << 6 | (rp) << 4 | (cc2) << 2 | (cc1)) +#define TCPC_REG_ROLE_CTRL_DRP(reg) (((reg) & 0x40) >> 6) #define TCPC_REG_ROLE_CTRL_RP_MASK 0x30 #define TCPC_REG_ROLE_CTRL_RP(reg) (((reg) & TCPC_REG_ROLE_CTRL_RP_MASK) >> 4) #define TCPC_REG_ROLE_CTRL_CC2(reg) (((reg) & 0xc) >> 2) |