diff options
-rw-r--r-- | driver/tcpm/anx74xx.c | 33 | ||||
-rw-r--r-- | driver/tcpm/anx74xx.h | 23 |
2 files changed, 19 insertions, 37 deletions
diff --git a/driver/tcpm/anx74xx.c b/driver/tcpm/anx74xx.c index 56728548c6..ad2c9514d0 100644 --- a/driver/tcpm/anx74xx.c +++ b/driver/tcpm/anx74xx.c @@ -50,27 +50,8 @@ static int anx74xx_tcpm_init(int port); static void anx74xx_tcpm_set_auto_good_crc(int port, int enable) { - int reg; - - if (enable) { - /* Set default header for Good CRC auto reply */ - tcpc_read(port, ANX74XX_REG_TX_MSG_HEADER, ®); - reg |= (PD_REV20 << ANX74XX_REG_SPEC_REV_BIT_POS); - reg |= ANX74XX_REG_AUTO_GOODCRC_EN; - tcpc_write(port, ANX74XX_REG_TX_MSG_HEADER, reg); - - reg = ANX74XX_REG_ENABLE_GOODCRC; - tcpc_write(port, ANX74XX_REG_TX_AUTO_GOODCRC_2, reg); - /* Set bit-0 if enable, reset bit-0 if disable */ - tcpc_read(port, ANX74XX_REG_TX_AUTO_GOODCRC_1, ®); - reg |= ANX74XX_REG_AUTO_GOODCRC_EN; - } else { - /* Clear bit-0 for disable */ - tcpc_read(port, ANX74XX_REG_TX_AUTO_GOODCRC_1, ®); - reg &= ~ANX74XX_REG_AUTO_GOODCRC_EN; - tcpc_write(port, ANX74XX_REG_TX_AUTO_GOODCRC_2, 0); - } - tcpc_write(port, ANX74XX_REG_TX_AUTO_GOODCRC_1, reg); + tcpc_write(port, ANX74XX_REG_TX_AUTO_GOODCRC_2, + enable ? ANX74XX_REG_REPLY_SOP_EN : 0); } static void anx74xx_set_power_mode(int port, int mode) @@ -646,14 +627,8 @@ static int anx74xx_tcpm_set_vconn(int port, int enable) static int anx74xx_tcpm_set_msg_header(int port, int power_role, int data_role) { - int rv = 0, reg; - - rv |= tcpc_read(port, ANX74XX_REG_TX_MSG_HEADER, ®); - reg |= ((!!power_role) << ANX74XX_REG_PWR_ROLE_BIT_POS); - reg |= ((!!data_role) << ANX74XX_REG_DATA_ROLE_BIT_POS); - rv |= tcpc_write(port, ANX74XX_REG_TX_MSG_HEADER, reg); - - return rv; + return tcpc_write(port, ANX74XX_REG_TX_AUTO_GOODCRC_1, + ANX74XX_REG_AUTO_GOODCRC_SET(!!data_role, !!power_role)); } static int anx74xx_alert_status(int port, int *alert) diff --git a/driver/tcpm/anx74xx.h b/driver/tcpm/anx74xx.h index fcbd38fe41..127af4e0b5 100644 --- a/driver/tcpm/anx74xx.h +++ b/driver/tcpm/anx74xx.h @@ -63,10 +63,22 @@ #define ANX74XX_REG_CC_PULL_RP 0x02 -#define ANX74XX_REG_TX_AUTO_GOODCRC_1 0x9c #define ANX74XX_REG_TX_AUTO_GOODCRC_2 0x94 -#define ANX74XX_REG_AUTO_GOODCRC_EN 0x01 -#define ANX74XX_REG_ENABLE_GOODCRC 0x38 +#define ANX74XX_REG_REPLY_SOP_EN (1 << 3) +#define ANX74XX_REG_REPLY_SOP_1_EN (1 << 4) +#define ANX74XX_REG_REPLY_SOP_2_EN (1 << 5) + +#define ANX74XX_REG_TX_AUTO_GOODCRC_1 0x9c +#define ANX74XX_REG_SPEC_REV_BIT_POS (3) +#define ANX74XX_REG_DATA_ROLE_BIT_POS (2) +#define ANX74XX_REG_PWR_ROLE_BIT_POS (1) +#define ANX74XX_REG_AUTO_GOODCRC_EN (1 << 0) +#define ANX74XX_REG_AUTO_GOODCRC_SET(drole, prole) \ + ((PD_REV20 << ANX74XX_REG_SPEC_REV_BIT_POS) | \ + ((drole) << ANX74XX_REG_DATA_ROLE_BIT_POS) | \ + ((prole) << ANX74XX_REG_PWR_ROLE_BIT_POS) | \ + ANX74XX_REG_AUTO_GOODCRC_EN) + #define ANX74XX_REG_ANALOG_CTRL_0 0x41 #define ANX74XX_REG_R_PIN_CABLE_DET (1 << 7) @@ -150,11 +162,6 @@ #define ANX74XX_REG_HPD_DEFAULT 0x00 #define ANX74XX_REG_HPD_OUT_DATA 0x10 -#define ANX74XX_REG_TX_MSG_HEADER 0x9c -#define ANX74XX_REG_SPEC_REV_BIT_POS (3) -#define ANX74XX_REG_PWR_ROLE_BIT_POS (2) -#define ANX74XX_REG_DATA_ROLE_BIT_POS (1) - #define ANX74XX_REG_RECVD_MSG_INT 0x98 #define ANX74XX_REG_CC_STATUS 0x99 #define ANX74XX_REG_CTRL_FW 0x2E |