ASoC: arizona: Fix error path in codec probe
[firefly-linux-kernel-4.4.55.git] / sound / soc / codecs / wm5110.c
index 05aa5bca97cfd0b2d713f6c9ae7288b635c2ed86..2d1168c768d98c09b0a777027e5be8ac6632b491 100644 (file)
@@ -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)