diff options
author | Arvind Yadav <arvind.yadav.cs@gmail.com> | 2017-07-25 06:14:34 -0400 |
---|---|---|
committer | Mark Brown <broonie@kernel.org> | 2017-07-26 08:01:18 -0400 |
commit | eae37345c8653a3c797c1763c95289d924ee37a2 (patch) | |
tree | 6581f25b700211a4ea1b4c62e89dde1d22d317ea | |
parent | 5771a8c08880cdca3bfb4a3fc6d309d6bba20877 (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.c | 21 |
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, |