Message ID | 1434825674-8618-1-git-send-email-festevam@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Sat, Jun 20, 2015 at 03:41:14PM -0300, Fabio Estevam wrote: > From: Fabio Estevam <fabio.estevam@freescale.com> > > clk_prepare_enable() may fail, so we should better check its return value > and propagate it in the case of error. > > Signed-off-by: Fabio Estevam <fabio.estevam@freescale.com> > --- > sound/soc/fsl/fsl_asrc.c | 14 +++++++++++--- > 1 file changed, 11 insertions(+), 3 deletions(-) > > diff --git a/sound/soc/fsl/fsl_asrc.c b/sound/soc/fsl/fsl_asrc.c > index c068494..37dde26 100644 > --- a/sound/soc/fsl/fsl_asrc.c > +++ b/sound/soc/fsl/fsl_asrc.c > @@ -931,14 +931,22 @@ static int fsl_asrc_probe(struct platform_device *pdev) > static int fsl_asrc_runtime_resume(struct device *dev) > { > struct fsl_asrc *asrc_priv = dev_get_drvdata(dev); > - int i; > + int i, ret; > > - clk_prepare_enable(asrc_priv->mem_clk); > - clk_prepare_enable(asrc_priv->ipg_clk); > + ret = clk_prepare_enable(asrc_priv->mem_clk); > + if (ret) > + return ret; > + ret = clk_prepare_enable(asrc_priv->ipg_clk); > + if (ret) > + goto disable_mem_clk; > for (i = 0; i < ASRC_CLK_MAX_NUM; i++) > clk_prepare_enable(asrc_priv->asrck_clk[i]); How about these clocks? disable_clk: for (i--; i >= 0; i--) clk_disable_unprepare(asrc_priv->asrc_clk[i]); Might be better? Thank you Nicolin
diff --git a/sound/soc/fsl/fsl_asrc.c b/sound/soc/fsl/fsl_asrc.c index c068494..37dde26 100644 --- a/sound/soc/fsl/fsl_asrc.c +++ b/sound/soc/fsl/fsl_asrc.c @@ -931,14 +931,22 @@ static int fsl_asrc_probe(struct platform_device *pdev) static int fsl_asrc_runtime_resume(struct device *dev) { struct fsl_asrc *asrc_priv = dev_get_drvdata(dev); - int i; + int i, ret; - clk_prepare_enable(asrc_priv->mem_clk); - clk_prepare_enable(asrc_priv->ipg_clk); + ret = clk_prepare_enable(asrc_priv->mem_clk); + if (ret) + return ret; + ret = clk_prepare_enable(asrc_priv->ipg_clk); + if (ret) + goto disable_mem_clk; for (i = 0; i < ASRC_CLK_MAX_NUM; i++) clk_prepare_enable(asrc_priv->asrck_clk[i]); return 0; + +disable_mem_clk: + clk_disable_unprepare(asrc_priv->mem_clk); + return ret; } static int fsl_asrc_runtime_suspend(struct device *dev)