linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v3 0/7] usb: typec: tcpci_rt1711h: Add compatible with rt1715
@ 2022-08-01 10:14 Gene Chen
  2022-08-01 10:14 ` [PATCH v3 1/7] dt-bindings usb: typec: rt1711h: Add binding for Richtek RT1711H Gene Chen
                   ` (6 more replies)
  0 siblings, 7 replies; 17+ messages in thread
From: Gene Chen @ 2022-08-01 10:14 UTC (permalink / raw)
  To: linux, heikki.krogerus, gregkh, robh+dt, krzysztof.kozlowski+dt
  Cc: linux-usb, linux-kernel, devicetree, gene_chen, cy_huang

This patch series add binding document for rt1711h and compatible driver with
rt1715. Also add different remote rp workaround and initial phy setting.

Gene Chen (7)
 - dt-bindings usb: typec: rt1711h: Add binding for Richtek RT1711H
 - usb: typec: tcpci_rt1711h: Fix vendor setting when set vconn
 - usb: typec: tcpci_rt1711h: Add regulator support when source vbus
 - usb: typec: tcpci_rt1711h: Add initial phy setting
 - usb: typec: tcpci_rt1711h: Add compatible id with rt1715
 - usb: typec: tcpci: Move function "tcpci_to_typec_cc" to common
 - usb: typec: tcpci_rt1711h: Fix CC PHY noise filter of voltage level

 Documentation/devicetree/bindings/usb/richtek,rt1711h.yaml |  100 ++++++++
 drivers/usb/typec/tcpm/tcpci.c                             |   22 -
 drivers/usb/typec/tcpm/tcpci.h                             |   23 +
 drivers/usb/typec/tcpm/tcpci_rt1711h.c                     |  159 +++++++++++--
 4 files changed, 265 insertions(+), 39 deletions(-)

changelogs between v2 & v3
 - binding compatible name with did to validate chip
 - remove postfix name "_mask"
 - move get cc status macro to header

changelogs between v1 & v2
 - Seperate patch by specific purpose
 - Fix binding document error
 - Set cc change woakaround without using tcpci ops callback



^ permalink raw reply	[flat|nested] 17+ messages in thread

* [PATCH v3 1/7] dt-bindings usb: typec: rt1711h: Add binding for Richtek RT1711H
  2022-08-01 10:14 [PATCH v3 0/7] usb: typec: tcpci_rt1711h: Add compatible with rt1715 Gene Chen
@ 2022-08-01 10:14 ` Gene Chen
  2022-08-01 10:14 ` [PATCH v3 2/7] usb: typec: tcpci_rt1711h: Fix vendor setting when set vconn Gene Chen
                   ` (5 subsequent siblings)
  6 siblings, 0 replies; 17+ messages in thread
From: Gene Chen @ 2022-08-01 10:14 UTC (permalink / raw)
  To: linux, heikki.krogerus, gregkh, robh+dt, krzysztof.kozlowski+dt
  Cc: linux-usb, linux-kernel, devicetree, gene_chen, cy_huang, Rob Herring

From: Gene Chen <gene_chen@richtek.com>

Add binding for Richtek RT1711H

Signed-off-by: Gene Chen <gene_chen@richtek.com>
Reviewed-by: Rob Herring <robh@kernel.org>
---
 .../bindings/usb/richtek,rt1711h.yaml         | 100 ++++++++++++++++++
 1 file changed, 100 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/usb/richtek,rt1711h.yaml

diff --git a/Documentation/devicetree/bindings/usb/richtek,rt1711h.yaml b/Documentation/devicetree/bindings/usb/richtek,rt1711h.yaml
new file mode 100644
index 000000000000..1999f614c89b
--- /dev/null
+++ b/Documentation/devicetree/bindings/usb/richtek,rt1711h.yaml
@@ -0,0 +1,100 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: "http://devicetree.org/schemas/usb/richtek,rt1711h.yaml#"
+$schema: "http://devicetree.org/meta-schemas/core.yaml#"
+
+title: Richtek RT1711H Type-C Port Switch and Power Delivery controller
+
+maintainers:
+  - Gene Chen <gene_chen@richtek.com>
+
+description: |
+  The RT1711H is a USB Type-C controller that complies with the latest
+  USB Type-C and PD standards. It does the USB Type-C detection including attach
+  and orientation. It integrates the physical layer of the USB BMC power
+  delivery protocol to allow up to 100W of power. The BMC PD block enables full
+  support for alternative interfaces of the Type-C specification.
+
+properties:
+  compatible:
+    enum:
+      - richtek,rt1711h
+      - richtek,rt1715
+    description:
+      RT1711H support PD20, RT1715 support PD30 except Fast Role Swap.
+
+  reg:
+    maxItems: 1
+
+  interrupts:
+    maxItems: 1
+
+  wakeup-source:
+    type: boolean
+
+  connector:
+    type: object
+    $ref: /schemas/connector/usb-connector.yaml#
+    description:
+      Properties for usb c connector.
+
+additionalProperties: false
+
+required:
+  - compatible
+  - reg
+  - connector
+  - interrupts
+
+examples:
+  - |
+    #include <dt-bindings/interrupt-controller/irq.h>
+    #include <dt-bindings/usb/pd.h>
+    i2c0 {
+      #address-cells = <1>;
+      #size-cells = <0>;
+
+      rt1711h@4e {
+        compatible = "richtek,rt1711h";
+        reg = <0x4e>;
+        interrupts-extended = <&gpio26 3 IRQ_TYPE_LEVEL_LOW>;
+        wakeup-source;
+
+        connector {
+          compatible = "usb-c-connector";
+          label = "USB-C";
+          data-role = "dual";
+          power-role = "dual";
+          try-power-role = "sink";
+          source-pdos = <PDO_FIXED(5000, 2000, PDO_FIXED_DUAL_ROLE | PDO_FIXED_DATA_SWAP)>;
+          sink-pdos = <PDO_FIXED(5000, 2000, PDO_FIXED_DUAL_ROLE | PDO_FIXED_DATA_SWAP)>;
+          op-sink-microwatt = <10000000>;
+
+          ports {
+            #address-cells = <1>;
+            #size-cells = <0>;
+
+            port@0 {
+              reg = <0>;
+              endpoint {
+                remote-endpoint = <&usb_hs>;
+              };
+            };
+            port@1 {
+              reg = <1>;
+              endpoint {
+                remote-endpoint = <&usb_ss>;
+              };
+            };
+            port@2 {
+              reg = <2>;
+              endpoint {
+                remote-endpoint = <&dp_aux>;
+              };
+            };
+          };
+        };
+      };
+    };
+...
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PATCH v3 2/7] usb: typec: tcpci_rt1711h: Fix vendor setting when set vconn
  2022-08-01 10:14 [PATCH v3 0/7] usb: typec: tcpci_rt1711h: Add compatible with rt1715 Gene Chen
  2022-08-01 10:14 ` [PATCH v3 1/7] dt-bindings usb: typec: rt1711h: Add binding for Richtek RT1711H Gene Chen
@ 2022-08-01 10:14 ` Gene Chen
  2022-08-02  7:57   ` Heikki Krogerus
  2022-08-01 10:14 ` [PATCH v3 3/7] usb: typec: tcpci_rt1711h: Add regulator support when source vbus Gene Chen
                   ` (4 subsequent siblings)
  6 siblings, 1 reply; 17+ messages in thread
From: Gene Chen @ 2022-08-01 10:14 UTC (permalink / raw)
  To: linux, heikki.krogerus, gregkh, robh+dt, krzysztof.kozlowski+dt
  Cc: linux-usb, linux-kernel, devicetree, gene_chen, cy_huang

From: Gene Chen <gene_chen@richtek.com>

replace overwrite whole register with update bits

Signed-off-by: Gene Chen <gene_chen@richtek.com>
---
 drivers/usb/typec/tcpm/tcpci_rt1711h.c | 15 +++++++++------
 1 file changed, 9 insertions(+), 6 deletions(-)

diff --git a/drivers/usb/typec/tcpm/tcpci_rt1711h.c b/drivers/usb/typec/tcpm/tcpci_rt1711h.c
index b56a0880a044..6197d9a05d36 100644
--- a/drivers/usb/typec/tcpm/tcpci_rt1711h.c
+++ b/drivers/usb/typec/tcpm/tcpci_rt1711h.c
@@ -5,13 +5,15 @@
  * Richtek RT1711H Type-C Chip Driver
  */
 
-#include <linux/kernel.h>
-#include <linux/module.h>
+#include <linux/bits.h>
+#include <linux/gpio/consumer.h>
 #include <linux/i2c.h>
 #include <linux/interrupt.h>
-#include <linux/gpio/consumer.h>
-#include <linux/usb/tcpm.h>
+#include <linux/kernel.h>
+#include <linux/module.h>
 #include <linux/regmap.h>
+#include <linux/usb/tcpm.h>
+
 #include "tcpci.h"
 
 #define RT1711H_VID		0x29CF
@@ -23,6 +25,7 @@
 #define RT1711H_RTCTRL8_SET(ck300, ship_off, auto_idle, tout) \
 			    (((ck300) << 7) | ((ship_off) << 5) | \
 			    ((auto_idle) << 3) | ((tout) & 0x07))
+#define RT1711H_AUTOIDLEEN	BIT(3)
 
 #define RT1711H_RTCTRL11	0x9E
 
@@ -109,8 +112,8 @@ static int rt1711h_set_vconn(struct tcpci *tcpci, struct tcpci_data *tdata,
 {
 	struct rt1711h_chip *chip = tdata_to_rt1711h(tdata);
 
-	return rt1711h_write8(chip, RT1711H_RTCTRL8,
-			      RT1711H_RTCTRL8_SET(0, 1, !enable, 2));
+	return regmap_update_bits(chip->data.regmap, RT1711H_RTCTRL8,
+				  RT1711H_AUTOIDLEEN, enable ? 0 : RT1711H_AUTOIDLEEN);
 }
 
 static int rt1711h_start_drp_toggling(struct tcpci *tcpci,
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PATCH v3 3/7] usb: typec: tcpci_rt1711h: Add regulator support when source vbus
  2022-08-01 10:14 [PATCH v3 0/7] usb: typec: tcpci_rt1711h: Add compatible with rt1715 Gene Chen
  2022-08-01 10:14 ` [PATCH v3 1/7] dt-bindings usb: typec: rt1711h: Add binding for Richtek RT1711H Gene Chen
  2022-08-01 10:14 ` [PATCH v3 2/7] usb: typec: tcpci_rt1711h: Fix vendor setting when set vconn Gene Chen
@ 2022-08-01 10:14 ` Gene Chen
  2022-08-02  8:04   ` Heikki Krogerus
  2022-08-01 10:14 ` [PATCH v3 4/7] usb: typec: tcpci_rt1711h: Add initial phy setting Gene Chen
                   ` (3 subsequent siblings)
  6 siblings, 1 reply; 17+ messages in thread
From: Gene Chen @ 2022-08-01 10:14 UTC (permalink / raw)
  To: linux, heikki.krogerus, gregkh, robh+dt, krzysztof.kozlowski+dt
  Cc: linux-usb, linux-kernel, devicetree, gene_chen, cy_huang

From: Gene Chen <gene_chen@richtek.com>

Add regulator support when source vbus

Signed-off-by: Gene Chen <gene_chen@richtek.com>
---
 drivers/usb/typec/tcpm/tcpci_rt1711h.c | 28 ++++++++++++++++++++++++++
 1 file changed, 28 insertions(+)

diff --git a/drivers/usb/typec/tcpm/tcpci_rt1711h.c b/drivers/usb/typec/tcpm/tcpci_rt1711h.c
index 6197d9a05d36..df7bfe299987 100644
--- a/drivers/usb/typec/tcpm/tcpci_rt1711h.c
+++ b/drivers/usb/typec/tcpm/tcpci_rt1711h.c
@@ -12,6 +12,7 @@
 #include <linux/kernel.h>
 #include <linux/module.h>
 #include <linux/regmap.h>
+#include <linux/regulator/consumer.h>
 #include <linux/usb/tcpm.h>
 
 #include "tcpci.h"
@@ -42,6 +43,8 @@ struct rt1711h_chip {
 	struct tcpci_data data;
 	struct tcpci *tcpci;
 	struct device *dev;
+	struct regulator *vbus;
+	bool src_en;
 };
 
 static int rt1711h_read16(struct rt1711h_chip *chip, unsigned int reg, u16 *val)
@@ -105,6 +108,26 @@ static int rt1711h_init(struct tcpci *tcpci, struct tcpci_data *tdata)
 
 	/* dcSRC.DRP : 33% */
 	return rt1711h_write16(chip, RT1711H_RTCTRL16, 330);
+
+}
+
+static int rt1711h_set_vbus(struct tcpci *tcpci, struct tcpci_data *tdata,
+			    bool src, bool snk)
+{
+	struct rt1711h_chip *chip = tdata_to_rt1711h(tdata);
+	int ret;
+
+	if (chip->src_en == src)
+		return 0;
+
+	if (src)
+		ret = regulator_enable(chip->vbus);
+	else
+		ret = regulator_disable(chip->vbus);
+
+	if (!ret)
+		chip->src_en = src;
+	return ret;
 }
 
 static int rt1711h_set_vconn(struct tcpci *tcpci, struct tcpci_data *tdata,
@@ -248,7 +271,12 @@ static int rt1711h_probe(struct i2c_client *client,
 	if (ret < 0)
 		return ret;
 
+	chip->vbus = devm_regulator_get(&client->dev, "vbus");
+	if (IS_ERR(chip->vbus))
+		return PTR_ERR(chip->vbus);
+
 	chip->data.init = rt1711h_init;
+	chip->data.set_vbus = rt1711h_set_vbus;
 	chip->data.set_vconn = rt1711h_set_vconn;
 	chip->data.start_drp_toggling = rt1711h_start_drp_toggling;
 	chip->tcpci = tcpci_register_port(chip->dev, &chip->data);
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PATCH v3 4/7] usb: typec: tcpci_rt1711h: Add initial phy setting
  2022-08-01 10:14 [PATCH v3 0/7] usb: typec: tcpci_rt1711h: Add compatible with rt1715 Gene Chen
                   ` (2 preceding siblings ...)
  2022-08-01 10:14 ` [PATCH v3 3/7] usb: typec: tcpci_rt1711h: Add regulator support when source vbus Gene Chen
@ 2022-08-01 10:14 ` Gene Chen
  2022-08-02  8:19   ` Heikki Krogerus
  2022-08-01 10:14 ` [PATCH v3 5/7] usb: typec: tcpci_rt1711h: Add compatible id with rt1715 Gene Chen
                   ` (2 subsequent siblings)
  6 siblings, 1 reply; 17+ messages in thread
From: Gene Chen @ 2022-08-01 10:14 UTC (permalink / raw)
  To: linux, heikki.krogerus, gregkh, robh+dt, krzysztof.kozlowski+dt
  Cc: linux-usb, linux-kernel, devicetree, gene_chen, cy_huang

From: Gene Chen <gene_chen@richtek.com>

Add initial phy setting about phy dicard retry,
rx filter deglitech time and BMC-encoded wait time

Signed-off-by: Gene Chen <gene_chen@richtek.com>
Reviewed-by: Guenter Roeck <linux@roeck-us.net>
---
 drivers/usb/typec/tcpm/tcpci_rt1711h.c | 15 ++++++++++++++-
 1 file changed, 14 insertions(+), 1 deletion(-)

diff --git a/drivers/usb/typec/tcpm/tcpci_rt1711h.c b/drivers/usb/typec/tcpm/tcpci_rt1711h.c
index df7bfe299987..33d8ea95b7c1 100644
--- a/drivers/usb/typec/tcpm/tcpci_rt1711h.c
+++ b/drivers/usb/typec/tcpm/tcpci_rt1711h.c
@@ -20,6 +20,9 @@
 #define RT1711H_VID		0x29CF
 #define RT1711H_PID		0x1711
 
+#define RT1711H_PHYCTRL1	0x80
+#define RT1711H_PHYCTRL2	0x81
+
 #define RT1711H_RTCTRL8		0x9B
 
 /* Autoidle timeout = (tout * 2 + 1) * 6.4ms */
@@ -107,8 +110,18 @@ static int rt1711h_init(struct tcpci *tcpci, struct tcpci_data *tdata)
 		return ret;
 
 	/* dcSRC.DRP : 33% */
-	return rt1711h_write16(chip, RT1711H_RTCTRL16, 330);
+	ret = rt1711h_write16(chip, RT1711H_RTCTRL16, 330);
+	if (ret < 0)
+		return ret;
+
+	/* Enable phy discard retry, retry count 7, rx filter deglitech 100 us */
+	ret = rt1711h_write8(chip, RT1711H_PHYCTRL1, 0xF1);
+	if (ret < 0)
+		return ret;
 
+	/* Decrease wait time of BMC-encoded 1 bit from 2.67us to 2.55us */
+	/* wait time : (val * .4167) us */
+	return rt1711h_write8(chip, RT1711H_PHYCTRL2, 62);
 }
 
 static int rt1711h_set_vbus(struct tcpci *tcpci, struct tcpci_data *tdata,
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PATCH v3 5/7] usb: typec: tcpci_rt1711h: Add compatible id with rt1715
  2022-08-01 10:14 [PATCH v3 0/7] usb: typec: tcpci_rt1711h: Add compatible with rt1715 Gene Chen
                   ` (3 preceding siblings ...)
  2022-08-01 10:14 ` [PATCH v3 4/7] usb: typec: tcpci_rt1711h: Add initial phy setting Gene Chen
@ 2022-08-01 10:14 ` Gene Chen
  2022-08-02  8:28   ` Heikki Krogerus
  2022-08-01 10:14 ` [PATCH v3 6/7] usb: typec: tcpci: Move function "tcpci_to_typec_cc" to common Gene Chen
  2022-08-01 10:14 ` [PATCH v3 7/7] usb: typec: tcpci_rt1711h: Fix CC PHY noise filter of voltage level Gene Chen
  6 siblings, 1 reply; 17+ messages in thread
From: Gene Chen @ 2022-08-01 10:14 UTC (permalink / raw)
  To: linux, heikki.krogerus, gregkh, robh+dt, krzysztof.kozlowski+dt
  Cc: linux-usb, linux-kernel, devicetree, gene_chen, cy_huang

From: Gene Chen <gene_chen@richtek.com>

Add compatible id with rt1715, and add initial setting for
specific support PD30 command.

Signed-off-by: Gene Chen <gene_chen@richtek.com>
---
 drivers/usb/typec/tcpm/tcpci_rt1711h.c | 43 ++++++++++++++++++++------
 1 file changed, 34 insertions(+), 9 deletions(-)

diff --git a/drivers/usb/typec/tcpm/tcpci_rt1711h.c b/drivers/usb/typec/tcpm/tcpci_rt1711h.c
index 33d8ea95b7c1..da35dd3e8a59 100644
--- a/drivers/usb/typec/tcpm/tcpci_rt1711h.c
+++ b/drivers/usb/typec/tcpm/tcpci_rt1711h.c
@@ -19,6 +19,8 @@
 
 #define RT1711H_VID		0x29CF
 #define RT1711H_PID		0x1711
+#define RT1711H_DID		0x2171
+#define RT1715_DID		0x2173
 
 #define RT1711H_PHYCTRL1	0x80
 #define RT1711H_PHYCTRL2	0x81
@@ -30,6 +32,7 @@
 			    (((ck300) << 7) | ((ship_off) << 5) | \
 			    ((auto_idle) << 3) | ((tout) & 0x07))
 #define RT1711H_AUTOIDLEEN	BIT(3)
+#define RT1711H_ENEXTMSG	BIT(4)
 
 #define RT1711H_RTCTRL11	0x9E
 
@@ -48,6 +51,7 @@ struct rt1711h_chip {
 	struct device *dev;
 	struct regulator *vbus;
 	bool src_en;
+	u16 did;
 };
 
 static int rt1711h_read16(struct rt1711h_chip *chip, unsigned int reg, u16 *val)
@@ -84,8 +88,9 @@ static struct rt1711h_chip *tdata_to_rt1711h(struct tcpci_data *tdata)
 
 static int rt1711h_init(struct tcpci *tcpci, struct tcpci_data *tdata)
 {
-	int ret;
 	struct rt1711h_chip *chip = tdata_to_rt1711h(tdata);
+	struct regmap *regmap = chip->data.regmap;
+	int ret;
 
 	/* CK 300K from 320K, shipping off, auto_idle enable, tout = 32ms */
 	ret = rt1711h_write8(chip, RT1711H_RTCTRL8,
@@ -93,6 +98,14 @@ static int rt1711h_init(struct tcpci *tcpci, struct tcpci_data *tdata)
 	if (ret < 0)
 		return ret;
 
+	/* Enable PD30 extended message for RT1715 */
+	if (chip->did == RT1715_DID) {
+		ret = regmap_update_bits(regmap, RT1711H_RTCTRL8,
+					 RT1711H_ENEXTMSG, RT1711H_ENEXTMSG);
+		if (ret < 0)
+			return ret;
+	}
+
 	/* I2C reset : (val + 1) * 12.5ms */
 	ret = rt1711h_write8(chip, RT1711H_RTCTRL11,
 			     RT1711H_RTCTRL11_SET(1, 0x0F));
@@ -230,7 +243,7 @@ static int rt1711h_sw_reset(struct rt1711h_chip *chip)
 	return 0;
 }
 
-static int rt1711h_check_revision(struct i2c_client *i2c)
+static int rt1711h_check_revision(struct i2c_client *i2c, struct rt1711h_chip *chip)
 {
 	int ret;
 
@@ -248,7 +261,15 @@ static int rt1711h_check_revision(struct i2c_client *i2c)
 		dev_err(&i2c->dev, "pid is not correct, 0x%04x\n", ret);
 		return -ENODEV;
 	}
-	return 0;
+	ret = i2c_smbus_read_word_data(i2c, TCPC_BCD_DEV);
+	if (ret < 0)
+		return ret;
+	if (ret != chip->did) {
+		dev_err(&i2c->dev, "did is not correct, 0x%04x\n", ret);
+		return -ENODEV;
+	}
+	dev_dbg(&i2c->dev, "did is 0x%04x\n", ret);
+	return ret;
 }
 
 static int rt1711h_probe(struct i2c_client *client,
@@ -257,16 +278,18 @@ static int rt1711h_probe(struct i2c_client *client,
 	int ret;
 	struct rt1711h_chip *chip;
 
-	ret = rt1711h_check_revision(client);
+	chip = devm_kzalloc(&client->dev, sizeof(*chip), GFP_KERNEL);
+	if (!chip)
+		return -ENOMEM;
+
+	chip->did = (size_t)device_get_match_data(&client->dev);
+
+	ret = rt1711h_check_revision(client, chip);
 	if (ret < 0) {
 		dev_err(&client->dev, "check vid/pid fail\n");
 		return ret;
 	}
 
-	chip = devm_kzalloc(&client->dev, sizeof(*chip), GFP_KERNEL);
-	if (!chip)
-		return -ENOMEM;
-
 	chip->data.regmap = devm_regmap_init_i2c(client,
 						 &rt1711h_regmap_config);
 	if (IS_ERR(chip->data.regmap))
@@ -317,13 +340,15 @@ static int rt1711h_remove(struct i2c_client *client)
 
 static const struct i2c_device_id rt1711h_id[] = {
 	{ "rt1711h", 0 },
+	{ "rt1715", 0 },
 	{ }
 };
 MODULE_DEVICE_TABLE(i2c, rt1711h_id);
 
 #ifdef CONFIG_OF
 static const struct of_device_id rt1711h_of_match[] = {
-	{ .compatible = "richtek,rt1711h", },
+	{ .compatible = "richtek,rt1711h", .data = (void *)RT1711H_DID },
+	{ .compatible = "richtek,rt1715", .data = (void *)RT1715_DID },
 	{},
 };
 MODULE_DEVICE_TABLE(of, rt1711h_of_match);
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PATCH v3 6/7] usb: typec: tcpci: Move function "tcpci_to_typec_cc" to common
  2022-08-01 10:14 [PATCH v3 0/7] usb: typec: tcpci_rt1711h: Add compatible with rt1715 Gene Chen
                   ` (4 preceding siblings ...)
  2022-08-01 10:14 ` [PATCH v3 5/7] usb: typec: tcpci_rt1711h: Add compatible id with rt1715 Gene Chen
@ 2022-08-01 10:14 ` Gene Chen
  2022-08-02  8:32   ` Heikki Krogerus
  2022-08-01 10:14 ` [PATCH v3 7/7] usb: typec: tcpci_rt1711h: Fix CC PHY noise filter of voltage level Gene Chen
  6 siblings, 1 reply; 17+ messages in thread
From: Gene Chen @ 2022-08-01 10:14 UTC (permalink / raw)
  To: linux, heikki.krogerus, gregkh, robh+dt, krzysztof.kozlowski+dt
  Cc: linux-usb, linux-kernel, devicetree, gene_chen, cy_huang

From: Gene Chen <gene_chen@richtek.com>

Move transition function "tcpci_to_typec_cc" to common header

Signed-off-by: Gene Chen <gene_chen@richtek.com>
---
 drivers/usb/typec/tcpm/tcpci.c | 22 ----------------------
 drivers/usb/typec/tcpm/tcpci.h | 23 +++++++++++++++++++++++
 2 files changed, 23 insertions(+), 22 deletions(-)

diff --git a/drivers/usb/typec/tcpm/tcpci.c b/drivers/usb/typec/tcpm/tcpci.c
index f33e08eb7670..0f45d456df32 100644
--- a/drivers/usb/typec/tcpm/tcpci.c
+++ b/drivers/usb/typec/tcpm/tcpci.c
@@ -28,11 +28,6 @@
 #define	VPPS_VALID_MIN_MV			100
 #define	VSINKDISCONNECT_PD_MIN_PERCENT		90
 
-#define tcpc_presenting_rd(reg, cc) \
-	(!(TCPC_ROLE_CTRL_DRP & (reg)) && \
-	 (((reg) & (TCPC_ROLE_CTRL_## cc ##_MASK << TCPC_ROLE_CTRL_## cc ##_SHIFT)) == \
-	  (TCPC_ROLE_CTRL_CC_RD << TCPC_ROLE_CTRL_## cc ##_SHIFT)))
-
 struct tcpci {
 	struct device *dev;
 
@@ -219,23 +214,6 @@ static int tcpci_start_toggling(struct tcpc_dev *tcpc,
 			    TCPC_CMD_LOOK4CONNECTION);
 }
 
-static enum typec_cc_status tcpci_to_typec_cc(unsigned int cc, bool sink)
-{
-	switch (cc) {
-	case 0x1:
-		return sink ? TYPEC_CC_RP_DEF : TYPEC_CC_RA;
-	case 0x2:
-		return sink ? TYPEC_CC_RP_1_5 : TYPEC_CC_RD;
-	case 0x3:
-		if (sink)
-			return TYPEC_CC_RP_3_0;
-		fallthrough;
-	case 0x0:
-	default:
-		return TYPEC_CC_OPEN;
-	}
-}
-
 static int tcpci_get_cc(struct tcpc_dev *tcpc,
 			enum typec_cc_status *cc1, enum typec_cc_status *cc2)
 {
diff --git a/drivers/usb/typec/tcpm/tcpci.h b/drivers/usb/typec/tcpm/tcpci.h
index b2edd45f13c6..3f45cb0426df 100644
--- a/drivers/usb/typec/tcpm/tcpci.h
+++ b/drivers/usb/typec/tcpm/tcpci.h
@@ -166,6 +166,11 @@
 /* I2C_WRITE_BYTE_COUNT + 1 when TX_BUF_BYTE_x is only accessible I2C_WRITE_BYTE_COUNT */
 #define TCPC_TRANSMIT_BUFFER_MAX_LEN		31
 
+#define tcpc_presenting_rd(reg, cc) \
+	(!(TCPC_ROLE_CTRL_DRP & (reg)) && \
+	 (((reg) & (TCPC_ROLE_CTRL_## cc ##_MASK << TCPC_ROLE_CTRL_## cc ##_SHIFT)) == \
+	  (TCPC_ROLE_CTRL_CC_RD << TCPC_ROLE_CTRL_## cc ##_SHIFT)))
+
 struct tcpci;
 
 /*
@@ -206,4 +211,22 @@ irqreturn_t tcpci_irq(struct tcpci *tcpci);
 
 struct tcpm_port;
 struct tcpm_port *tcpci_get_tcpm_port(struct tcpci *tcpci);
+
+static inline enum typec_cc_status tcpci_to_typec_cc(unsigned int cc, bool sink)
+{
+	switch (cc) {
+	case 0x1:
+		return sink ? TYPEC_CC_RP_DEF : TYPEC_CC_RA;
+	case 0x2:
+		return sink ? TYPEC_CC_RP_1_5 : TYPEC_CC_RD;
+	case 0x3:
+		if (sink)
+			return TYPEC_CC_RP_3_0;
+		fallthrough;
+	case 0x0:
+	default:
+		return TYPEC_CC_OPEN;
+	}
+}
+
 #endif /* __LINUX_USB_TCPCI_H */
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PATCH v3 7/7] usb: typec: tcpci_rt1711h: Fix CC PHY noise filter of voltage level
  2022-08-01 10:14 [PATCH v3 0/7] usb: typec: tcpci_rt1711h: Add compatible with rt1715 Gene Chen
                   ` (5 preceding siblings ...)
  2022-08-01 10:14 ` [PATCH v3 6/7] usb: typec: tcpci: Move function "tcpci_to_typec_cc" to common Gene Chen
@ 2022-08-01 10:14 ` Gene Chen
  2022-08-02  8:42   ` Heikki Krogerus
  6 siblings, 1 reply; 17+ messages in thread
From: Gene Chen @ 2022-08-01 10:14 UTC (permalink / raw)
  To: linux, heikki.krogerus, gregkh, robh+dt, krzysztof.kozlowski+dt
  Cc: linux-usb, linux-kernel, devicetree, gene_chen, cy_huang

From: Gene Chen <gene_chen@richtek.com>

Fix CC PHY noise filter of voltage level according to
current cc voltage level

Signed-off-by: Gene Chen <gene_chen@richtek.com>
---
 drivers/usb/typec/tcpm/tcpci_rt1711h.c | 58 +++++++++++++++++++++++++-
 1 file changed, 57 insertions(+), 1 deletion(-)

diff --git a/drivers/usb/typec/tcpm/tcpci_rt1711h.c b/drivers/usb/typec/tcpm/tcpci_rt1711h.c
index da35dd3e8a59..6d2568de553b 100644
--- a/drivers/usb/typec/tcpm/tcpci_rt1711h.c
+++ b/drivers/usb/typec/tcpm/tcpci_rt1711h.c
@@ -25,8 +25,11 @@
 #define RT1711H_PHYCTRL1	0x80
 #define RT1711H_PHYCTRL2	0x81
 
-#define RT1711H_RTCTRL8		0x9B
+#define RT1711H_RTCTRL4		0x93
+/* rx threshold of rd/rp: 1b0 for level 0.4V/0.7V, 1b1 for 0.35V/0.75V */
+#define RT1711H_BMCIO_RXDZSEL	BIT(0)
 
+#define RT1711H_RTCTRL8		0x9B
 /* Autoidle timeout = (tout * 2 + 1) * 6.4ms */
 #define RT1711H_RTCTRL8_SET(ck300, ship_off, auto_idle, tout) \
 			    (((ck300) << 7) | ((ship_off) << 5) | \
@@ -45,6 +48,10 @@
 #define RT1711H_RTCTRL15	0xA2
 #define RT1711H_RTCTRL16	0xA3
 
+#define RT1711H_RTCTRL18	0xAF
+/* 1b0 as fixed rx threshold of rd/rp 0.55V, 1b1 depends on RTCRTL4[0] */
+#define BMCIO_RXDZEN	BIT(0)
+
 struct rt1711h_chip {
 	struct tcpci_data data;
 	struct tcpci *tcpci;
@@ -165,6 +172,53 @@ static int rt1711h_set_vconn(struct tcpci *tcpci, struct tcpci_data *tdata,
 				  RT1711H_AUTOIDLEEN, enable ? 0 : RT1711H_AUTOIDLEEN);
 }
 
+/*
+ * Selects the CC PHY noise filter voltage level according to the remote current
+ * CC voltage level.
+ *
+ * @status: The port's current cc status read from IC
+ * Return 0 if writes succeed; failure code otherwise
+ */
+static inline int rt1711h_init_cc_params(struct rt1711h_chip *chip, u8 status)
+{
+	int ret, cc1, cc2;
+	u8 role = 0;
+	u32 rxdz_en, rxdz_sel;
+
+	ret = rt1711h_read8(chip, TCPC_ROLE_CTRL, &role);
+	if (ret < 0)
+		return ret;
+
+	cc1 = tcpci_to_typec_cc((status >> TCPC_CC_STATUS_CC1_SHIFT) &
+				TCPC_CC_STATUS_CC1_MASK,
+				status & TCPC_CC_STATUS_TERM ||
+				tcpc_presenting_rd(role, CC1));
+	cc2 = tcpci_to_typec_cc((status >> TCPC_CC_STATUS_CC2_SHIFT) &
+				TCPC_CC_STATUS_CC2_MASK,
+				status & TCPC_CC_STATUS_TERM ||
+				tcpc_presenting_rd(role, CC2));
+
+	if ((cc1 >= TYPEC_CC_RP_1_5 && cc2 < TYPEC_CC_RP_DEF) ||
+	    (cc2 >= TYPEC_CC_RP_1_5 && cc1 < TYPEC_CC_RP_DEF)) {
+		rxdz_en = BMCIO_RXDZEN;
+		if (chip->did == RT1715_DID)
+			rxdz_sel = RT1711H_BMCIO_RXDZSEL;
+		else
+			rxdz_sel = 0;
+	} else {
+		rxdz_en = 0;
+		rxdz_sel = RT1711H_BMCIO_RXDZSEL;
+	}
+
+	ret = regmap_update_bits(chip->data.regmap, RT1711H_RTCTRL18,
+				 BMCIO_RXDZEN, rxdz_en);
+	if (ret < 0)
+		return ret;
+
+	return regmap_update_bits(chip->data.regmap, RT1711H_RTCTRL4,
+				  RT1711H_BMCIO_RXDZSEL, rxdz_sel);
+}
+
 static int rt1711h_start_drp_toggling(struct tcpci *tcpci,
 				      struct tcpci_data *tdata,
 				      enum typec_cc_status cc)
@@ -225,6 +279,8 @@ static irqreturn_t rt1711h_irq(int irq, void *dev_id)
 		/* Clear cc change event triggered by starting toggling */
 		if (status & TCPC_CC_STATUS_TOGGLING)
 			rt1711h_write8(chip, TCPC_ALERT, TCPC_ALERT_CC_STATUS);
+		else
+			rt1711h_init_cc_params(chip, status);
 	}
 
 out:
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* Re: [PATCH v3 2/7] usb: typec: tcpci_rt1711h: Fix vendor setting when set vconn
  2022-08-01 10:14 ` [PATCH v3 2/7] usb: typec: tcpci_rt1711h: Fix vendor setting when set vconn Gene Chen
@ 2022-08-02  7:57   ` Heikki Krogerus
  2022-08-03  6:08     ` Gene Chen
  0 siblings, 1 reply; 17+ messages in thread
From: Heikki Krogerus @ 2022-08-02  7:57 UTC (permalink / raw)
  To: Gene Chen
  Cc: linux, gregkh, robh+dt, krzysztof.kozlowski+dt, linux-usb,
	linux-kernel, devicetree, gene_chen, cy_huang

Hi Gene,

On Mon, Aug 01, 2022 at 06:14:42PM +0800, Gene Chen wrote:
> From: Gene Chen <gene_chen@richtek.com>
> 
> replace overwrite whole register with update bits
> 
> Signed-off-by: Gene Chen <gene_chen@richtek.com>
> ---
>  drivers/usb/typec/tcpm/tcpci_rt1711h.c | 15 +++++++++------
>  1 file changed, 9 insertions(+), 6 deletions(-)
> 
> diff --git a/drivers/usb/typec/tcpm/tcpci_rt1711h.c b/drivers/usb/typec/tcpm/tcpci_rt1711h.c
> index b56a0880a044..6197d9a05d36 100644
> --- a/drivers/usb/typec/tcpm/tcpci_rt1711h.c
> +++ b/drivers/usb/typec/tcpm/tcpci_rt1711h.c
> @@ -5,13 +5,15 @@
>   * Richtek RT1711H Type-C Chip Driver
>   */
>  
> -#include <linux/kernel.h>
> -#include <linux/module.h>
> +#include <linux/bits.h>
> +#include <linux/gpio/consumer.h>
>  #include <linux/i2c.h>
>  #include <linux/interrupt.h>
> -#include <linux/gpio/consumer.h>
> -#include <linux/usb/tcpm.h>
> +#include <linux/kernel.h>
> +#include <linux/module.h>
>  #include <linux/regmap.h>
> +#include <linux/usb/tcpm.h>

That header reshuffling is not necessary for this change - at least you
are not giving any reason for it in your commit message.

If there is no real need for that in this patch, then please leave the
headers as they are. You can propose changing the order of the headers
in a separate patch. Though, I would not bother with it unless there
is some real benefit in doing so, and I'm pretty sure there isn't any.

>  #include "tcpci.h"
>  
>  #define RT1711H_VID		0x29CF
> @@ -23,6 +25,7 @@
>  #define RT1711H_RTCTRL8_SET(ck300, ship_off, auto_idle, tout) \
>  			    (((ck300) << 7) | ((ship_off) << 5) | \
>  			    ((auto_idle) << 3) | ((tout) & 0x07))
> +#define RT1711H_AUTOIDLEEN	BIT(3)
>  
>  #define RT1711H_RTCTRL11	0x9E
>  
> @@ -109,8 +112,8 @@ static int rt1711h_set_vconn(struct tcpci *tcpci, struct tcpci_data *tdata,
>  {
>  	struct rt1711h_chip *chip = tdata_to_rt1711h(tdata);
>  
> -	return rt1711h_write8(chip, RT1711H_RTCTRL8,
> -			      RT1711H_RTCTRL8_SET(0, 1, !enable, 2));
> +	return regmap_update_bits(chip->data.regmap, RT1711H_RTCTRL8,
> +				  RT1711H_AUTOIDLEEN, enable ? 0 : RT1711H_AUTOIDLEEN);
>  }
>  
>  static int rt1711h_start_drp_toggling(struct tcpci *tcpci,
> -- 
> 2.25.1

thanks,

-- 
heikki

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH v3 3/7] usb: typec: tcpci_rt1711h: Add regulator support when source vbus
  2022-08-01 10:14 ` [PATCH v3 3/7] usb: typec: tcpci_rt1711h: Add regulator support when source vbus Gene Chen
@ 2022-08-02  8:04   ` Heikki Krogerus
  0 siblings, 0 replies; 17+ messages in thread
From: Heikki Krogerus @ 2022-08-02  8:04 UTC (permalink / raw)
  To: Gene Chen
  Cc: linux, gregkh, robh+dt, krzysztof.kozlowski+dt, linux-usb,
	linux-kernel, devicetree, gene_chen, cy_huang

On Mon, Aug 01, 2022 at 06:14:43PM +0800, Gene Chen wrote:
> From: Gene Chen <gene_chen@richtek.com>
> 
> Add regulator support when source vbus
> 
> Signed-off-by: Gene Chen <gene_chen@richtek.com>

Acked-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>

> ---
>  drivers/usb/typec/tcpm/tcpci_rt1711h.c | 28 ++++++++++++++++++++++++++
>  1 file changed, 28 insertions(+)
> 
> diff --git a/drivers/usb/typec/tcpm/tcpci_rt1711h.c b/drivers/usb/typec/tcpm/tcpci_rt1711h.c
> index 6197d9a05d36..df7bfe299987 100644
> --- a/drivers/usb/typec/tcpm/tcpci_rt1711h.c
> +++ b/drivers/usb/typec/tcpm/tcpci_rt1711h.c
> @@ -12,6 +12,7 @@
>  #include <linux/kernel.h>
>  #include <linux/module.h>
>  #include <linux/regmap.h>
> +#include <linux/regulator/consumer.h>
>  #include <linux/usb/tcpm.h>
>  
>  #include "tcpci.h"
> @@ -42,6 +43,8 @@ struct rt1711h_chip {
>  	struct tcpci_data data;
>  	struct tcpci *tcpci;
>  	struct device *dev;
> +	struct regulator *vbus;
> +	bool src_en;
>  };
>  
>  static int rt1711h_read16(struct rt1711h_chip *chip, unsigned int reg, u16 *val)
> @@ -105,6 +108,26 @@ static int rt1711h_init(struct tcpci *tcpci, struct tcpci_data *tdata)
>  
>  	/* dcSRC.DRP : 33% */
>  	return rt1711h_write16(chip, RT1711H_RTCTRL16, 330);
> +
> +}
> +
> +static int rt1711h_set_vbus(struct tcpci *tcpci, struct tcpci_data *tdata,
> +			    bool src, bool snk)
> +{
> +	struct rt1711h_chip *chip = tdata_to_rt1711h(tdata);
> +	int ret;
> +
> +	if (chip->src_en == src)
> +		return 0;
> +
> +	if (src)
> +		ret = regulator_enable(chip->vbus);
> +	else
> +		ret = regulator_disable(chip->vbus);
> +
> +	if (!ret)
> +		chip->src_en = src;
> +	return ret;
>  }
>  
>  static int rt1711h_set_vconn(struct tcpci *tcpci, struct tcpci_data *tdata,
> @@ -248,7 +271,12 @@ static int rt1711h_probe(struct i2c_client *client,
>  	if (ret < 0)
>  		return ret;
>  
> +	chip->vbus = devm_regulator_get(&client->dev, "vbus");
> +	if (IS_ERR(chip->vbus))
> +		return PTR_ERR(chip->vbus);
> +
>  	chip->data.init = rt1711h_init;
> +	chip->data.set_vbus = rt1711h_set_vbus;
>  	chip->data.set_vconn = rt1711h_set_vconn;
>  	chip->data.start_drp_toggling = rt1711h_start_drp_toggling;
>  	chip->tcpci = tcpci_register_port(chip->dev, &chip->data);
> -- 
> 2.25.1

-- 
heikki

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH v3 4/7] usb: typec: tcpci_rt1711h: Add initial phy setting
  2022-08-01 10:14 ` [PATCH v3 4/7] usb: typec: tcpci_rt1711h: Add initial phy setting Gene Chen
@ 2022-08-02  8:19   ` Heikki Krogerus
  2022-08-02  8:58     ` Guenter Roeck
  0 siblings, 1 reply; 17+ messages in thread
From: Heikki Krogerus @ 2022-08-02  8:19 UTC (permalink / raw)
  To: Gene Chen
  Cc: linux, gregkh, robh+dt, krzysztof.kozlowski+dt, linux-usb,
	linux-kernel, devicetree, gene_chen, cy_huang

Hi Gene,

On Mon, Aug 01, 2022 at 06:14:44PM +0800, Gene Chen wrote:
> From: Gene Chen <gene_chen@richtek.com>
> 
> Add initial phy setting about phy dicard retry,
> rx filter deglitech time and BMC-encoded wait time

I'm sorry, but what does "deglitech" mean? Is it just a typo?

> Signed-off-by: Gene Chen <gene_chen@richtek.com>
> Reviewed-by: Guenter Roeck <linux@roeck-us.net>
> ---
>  drivers/usb/typec/tcpm/tcpci_rt1711h.c | 15 ++++++++++++++-
>  1 file changed, 14 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/usb/typec/tcpm/tcpci_rt1711h.c b/drivers/usb/typec/tcpm/tcpci_rt1711h.c
> index df7bfe299987..33d8ea95b7c1 100644
> --- a/drivers/usb/typec/tcpm/tcpci_rt1711h.c
> +++ b/drivers/usb/typec/tcpm/tcpci_rt1711h.c
> @@ -20,6 +20,9 @@
>  #define RT1711H_VID		0x29CF
>  #define RT1711H_PID		0x1711
>  
> +#define RT1711H_PHYCTRL1	0x80
> +#define RT1711H_PHYCTRL2	0x81
> +
>  #define RT1711H_RTCTRL8		0x9B
>  
>  /* Autoidle timeout = (tout * 2 + 1) * 6.4ms */
> @@ -107,8 +110,18 @@ static int rt1711h_init(struct tcpci *tcpci, struct tcpci_data *tdata)
>  		return ret;
>  
>  	/* dcSRC.DRP : 33% */
> -	return rt1711h_write16(chip, RT1711H_RTCTRL16, 330);
> +	ret = rt1711h_write16(chip, RT1711H_RTCTRL16, 330);
> +	if (ret < 0)
> +		return ret;
> +
> +	/* Enable phy discard retry, retry count 7, rx filter deglitech 100 us */
> +	ret = rt1711h_write8(chip, RT1711H_PHYCTRL1, 0xF1);
> +	if (ret < 0)
> +		return ret;
>  
> +	/* Decrease wait time of BMC-encoded 1 bit from 2.67us to 2.55us */
> +	/* wait time : (val * .4167) us */
> +	return rt1711h_write8(chip, RT1711H_PHYCTRL2, 62);
>  }
>  
>  static int rt1711h_set_vbus(struct tcpci *tcpci, struct tcpci_data *tdata,
> -- 
> 2.25.1

thanks,

-- 
heikki

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH v3 5/7] usb: typec: tcpci_rt1711h: Add compatible id with rt1715
  2022-08-01 10:14 ` [PATCH v3 5/7] usb: typec: tcpci_rt1711h: Add compatible id with rt1715 Gene Chen
@ 2022-08-02  8:28   ` Heikki Krogerus
  0 siblings, 0 replies; 17+ messages in thread
From: Heikki Krogerus @ 2022-08-02  8:28 UTC (permalink / raw)
  To: Gene Chen
  Cc: linux, gregkh, robh+dt, krzysztof.kozlowski+dt, linux-usb,
	linux-kernel, devicetree, gene_chen, cy_huang

On Mon, Aug 01, 2022 at 06:14:45PM +0800, Gene Chen wrote:
> From: Gene Chen <gene_chen@richtek.com>
> 
> Add compatible id with rt1715, and add initial setting for
> specific support PD30 command.
> 
> Signed-off-by: Gene Chen <gene_chen@richtek.com>

Acked-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>

> ---
>  drivers/usb/typec/tcpm/tcpci_rt1711h.c | 43 ++++++++++++++++++++------
>  1 file changed, 34 insertions(+), 9 deletions(-)
> 
> diff --git a/drivers/usb/typec/tcpm/tcpci_rt1711h.c b/drivers/usb/typec/tcpm/tcpci_rt1711h.c
> index 33d8ea95b7c1..da35dd3e8a59 100644
> --- a/drivers/usb/typec/tcpm/tcpci_rt1711h.c
> +++ b/drivers/usb/typec/tcpm/tcpci_rt1711h.c
> @@ -19,6 +19,8 @@
>  
>  #define RT1711H_VID		0x29CF
>  #define RT1711H_PID		0x1711
> +#define RT1711H_DID		0x2171
> +#define RT1715_DID		0x2173
>  
>  #define RT1711H_PHYCTRL1	0x80
>  #define RT1711H_PHYCTRL2	0x81
> @@ -30,6 +32,7 @@
>  			    (((ck300) << 7) | ((ship_off) << 5) | \
>  			    ((auto_idle) << 3) | ((tout) & 0x07))
>  #define RT1711H_AUTOIDLEEN	BIT(3)
> +#define RT1711H_ENEXTMSG	BIT(4)
>  
>  #define RT1711H_RTCTRL11	0x9E
>  
> @@ -48,6 +51,7 @@ struct rt1711h_chip {
>  	struct device *dev;
>  	struct regulator *vbus;
>  	bool src_en;
> +	u16 did;
>  };
>  
>  static int rt1711h_read16(struct rt1711h_chip *chip, unsigned int reg, u16 *val)
> @@ -84,8 +88,9 @@ static struct rt1711h_chip *tdata_to_rt1711h(struct tcpci_data *tdata)
>  
>  static int rt1711h_init(struct tcpci *tcpci, struct tcpci_data *tdata)
>  {
> -	int ret;
>  	struct rt1711h_chip *chip = tdata_to_rt1711h(tdata);
> +	struct regmap *regmap = chip->data.regmap;
> +	int ret;
>  
>  	/* CK 300K from 320K, shipping off, auto_idle enable, tout = 32ms */
>  	ret = rt1711h_write8(chip, RT1711H_RTCTRL8,
> @@ -93,6 +98,14 @@ static int rt1711h_init(struct tcpci *tcpci, struct tcpci_data *tdata)
>  	if (ret < 0)
>  		return ret;
>  
> +	/* Enable PD30 extended message for RT1715 */
> +	if (chip->did == RT1715_DID) {
> +		ret = regmap_update_bits(regmap, RT1711H_RTCTRL8,
> +					 RT1711H_ENEXTMSG, RT1711H_ENEXTMSG);
> +		if (ret < 0)
> +			return ret;
> +	}
> +
>  	/* I2C reset : (val + 1) * 12.5ms */
>  	ret = rt1711h_write8(chip, RT1711H_RTCTRL11,
>  			     RT1711H_RTCTRL11_SET(1, 0x0F));
> @@ -230,7 +243,7 @@ static int rt1711h_sw_reset(struct rt1711h_chip *chip)
>  	return 0;
>  }
>  
> -static int rt1711h_check_revision(struct i2c_client *i2c)
> +static int rt1711h_check_revision(struct i2c_client *i2c, struct rt1711h_chip *chip)
>  {
>  	int ret;
>  
> @@ -248,7 +261,15 @@ static int rt1711h_check_revision(struct i2c_client *i2c)
>  		dev_err(&i2c->dev, "pid is not correct, 0x%04x\n", ret);
>  		return -ENODEV;
>  	}
> -	return 0;
> +	ret = i2c_smbus_read_word_data(i2c, TCPC_BCD_DEV);
> +	if (ret < 0)
> +		return ret;
> +	if (ret != chip->did) {
> +		dev_err(&i2c->dev, "did is not correct, 0x%04x\n", ret);
> +		return -ENODEV;
> +	}
> +	dev_dbg(&i2c->dev, "did is 0x%04x\n", ret);
> +	return ret;
>  }
>  
>  static int rt1711h_probe(struct i2c_client *client,
> @@ -257,16 +278,18 @@ static int rt1711h_probe(struct i2c_client *client,
>  	int ret;
>  	struct rt1711h_chip *chip;
>  
> -	ret = rt1711h_check_revision(client);
> +	chip = devm_kzalloc(&client->dev, sizeof(*chip), GFP_KERNEL);
> +	if (!chip)
> +		return -ENOMEM;
> +
> +	chip->did = (size_t)device_get_match_data(&client->dev);
> +
> +	ret = rt1711h_check_revision(client, chip);
>  	if (ret < 0) {
>  		dev_err(&client->dev, "check vid/pid fail\n");
>  		return ret;
>  	}
>  
> -	chip = devm_kzalloc(&client->dev, sizeof(*chip), GFP_KERNEL);
> -	if (!chip)
> -		return -ENOMEM;
> -
>  	chip->data.regmap = devm_regmap_init_i2c(client,
>  						 &rt1711h_regmap_config);
>  	if (IS_ERR(chip->data.regmap))
> @@ -317,13 +340,15 @@ static int rt1711h_remove(struct i2c_client *client)
>  
>  static const struct i2c_device_id rt1711h_id[] = {
>  	{ "rt1711h", 0 },
> +	{ "rt1715", 0 },
>  	{ }
>  };
>  MODULE_DEVICE_TABLE(i2c, rt1711h_id);
>  
>  #ifdef CONFIG_OF
>  static const struct of_device_id rt1711h_of_match[] = {
> -	{ .compatible = "richtek,rt1711h", },
> +	{ .compatible = "richtek,rt1711h", .data = (void *)RT1711H_DID },
> +	{ .compatible = "richtek,rt1715", .data = (void *)RT1715_DID },
>  	{},
>  };
>  MODULE_DEVICE_TABLE(of, rt1711h_of_match);
> -- 
> 2.25.1

-- 
heikki

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH v3 6/7] usb: typec: tcpci: Move function "tcpci_to_typec_cc" to common
  2022-08-01 10:14 ` [PATCH v3 6/7] usb: typec: tcpci: Move function "tcpci_to_typec_cc" to common Gene Chen
@ 2022-08-02  8:32   ` Heikki Krogerus
  0 siblings, 0 replies; 17+ messages in thread
From: Heikki Krogerus @ 2022-08-02  8:32 UTC (permalink / raw)
  To: Gene Chen
  Cc: linux, gregkh, robh+dt, krzysztof.kozlowski+dt, linux-usb,
	linux-kernel, devicetree, gene_chen, cy_huang

On Mon, Aug 01, 2022 at 06:14:46PM +0800, Gene Chen wrote:
> From: Gene Chen <gene_chen@richtek.com>
> 
> Move transition function "tcpci_to_typec_cc" to common header
> 
> Signed-off-by: Gene Chen <gene_chen@richtek.com>

Acked-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>

> ---
>  drivers/usb/typec/tcpm/tcpci.c | 22 ----------------------
>  drivers/usb/typec/tcpm/tcpci.h | 23 +++++++++++++++++++++++
>  2 files changed, 23 insertions(+), 22 deletions(-)
> 
> diff --git a/drivers/usb/typec/tcpm/tcpci.c b/drivers/usb/typec/tcpm/tcpci.c
> index f33e08eb7670..0f45d456df32 100644
> --- a/drivers/usb/typec/tcpm/tcpci.c
> +++ b/drivers/usb/typec/tcpm/tcpci.c
> @@ -28,11 +28,6 @@
>  #define	VPPS_VALID_MIN_MV			100
>  #define	VSINKDISCONNECT_PD_MIN_PERCENT		90
>  
> -#define tcpc_presenting_rd(reg, cc) \
> -	(!(TCPC_ROLE_CTRL_DRP & (reg)) && \
> -	 (((reg) & (TCPC_ROLE_CTRL_## cc ##_MASK << TCPC_ROLE_CTRL_## cc ##_SHIFT)) == \
> -	  (TCPC_ROLE_CTRL_CC_RD << TCPC_ROLE_CTRL_## cc ##_SHIFT)))
> -
>  struct tcpci {
>  	struct device *dev;
>  
> @@ -219,23 +214,6 @@ static int tcpci_start_toggling(struct tcpc_dev *tcpc,
>  			    TCPC_CMD_LOOK4CONNECTION);
>  }
>  
> -static enum typec_cc_status tcpci_to_typec_cc(unsigned int cc, bool sink)
> -{
> -	switch (cc) {
> -	case 0x1:
> -		return sink ? TYPEC_CC_RP_DEF : TYPEC_CC_RA;
> -	case 0x2:
> -		return sink ? TYPEC_CC_RP_1_5 : TYPEC_CC_RD;
> -	case 0x3:
> -		if (sink)
> -			return TYPEC_CC_RP_3_0;
> -		fallthrough;
> -	case 0x0:
> -	default:
> -		return TYPEC_CC_OPEN;
> -	}
> -}
> -
>  static int tcpci_get_cc(struct tcpc_dev *tcpc,
>  			enum typec_cc_status *cc1, enum typec_cc_status *cc2)
>  {
> diff --git a/drivers/usb/typec/tcpm/tcpci.h b/drivers/usb/typec/tcpm/tcpci.h
> index b2edd45f13c6..3f45cb0426df 100644
> --- a/drivers/usb/typec/tcpm/tcpci.h
> +++ b/drivers/usb/typec/tcpm/tcpci.h
> @@ -166,6 +166,11 @@
>  /* I2C_WRITE_BYTE_COUNT + 1 when TX_BUF_BYTE_x is only accessible I2C_WRITE_BYTE_COUNT */
>  #define TCPC_TRANSMIT_BUFFER_MAX_LEN		31
>  
> +#define tcpc_presenting_rd(reg, cc) \
> +	(!(TCPC_ROLE_CTRL_DRP & (reg)) && \
> +	 (((reg) & (TCPC_ROLE_CTRL_## cc ##_MASK << TCPC_ROLE_CTRL_## cc ##_SHIFT)) == \
> +	  (TCPC_ROLE_CTRL_CC_RD << TCPC_ROLE_CTRL_## cc ##_SHIFT)))
> +
>  struct tcpci;
>  
>  /*
> @@ -206,4 +211,22 @@ irqreturn_t tcpci_irq(struct tcpci *tcpci);
>  
>  struct tcpm_port;
>  struct tcpm_port *tcpci_get_tcpm_port(struct tcpci *tcpci);
> +
> +static inline enum typec_cc_status tcpci_to_typec_cc(unsigned int cc, bool sink)
> +{
> +	switch (cc) {
> +	case 0x1:
> +		return sink ? TYPEC_CC_RP_DEF : TYPEC_CC_RA;
> +	case 0x2:
> +		return sink ? TYPEC_CC_RP_1_5 : TYPEC_CC_RD;
> +	case 0x3:
> +		if (sink)
> +			return TYPEC_CC_RP_3_0;
> +		fallthrough;
> +	case 0x0:
> +	default:
> +		return TYPEC_CC_OPEN;
> +	}
> +}
> +
>  #endif /* __LINUX_USB_TCPCI_H */
> -- 
> 2.25.1

-- 
heikki

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH v3 7/7] usb: typec: tcpci_rt1711h: Fix CC PHY noise filter of voltage level
  2022-08-01 10:14 ` [PATCH v3 7/7] usb: typec: tcpci_rt1711h: Fix CC PHY noise filter of voltage level Gene Chen
@ 2022-08-02  8:42   ` Heikki Krogerus
  0 siblings, 0 replies; 17+ messages in thread
From: Heikki Krogerus @ 2022-08-02  8:42 UTC (permalink / raw)
  To: Gene Chen
  Cc: linux, gregkh, robh+dt, krzysztof.kozlowski+dt, linux-usb,
	linux-kernel, devicetree, gene_chen, cy_huang

On Mon, Aug 01, 2022 at 06:14:47PM +0800, Gene Chen wrote:
> From: Gene Chen <gene_chen@richtek.com>
> 
> Fix CC PHY noise filter of voltage level according to
> current cc voltage level
> 
> Signed-off-by: Gene Chen <gene_chen@richtek.com>

I was unable to apply this series on top of Greg's latest usb-next, so
I think you need to rebase these. But in any case, for this patch FWIW:

Acked-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>

> ---
>  drivers/usb/typec/tcpm/tcpci_rt1711h.c | 58 +++++++++++++++++++++++++-
>  1 file changed, 57 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/usb/typec/tcpm/tcpci_rt1711h.c b/drivers/usb/typec/tcpm/tcpci_rt1711h.c
> index da35dd3e8a59..6d2568de553b 100644
> --- a/drivers/usb/typec/tcpm/tcpci_rt1711h.c
> +++ b/drivers/usb/typec/tcpm/tcpci_rt1711h.c
> @@ -25,8 +25,11 @@
>  #define RT1711H_PHYCTRL1	0x80
>  #define RT1711H_PHYCTRL2	0x81
>  
> -#define RT1711H_RTCTRL8		0x9B
> +#define RT1711H_RTCTRL4		0x93
> +/* rx threshold of rd/rp: 1b0 for level 0.4V/0.7V, 1b1 for 0.35V/0.75V */
> +#define RT1711H_BMCIO_RXDZSEL	BIT(0)
>  
> +#define RT1711H_RTCTRL8		0x9B
>  /* Autoidle timeout = (tout * 2 + 1) * 6.4ms */
>  #define RT1711H_RTCTRL8_SET(ck300, ship_off, auto_idle, tout) \
>  			    (((ck300) << 7) | ((ship_off) << 5) | \
> @@ -45,6 +48,10 @@
>  #define RT1711H_RTCTRL15	0xA2
>  #define RT1711H_RTCTRL16	0xA3
>  
> +#define RT1711H_RTCTRL18	0xAF
> +/* 1b0 as fixed rx threshold of rd/rp 0.55V, 1b1 depends on RTCRTL4[0] */
> +#define BMCIO_RXDZEN	BIT(0)
> +
>  struct rt1711h_chip {
>  	struct tcpci_data data;
>  	struct tcpci *tcpci;
> @@ -165,6 +172,53 @@ static int rt1711h_set_vconn(struct tcpci *tcpci, struct tcpci_data *tdata,
>  				  RT1711H_AUTOIDLEEN, enable ? 0 : RT1711H_AUTOIDLEEN);
>  }
>  
> +/*
> + * Selects the CC PHY noise filter voltage level according to the remote current
> + * CC voltage level.
> + *
> + * @status: The port's current cc status read from IC
> + * Return 0 if writes succeed; failure code otherwise
> + */
> +static inline int rt1711h_init_cc_params(struct rt1711h_chip *chip, u8 status)
> +{
> +	int ret, cc1, cc2;
> +	u8 role = 0;
> +	u32 rxdz_en, rxdz_sel;
> +
> +	ret = rt1711h_read8(chip, TCPC_ROLE_CTRL, &role);
> +	if (ret < 0)
> +		return ret;
> +
> +	cc1 = tcpci_to_typec_cc((status >> TCPC_CC_STATUS_CC1_SHIFT) &
> +				TCPC_CC_STATUS_CC1_MASK,
> +				status & TCPC_CC_STATUS_TERM ||
> +				tcpc_presenting_rd(role, CC1));
> +	cc2 = tcpci_to_typec_cc((status >> TCPC_CC_STATUS_CC2_SHIFT) &
> +				TCPC_CC_STATUS_CC2_MASK,
> +				status & TCPC_CC_STATUS_TERM ||
> +				tcpc_presenting_rd(role, CC2));
> +
> +	if ((cc1 >= TYPEC_CC_RP_1_5 && cc2 < TYPEC_CC_RP_DEF) ||
> +	    (cc2 >= TYPEC_CC_RP_1_5 && cc1 < TYPEC_CC_RP_DEF)) {
> +		rxdz_en = BMCIO_RXDZEN;
> +		if (chip->did == RT1715_DID)
> +			rxdz_sel = RT1711H_BMCIO_RXDZSEL;
> +		else
> +			rxdz_sel = 0;
> +	} else {
> +		rxdz_en = 0;
> +		rxdz_sel = RT1711H_BMCIO_RXDZSEL;
> +	}
> +
> +	ret = regmap_update_bits(chip->data.regmap, RT1711H_RTCTRL18,
> +				 BMCIO_RXDZEN, rxdz_en);
> +	if (ret < 0)
> +		return ret;
> +
> +	return regmap_update_bits(chip->data.regmap, RT1711H_RTCTRL4,
> +				  RT1711H_BMCIO_RXDZSEL, rxdz_sel);
> +}
> +
>  static int rt1711h_start_drp_toggling(struct tcpci *tcpci,
>  				      struct tcpci_data *tdata,
>  				      enum typec_cc_status cc)
> @@ -225,6 +279,8 @@ static irqreturn_t rt1711h_irq(int irq, void *dev_id)
>  		/* Clear cc change event triggered by starting toggling */
>  		if (status & TCPC_CC_STATUS_TOGGLING)
>  			rt1711h_write8(chip, TCPC_ALERT, TCPC_ALERT_CC_STATUS);
> +		else
> +			rt1711h_init_cc_params(chip, status);
>  	}
>  
>  out:
> -- 
> 2.25.1

-- 
heikki

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH v3 4/7] usb: typec: tcpci_rt1711h: Add initial phy setting
  2022-08-02  8:19   ` Heikki Krogerus
@ 2022-08-02  8:58     ` Guenter Roeck
  2022-08-03  6:20       ` Gene Chen
  0 siblings, 1 reply; 17+ messages in thread
From: Guenter Roeck @ 2022-08-02  8:58 UTC (permalink / raw)
  To: Heikki Krogerus
  Cc: Gene Chen, gregkh, robh+dt, krzysztof.kozlowski+dt, linux-usb,
	linux-kernel, devicetree, gene_chen, cy_huang

On Tue, Aug 02, 2022 at 11:19:15AM +0300, Heikki Krogerus wrote:
> Hi Gene,
> 
> On Mon, Aug 01, 2022 at 06:14:44PM +0800, Gene Chen wrote:
> > From: Gene Chen <gene_chen@richtek.com>
> > 
> > Add initial phy setting about phy dicard retry,
> > rx filter deglitech time and BMC-encoded wait time
> 
> I'm sorry, but what does "deglitech" mean? Is it just a typo?
> 

deglitch ?

> > Signed-off-by: Gene Chen <gene_chen@richtek.com>
> > Reviewed-by: Guenter Roeck <linux@roeck-us.net>
> > ---
> >  drivers/usb/typec/tcpm/tcpci_rt1711h.c | 15 ++++++++++++++-
> >  1 file changed, 14 insertions(+), 1 deletion(-)
> > 
> > diff --git a/drivers/usb/typec/tcpm/tcpci_rt1711h.c b/drivers/usb/typec/tcpm/tcpci_rt1711h.c
> > index df7bfe299987..33d8ea95b7c1 100644
> > --- a/drivers/usb/typec/tcpm/tcpci_rt1711h.c
> > +++ b/drivers/usb/typec/tcpm/tcpci_rt1711h.c
> > @@ -20,6 +20,9 @@
> >  #define RT1711H_VID		0x29CF
> >  #define RT1711H_PID		0x1711
> >  
> > +#define RT1711H_PHYCTRL1	0x80
> > +#define RT1711H_PHYCTRL2	0x81
> > +
> >  #define RT1711H_RTCTRL8		0x9B
> >  
> >  /* Autoidle timeout = (tout * 2 + 1) * 6.4ms */
> > @@ -107,8 +110,18 @@ static int rt1711h_init(struct tcpci *tcpci, struct tcpci_data *tdata)
> >  		return ret;
> >  
> >  	/* dcSRC.DRP : 33% */
> > -	return rt1711h_write16(chip, RT1711H_RTCTRL16, 330);
> > +	ret = rt1711h_write16(chip, RT1711H_RTCTRL16, 330);
> > +	if (ret < 0)
> > +		return ret;
> > +
> > +	/* Enable phy discard retry, retry count 7, rx filter deglitech 100 us */
> > +	ret = rt1711h_write8(chip, RT1711H_PHYCTRL1, 0xF1);
> > +	if (ret < 0)
> > +		return ret;
> >  
> > +	/* Decrease wait time of BMC-encoded 1 bit from 2.67us to 2.55us */
> > +	/* wait time : (val * .4167) us */
> > +	return rt1711h_write8(chip, RT1711H_PHYCTRL2, 62);
> >  }
> >  
> >  static int rt1711h_set_vbus(struct tcpci *tcpci, struct tcpci_data *tdata,
> > -- 
> > 2.25.1
> 
> thanks,
> 
> -- 
> heikki

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH v3 2/7] usb: typec: tcpci_rt1711h: Fix vendor setting when set vconn
  2022-08-02  7:57   ` Heikki Krogerus
@ 2022-08-03  6:08     ` Gene Chen
  0 siblings, 0 replies; 17+ messages in thread
From: Gene Chen @ 2022-08-03  6:08 UTC (permalink / raw)
  To: Heikki Krogerus
  Cc: Guenter Roeck, Greg Kroah-Hartman, Rob Herring,
	krzysztof.kozlowski+dt, linux-usb, Linux Kernel Mailing List,
	devicetree, Gene Chen, ChiYuan Huang

Heikki Krogerus <heikki.krogerus@linux.intel.com> 於 2022年8月2日 週二 下午3:57寫道:
>
> Hi Gene,
>
> On Mon, Aug 01, 2022 at 06:14:42PM +0800, Gene Chen wrote:
> > From: Gene Chen <gene_chen@richtek.com>
> >
> > replace overwrite whole register with update bits
> >
> > Signed-off-by: Gene Chen <gene_chen@richtek.com>
> > ---
> >  drivers/usb/typec/tcpm/tcpci_rt1711h.c | 15 +++++++++------
> >  1 file changed, 9 insertions(+), 6 deletions(-)
> >
> > diff --git a/drivers/usb/typec/tcpm/tcpci_rt1711h.c b/drivers/usb/typec/tcpm/tcpci_rt1711h.c
> > index b56a0880a044..6197d9a05d36 100644
> > --- a/drivers/usb/typec/tcpm/tcpci_rt1711h.c
> > +++ b/drivers/usb/typec/tcpm/tcpci_rt1711h.c
> > @@ -5,13 +5,15 @@
> >   * Richtek RT1711H Type-C Chip Driver
> >   */
> >
> > -#include <linux/kernel.h>
> > -#include <linux/module.h>
> > +#include <linux/bits.h>
> > +#include <linux/gpio/consumer.h>
> >  #include <linux/i2c.h>
> >  #include <linux/interrupt.h>
> > -#include <linux/gpio/consumer.h>
> > -#include <linux/usb/tcpm.h>
> > +#include <linux/kernel.h>
> > +#include <linux/module.h>
> >  #include <linux/regmap.h>
> > +#include <linux/usb/tcpm.h>
>
> That header reshuffling is not necessary for this change - at least you
> are not giving any reason for it in your commit message.
>
> If there is no real need for that in this patch, then please leave the
> headers as they are. You can propose changing the order of the headers
> in a separate patch. Though, I would not bother with it unless there
> is some real benefit in doing so, and I'm pretty sure there isn't any.
>

ACK, I will remove reshuffling.
It was suggested coding style by other reviewer in other driver.

> >  #include "tcpci.h"
> >
> >  #define RT1711H_VID          0x29CF
> > @@ -23,6 +25,7 @@
> >  #define RT1711H_RTCTRL8_SET(ck300, ship_off, auto_idle, tout) \
> >                           (((ck300) << 7) | ((ship_off) << 5) | \
> >                           ((auto_idle) << 3) | ((tout) & 0x07))
> > +#define RT1711H_AUTOIDLEEN   BIT(3)
> >
> >  #define RT1711H_RTCTRL11     0x9E
> >
> > @@ -109,8 +112,8 @@ static int rt1711h_set_vconn(struct tcpci *tcpci, struct tcpci_data *tdata,
> >  {
> >       struct rt1711h_chip *chip = tdata_to_rt1711h(tdata);
> >
> > -     return rt1711h_write8(chip, RT1711H_RTCTRL8,
> > -                           RT1711H_RTCTRL8_SET(0, 1, !enable, 2));
> > +     return regmap_update_bits(chip->data.regmap, RT1711H_RTCTRL8,
> > +                               RT1711H_AUTOIDLEEN, enable ? 0 : RT1711H_AUTOIDLEEN);
> >  }
> >
> >  static int rt1711h_start_drp_toggling(struct tcpci *tcpci,
> > --
> > 2.25.1
>
> thanks,
>
> --
> heikki

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH v3 4/7] usb: typec: tcpci_rt1711h: Add initial phy setting
  2022-08-02  8:58     ` Guenter Roeck
@ 2022-08-03  6:20       ` Gene Chen
  0 siblings, 0 replies; 17+ messages in thread
From: Gene Chen @ 2022-08-03  6:20 UTC (permalink / raw)
  To: Guenter Roeck
  Cc: Heikki Krogerus, Greg Kroah-Hartman, Rob Herring,
	krzysztof.kozlowski+dt, linux-usb, Linux Kernel Mailing List,
	devicetree, Gene Chen, ChiYuan Huang

Guenter Roeck <linux@roeck-us.net> 於 2022年8月2日 週二 下午4:58寫道:
>
> On Tue, Aug 02, 2022 at 11:19:15AM +0300, Heikki Krogerus wrote:
> > Hi Gene,
> >
> > On Mon, Aug 01, 2022 at 06:14:44PM +0800, Gene Chen wrote:
> > > From: Gene Chen <gene_chen@richtek.com>
> > >
> > > Add initial phy setting about phy dicard retry,
> > > rx filter deglitech time and BMC-encoded wait time
> >
> > I'm sorry, but what does "deglitech" mean? Is it just a typo?
> >
>
> deglitch ?
>

Yes, typo, I will fix it.

> > > Signed-off-by: Gene Chen <gene_chen@richtek.com>
> > > Reviewed-by: Guenter Roeck <linux@roeck-us.net>
> > > ---
> > >  drivers/usb/typec/tcpm/tcpci_rt1711h.c | 15 ++++++++++++++-
> > >  1 file changed, 14 insertions(+), 1 deletion(-)
> > >
> > > diff --git a/drivers/usb/typec/tcpm/tcpci_rt1711h.c b/drivers/usb/typec/tcpm/tcpci_rt1711h.c
> > > index df7bfe299987..33d8ea95b7c1 100644
> > > --- a/drivers/usb/typec/tcpm/tcpci_rt1711h.c
> > > +++ b/drivers/usb/typec/tcpm/tcpci_rt1711h.c
> > > @@ -20,6 +20,9 @@
> > >  #define RT1711H_VID                0x29CF
> > >  #define RT1711H_PID                0x1711
> > >
> > > +#define RT1711H_PHYCTRL1   0x80
> > > +#define RT1711H_PHYCTRL2   0x81
> > > +
> > >  #define RT1711H_RTCTRL8            0x9B
> > >
> > >  /* Autoidle timeout = (tout * 2 + 1) * 6.4ms */
> > > @@ -107,8 +110,18 @@ static int rt1711h_init(struct tcpci *tcpci, struct tcpci_data *tdata)
> > >             return ret;
> > >
> > >     /* dcSRC.DRP : 33% */
> > > -   return rt1711h_write16(chip, RT1711H_RTCTRL16, 330);
> > > +   ret = rt1711h_write16(chip, RT1711H_RTCTRL16, 330);
> > > +   if (ret < 0)
> > > +           return ret;
> > > +
> > > +   /* Enable phy discard retry, retry count 7, rx filter deglitech 100 us */
> > > +   ret = rt1711h_write8(chip, RT1711H_PHYCTRL1, 0xF1);
> > > +   if (ret < 0)
> > > +           return ret;
> > >
> > > +   /* Decrease wait time of BMC-encoded 1 bit from 2.67us to 2.55us */
> > > +   /* wait time : (val * .4167) us */
> > > +   return rt1711h_write8(chip, RT1711H_PHYCTRL2, 62);
> > >  }
> > >
> > >  static int rt1711h_set_vbus(struct tcpci *tcpci, struct tcpci_data *tdata,
> > > --
> > > 2.25.1
> >
> > thanks,
> >
> > --
> > heikki

^ permalink raw reply	[flat|nested] 17+ messages in thread

end of thread, other threads:[~2022-08-03  6:21 UTC | newest]

Thread overview: 17+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-08-01 10:14 [PATCH v3 0/7] usb: typec: tcpci_rt1711h: Add compatible with rt1715 Gene Chen
2022-08-01 10:14 ` [PATCH v3 1/7] dt-bindings usb: typec: rt1711h: Add binding for Richtek RT1711H Gene Chen
2022-08-01 10:14 ` [PATCH v3 2/7] usb: typec: tcpci_rt1711h: Fix vendor setting when set vconn Gene Chen
2022-08-02  7:57   ` Heikki Krogerus
2022-08-03  6:08     ` Gene Chen
2022-08-01 10:14 ` [PATCH v3 3/7] usb: typec: tcpci_rt1711h: Add regulator support when source vbus Gene Chen
2022-08-02  8:04   ` Heikki Krogerus
2022-08-01 10:14 ` [PATCH v3 4/7] usb: typec: tcpci_rt1711h: Add initial phy setting Gene Chen
2022-08-02  8:19   ` Heikki Krogerus
2022-08-02  8:58     ` Guenter Roeck
2022-08-03  6:20       ` Gene Chen
2022-08-01 10:14 ` [PATCH v3 5/7] usb: typec: tcpci_rt1711h: Add compatible id with rt1715 Gene Chen
2022-08-02  8:28   ` Heikki Krogerus
2022-08-01 10:14 ` [PATCH v3 6/7] usb: typec: tcpci: Move function "tcpci_to_typec_cc" to common Gene Chen
2022-08-02  8:32   ` Heikki Krogerus
2022-08-01 10:14 ` [PATCH v3 7/7] usb: typec: tcpci_rt1711h: Fix CC PHY noise filter of voltage level Gene Chen
2022-08-02  8:42   ` Heikki Krogerus

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).