Unverified Commit 6b6eddc6 authored by Haotian Zhang's avatar Haotian Zhang Committed by Mark Brown
Browse files

ASoC: cs4271: Fix regulator leak on probe failure



The probe function enables regulators at the beginning
but fails to disable them in its error handling path.
If any operation after enabling the regulators fails,
the probe will exit with an error, leaving the regulators
permanently enabled, which could lead to a resource leak.

Add a proper error handling path to call regulator_bulk_disable()
before returning an error.

Fixes: 9a397f47 ("ASoC: cs4271: add regulator consumer support")
Signed-off-by: default avatarHaotian Zhang <vulab@iscas.ac.cn>
Reviewed-by: default avatarCharles Keepax <ckeepax@opensource.cirrus.com>
Link: https://patch.msgid.link/20251105062246.1955-1-vulab@iscas.ac.cn


Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent 249d96b4
Loading
Loading
Loading
Loading
+7 −3
Original line number Diff line number Diff line
@@ -581,17 +581,17 @@ static int cs4271_component_probe(struct snd_soc_component *component)

	ret = regcache_sync(cs4271->regmap);
	if (ret < 0)
		return ret;
		goto err_disable_regulator;

	ret = regmap_update_bits(cs4271->regmap, CS4271_MODE2,
				 CS4271_MODE2_PDN | CS4271_MODE2_CPEN,
				 CS4271_MODE2_PDN | CS4271_MODE2_CPEN);
	if (ret < 0)
		return ret;
		goto err_disable_regulator;
	ret = regmap_update_bits(cs4271->regmap, CS4271_MODE2,
				 CS4271_MODE2_PDN, 0);
	if (ret < 0)
		return ret;
		goto err_disable_regulator;
	/* Power-up sequence requires 85 uS */
	udelay(85);

@@ -601,6 +601,10 @@ static int cs4271_component_probe(struct snd_soc_component *component)
				   CS4271_MODE2_MUTECAEQUB);

	return 0;

err_disable_regulator:
	regulator_bulk_disable(ARRAY_SIZE(cs4271->supplies), cs4271->supplies);
	return ret;
}

static void cs4271_component_remove(struct snd_soc_component *component)