[PATCH] usb: typec: ps883x: fix probe error handling

Johan Hovold posted 1 patch 10 months ago
drivers/usb/typec/mux/ps883x.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
[PATCH] usb: typec: ps883x: fix probe error handling
Posted by Johan Hovold 10 months ago
Fix the probe error handling to avoid unbalanced clock disable or
leaving regulators on after probe failure.

Note that the active-low reset pin should also be asserted to avoid
leaking current after disabling the regulators.

Fixes: 257a087c8b52 ("usb: typec: Add support for Parade PS8830 Type-C Retimer")
Cc: Abel Vesa <abel.vesa@linaro.org>
Signed-off-by: Johan Hovold <johan+linaro@kernel.org>
---
 drivers/usb/typec/mux/ps883x.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/drivers/usb/typec/mux/ps883x.c b/drivers/usb/typec/mux/ps883x.c
index 10e407ab6b7f..ef086989231f 100644
--- a/drivers/usb/typec/mux/ps883x.c
+++ b/drivers/usb/typec/mux/ps883x.c
@@ -387,10 +387,11 @@ static int ps883x_retimer_probe(struct i2c_client *client)
 
 err_switch_unregister:
 	typec_switch_unregister(retimer->sw);
-err_vregs_disable:
-	ps883x_disable_vregs(retimer);
 err_clk_disable:
 	clk_disable_unprepare(retimer->xo_clk);
+err_vregs_disable:
+	gpiod_set_value(retimer->reset_gpio, 1);
+	ps883x_disable_vregs(retimer);
 err_mux_put:
 	typec_mux_put(retimer->typec_mux);
 err_switch_put:
-- 
2.45.3
Re: [PATCH] usb: typec: ps883x: fix probe error handling
Posted by Heikki Krogerus 9 months, 3 weeks ago
On Tue, Feb 18, 2025 at 09:22:43AM +0100, Johan Hovold wrote:
> Fix the probe error handling to avoid unbalanced clock disable or
> leaving regulators on after probe failure.
> 
> Note that the active-low reset pin should also be asserted to avoid
> leaking current after disabling the regulators.
> 
> Fixes: 257a087c8b52 ("usb: typec: Add support for Parade PS8830 Type-C Retimer")
> Cc: Abel Vesa <abel.vesa@linaro.org>
> Signed-off-by: Johan Hovold <johan+linaro@kernel.org>

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

> ---
>  drivers/usb/typec/mux/ps883x.c | 5 +++--
>  1 file changed, 3 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/usb/typec/mux/ps883x.c b/drivers/usb/typec/mux/ps883x.c
> index 10e407ab6b7f..ef086989231f 100644
> --- a/drivers/usb/typec/mux/ps883x.c
> +++ b/drivers/usb/typec/mux/ps883x.c
> @@ -387,10 +387,11 @@ static int ps883x_retimer_probe(struct i2c_client *client)
>  
>  err_switch_unregister:
>  	typec_switch_unregister(retimer->sw);
> -err_vregs_disable:
> -	ps883x_disable_vregs(retimer);
>  err_clk_disable:
>  	clk_disable_unprepare(retimer->xo_clk);
> +err_vregs_disable:
> +	gpiod_set_value(retimer->reset_gpio, 1);
> +	ps883x_disable_vregs(retimer);
>  err_mux_put:
>  	typec_mux_put(retimer->typec_mux);
>  err_switch_put:
> -- 
> 2.45.3

-- 
heikki