Skip to content

Commit

Permalink
ASoC: fsl_esai: Check the return value from clk_prepare_enable()
Browse files Browse the repository at this point in the history
clk_prepare_enable() may fail, so let's check its return value and propagate it
in the case of error.

Signed-off-by: Fabio Estevam <fabio.estevam@freescale.com>
Signed-off-by: Mark Brown <broonie@linaro.org>
  • Loading branch information
Fabio Estevam authored and Mark Brown committed Feb 11, 2014
1 parent 38dbfb5 commit 33529ec
Showing 1 changed file with 22 additions and 5 deletions.
27 changes: 22 additions & 5 deletions sound/soc/fsl/fsl_esai.c
Original file line number Diff line number Diff line change
Expand Up @@ -431,17 +431,26 @@ static int fsl_esai_set_dai_fmt(struct snd_soc_dai *dai, unsigned int fmt)
static int fsl_esai_startup(struct snd_pcm_substream *substream,
struct snd_soc_dai *dai)
{
int ret;
struct fsl_esai *esai_priv = snd_soc_dai_get_drvdata(dai);

/*
* Some platforms might use the same bit to gate all three or two of
* clocks, so keep all clocks open/close at the same time for safety
*/
clk_prepare_enable(esai_priv->coreclk);
if (!IS_ERR(esai_priv->extalclk))
clk_prepare_enable(esai_priv->extalclk);
if (!IS_ERR(esai_priv->fsysclk))
clk_prepare_enable(esai_priv->fsysclk);
ret = clk_prepare_enable(esai_priv->coreclk);
if (ret)
return ret;
if (!IS_ERR(esai_priv->extalclk)) {
ret = clk_prepare_enable(esai_priv->extalclk);
if (ret)
goto err_extalck;
}
if (!IS_ERR(esai_priv->fsysclk)) {
ret = clk_prepare_enable(esai_priv->fsysclk);
if (ret)
goto err_fsysclk;
}

if (!dai->active) {
/* Reset Port C */
Expand All @@ -463,6 +472,14 @@ static int fsl_esai_startup(struct snd_pcm_substream *substream,
}

return 0;

err_fsysclk:
if (!IS_ERR(esai_priv->extalclk))
clk_disable_unprepare(esai_priv->extalclk);
err_extalck:
clk_disable_unprepare(esai_priv->coreclk);

return ret;
}

static int fsl_esai_hw_params(struct snd_pcm_substream *substream,
Expand Down

0 comments on commit 33529ec

Please sign in to comment.