OSDN Git Service

ASoC: sta32x: add missed function calls in error paths
authorChuhong Yuan <hslester96@gmail.com>
Thu, 28 May 2020 10:20:04 +0000 (18:20 +0800)
committerMark Brown <broonie@kernel.org>
Thu, 28 May 2020 12:20:20 +0000 (13:20 +0100)
sta32x_probe() forgets to call undo functions when it fails, add
the missed function calls to fix it.

Signed-off-by: Chuhong Yuan <hslester96@gmail.com>
Link: https://lore.kernel.org/r/20200528102004.911653-1-hslester96@gmail.com
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/codecs/sta32x.c

index db4b3ec..e9ccebb 100644 (file)
@@ -893,13 +893,13 @@ static int sta32x_probe(struct snd_soc_component *component)
                                    sta32x->supplies);
        if (ret != 0) {
                dev_err(component->dev, "Failed to enable supplies: %d\n", ret);
-               return ret;
+               goto err_clk_disable_unprepare;
        }
 
        ret = sta32x_startup_sequence(sta32x);
        if (ret < 0) {
                dev_err(component->dev, "Failed to startup device\n");
-               return ret;
+               goto err_regulator_bulk_disable;
        }
 
        /* CONFA */
@@ -983,6 +983,13 @@ static int sta32x_probe(struct snd_soc_component *component)
        regulator_bulk_disable(ARRAY_SIZE(sta32x->supplies), sta32x->supplies);
 
        return 0;
+
+err_regulator_bulk_disable:
+       regulator_bulk_disable(ARRAY_SIZE(sta32x->supplies), sta32x->supplies);
+err_clk_disable_unprepare:
+       if (sta32x->xti_clk)
+               clk_disable_unprepare(sta32x->xti_clk);
+       return ret;
 }
 
 static void sta32x_remove(struct snd_soc_component *component)