public inbox for devicetree@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH v4 0/2] usb: typec: tcpci: support setting orientation via GPIO
@ 2026-03-19  9:48 Xu Yang
  2026-03-19  9:48 ` [PATCH v4 1/2] dt-bindings: usb: nxp,ptn5110: add optional orientation-gpios property Xu Yang
  2026-03-19  9:48 ` [PATCH v4 2/2] usb: typec: tcpci: support setting orientation via GPIO Xu Yang
  0 siblings, 2 replies; 4+ messages in thread
From: Xu Yang @ 2026-03-19  9:48 UTC (permalink / raw)
  To: Greg Kroah-Hartman, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Li Jun, Badhri Jagan Sridharan, Heikki Krogerus
  Cc: linux-usb, imx, devicetree, linux-kernel, Xu Yang

This patchset will add support to set orientation via a simple GPIO in
case the tcpci compatible chip doesn't present "Connection Orientation"
standard output capability.

---
Changes in v4:
- simplify gpiod_set_value_cansleep()
- Link to v3: https://lore.kernel.org/r/20260316-support-setting-orientation-use-gpio-v3-0-0e6622b00dd9@nxp.com

Changes in v3:
- use "err = !!orient_gpio"
- Link to v2: https://lore.kernel.org/r/20260312-support-setting-orientation-use-gpio-v2-0-59c523a09f12@nxp.com

Changes in v2:
- rename the property as orientation-gpios
- add maxItems to the property and modify description
- improve tcpci_set_orientation()
- Link to v1: https://lore.kernel.org/r/20260310-support-setting-orientation-use-gpio-v1-0-da31dc6cd641@nxp.com

---
Xu Yang (2):
      dt-bindings: usb: nxp,ptn5110: add optional orientation-gpios property
      usb: typec: tcpci: support setting orientation via GPIO

 Documentation/devicetree/bindings/usb/nxp,ptn5110.yaml |  4 ++++
 drivers/usb/typec/tcpm/tcpci.c                         | 18 ++++++++++++++++++
 2 files changed, 22 insertions(+)
---
base-commit: 84db3719d27337b952fe382413d341fb95351130
change-id: 20260310-support-setting-orientation-use-gpio-5942d9a0b22e

Best regards,
-- 
Xu Yang <xu.yang_2@nxp.com>


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

* [PATCH v4 1/2] dt-bindings: usb: nxp,ptn5110: add optional orientation-gpios property
  2026-03-19  9:48 [PATCH v4 0/2] usb: typec: tcpci: support setting orientation via GPIO Xu Yang
@ 2026-03-19  9:48 ` Xu Yang
  2026-03-19  9:48 ` [PATCH v4 2/2] usb: typec: tcpci: support setting orientation via GPIO Xu Yang
  1 sibling, 0 replies; 4+ messages in thread
From: Xu Yang @ 2026-03-19  9:48 UTC (permalink / raw)
  To: Greg Kroah-Hartman, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Li Jun, Badhri Jagan Sridharan, Heikki Krogerus
  Cc: linux-usb, imx, devicetree, linux-kernel, Xu Yang

The Type-C chip know the cable orientation and then normally will set the
switch channel to correctly configure the data path. Some chips itself
support to output the control signal by indicating the capability in
bit[0] of STANDARD_OUTPUT_CAPABILITIES register and do it in
CONFIG_STANDARD_OUTPUT register. For PTN5110 which doesn't present this
capability currently there is no way to achieve the orientation setting.
Add an optional "orientation-gpios" property to achieve the same purpose.

Acked-by: Rob Herring (Arm) <robh@kernel.org>
Signed-off-by: Xu Yang <xu.yang_2@nxp.com>

---
Changes in v4:
 - no changes
Changes in v3:
 - add Rob's ack tag
Changes in v2:
 - use property name "orientation-gpios"
 - remove the "if" condition and modify commit message
---
 Documentation/devicetree/bindings/usb/nxp,ptn5110.yaml | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/Documentation/devicetree/bindings/usb/nxp,ptn5110.yaml b/Documentation/devicetree/bindings/usb/nxp,ptn5110.yaml
index 65a8632b4d9e..581e5916eadd 100644
--- a/Documentation/devicetree/bindings/usb/nxp,ptn5110.yaml
+++ b/Documentation/devicetree/bindings/usb/nxp,ptn5110.yaml
@@ -26,6 +26,10 @@ properties:
     $ref: /schemas/connector/usb-connector.yaml#
     unevaluatedProperties: false
 
+  orientation-gpios:
+    maxItems: 1
+    description: Optional orientation select control
+
 required:
   - compatible
   - reg

-- 
2.34.1


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

* [PATCH v4 2/2] usb: typec: tcpci: support setting orientation via GPIO
  2026-03-19  9:48 [PATCH v4 0/2] usb: typec: tcpci: support setting orientation via GPIO Xu Yang
  2026-03-19  9:48 ` [PATCH v4 1/2] dt-bindings: usb: nxp,ptn5110: add optional orientation-gpios property Xu Yang
@ 2026-03-19  9:48 ` Xu Yang
  2026-03-23  9:42   ` Heikki Krogerus
  1 sibling, 1 reply; 4+ messages in thread
From: Xu Yang @ 2026-03-19  9:48 UTC (permalink / raw)
  To: Greg Kroah-Hartman, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Li Jun, Badhri Jagan Sridharan, Heikki Krogerus
  Cc: linux-usb, imx, devicetree, linux-kernel, Xu Yang

If the chip indicates its "Connection Orientation" standard output control
in STANDARD_OUTPUT_CAPABILITIES register, it can do the thing by
programming CONFIG_STANDARD_OUTPUT register. Due to the optional feature,
the chip which not present this capability currently doesn't have a way to
correctly set the data path. This add the support to set orientation via
a simple GPIO.

Signed-off-by: Xu Yang <xu.yang_2@nxp.com>

---
Changes in v4:
 - simplify gpiod_set_value_cansleep()
Changes in v3:
 - use "err = !!orient_gpio"
Changes in v2:
 - return early in tcpci_set_orientation() if using gpio method
---
 drivers/usb/typec/tcpm/tcpci.c | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

diff --git a/drivers/usb/typec/tcpm/tcpci.c b/drivers/usb/typec/tcpm/tcpci.c
index 8b7e6eb92ca2..0148b8f50412 100644
--- a/drivers/usb/typec/tcpm/tcpci.c
+++ b/drivers/usb/typec/tcpm/tcpci.c
@@ -7,6 +7,7 @@
 
 #include <linux/bitfield.h>
 #include <linux/delay.h>
+#include <linux/gpio/consumer.h>
 #include <linux/kernel.h>
 #include <linux/module.h>
 #include <linux/i2c.h>
@@ -42,6 +43,7 @@ struct tcpci {
 
 	struct tcpc_dev tcpc;
 	struct tcpci_data *data;
+	struct gpio_desc *orientation_gpio;
 };
 
 struct tcpci_chip {
@@ -316,6 +318,10 @@ static int tcpci_set_orientation(struct tcpc_dev *tcpc,
 	struct tcpci *tcpci = tcpc_to_tcpci(tcpc);
 	unsigned int reg;
 
+	if (tcpci->orientation_gpio)
+		return gpiod_set_value_cansleep(tcpci->orientation_gpio,
+						orientation != TYPEC_ORIENTATION_NORMAL);
+
 	switch (orientation) {
 	case TYPEC_ORIENTATION_NONE:
 		/* We can't put a single output into high impedance */
@@ -903,6 +909,7 @@ EXPORT_SYMBOL_GPL(tcpci_unregister_port);
 static int tcpci_probe(struct i2c_client *client)
 {
 	struct tcpci_chip *chip;
+	struct gpio_desc *orient_gpio = NULL;
 	int err;
 	u16 val = 0;
 
@@ -931,12 +938,23 @@ static int tcpci_probe(struct i2c_client *client)
 	if (err < 0)
 		return err;
 
+	if (err == 0) {
+		orient_gpio = devm_gpiod_get_optional(&client->dev, "orientation",
+						      GPIOD_OUT_LOW);
+		if (IS_ERR(orient_gpio))
+			return dev_err_probe(&client->dev, PTR_ERR(orient_gpio),
+					"unable to acquire orientation gpio\n");
+		err = !!orient_gpio;
+	}
+
 	chip->data.set_orientation = err;
 
 	chip->tcpci = tcpci_register_port(&client->dev, &chip->data);
 	if (IS_ERR(chip->tcpci))
 		return PTR_ERR(chip->tcpci);
 
+	chip->tcpci->orientation_gpio = orient_gpio;
+
 	err = devm_request_threaded_irq(&client->dev, client->irq, NULL,
 					_tcpci_irq,
 					IRQF_SHARED | IRQF_ONESHOT,

-- 
2.34.1


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

* Re: [PATCH v4 2/2] usb: typec: tcpci: support setting orientation via GPIO
  2026-03-19  9:48 ` [PATCH v4 2/2] usb: typec: tcpci: support setting orientation via GPIO Xu Yang
@ 2026-03-23  9:42   ` Heikki Krogerus
  0 siblings, 0 replies; 4+ messages in thread
From: Heikki Krogerus @ 2026-03-23  9:42 UTC (permalink / raw)
  To: Xu Yang
  Cc: Greg Kroah-Hartman, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Li Jun, Badhri Jagan Sridharan, linux-usb, imx,
	devicetree, linux-kernel

On Thu, Mar 19, 2026 at 05:48:49PM +0800, Xu Yang wrote:
> If the chip indicates its "Connection Orientation" standard output control
> in STANDARD_OUTPUT_CAPABILITIES register, it can do the thing by
> programming CONFIG_STANDARD_OUTPUT register. Due to the optional feature,
> the chip which not present this capability currently doesn't have a way to
> correctly set the data path. This add the support to set orientation via
> a simple GPIO.
> 
> Signed-off-by: Xu Yang <xu.yang_2@nxp.com>

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

> ---
> Changes in v4:
>  - simplify gpiod_set_value_cansleep()
> Changes in v3:
>  - use "err = !!orient_gpio"
> Changes in v2:
>  - return early in tcpci_set_orientation() if using gpio method
> ---
>  drivers/usb/typec/tcpm/tcpci.c | 18 ++++++++++++++++++
>  1 file changed, 18 insertions(+)
> 
> diff --git a/drivers/usb/typec/tcpm/tcpci.c b/drivers/usb/typec/tcpm/tcpci.c
> index 8b7e6eb92ca2..0148b8f50412 100644
> --- a/drivers/usb/typec/tcpm/tcpci.c
> +++ b/drivers/usb/typec/tcpm/tcpci.c
> @@ -7,6 +7,7 @@
>  
>  #include <linux/bitfield.h>
>  #include <linux/delay.h>
> +#include <linux/gpio/consumer.h>
>  #include <linux/kernel.h>
>  #include <linux/module.h>
>  #include <linux/i2c.h>
> @@ -42,6 +43,7 @@ struct tcpci {
>  
>  	struct tcpc_dev tcpc;
>  	struct tcpci_data *data;
> +	struct gpio_desc *orientation_gpio;
>  };
>  
>  struct tcpci_chip {
> @@ -316,6 +318,10 @@ static int tcpci_set_orientation(struct tcpc_dev *tcpc,
>  	struct tcpci *tcpci = tcpc_to_tcpci(tcpc);
>  	unsigned int reg;
>  
> +	if (tcpci->orientation_gpio)
> +		return gpiod_set_value_cansleep(tcpci->orientation_gpio,
> +						orientation != TYPEC_ORIENTATION_NORMAL);
> +
>  	switch (orientation) {
>  	case TYPEC_ORIENTATION_NONE:
>  		/* We can't put a single output into high impedance */
> @@ -903,6 +909,7 @@ EXPORT_SYMBOL_GPL(tcpci_unregister_port);
>  static int tcpci_probe(struct i2c_client *client)
>  {
>  	struct tcpci_chip *chip;
> +	struct gpio_desc *orient_gpio = NULL;
>  	int err;
>  	u16 val = 0;
>  
> @@ -931,12 +938,23 @@ static int tcpci_probe(struct i2c_client *client)
>  	if (err < 0)
>  		return err;
>  
> +	if (err == 0) {
> +		orient_gpio = devm_gpiod_get_optional(&client->dev, "orientation",
> +						      GPIOD_OUT_LOW);
> +		if (IS_ERR(orient_gpio))
> +			return dev_err_probe(&client->dev, PTR_ERR(orient_gpio),
> +					"unable to acquire orientation gpio\n");
> +		err = !!orient_gpio;
> +	}
> +
>  	chip->data.set_orientation = err;
>  
>  	chip->tcpci = tcpci_register_port(&client->dev, &chip->data);
>  	if (IS_ERR(chip->tcpci))
>  		return PTR_ERR(chip->tcpci);
>  
> +	chip->tcpci->orientation_gpio = orient_gpio;
> +
>  	err = devm_request_threaded_irq(&client->dev, client->irq, NULL,
>  					_tcpci_irq,
>  					IRQF_SHARED | IRQF_ONESHOT,
> 
> -- 
> 2.34.1

-- 
heikki

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

end of thread, other threads:[~2026-03-23  9:43 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-03-19  9:48 [PATCH v4 0/2] usb: typec: tcpci: support setting orientation via GPIO Xu Yang
2026-03-19  9:48 ` [PATCH v4 1/2] dt-bindings: usb: nxp,ptn5110: add optional orientation-gpios property Xu Yang
2026-03-19  9:48 ` [PATCH v4 2/2] usb: typec: tcpci: support setting orientation via GPIO Xu Yang
2026-03-23  9: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