aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArvind Yadav <arvind.yadav.cs@gmail.com>2017-07-25 06:14:34 -0400
committerMark Brown <broonie@kernel.org>2017-07-26 08:01:18 -0400
commiteae37345c8653a3c797c1763c95289d924ee37a2 (patch)
tree6581f25b700211a4ea1b4c62e89dde1d22d317ea
parent5771a8c08880cdca3bfb4a3fc6d309d6bba20877 (diff)
ASoC: jz4740: Handle return value of clk_prepare_enable.
clk_prepare_enable() can fail here and we must check its return value. Signed-off-by: Arvind Yadav <arvind.yadav.cs@gmail.com> Signed-off-by: Mark Brown <broonie@kernel.org>
-rw-r--r--sound/soc/jz4740/jz4740-i2s.c21
1 files changed, 17 insertions, 4 deletions
diff --git a/sound/soc/jz4740/jz4740-i2s.c b/sound/soc/jz4740/jz4740-i2s.c
index 794a3499e567..99394c036998 100644
--- a/sound/soc/jz4740/jz4740-i2s.c
+++ b/sound/soc/jz4740/jz4740-i2s.c
@@ -133,6 +133,7 @@ static int jz4740_i2s_startup(struct snd_pcm_substream *substream,
133{ 133{
134 struct jz4740_i2s *i2s = snd_soc_dai_get_drvdata(dai); 134 struct jz4740_i2s *i2s = snd_soc_dai_get_drvdata(dai);
135 uint32_t conf, ctrl; 135 uint32_t conf, ctrl;
136 int ret;
136 137
137 if (dai->active) 138 if (dai->active)
138 return 0; 139 return 0;
@@ -141,7 +142,9 @@ static int jz4740_i2s_startup(struct snd_pcm_substream *substream,
141 ctrl |= JZ_AIC_CTRL_FLUSH; 142 ctrl |= JZ_AIC_CTRL_FLUSH;
142 jz4740_i2s_write(i2s, JZ_REG_AIC_CTRL, ctrl); 143 jz4740_i2s_write(i2s, JZ_REG_AIC_CTRL, ctrl);
143 144
144 clk_prepare_enable(i2s->clk_i2s); 145 ret = clk_prepare_enable(i2s->clk_i2s);
146 if (ret)
147 return ret;
145 148
146 conf = jz4740_i2s_read(i2s, JZ_REG_AIC_CONF); 149 conf = jz4740_i2s_read(i2s, JZ_REG_AIC_CONF);
147 conf |= JZ_AIC_CONF_ENABLE; 150 conf |= JZ_AIC_CONF_ENABLE;
@@ -352,11 +355,18 @@ static int jz4740_i2s_resume(struct snd_soc_dai *dai)
352{ 355{
353 struct jz4740_i2s *i2s = snd_soc_dai_get_drvdata(dai); 356 struct jz4740_i2s *i2s = snd_soc_dai_get_drvdata(dai);
354 uint32_t conf; 357 uint32_t conf;
358 int ret;
355 359
356 clk_prepare_enable(i2s->clk_aic); 360 ret = clk_prepare_enable(i2s->clk_aic);
361 if (ret)
362 return ret;
357 363
358 if (dai->active) { 364 if (dai->active) {
359 clk_prepare_enable(i2s->clk_i2s); 365 ret = clk_prepare_enable(i2s->clk_i2s);
366 if (ret) {
367 clk_disable_unprepare(i2s->clk_aic);
368 return ret;
369 }
360 370
361 conf = jz4740_i2s_read(i2s, JZ_REG_AIC_CONF); 371 conf = jz4740_i2s_read(i2s, JZ_REG_AIC_CONF);
362 conf |= JZ_AIC_CONF_ENABLE; 372 conf |= JZ_AIC_CONF_ENABLE;
@@ -387,8 +397,11 @@ static int jz4740_i2s_dai_probe(struct snd_soc_dai *dai)
387{ 397{
388 struct jz4740_i2s *i2s = snd_soc_dai_get_drvdata(dai); 398 struct jz4740_i2s *i2s = snd_soc_dai_get_drvdata(dai);
389 uint32_t conf; 399 uint32_t conf;
400 int ret;
390 401
391 clk_prepare_enable(i2s->clk_aic); 402 ret = clk_prepare_enable(i2s->clk_aic);
403 if (ret)
404 return ret;
392 405
393 jz4740_i2c_init_pcm_config(i2s); 406 jz4740_i2c_init_pcm_config(i2s);
394 snd_soc_dai_init_dma_data(dai, &i2s->playback_dma_data, 407 snd_soc_dai_init_dma_data(dai, &i2s->playback_dma_data,