static void dapm_assert_locked(struct snd_soc_dapm_context *dapm)
 {
-       if (dapm->card && dapm->card->instantiated)
+       if (snd_soc_card_is_instantiated(dapm->card))
                lockdep_assert_held(&dapm->card->dapm_mutex);
 }
 
                                      enum snd_soc_dapm_direction))
 {
        struct snd_soc_card *card = dai->component->card;
-       struct snd_soc_dapm_widget *w;
+       struct snd_soc_dapm_widget *w = snd_soc_dai_get_widget(dai, stream);
        LIST_HEAD(widgets);
        int paths;
        int ret;
        mutex_lock_nested(&card->dapm_mutex, SND_SOC_DAPM_CLASS_RUNTIME);
 
        if (stream == SNDRV_PCM_STREAM_PLAYBACK) {
-               w = dai->playback_widget;
                invalidate_paths_ep(w, SND_SOC_DAPM_DIR_OUT);
                paths = is_connected_output_ep(w, &widgets,
                                custom_stop_condition);
        } else {
-               w = dai->capture_widget;
                invalidate_paths_ep(w, SND_SOC_DAPM_DIR_IN);
                paths = is_connected_input_ep(w, &widgets,
                                custom_stop_condition);
         * Suppress early reports (eg, jacks syncing their state) to avoid
         * silly DAPM runs during card startup.
         */
-       if (!dapm->card || !dapm->card->instantiated)
+       if (!snd_soc_card_is_instantiated(dapm->card))
                return 0;
 
        return dapm_power_widgets(dapm->card, SND_SOC_DAPM_STREAM_NOP);
                dapm_mark_dirty(path->node[dir], "Route added");
        }
 
-       if (dapm->card->instantiated && path->connect)
+       if (snd_soc_card_is_instantiated(dapm->card) && path->connect)
                dapm_path_invalidate(path);
 
        return 0;
                        return PTR_ERR(w);
 
                w->priv = dai;
-               dai->playback_widget = w;
+               snd_soc_dai_set_widget_playback(dai, w);
        }
 
        if (dai->driver->capture.stream_name) {
                        return PTR_ERR(w);
 
                w->priv = dai;
-               dai->capture_widget = w;
+               snd_soc_dai_set_widget_capture(dai, w);
        }
 
        return 0;
        int stream;
 
        if (dai_link->params) {
-               playback_cpu = cpu_dai->capture_widget;
-               capture_cpu = cpu_dai->playback_widget;
+               playback_cpu    = snd_soc_dai_get_widget_capture(cpu_dai);
+               capture_cpu     = snd_soc_dai_get_widget_playback(cpu_dai);
        } else {
-               playback_cpu = cpu_dai->playback_widget;
-               capture_cpu = cpu_dai->capture_widget;
+               playback_cpu    = snd_soc_dai_get_widget_playback(cpu_dai);
+               capture_cpu     = snd_soc_dai_get_widget_capture(cpu_dai);
        }
 
        /* connect BE DAI playback if widgets are valid */
        stream = SNDRV_PCM_STREAM_PLAYBACK;
-       codec = codec_dai->playback_widget;
+       codec = snd_soc_dai_get_widget(codec_dai, stream);
 
        if (playback_cpu && codec) {
                if (dai_link->params && !rtd->c2c_widget[stream]) {
 capture:
        /* connect BE DAI capture if widgets are valid */
        stream = SNDRV_PCM_STREAM_CAPTURE;
-       codec = codec_dai->capture_widget;
+       codec = snd_soc_dai_get_widget(codec_dai, stream);
 
        if (codec && capture_cpu) {
                if (dai_link->params && !rtd->c2c_widget[stream]) {