[PATCH WIP v2 05/11] Input: stmfts - disable regulators when power on fails

From: David Heidelberg via B4 Relay

Date: Sun Mar 15 2026 - 14:56:52 EST


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 c1c9570ddea2d..bf176907177d0 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;
}

static void stmfts_power_off(void *data)

--
2.53.0