Unverified Commit fef1f756 authored by Harshit Mogalapalli's avatar Harshit Mogalapalli Committed by Mark Brown
Browse files

ASoC: cs4271: Fix resource leak in cs4271_soc_resume()



Smatch detects this resource leak:

sound/soc/codecs/cs4271.c:548 cs4271_soc_resume() warn:
 'cs4271->clk' from clk_prepare_enable() not released on lines: 540,546.

Instead of direct returns, unprepare the clock and disable regulators on
the error paths.

Fixes: cf6bf51b ("ASoC: cs4271: Add support for the external mclk")
Fixes: 9a397f47 ("ASoC: cs4271: add regulator consumer support")
Signed-off-by: default avatarHarshit Mogalapalli <harshit.m.mogalapalli@oracle.com>
Reviewed-by: default avatarCharles Keepax <ckeepax@opensource.cirrus.com>
Acked-by: default avatarHerve Codina <herve.codina@bootlin.com>
Reviewed-by: default avatarAlexander Sverdlin <alexander.sverdlin@gmail.com>
Link: https://patch.msgid.link/20260110195337.2522347-1-harshit.m.mogalapalli@oracle.com


Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent dc8384d8
Loading
Loading
Loading
Loading
+9 −3
Original line number Diff line number Diff line
@@ -528,7 +528,7 @@ static int cs4271_soc_resume(struct snd_soc_component *component)
	ret = clk_prepare_enable(cs4271->clk);
	if (ret) {
		dev_err(component->dev, "Failed to enable clk: %d\n", ret);
		return ret;
		goto err_disable_regulators;
	}

	/* Do a proper reset after power up */
@@ -537,15 +537,21 @@ static int cs4271_soc_resume(struct snd_soc_component *component)
	/* Restore codec state */
	ret = regcache_sync(cs4271->regmap);
	if (ret < 0)
		return ret;
		goto err_disable_clk;

	/* then disable the power-down bit */
	ret = regmap_update_bits(cs4271->regmap, CS4271_MODE2,
				 CS4271_MODE2_PDN, 0);
	if (ret < 0)
		return ret;
		goto err_disable_clk;

	return 0;

err_disable_clk:
	clk_disable_unprepare(cs4271->clk);
err_disable_regulators:
	regulator_bulk_disable(ARRAY_SIZE(cs4271->supplies), cs4271->supplies);
	return ret;
}
#else
#define cs4271_soc_suspend	NULL