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 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; } static void stmfts_power_off(void *data) -- 2.51.0

