[PATCH 2/3] ASoC: Intel: bytcr_rt5651: Fix MCLK leak on platform_clock_control error

aravindanilraj0702@gmail.com posted 3 patches 5 days, 20 hours ago
There is a newer version of this series
[PATCH 2/3] ASoC: Intel: bytcr_rt5651: Fix MCLK leak on platform_clock_control error
Posted by aravindanilraj0702@gmail.com 5 days, 20 hours ago
From: Aravind Anilraj <aravindanilraj0702@gmail.com>

If byt_rt5651_prepare_and_enable_pll1() fails, the function returns
without calling clk_disable_unprepare() on priv->mclk, which was
already enabled earlier in the same code path. Add the missing
clk_disable_unprepare() call before returning the error.

Signed-off-by: Aravind Anilraj <aravindanilraj0702@gmail.com>
---
 sound/soc/intel/boards/bytcr_rt5651.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/sound/soc/intel/boards/bytcr_rt5651.c b/sound/soc/intel/boards/bytcr_rt5651.c
index 68cf463f1d50..2eef9a6dc8f3 100644
--- a/sound/soc/intel/boards/bytcr_rt5651.c
+++ b/sound/soc/intel/boards/bytcr_rt5651.c
@@ -205,7 +205,7 @@ static int platform_clock_control(struct snd_soc_dapm_widget *w,
 	if (SND_SOC_DAPM_EVENT_ON(event)) {
 		ret = clk_prepare_enable(priv->mclk);
 		if (ret < 0) {
-			dev_err(card->dev, "could not configure MCLK state");
+			dev_err(card->dev, "could not configure MCLK state\n");
 			return ret;
 		}
 		ret = byt_rt5651_prepare_and_enable_pll1(codec_dai, 48000, 50);
@@ -224,6 +224,7 @@ static int platform_clock_control(struct snd_soc_dapm_widget *w,
 
 	if (ret < 0) {
 		dev_err(card->dev, "can't set codec sysclk: %d\n", ret);
+		clk_disable_unprepare(priv->mclk);
 		return ret;
 	}
 
-- 
2.47.3
Re: [PATCH 2/3] ASoC: Intel: bytcr_rt5651: Fix MCLK leak on platform_clock_control error
Posted by Mark Brown 5 days, 19 hours ago
On Fri, Mar 27, 2026 at 03:30:01PM -0400, aravindanilraj0702@gmail.com wrote:
> From: Aravind Anilraj <aravindanilraj0702@gmail.com>
> 
> If byt_rt5651_prepare_and_enable_pll1() fails, the function returns
> without calling clk_disable_unprepare() on priv->mclk, which was
> already enabled earlier in the same code path. Add the missing
> clk_disable_unprepare() call before returning the error.

The changelog does not mention this...

>  	if (SND_SOC_DAPM_EVENT_ON(event)) {
>  		ret = clk_prepare_enable(priv->mclk);
>  		if (ret < 0) {
> -			dev_err(card->dev, "could not configure MCLK state");
> +			dev_err(card->dev, "could not configure MCLK state\n");
>  			return ret;
>  		}
>  		ret = byt_rt5651_prepare_and_enable_pll1(codec_dai, 48000, 50);

...separate change which is unrelated and really should be a separate
patch as covered in submitting-patches.rst.

It's a good enough change, ideally we'd log the return code as well.