From 2e738c72fd3676ef5e3b8ffcf51ad3fa488fe865 Mon Sep 17 00:00:00 2001 From: Tang Zhentian1 Date: Fri, 5 Aug 2016 10:09:25 +0800 Subject: [PATCH] Analogix: Present configured Rp pull-up. ANX was using 36K Rp detection as default detect value. ANX fix google issue google charger BUG=chrome-os-partner:54452 BRANCH=master TEST=On Reef: With twinkie tested CC voltage change for 1.5A Rp pull up meets the spec values. Change-Id: I3af20e5c437218b83befc899a7c62b019b2c9dee Signed-off-by: Tang Zhentian1 Signed-off-by: Divya Sasidharan Reviewed-on: https://chromium-review.googlesource.com/366461 Commit-Ready: Divya S Sasidharan Tested-by: Kevin K Wong Reviewed-by: David Hendricks Reviewed-by: Kevin K Wong --- board/reef/board.h | 1 + driver/tcpm/anx74xx.c | 26 ++++++++++++++++++++------ driver/tcpm/anx74xx.h | 6 ++++++ 3 files changed, 27 insertions(+), 6 deletions(-) diff --git a/board/reef/board.h b/board/reef/board.h index afbd52d964..d9a295bb7b 100644 --- a/board/reef/board.h +++ b/board/reef/board.h @@ -51,6 +51,7 @@ #define CONFIG_USB_PD_TCPM_ANX74XX #define CONFIG_USB_PD_TCPM_PS8751 #define CONFIG_USB_PD_TCPM_TCPCI +#define CONFIG_USB_PD_VBUS_DETECT_TCPC #define CONFIG_USB_PD_TRY_SRC #define CONFIG_USB_POWER_DELIVERY diff --git a/driver/tcpm/anx74xx.c b/driver/tcpm/anx74xx.c index b52732f1be..cdba2c8acb 100644 --- a/driver/tcpm/anx74xx.c +++ b/driver/tcpm/anx74xx.c @@ -552,6 +552,7 @@ static int anx74xx_alert_status(int port, int *alert) rv = tcpc_read(port, ANX74XX_REG_IRQ_SOURCE_RECV_MSG, ®); if (rv) return EC_ERROR_UNKNOWN; + rv |= tcpc_write(port, ANX74XX_REG_IRQ_SOURCE_RECV_MSG, 0); if (reg & ANX74XX_REG_IRQ_CC_MSG_INT) *alert |= ANX74XX_REG_ALERT_MSG_RECV; @@ -560,24 +561,18 @@ static int anx74xx_alert_status(int port, int *alert) if (reg & ANX74XX_REG_IRQ_CC_STATUS_INT) { *alert |= ANX74XX_REG_ALERT_CC_CHANGE; - rv |= tcpc_write(port, ANX74XX_REG_IRQ_SOURCE_RECV_MSG, - reg & 0xfd); } else { *alert &= (~ANX74XX_REG_ALERT_CC_CHANGE); } if (reg & ANX74XX_REG_IRQ_GOOD_CRC_INT) { *alert |= ANX74XX_REG_ALERT_TX_ACK_RECV; - rv |= tcpc_write(port, ANX74XX_REG_IRQ_SOURCE_RECV_MSG, - reg & 0xfb); } else { *alert &= (~ANX74XX_REG_ALERT_TX_ACK_RECV); } if (reg & ANX74XX_REG_IRQ_TX_FAIL_INT) { *alert |= ANX74XX_REG_ALERT_TX_MSG_ERROR; - rv |= tcpc_write(port, ANX74XX_REG_IRQ_SOURCE_RECV_MSG, - reg & 0xf7); } /* Read TCPC Alert register2 */ rv |= tcpc_read(port, ANX74XX_REG_IRQ_EXT_SOURCE_2, ®); @@ -605,6 +600,25 @@ static int anx74xx_tcpm_set_rx_enable(int port, int enable) anx74xx_tcpm_set_auto_good_crc(port, enable); rv |= tcpc_write(port, ANX74XX_REG_IRQ_SOURCE_RECV_MSG_MASK, reg); + /* patch for Rp 36K issue */ + rv |= tcpc_read(port, ANX74XX_REG_ANALOG_CTRL_6, ®); + if (rv) + return EC_ERROR_UNKNOWN; + + /* clear Bit[0,1] R_RP to default Rp's value */ + reg &= ~0x03; + + if (enable) { +#ifdef CONFIG_USB_PD_PULLUP_1_5A + /* Set Rp strength to 12K for presenting 1.5A */ + reg |= ANX74XX_REG_CC_PULL_RP_12K; +#elif defined(CONFIG_USB_PD_PULLUP_3A) + /* Set Rp strength to 4K for presenting 3A */ + reg |= ANX74XX_REG_CC_PULL_RP_4K; +#endif + } + rv |= tcpc_write(port, ANX74XX_REG_ANALOG_CTRL_6, reg); + return rv; } diff --git a/driver/tcpm/anx74xx.h b/driver/tcpm/anx74xx.h index e395083d33..a3e54c66b3 100644 --- a/driver/tcpm/anx74xx.h +++ b/driver/tcpm/anx74xx.h @@ -55,6 +55,7 @@ #define ANX74XX_REG_CC_PULL_RD 0xfd #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 @@ -62,6 +63,11 @@ #define ANX74XX_REG_ANALOG_CTRL_1 0x42 #define ANX74XX_REG_ANALOG_CTRL_5 0x46 +#define ANX74XX_REG_ANALOG_CTRL_6 0x47 +#define ANX74XX_REG_CC_PULL_RP_36K 0x00 +#define ANX74XX_REG_CC_PULL_RP_12K 0x01 +#define ANX74XX_REG_CC_PULL_RP_4K 0x02 + #define ANX74XX_REG_R_SWITCH_CC_CLR 0x0f #define ANX74XX_REG_R_SWITCH_CC2_SET 0x10 #define ANX74XX_REG_R_SWITCH_CC1_SET 0x20