]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
ASoC: ak4458: Disable regulator when error happens
authorShengjiu Wang <shengjiu.wang@nxp.com>
Wed, 3 Dec 2025 10:05:28 +0000 (18:05 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 18 Dec 2025 13:03:35 +0000 (14:03 +0100)
[ Upstream commit ae585fabb9713a43e358cf606451386757225c95 ]

Disable regulator in runtime resume when error happens to balance
the reference count of regulator.

Fixes: 7e3096e8f823 ("ASoC: ak4458: Add regulator support")
Signed-off-by: Shengjiu Wang <shengjiu.wang@nxp.com>
Link: https://patch.msgid.link/20251203100529.3841203-2-shengjiu.wang@nxp.com
Signed-off-by: Mark Brown <broonie@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
sound/soc/codecs/ak4458.c

index 57cf601d3df3544fa1cdcd33dd8d17ef06ead288..a6c04dd3de3ed7d5ccb70c070c3b33fc6865996d 100644 (file)
@@ -671,7 +671,15 @@ static int ak4458_runtime_resume(struct device *dev)
        regcache_cache_only(ak4458->regmap, false);
        regcache_mark_dirty(ak4458->regmap);
 
-       return regcache_sync(ak4458->regmap);
+       ret = regcache_sync(ak4458->regmap);
+       if (ret)
+               goto err;
+
+       return 0;
+err:
+       regcache_cache_only(ak4458->regmap, true);
+       regulator_bulk_disable(ARRAY_SIZE(ak4458->supplies), ak4458->supplies);
+       return ret;
 }
 
 static const struct snd_soc_component_driver soc_codec_dev_ak4458 = {