diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c
index 85e2a8b8f2888882344d0130996d00a7a18cab85..9375012ccb215fb25fc7f5f2ea86d27090cd8928 100644
--- a/sound/soc/soc-core.c
+++ b/sound/soc/soc-core.c
@@ -1803,12 +1803,12 @@ static int snd_soc_instantiate_card(struct snd_soc_card *card)
 		}
 	}
 
-	snd_soc_dapm_new_widgets(&card->dapm);
-
 	if (card->fully_routed)
 		list_for_each_entry(codec, &card->codec_dev_list, card_list)
 			snd_soc_dapm_auto_nc_codec_pins(codec);
 
+	snd_soc_dapm_new_widgets(&card->dapm);
+
 	ret = snd_card_register(card->snd_card);
 	if (ret < 0) {
 		dev_err(card->dev, "ASoC: failed to register soundcard %d\n",