devicetree.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2 0/2] usb: typec: tps6598x: add reset gpio support
@ 2023-09-15 12:23 Javier Carrasco
  2023-09-15 12:23 ` [PATCH v2 1/2] " Javier Carrasco
  2023-09-15 12:23 ` [PATCH v2 2/2] dt-bindings: usb: tps6598x: add reset-gpios property Javier Carrasco
  0 siblings, 2 replies; 6+ messages in thread
From: Javier Carrasco @ 2023-09-15 12:23 UTC (permalink / raw)
  To: Heikki Krogerus, Greg Kroah-Hartman, Rob Herring,
	Krzysztof Kozlowski, Conor Dooley, Bryan O'Donoghue
  Cc: linux-usb, linux-kernel, devicetree, Javier Carrasco,
	Krzysztof Kozlowski

The TPS6598x PD controller provides an active-high hardware reset input
that reinitializes all device settings. If it is not grounded by
design, the driver must be able to de-assert it in order to initialize
the device.

This series adds and documents the reset signal management. It also
includes the basic reset management for initialization and
suspend/resume control.

Signed-off-by: Javier Carrasco <javier.carrasco@wolfvision.net>
---
Changes in v2:
- core.c: minor coding style correction ({} in 'else' after 'if {}')
- ti,tps6598x.yaml: reference to the device instead of the driver in
  the commit message.
- Link to v1: https://lore.kernel.org/r/20230912-topic-tps6598x_reset-v1-0-78dc0bf61790@wolfvision.net

---
Javier Carrasco (2):
      usb: typec: tps6598x: add reset gpio support
      dt-bindings: usb: tps6598x: add reset-gpios property

 .../devicetree/bindings/usb/ti,tps6598x.yaml         |  6 ++++++
 drivers/usb/typec/tipd/core.c                        | 20 ++++++++++++++++++++
 2 files changed, 26 insertions(+)
---
base-commit: 0bb80ecc33a8fb5a682236443c1e740d5c917d1d
change-id: 20230912-topic-tps6598x_reset-55e9494e8649

Best regards,
-- 
Javier Carrasco <javier.carrasco@wolfvision.net>


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

* [PATCH v2 1/2] usb: typec: tps6598x: add reset gpio support
  2023-09-15 12:23 [PATCH v2 0/2] usb: typec: tps6598x: add reset gpio support Javier Carrasco
@ 2023-09-15 12:23 ` Javier Carrasco
  2023-09-15 12:57   ` Heikki Krogerus
  2023-09-15 12:23 ` [PATCH v2 2/2] dt-bindings: usb: tps6598x: add reset-gpios property Javier Carrasco
  1 sibling, 1 reply; 6+ messages in thread
From: Javier Carrasco @ 2023-09-15 12:23 UTC (permalink / raw)
  To: Heikki Krogerus, Greg Kroah-Hartman, Rob Herring,
	Krzysztof Kozlowski, Conor Dooley, Bryan O'Donoghue
  Cc: linux-usb, linux-kernel, devicetree, Javier Carrasco

The TPS6598x PD controller provides an active-high hardware reset input
that reinitializes all device settings. If it is not grounded by
design, the driver must be able to de-assert it in order to initialize
the device.

The PD controller is not ready for registration right after the reset
de-assertion and a delay must be introduced in that case. According to
TI, the delay can reach up to 1000 ms [1], which is in line with the
experimental results obtained with a TPS65987D.

Add a GPIO descriptor for the reset signal and basic reset management
for initialization and suspend/resume.

[1] https://e2e.ti.com/support/power-management-group/power-management/
f/power-management-forum/1269856/tps65987d-tps65987d-reset-de-assert-
to-normal-operation/4809389#4809389

Signed-off-by: Javier Carrasco <javier.carrasco@wolfvision.net>
Reviewed-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
---
 drivers/usb/typec/tipd/core.c | 20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)

diff --git a/drivers/usb/typec/tipd/core.c b/drivers/usb/typec/tipd/core.c
index 37b56ce75f39..3068ef300073 100644
--- a/drivers/usb/typec/tipd/core.c
+++ b/drivers/usb/typec/tipd/core.c
@@ -8,6 +8,7 @@
 
 #include <linux/i2c.h>
 #include <linux/acpi.h>
+#include <linux/gpio/consumer.h>
 #include <linux/module.h>
 #include <linux/of.h>
 #include <linux/power_supply.h>
@@ -43,6 +44,9 @@
 /* TPS_REG_SYSTEM_CONF bits */
 #define TPS_SYSCONF_PORTINFO(c)		((c) & 7)
 
+/* reset de-assertion to ready for operation */
+#define SETUP_MS			1000
+
 enum {
 	TPS_PORTINFO_SINK,
 	TPS_PORTINFO_SINK_ACCESSORY,
@@ -86,6 +90,7 @@ struct tps6598x {
 	struct mutex lock; /* device lock */
 	u8 i2c_protocol:1;
 
+	struct gpio_desc *reset;
 	struct typec_port *port;
 	struct typec_partner *partner;
 	struct usb_pd_identity partner_identity;
@@ -717,6 +722,13 @@ static int tps6598x_probe(struct i2c_client *client)
 	mutex_init(&tps->lock);
 	tps->dev = &client->dev;
 
+	tps->reset = devm_gpiod_get_optional(tps->dev, "reset", GPIOD_OUT_LOW);
+	if (IS_ERR(tps->reset))
+		return dev_err_probe(tps->dev, PTR_ERR(tps->reset),
+				     "failed to get reset GPIO\n");
+	if (tps->reset)
+		msleep(SETUP_MS);
+
 	tps->regmap = devm_regmap_init_i2c(client, &tps6598x_regmap_config);
 	if (IS_ERR(tps->regmap))
 		return PTR_ERR(tps->regmap);
@@ -892,6 +904,9 @@ static void tps6598x_remove(struct i2c_client *client)
 	tps6598x_disconnect(tps, 0);
 	typec_unregister_port(tps->port);
 	usb_role_switch_put(tps->role_sw);
+
+	if (tps->reset)
+		gpiod_set_value_cansleep(tps->reset, 1);
 }
 
 static int __maybe_unused tps6598x_suspend(struct device *dev)
@@ -902,6 +917,8 @@ static int __maybe_unused tps6598x_suspend(struct device *dev)
 	if (tps->wakeup) {
 		disable_irq(client->irq);
 		enable_irq_wake(client->irq);
+	} else if (tps->reset) {
+		gpiod_set_value_cansleep(tps->reset, 1);
 	}
 
 	if (!client->irq)
@@ -918,6 +935,9 @@ static int __maybe_unused tps6598x_resume(struct device *dev)
 	if (tps->wakeup) {
 		disable_irq_wake(client->irq);
 		enable_irq(client->irq);
+	} else if (tps->reset) {
+		gpiod_set_value_cansleep(tps->reset, 0);
+		msleep(SETUP_MS);
 	}
 
 	if (!client->irq)

-- 
2.39.2


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

* [PATCH v2 2/2] dt-bindings: usb: tps6598x: add reset-gpios property
  2023-09-15 12:23 [PATCH v2 0/2] usb: typec: tps6598x: add reset gpio support Javier Carrasco
  2023-09-15 12:23 ` [PATCH v2 1/2] " Javier Carrasco
@ 2023-09-15 12:23 ` Javier Carrasco
  1 sibling, 0 replies; 6+ messages in thread
From: Javier Carrasco @ 2023-09-15 12:23 UTC (permalink / raw)
  To: Heikki Krogerus, Greg Kroah-Hartman, Rob Herring,
	Krzysztof Kozlowski, Conor Dooley, Bryan O'Donoghue
  Cc: linux-usb, linux-kernel, devicetree, Javier Carrasco,
	Krzysztof Kozlowski

The TPS6598x device family provides a high-level reset pin. It can be
either grounded or used to reinitialize all device settings.

Document the reset GPIO as an optional property and add it to the
existing example.

Signed-off-by: Javier Carrasco <javier.carrasco@wolfvision.net>
Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
---
 Documentation/devicetree/bindings/usb/ti,tps6598x.yaml | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/Documentation/devicetree/bindings/usb/ti,tps6598x.yaml b/Documentation/devicetree/bindings/usb/ti,tps6598x.yaml
index 5497a60cddbc..b1a621e06127 100644
--- a/Documentation/devicetree/bindings/usb/ti,tps6598x.yaml
+++ b/Documentation/devicetree/bindings/usb/ti,tps6598x.yaml
@@ -23,6 +23,10 @@ properties:
   reg:
     maxItems: 1
 
+  reset-gpios:
+    description: GPIO used for the HRESET pin.
+    maxItems: 1
+
   wakeup-source: true
 
   interrupts:
@@ -40,6 +44,7 @@ additionalProperties: true
 
 examples:
   - |
+    #include <dt-bindings/gpio/gpio.h>
     #include <dt-bindings/interrupt-controller/irq.h>
     i2c {
         #address-cells = <1>;
@@ -56,6 +61,7 @@ examples:
 
             pinctrl-names = "default";
             pinctrl-0 = <&typec_pins>;
+            reset-gpios = <&gpio1 6 GPIO_ACTIVE_HIGH>;
 
             typec_con: connector {
                 compatible = "usb-c-connector";

-- 
2.39.2


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

* Re: [PATCH v2 1/2] usb: typec: tps6598x: add reset gpio support
  2023-09-15 12:23 ` [PATCH v2 1/2] " Javier Carrasco
@ 2023-09-15 12:57   ` Heikki Krogerus
  2023-09-15 13:17     ` Javier Carrasco
  0 siblings, 1 reply; 6+ messages in thread
From: Heikki Krogerus @ 2023-09-15 12:57 UTC (permalink / raw)
  To: Javier Carrasco
  Cc: Greg Kroah-Hartman, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Bryan O'Donoghue, linux-usb, linux-kernel,
	devicetree

On Fri, Sep 15, 2023 at 02:23:48PM +0200, Javier Carrasco wrote:
> The TPS6598x PD controller provides an active-high hardware reset input
> that reinitializes all device settings. If it is not grounded by
> design, the driver must be able to de-assert it in order to initialize
> the device.
> 
> The PD controller is not ready for registration right after the reset
> de-assertion and a delay must be introduced in that case. According to
> TI, the delay can reach up to 1000 ms [1], which is in line with the
> experimental results obtained with a TPS65987D.
> 
> Add a GPIO descriptor for the reset signal and basic reset management
> for initialization and suspend/resume.
> 
> [1] https://e2e.ti.com/support/power-management-group/power-management/
> f/power-management-forum/1269856/tps65987d-tps65987d-reset-de-assert-
> to-normal-operation/4809389#4809389
> 
> Signed-off-by: Javier Carrasco <javier.carrasco@wolfvision.net>
> Reviewed-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
> ---
>  drivers/usb/typec/tipd/core.c | 20 ++++++++++++++++++++
>  1 file changed, 20 insertions(+)
> 
> diff --git a/drivers/usb/typec/tipd/core.c b/drivers/usb/typec/tipd/core.c
> index 37b56ce75f39..3068ef300073 100644
> --- a/drivers/usb/typec/tipd/core.c
> +++ b/drivers/usb/typec/tipd/core.c
> @@ -8,6 +8,7 @@
>  
>  #include <linux/i2c.h>
>  #include <linux/acpi.h>
> +#include <linux/gpio/consumer.h>
>  #include <linux/module.h>
>  #include <linux/of.h>
>  #include <linux/power_supply.h>
> @@ -43,6 +44,9 @@
>  /* TPS_REG_SYSTEM_CONF bits */
>  #define TPS_SYSCONF_PORTINFO(c)		((c) & 7)
>  
> +/* reset de-assertion to ready for operation */
> +#define SETUP_MS			1000
> +
>  enum {
>  	TPS_PORTINFO_SINK,
>  	TPS_PORTINFO_SINK_ACCESSORY,
> @@ -86,6 +90,7 @@ struct tps6598x {
>  	struct mutex lock; /* device lock */
>  	u8 i2c_protocol:1;
>  
> +	struct gpio_desc *reset;
>  	struct typec_port *port;
>  	struct typec_partner *partner;
>  	struct usb_pd_identity partner_identity;
> @@ -717,6 +722,13 @@ static int tps6598x_probe(struct i2c_client *client)
>  	mutex_init(&tps->lock);
>  	tps->dev = &client->dev;
>  
> +	tps->reset = devm_gpiod_get_optional(tps->dev, "reset", GPIOD_OUT_LOW);
> +	if (IS_ERR(tps->reset))
> +		return dev_err_probe(tps->dev, PTR_ERR(tps->reset),
> +				     "failed to get reset GPIO\n");
> +	if (tps->reset)
> +		msleep(SETUP_MS);
> +
>  	tps->regmap = devm_regmap_init_i2c(client, &tps6598x_regmap_config);
>  	if (IS_ERR(tps->regmap))
>  		return PTR_ERR(tps->regmap);
> @@ -892,6 +904,9 @@ static void tps6598x_remove(struct i2c_client *client)
>  	tps6598x_disconnect(tps, 0);
>  	typec_unregister_port(tps->port);
>  	usb_role_switch_put(tps->role_sw);
> +
> +	if (tps->reset)
> +		gpiod_set_value_cansleep(tps->reset, 1);

Do you need that "if (tps->reset)" in this case? That function is NULL safe,
right?

>  }
>  
>  static int __maybe_unused tps6598x_suspend(struct device *dev)
> @@ -902,6 +917,8 @@ static int __maybe_unused tps6598x_suspend(struct device *dev)
>  	if (tps->wakeup) {
>  		disable_irq(client->irq);
>  		enable_irq_wake(client->irq);
> +	} else if (tps->reset) {
> +		gpiod_set_value_cansleep(tps->reset, 1);
>  	}
>  
>  	if (!client->irq)
> @@ -918,6 +935,9 @@ static int __maybe_unused tps6598x_resume(struct device *dev)
>  	if (tps->wakeup) {
>  		disable_irq_wake(client->irq);
>  		enable_irq(client->irq);
> +	} else if (tps->reset) {
> +		gpiod_set_value_cansleep(tps->reset, 0);
> +		msleep(SETUP_MS);
>  	}
>  
>  	if (!client->irq)
> 
> -- 
> 2.39.2

thanks,

-- 
heikki

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

* Re: [PATCH v2 1/2] usb: typec: tps6598x: add reset gpio support
  2023-09-15 12:57   ` Heikki Krogerus
@ 2023-09-15 13:17     ` Javier Carrasco
  2023-09-15 13:23       ` Heikki Krogerus
  0 siblings, 1 reply; 6+ messages in thread
From: Javier Carrasco @ 2023-09-15 13:17 UTC (permalink / raw)
  To: Heikki Krogerus
  Cc: Greg Kroah-Hartman, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Bryan O'Donoghue, linux-usb, linux-kernel,
	devicetree



On 15.09.23 14:57, Heikki Krogerus wrote:
> On Fri, Sep 15, 2023 at 02:23:48PM +0200, Javier Carrasco wrote:
>> The TPS6598x PD controller provides an active-high hardware reset input
>> that reinitializes all device settings. If it is not grounded by
>> design, the driver must be able to de-assert it in order to initialize
>> the device.
>>
>> The PD controller is not ready for registration right after the reset
>> de-assertion and a delay must be introduced in that case. According to
>> TI, the delay can reach up to 1000 ms [1], which is in line with the
>> experimental results obtained with a TPS65987D.
>>
>> Add a GPIO descriptor for the reset signal and basic reset management
>> for initialization and suspend/resume.
>>
>> [1] https://e2e.ti.com/support/power-management-group/power-management/
>> f/power-management-forum/1269856/tps65987d-tps65987d-reset-de-assert-
>> to-normal-operation/4809389#4809389
>>
>> Signed-off-by: Javier Carrasco <javier.carrasco@wolfvision.net>
>> Reviewed-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
>> ---
>>  drivers/usb/typec/tipd/core.c | 20 ++++++++++++++++++++
>>  1 file changed, 20 insertions(+)
>>
>> diff --git a/drivers/usb/typec/tipd/core.c b/drivers/usb/typec/tipd/core.c
>> index 37b56ce75f39..3068ef300073 100644
>> --- a/drivers/usb/typec/tipd/core.c
>> +++ b/drivers/usb/typec/tipd/core.c
>> @@ -8,6 +8,7 @@
>>  
>>  #include <linux/i2c.h>
>>  #include <linux/acpi.h>
>> +#include <linux/gpio/consumer.h>
>>  #include <linux/module.h>
>>  #include <linux/of.h>
>>  #include <linux/power_supply.h>
>> @@ -43,6 +44,9 @@
>>  /* TPS_REG_SYSTEM_CONF bits */
>>  #define TPS_SYSCONF_PORTINFO(c)		((c) & 7)
>>  
>> +/* reset de-assertion to ready for operation */
>> +#define SETUP_MS			1000
>> +
>>  enum {
>>  	TPS_PORTINFO_SINK,
>>  	TPS_PORTINFO_SINK_ACCESSORY,
>> @@ -86,6 +90,7 @@ struct tps6598x {
>>  	struct mutex lock; /* device lock */
>>  	u8 i2c_protocol:1;
>>  
>> +	struct gpio_desc *reset;
>>  	struct typec_port *port;
>>  	struct typec_partner *partner;
>>  	struct usb_pd_identity partner_identity;
>> @@ -717,6 +722,13 @@ static int tps6598x_probe(struct i2c_client *client)
>>  	mutex_init(&tps->lock);
>>  	tps->dev = &client->dev;
>>  
>> +	tps->reset = devm_gpiod_get_optional(tps->dev, "reset", GPIOD_OUT_LOW);
>> +	if (IS_ERR(tps->reset))
>> +		return dev_err_probe(tps->dev, PTR_ERR(tps->reset),
>> +				     "failed to get reset GPIO\n");
>> +	if (tps->reset)
>> +		msleep(SETUP_MS);
>> +
>>  	tps->regmap = devm_regmap_init_i2c(client, &tps6598x_regmap_config);
>>  	if (IS_ERR(tps->regmap))
>>  		return PTR_ERR(tps->regmap);
>> @@ -892,6 +904,9 @@ static void tps6598x_remove(struct i2c_client *client)
>>  	tps6598x_disconnect(tps, 0);
>>  	typec_unregister_port(tps->port);
>>  	usb_role_switch_put(tps->role_sw);
>> +
>> +	if (tps->reset)
>> +		gpiod_set_value_cansleep(tps->reset, 1);
> 
> Do you need that "if (tps->reset)" in this case? That function is NULL safe,
> right?
> 
The function makes use of the VALIDATE_DESC_VOID macro to make it NULL
safe, but this macro also calls pr_warn if the descriptor is NULL and I
do not want to add warnings for an optional property that did not exist
before because it could be confusing. But if that is the desired
behavior, I will remove the checks.

>>  }
>>  
>>  static int __maybe_unused tps6598x_suspend(struct device *dev)
>> @@ -902,6 +917,8 @@ static int __maybe_unused tps6598x_suspend(struct device *dev)
>>  	if (tps->wakeup) {
>>  		disable_irq(client->irq);
>>  		enable_irq_wake(client->irq);
>> +	} else if (tps->reset) {
>> +		gpiod_set_value_cansleep(tps->reset, 1);
>>  	}
>>  
>>  	if (!client->irq)
>> @@ -918,6 +935,9 @@ static int __maybe_unused tps6598x_resume(struct device *dev)
>>  	if (tps->wakeup) {
>>  		disable_irq_wake(client->irq);
>>  		enable_irq(client->irq);
>> +	} else if (tps->reset) {
>> +		gpiod_set_value_cansleep(tps->reset, 0);
>> +		msleep(SETUP_MS);
>>  	}
>>  
>>  	if (!client->irq)
>>
>> -- 
>> 2.39.2
> 
> thanks,
> 
Thanks and best regards,
Javier Carrasco

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

* Re: [PATCH v2 1/2] usb: typec: tps6598x: add reset gpio support
  2023-09-15 13:17     ` Javier Carrasco
@ 2023-09-15 13:23       ` Heikki Krogerus
  0 siblings, 0 replies; 6+ messages in thread
From: Heikki Krogerus @ 2023-09-15 13:23 UTC (permalink / raw)
  To: Javier Carrasco
  Cc: Greg Kroah-Hartman, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, Bryan O'Donoghue, linux-usb, linux-kernel,
	devicetree

Hi,

On Fri, Sep 15, 2023 at 03:17:28PM +0200, Javier Carrasco wrote:
> On 15.09.23 14:57, Heikki Krogerus wrote:
> > On Fri, Sep 15, 2023 at 02:23:48PM +0200, Javier Carrasco wrote:
> >> The TPS6598x PD controller provides an active-high hardware reset input
> >> that reinitializes all device settings. If it is not grounded by
> >> design, the driver must be able to de-assert it in order to initialize
> >> the device.
> >>
> >> The PD controller is not ready for registration right after the reset
> >> de-assertion and a delay must be introduced in that case. According to
> >> TI, the delay can reach up to 1000 ms [1], which is in line with the
> >> experimental results obtained with a TPS65987D.
> >>
> >> Add a GPIO descriptor for the reset signal and basic reset management
> >> for initialization and suspend/resume.
> >>
> >> [1] https://e2e.ti.com/support/power-management-group/power-management/
> >> f/power-management-forum/1269856/tps65987d-tps65987d-reset-de-assert-
> >> to-normal-operation/4809389#4809389
> >>
> >> Signed-off-by: Javier Carrasco <javier.carrasco@wolfvision.net>
> >> Reviewed-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>

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

> >> ---
> >>  drivers/usb/typec/tipd/core.c | 20 ++++++++++++++++++++
> >>  1 file changed, 20 insertions(+)
> >>
> >> diff --git a/drivers/usb/typec/tipd/core.c b/drivers/usb/typec/tipd/core.c
> >> index 37b56ce75f39..3068ef300073 100644
> >> --- a/drivers/usb/typec/tipd/core.c
> >> +++ b/drivers/usb/typec/tipd/core.c
> >> @@ -8,6 +8,7 @@
> >>  
> >>  #include <linux/i2c.h>
> >>  #include <linux/acpi.h>
> >> +#include <linux/gpio/consumer.h>
> >>  #include <linux/module.h>
> >>  #include <linux/of.h>
> >>  #include <linux/power_supply.h>
> >> @@ -43,6 +44,9 @@
> >>  /* TPS_REG_SYSTEM_CONF bits */
> >>  #define TPS_SYSCONF_PORTINFO(c)		((c) & 7)
> >>  
> >> +/* reset de-assertion to ready for operation */
> >> +#define SETUP_MS			1000
> >> +
> >>  enum {
> >>  	TPS_PORTINFO_SINK,
> >>  	TPS_PORTINFO_SINK_ACCESSORY,
> >> @@ -86,6 +90,7 @@ struct tps6598x {
> >>  	struct mutex lock; /* device lock */
> >>  	u8 i2c_protocol:1;
> >>  
> >> +	struct gpio_desc *reset;
> >>  	struct typec_port *port;
> >>  	struct typec_partner *partner;
> >>  	struct usb_pd_identity partner_identity;
> >> @@ -717,6 +722,13 @@ static int tps6598x_probe(struct i2c_client *client)
> >>  	mutex_init(&tps->lock);
> >>  	tps->dev = &client->dev;
> >>  
> >> +	tps->reset = devm_gpiod_get_optional(tps->dev, "reset", GPIOD_OUT_LOW);
> >> +	if (IS_ERR(tps->reset))
> >> +		return dev_err_probe(tps->dev, PTR_ERR(tps->reset),
> >> +				     "failed to get reset GPIO\n");
> >> +	if (tps->reset)
> >> +		msleep(SETUP_MS);
> >> +
> >>  	tps->regmap = devm_regmap_init_i2c(client, &tps6598x_regmap_config);
> >>  	if (IS_ERR(tps->regmap))
> >>  		return PTR_ERR(tps->regmap);
> >> @@ -892,6 +904,9 @@ static void tps6598x_remove(struct i2c_client *client)
> >>  	tps6598x_disconnect(tps, 0);
> >>  	typec_unregister_port(tps->port);
> >>  	usb_role_switch_put(tps->role_sw);
> >> +
> >> +	if (tps->reset)
> >> +		gpiod_set_value_cansleep(tps->reset, 1);
> > 
> > Do you need that "if (tps->reset)" in this case? That function is NULL safe,
> > right?
> > 
> The function makes use of the VALIDATE_DESC_VOID macro to make it NULL
> safe, but this macro also calls pr_warn if the descriptor is NULL and I
> do not want to add warnings for an optional property that did not exist
> before because it could be confusing. But if that is the desired
> behavior, I will remove the checks.

No, I don't want noise either.

> >>  }
> >>  
> >>  static int __maybe_unused tps6598x_suspend(struct device *dev)
> >> @@ -902,6 +917,8 @@ static int __maybe_unused tps6598x_suspend(struct device *dev)
> >>  	if (tps->wakeup) {
> >>  		disable_irq(client->irq);
> >>  		enable_irq_wake(client->irq);
> >> +	} else if (tps->reset) {
> >> +		gpiod_set_value_cansleep(tps->reset, 1);
> >>  	}
> >>  
> >>  	if (!client->irq)
> >> @@ -918,6 +935,9 @@ static int __maybe_unused tps6598x_resume(struct device *dev)
> >>  	if (tps->wakeup) {
> >>  		disable_irq_wake(client->irq);
> >>  		enable_irq(client->irq);
> >> +	} else if (tps->reset) {
> >> +		gpiod_set_value_cansleep(tps->reset, 0);
> >> +		msleep(SETUP_MS);
> >>  	}
> >>  
> >>  	if (!client->irq)
> >>
> >> -- 
> >> 2.39.2

thanks,

-- 
heikki

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

end of thread, other threads:[~2023-09-15 13:24 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-09-15 12:23 [PATCH v2 0/2] usb: typec: tps6598x: add reset gpio support Javier Carrasco
2023-09-15 12:23 ` [PATCH v2 1/2] " Javier Carrasco
2023-09-15 12:57   ` Heikki Krogerus
2023-09-15 13:17     ` Javier Carrasco
2023-09-15 13:23       ` Heikki Krogerus
2023-09-15 12:23 ` [PATCH v2 2/2] dt-bindings: usb: tps6598x: add reset-gpios property Javier Carrasco

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).