wlist = dapm_kcontrol_get_wlist(update->kcontrol);
 
-       for (wi = 0; wi < wlist->num_widgets; wi++) {
-               w = wlist->widgets[wi];
-
+       for_each_dapm_widgets(wlist, wi, w) {
                if (w->event && (w->event_flags & SND_SOC_DAPM_PRE_REG)) {
                        ret = w->event(w, update->kcontrol, SND_SOC_DAPM_PRE_REG);
                        if (ret != 0)
                                w->name, ret);
        }
 
-       for (wi = 0; wi < wlist->num_widgets; wi++) {
-               w = wlist->widgets[wi];
-
+       for_each_dapm_widgets(wlist, wi, w) {
                if (w->event && (w->event_flags & SND_SOC_DAPM_POST_REG)) {
                        ret = w->event(w, update->kcontrol, SND_SOC_DAPM_POST_REG);
                        if (ret != 0)
 
 static int widget_in_list(struct snd_soc_dapm_widget_list *list,
                struct snd_soc_dapm_widget *widget)
 {
+       struct snd_soc_dapm_widget *w;
        int i;
 
-       for (i = 0; i < list->num_widgets; i++) {
-               if (widget == list->widgets[i])
+       for_each_dapm_widgets(list, i, w)
+               if (widget == w)
                        return 1;
-       }
 
        return 0;
 }
        struct snd_soc_card *card = fe->card;
        struct snd_soc_dapm_widget_list *list = *list_;
        struct snd_soc_pcm_runtime *be;
+       struct snd_soc_dapm_widget *widget;
        int i, new = 0, err;
 
        /* Create any new FE <--> BE connections */
-       for (i = 0; i < list->num_widgets; i++) {
+       for_each_dapm_widgets(list, i, widget) {
 
-               switch (list->widgets[i]->id) {
+               switch (widget->id) {
                case snd_soc_dapm_dai_in:
                        if (stream != SNDRV_PCM_STREAM_PLAYBACK)
                                continue;
                }
 
                /* is there a valid BE rtd for this widget */
-               be = dpcm_get_be(card, list->widgets[i], stream);
+               be = dpcm_get_be(card, widget, stream);
                if (!be) {
                        dev_err(fe->dev, "ASoC: no BE found for %s\n",
-                                       list->widgets[i]->name);
+                                       widget->name);
                        continue;
                }
 
                err = dpcm_be_connect(fe, be, stream);
                if (err < 0) {
                        dev_err(fe->dev, "ASoC: can't connect %s\n",
-                               list->widgets[i]->name);
+                               widget->name);
                        break;
                } else if (err == 0) /* already connected */
                        continue;