]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
ASoC: codec: tlv320adc3xxx: Fix missing clk_disable_unprepare() on error in adc3xxx_i...
authorYang Yingliang <yangyingliang@huawei.com>
Thu, 23 Dec 2021 08:22:12 +0000 (16:22 +0800)
committerMark Brown <broonie@kernel.org>
Thu, 23 Dec 2021 13:38:36 +0000 (13:38 +0000)
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>
sound/soc/codecs/tlv320adc3xxx.c

index a683bda7eb36ed8c53e40c9d7d3666a114d6c1cf..4baf3d8816334bfb31188868cdb152ff3d9aba8f 100644 (file)
@@ -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;
 }