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

From: David Heidelberg via B4 Relay

Date: Fri Apr 03 2026 - 13:15:54 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 71d9b747ccfc5..a90528b76f52b 100644
--- a/drivers/input/touchscreen/stmfts.c
+++ b/drivers/input/touchscreen/stmfts.c
@@ -557,7 +557,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);

@@ -565,11 +565,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);
@@ -585,7 +585,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
@@ -594,6 +594,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