Browse Source

Input: imx6ul_tsc - fix error handling

If imx6ul_tsc_init() fails we should not return directly.

We should disable the previously acquired clocks in this case.

Signed-off-by: Fabio Estevam <fabio.estevam@nxp.com>
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Fabio Estevam 8 years ago
parent
commit
c286841720
1 changed files with 12 additions and 3 deletions
  1. 12 3
      drivers/input/touchscreen/imx6ul_tsc.c

+ 12 - 3
drivers/input/touchscreen/imx6ul_tsc.c

@@ -337,11 +337,20 @@ static int imx6ul_tsc_open(struct input_dev *input_dev)
 		dev_err(tsc->dev,
 		dev_err(tsc->dev,
 			"Could not prepare or enable the tsc clock: %d\n",
 			"Could not prepare or enable the tsc clock: %d\n",
 			err);
 			err);
-		clk_disable_unprepare(tsc->adc_clk);
-		return err;
+		goto disable_adc_clk;
 	}
 	}
 
 
-	return imx6ul_tsc_init(tsc);
+	err = imx6ul_tsc_init(tsc);
+	if (err)
+		goto disable_tsc_clk;
+
+	return 0;
+
+disable_tsc_clk:
+	clk_disable_unprepare(tsc->tsc_clk);
+disable_adc_clk:
+	clk_disable_unprepare(tsc->adc_clk);
+	return err;
 }
 }
 
 
 static void imx6ul_tsc_close(struct input_dev *input_dev)
 static void imx6ul_tsc_close(struct input_dev *input_dev)