ASoC: samsung: Handle errors when getting the op_clk clock
authorSylwester Nawrocki <s.nawrocki@samsung.com>
Thu, 22 May 2014 10:10:52 +0000 (12:10 +0200)
committerMark Brown <broonie@linaro.org>
Thu, 22 May 2014 16:57:27 +0000 (17:57 +0100)
Ensure i2s->op_clk is not used when clk_get() for this clock fails.
This prevents working with an incorrectly configured clock in some
conditions.

Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com>
Signed-off-by: Mark Brown <broonie@linaro.org>
sound/soc/samsung/i2s.c

index 07ff3e7cb890c59112cf67bc0be1443ac3e05efa..043d98645a544cebf97d90422bfe4642f7086a56 100644 (file)
@@ -488,7 +488,7 @@ static int i2s_set_sysclk(struct snd_soc_dai *dai,
                        clk_id = 1;
 
                if (!any_active(i2s)) {
-                       if (i2s->op_clk) {
+                       if (i2s->op_clk && !IS_ERR(i2s->op_clk)) {
                                if ((clk_id && !(mod & MOD_IMS_SYSMUX)) ||
                                        (!clk_id && (mod & MOD_IMS_SYSMUX))) {
                                        clk_disable_unprepare(i2s->op_clk);
@@ -506,6 +506,10 @@ static int i2s_set_sysclk(struct snd_soc_dai *dai,
                        else
                                i2s->op_clk = clk_get(&i2s->pdev->dev,
                                                "i2s_opclk0");
+
+                       if (WARN_ON(IS_ERR(i2s->op_clk)))
+                               return PTR_ERR(i2s->op_clk);
+
                        clk_prepare_enable(i2s->op_clk);
                        i2s->rclk_srcrate = clk_get_rate(i2s->op_clk);