diff options
-rw-r--r-- | driver/tcpm/ps8xxx.c | 27 |
1 files changed, 23 insertions, 4 deletions
diff --git a/driver/tcpm/ps8xxx.c b/driver/tcpm/ps8xxx.c index 6a4eb4e1c1..8d68701153 100644 --- a/driver/tcpm/ps8xxx.c +++ b/driver/tcpm/ps8xxx.c @@ -322,11 +322,30 @@ static int ps8xxx_dci_disable(int port) static int ps8xxx_dci_disable(int port) { int p1_addr; + int p3_addr; + int regval; + int rv; - /* DCI registers are always accessible on PS8805 */ - p1_addr = PS8751_P3_TO_P1_FLAGS(tcpc_config[port].i2c_info.addr_flags); - return ps8xxx_addr_dci_disable(port, p1_addr, - PS8805_P1_REG_MUX_USB_DCI_CFG); + /* Enable access to debug pages. */ + p3_addr = tcpc_config[port].i2c_info.addr_flags; + rv = tcpc_addr_read(port, p3_addr, PS8XXX_REG_I2C_DEBUGGING_ENABLE, + ®val); + if (rv) + return rv; + + rv = tcpc_addr_write(port, p3_addr, PS8XXX_REG_I2C_DEBUGGING_ENABLE, + PS8XXX_REG_I2C_DEBUGGING_ENABLE_ON); + + /* Disable Auto DCI */ + p1_addr = PS8751_P3_TO_P1_FLAGS(p3_addr); + rv = ps8xxx_addr_dci_disable(port, p1_addr, + PS8805_P1_REG_MUX_USB_DCI_CFG); + + /* + * PS8805 will automatically re-assert bit:0 on the + * PS8XXX_REG_I2C_DEBUGGING_ENABLE register. + */ + return rv; } #endif /* CONFIG_USB_PD_TCPM_PS8805 */ |