struct asoc_simple_jack mic_jack;
        struct snd_soc_dai_link *dai_link;
        struct asoc_simple_dai *dais;
-       struct asoc_simple_card_data adata;
        struct snd_soc_codec_conf *codec_conf;
        struct gpio_desc *pa_gpio;
 };
 
        asoc_simple_card_convert_fixup(&dai_props->adata, params);
 
-       /* overwrite by top level adata if exist */
-       asoc_simple_card_convert_fixup(&priv->adata, params);
-
        return 0;
 }
 
        of_property_read_u32(ports, "mclk-fs", &dai_props->mclk_fs);
        of_property_read_u32(port,  "mclk-fs", &dai_props->mclk_fs);
        of_property_read_u32(ep,    "mclk-fs", &dai_props->mclk_fs);
+
+       asoc_simple_card_parse_convert(dev, top,   NULL,   &dai_props->adata);
+       asoc_simple_card_parse_convert(dev, node,  PREFIX, &dai_props->adata);
+       asoc_simple_card_parse_convert(dev, ports, NULL,   &dai_props->adata);
+       asoc_simple_card_parse_convert(dev, port,  NULL,   &dai_props->adata);
+       asoc_simple_card_parse_convert(dev, ep,    NULL,   &dai_props->adata);
+
        of_node_put(ports);
        of_node_put(port);
 
                                                     PREFIX "prefix");
        }
 
-       asoc_simple_card_parse_convert(dev, node, PREFIX, &dai_props->adata);
-
        ret = asoc_simple_card_of_parse_tdm(ep, dai);
        if (ret)
                return ret;
        if (ret < 0)
                return ret;
 
-       asoc_simple_card_parse_convert(dev, node, NULL, &priv->adata);
-
        link_idx        = 0;
        dai_idx         = 0;
        conf_idx        = 0;