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: Charles Keepax <ckeepax@opensource.wolfsonmicro.com> Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
5ed68f0a28
commit
d90c6cc242
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue