Thread (37 messages) 37 messages, 8 authors, 2018-05-01

RE: [PATCH v4 11/13] staging: typec: tcpci: keep the not connecting cc line open

From: Jun Li <hidden>
Date: 2018-03-31 04:49:03
Also in: linux-usb

Hi
-----Original Message-----
From: Guenter Roeck [mailto:groeck7@gmail.com] On Behalf Of Guenter Roeck
Sent: 2018年3月30日 23:16
To: Jun Li <redacted>; robh+dt@kernel.org; gregkh@linuxfoundation.org;
heikki.krogerus@linux.intel.com
Cc: a.hajda@samsung.com; shufan_lee@richtek.com; Peter Chen
[off-list ref]; devicetree@vger.kernel.org;
linux-usb@vger.kernel.org; dl-linux-imx [off-list ref];
devel@driverdev.osuosl.org
Subject: Re: [PATCH v4 11/13] staging: typec: tcpci: keep the not connecting cc
line open

On 03/28/2018 09:06 AM, Li Jun wrote:
quoted
While set polarity, we should keep the not connecting cc line to be
open.
The more I look at this code, the more I am confused by it.

The original code doesn't touch the CC lines. This function only sets the polarity.
Is it really appropriate to touch the CC lines in the same function ?
Yes, I didn't find a more proper place to do this, either I change the
tcpc->set_cc() interface with orientation/polarity parameter to know
which cc line I should keep it open, or do it in low level driver like
this, do you have any suggestion how this can be done?(I guess
both cc lines have the same state after attached with current code
of all tcpm users, but this should be resolved as it's break PD compliance
test) 

thanks
Li Jun
Guenter
quoted
Signed-off-by: Li Jun <redacted>
---
  drivers/staging/typec/tcpci.c | 18 ++++++++++++++----
  1 file changed, 14 insertions(+), 4 deletions(-)
diff --git a/drivers/staging/typec/tcpci.c
b/drivers/staging/typec/tcpci.c index d5b4e4e..b58bd59 100644
--- a/drivers/staging/typec/tcpci.c
+++ b/drivers/staging/typec/tcpci.c
@@ -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, &reg);
  	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)
_______________________________________________
devel mailing list
devel@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help