From: David Heidelberg <[email protected]> We must power off regulators after failing at power on phase.
Signed-off-by: David Heidelberg <[email protected]> --- 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

