|
@@ -185,15 +185,25 @@ static int tcpci_set_polarity(struct tcpc_dev *tcpc,
|
|
|
enum typec_cc_polarity polarity)
|
|
|
{
|
|
|
struct tcpci *tcpci = tcpc_to_tcpci(tcpc);
|
|
|
+ unsigned int reg;
|
|
|
int ret;
|
|
|
|
|
|
- ret = regmap_write(tcpci->regmap, TCPC_TCPC_CTRL,
|
|
|
- (polarity == TYPEC_POLARITY_CC2) ?
|
|
|
- TCPC_TCPC_CTRL_ORIENTATION : 0);
|
|
|
+ /* Keep the disconnect cc line open */
|
|
|
+ ret = regmap_read(tcpci->regmap, TCPC_ROLE_CTRL, ®);
|
|
|
if (ret < 0)
|
|
|
return ret;
|
|
|
|
|
|
- return 0;
|
|
|
+ if (polarity == TYPEC_POLARITY_CC2)
|
|
|
+ reg |= TCPC_ROLE_CTRL_CC_OPEN << TCPC_ROLE_CTRL_CC1_SHIFT;
|
|
|
+ else
|
|
|
+ reg |= TCPC_ROLE_CTRL_CC_OPEN << TCPC_ROLE_CTRL_CC2_SHIFT;
|
|
|
+ ret = regmap_write(tcpci->regmap, TCPC_ROLE_CTRL, reg);
|
|
|
+ if (ret < 0)
|
|
|
+ return ret;
|
|
|
+
|
|
|
+ return regmap_write(tcpci->regmap, TCPC_TCPC_CTRL,
|
|
|
+ (polarity == TYPEC_POLARITY_CC2) ?
|
|
|
+ TCPC_TCPC_CTRL_ORIENTATION : 0);
|
|
|
}
|
|
|
|
|
|
static int tcpci_set_vconn(struct tcpc_dev *tcpc, bool enable)
|