ASoC: fsl_esai: Check the return value from clk_prepare_enable()
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>
This commit is contained in:
parent
38dbfb59d1
commit
33529ec94f
@ -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,
|
static int fsl_esai_startup(struct snd_pcm_substream *substream,
|
||||||
struct snd_soc_dai *dai)
|
struct snd_soc_dai *dai)
|
||||||
{
|
{
|
||||||
|
int ret;
|
||||||
struct fsl_esai *esai_priv = snd_soc_dai_get_drvdata(dai);
|
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
|
* 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
|
* clocks, so keep all clocks open/close at the same time for safety
|
||||||
*/
|
*/
|
||||||
clk_prepare_enable(esai_priv->coreclk);
|
ret = clk_prepare_enable(esai_priv->coreclk);
|
||||||
if (!IS_ERR(esai_priv->extalclk))
|
if (ret)
|
||||||
clk_prepare_enable(esai_priv->extalclk);
|
return ret;
|
||||||
if (!IS_ERR(esai_priv->fsysclk))
|
if (!IS_ERR(esai_priv->extalclk)) {
|
||||||
clk_prepare_enable(esai_priv->fsysclk);
|
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) {
|
if (!dai->active) {
|
||||||
/* Reset Port C */
|
/* Reset Port C */
|
||||||
@ -463,6 +472,14 @@ static int fsl_esai_startup(struct snd_pcm_substream *substream,
|
|||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
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,
|
static int fsl_esai_hw_params(struct snd_pcm_substream *substream,
|
||||||
|
Loading…
Reference in New Issue
Block a user