Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d90c6cc2 authored by Charles Keepax's avatar Charles Keepax Committed by Mark Brown
Browse files

ASoC: arizona: Fix error path in codec probe



If we fail to add some DSPs or fail to add the controls we should call
wm_adsp2_codec_remove for all the cores we have already added. This
patch fixes this up on the wm5102 and wm5110.

Signed-off-by: default avatarCharles Keepax <ckeepax@opensource.wolfsonmicro.com>
Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent 5ed68f0a
Loading
Loading
Loading
Loading
+6 −1
Original line number Diff line number Diff line
@@ -1879,7 +1879,7 @@ static int wm5102_codec_probe(struct snd_soc_codec *codec)
	ret = snd_soc_add_codec_controls(codec,
					 arizona_adsp2_rate_controls, 1);
	if (ret)
		return ret;
		goto err_adsp2_codec_probe;

	arizona_init_spk(codec);
	arizona_init_gpio(codec);
@@ -1889,6 +1889,11 @@ static int wm5102_codec_probe(struct snd_soc_codec *codec)
	priv->core.arizona->dapm = dapm;

	return 0;

err_adsp2_codec_probe:
	wm_adsp2_codec_remove(&priv->core.adsp[0], codec);

	return ret;
}

static int wm5102_codec_remove(struct snd_soc_codec *codec)
+8 −2
Original line number Diff line number Diff line
@@ -1607,18 +1607,24 @@ static int wm5110_codec_probe(struct snd_soc_codec *codec)
	for (i = 0; i < WM5110_NUM_ADSP; ++i) {
		ret = wm_adsp2_codec_probe(&priv->core.adsp[i], codec);
		if (ret)
			return ret;
			goto err_adsp2_codec_probe;
	}

	ret = snd_soc_add_codec_controls(codec,
					 arizona_adsp2_rate_controls,
					 WM5110_NUM_ADSP);
	if (ret)
		return ret;
		goto err_adsp2_codec_probe;

	snd_soc_dapm_disable_pin(dapm, "HAPTICS");

	return 0;

err_adsp2_codec_probe:
	for (--i; i >= 0; --i)
		wm_adsp2_codec_remove(&priv->core.adsp[i], codec);

	return ret;
}

static int wm5110_codec_remove(struct snd_soc_codec *codec)