int event)
 {
        struct snd_soc_dapm_widget *w;
-       const char *stream_name;
 
        if (stream == SNDRV_PCM_STREAM_PLAYBACK)
-               stream_name = dai->driver->playback.stream_name;
+               w = dai->playback_widget;
        else
-               stream_name = dai->driver->capture.stream_name;
+               w = dai->capture_widget;
 
-       if (!stream_name)
+       if (!w)
                return;
 
-       list_for_each_entry(w, &dapm->card->widgets, list)
-       {
-               if (!w->sname || w->dapm != dapm)
-                       continue;
-               dev_vdbg(w->dapm->dev, "widget %s\n %s stream %s event %d\n",
-                       w->name, w->sname, stream_name, event);
-               if (strstr(w->sname, stream_name)) {
-                       dapm_mark_dirty(w, "stream event");
-                       switch(event) {
-                       case SND_SOC_DAPM_STREAM_START:
-                               w->active = 1;
-                               break;
-                       case SND_SOC_DAPM_STREAM_STOP:
-                               w->active = 0;
-                               break;
-                       case SND_SOC_DAPM_STREAM_SUSPEND:
-                       case SND_SOC_DAPM_STREAM_RESUME:
-                       case SND_SOC_DAPM_STREAM_PAUSE_PUSH:
-                       case SND_SOC_DAPM_STREAM_PAUSE_RELEASE:
-                               break;
-                       }
-               }
+       dapm_mark_dirty(w, "stream event");
+
+       switch (event) {
+       case SND_SOC_DAPM_STREAM_START:
+               w->active = 1;
+               break;
+       case SND_SOC_DAPM_STREAM_STOP:
+               w->active = 0;
+               break;
+       case SND_SOC_DAPM_STREAM_SUSPEND:
+       case SND_SOC_DAPM_STREAM_RESUME:
+       case SND_SOC_DAPM_STREAM_PAUSE_PUSH:
+       case SND_SOC_DAPM_STREAM_PAUSE_RELEASE:
+               break;
        }
 
        dapm_power_widgets(dapm, event);