summaryrefslogtreecommitdiff
path: root/sound/soc/codecs/tlv320adc3xxx.c
diff options
context:
space:
mode:
authorYang Yingliang <yangyingliang@huawei.com>2021-12-23 11:22:12 +0300
committerMark Brown <broonie@kernel.org>2021-12-23 16:38:36 +0300
commit8a2d8e4fed6d5829ec3681af313d63e02bc22dad (patch)
treea5579e43345ed747f0e288f0b3fd8b1e197572db /sound/soc/codecs/tlv320adc3xxx.c
parent37daf8d9e0bd85a2859721aec28e1eb6e9973262 (diff)
downloadlinux-8a2d8e4fed6d5829ec3681af313d63e02bc22dad.tar.xz
ASoC: codec: tlv320adc3xxx: Fix missing clk_disable_unprepare() on error in adc3xxx_i2c_probe()
Fix the missing clk_disable_unprepare() before return from adc3xxx_i2c_probe() in the error handling case. Fixes: e9a3b57efd28 ("ASoC: codec: tlv320adc3xxx: New codec driver") Reported-by: Hulk Robot <hulkci@huawei.com> Signed-off-by: Yang Yingliang <yangyingliang@huawei.com> Link: https://lore.kernel.org/r/20211223082212.3342184-1-yangyingliang@huawei.com Signed-off-by: Mark Brown <broonie@kernel.org>
Diffstat (limited to 'sound/soc/codecs/tlv320adc3xxx.c')
-rw-r--r--sound/soc/codecs/tlv320adc3xxx.c18
1 files changed, 12 insertions, 6 deletions
diff --git a/sound/soc/codecs/tlv320adc3xxx.c b/sound/soc/codecs/tlv320adc3xxx.c
index a683bda7eb36..4baf3d881633 100644
--- a/sound/soc/codecs/tlv320adc3xxx.c
+++ b/sound/soc/codecs/tlv320adc3xxx.c
@@ -1232,21 +1232,21 @@ static int adc3xxx_i2c_probe(struct i2c_client *i2c,
ret = adc3xxx_parse_dt_gpio(adc3xxx, "ti,dmdin-gpio1", &adc3xxx->gpio_cfg[0]);
if (ret < 0)
- return ret;
+ goto err_unprepare_mclk;
ret = adc3xxx_parse_dt_gpio(adc3xxx, "ti,dmclk-gpio2", &adc3xxx->gpio_cfg[1]);
if (ret < 0)
- return ret;
+ goto err_unprepare_mclk;
ret = adc3xxx_parse_dt_micbias(adc3xxx, "ti,micbias1-vg", &adc3xxx->micbias_vg[0]);
if (ret < 0)
- return ret;
+ goto err_unprepare_mclk;
ret = adc3xxx_parse_dt_micbias(adc3xxx, "ti,micbias2-vg", &adc3xxx->micbias_vg[1]);
if (ret < 0)
- return ret;
+ goto err_unprepare_mclk;
adc3xxx->regmap = devm_regmap_init_i2c(i2c, &adc3xxx_regmap);
if (IS_ERR(adc3xxx->regmap)) {
ret = PTR_ERR(adc3xxx->regmap);
- return ret;
+ goto err_unprepare_mclk;
}
i2c_set_clientdata(i2c, adc3xxx);
@@ -1263,9 +1263,15 @@ static int adc3xxx_i2c_probe(struct i2c_client *i2c,
ret = snd_soc_register_component(dev,
&soc_component_dev_adc3xxx, &adc3xxx_dai, 1);
- if (ret < 0)
+ if (ret < 0) {
dev_err(dev, "Failed to register codec: %d\n", ret);
+ goto err_unprepare_mclk;
+ }
+
+ return 0;
+err_unprepare_mclk:
+ clk_disable_unprepare(adc3xxx->mclk);
return ret;
}