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



Reply via email to