Re: [PATCH 04/10] Input: stmfts - disable regulators when power on fails

From: Dmitry Torokhov

Date: Wed Mar 04 2026 - 00:01:26 EST


On Sun, Mar 01, 2026 at 06:51:18PM +0100, David Heidelberg via B4 Relay wrote:
> From: David Heidelberg <david@xxxxxxx>
>
> We must power off regulators after failing at power on phase.
>
> Signed-off-by: David Heidelberg <david@xxxxxxx>
> ---
> drivers/input/touchscreen/stmfts.c | 13 +++++++++----
> 1 file changed, 9 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/input/touchscreen/stmfts.c b/drivers/input/touchscreen/stmfts.c
> index db2dd0bb59fcc..f4e5f1b3ce796 100644
> --- a/drivers/input/touchscreen/stmfts.c
> +++ b/drivers/input/touchscreen/stmfts.c
> @@ -558,7 +558,7 @@ static int stmfts_power_on(struct stmfts_data *sdata)
>
> err = stmfts_read_system_info(sdata);
> if (err)
> - return err;
> + goto power_off;
>
> enable_irq(sdata->client->irq);
>
> @@ -566,11 +566,11 @@ static int stmfts_power_on(struct stmfts_data *sdata)
>
> err = stmfts_command(sdata, STMFTS_SYSTEM_RESET);
> if (err)
> - return err;
> + goto power_off;
>
> err = stmfts_command(sdata, STMFTS_SLEEP_OUT);
> if (err)
> - return err;
> + goto power_off;
>
> /* optional tuning */
> err = stmfts_command(sdata, STMFTS_MS_CX_TUNING);
> @@ -586,7 +586,7 @@ static int stmfts_power_on(struct stmfts_data *sdata)
>
> err = stmfts_command(sdata, STMFTS_FULL_FORCE_CALIBRATION);
> if (err)
> - return err;
> + goto power_off;
>
> /*
> * At this point no one is using the touchscreen
> @@ -595,6 +595,11 @@ static int stmfts_power_on(struct stmfts_data *sdata)
> (void) i2c_smbus_write_byte(sdata->client, STMFTS_SLEEP_IN);
>
> return 0;
> +
> +power_off:
> + regulator_bulk_disable(ARRAY_SIZE(stmfts_supplies),
> + sdata->supplies);
> + return err;

Maybe wrap everything below enabling the supplies into
stmfts_configute() or something to avoid bunch of gotos to power off on
error?

Thanks.

--
Dmitry