* SKL DSP driver modelling uses only few DAPM widgets so for rest we will
  * ignore. This helpers checks if the SKL driver handles this widget type
  */
-static int is_skl_dsp_widget_type(struct snd_soc_dapm_widget *w)
+static int is_skl_dsp_widget_type(struct snd_soc_dapm_widget *w,
+                                 struct device *dev)
 {
+       if (w->dapm->dev != dev)
+               return false;
+
        switch (w->id) {
        case snd_soc_dapm_dai_link:
        case snd_soc_dapm_dai_in:
 
                next_sink = p->sink;
 
-               if (!is_skl_dsp_widget_type(p->sink))
+               if (!is_skl_dsp_widget_type(p->sink, ctx->dev))
                        return skl_tplg_bind_sinks(p->sink, skl, src_w, src_mconfig);
 
                /*
                 * they are ones used for SKL so check that first
                 */
                if ((p->sink->priv != NULL) &&
-                                       is_skl_dsp_widget_type(p->sink)) {
+                               is_skl_dsp_widget_type(p->sink, ctx->dev)) {
 
                        sink = p->sink;
                        sink_mconfig = sink->priv;
                 * ones used for SKL so check that first
                 */
                if ((p->source->priv != NULL) &&
-                                       is_skl_dsp_widget_type(p->source)) {
+                               is_skl_dsp_widget_type(p->source, ctx->dev)) {
                        return p->source;
                }
        }
                w = dai->playback_widget;
                snd_soc_dapm_widget_for_each_sink_path(w, p) {
                        if (p->connect && p->sink->power &&
-                                       !is_skl_dsp_widget_type(p->sink))
+                               !is_skl_dsp_widget_type(p->sink, dai->dev))
                                continue;
 
                        if (p->sink->priv) {
                w = dai->capture_widget;
                snd_soc_dapm_widget_for_each_source_path(w, p) {
                        if (p->connect && p->source->power &&
-                                       !is_skl_dsp_widget_type(p->source))
+                               !is_skl_dsp_widget_type(p->source, dai->dev))
                                continue;
 
                        if (p->source->priv) {
        int ret = -EIO;
 
        snd_soc_dapm_widget_for_each_source_path(w, p) {
-               if (p->connect && is_skl_dsp_widget_type(p->source) &&
+               if (p->connect && is_skl_dsp_widget_type(p->source, dai->dev) &&
                                                p->source->priv) {
 
                        ret = skl_tplg_be_fill_pipe_params(dai,
        int ret = -EIO;
 
        snd_soc_dapm_widget_for_each_sink_path(w, p) {
-               if (p->connect && is_skl_dsp_widget_type(p->sink) &&
+               if (p->connect && is_skl_dsp_widget_type(p->sink, dai->dev) &&
                                                p->sink->priv) {
 
                        ret = skl_tplg_be_fill_pipe_params(dai,
        skl->resource.mcps = 0;
 
        list_for_each_entry(w, &card->widgets, list) {
-               if (is_skl_dsp_widget_type(w) && (w->priv != NULL))
+               if (is_skl_dsp_widget_type(w, ctx->dev) && w->priv != NULL)
                        skl_clear_pin_config(soc_platform, w);
        }
 
        struct skl_pipe *pipe;
 
        list_for_each_entry(w, &platform->component.card->widgets, list) {
-               if (is_skl_dsp_widget_type(w) && w->priv != NULL) {
+               if (is_skl_dsp_widget_type(w, platform->dev) && w->priv) {
                        mcfg = w->priv;
                        pipe = mcfg->pipe;