link->platforms->name = ctx->platform_name;
        link->nonatomic = 1;
 
+       if (!ctx->idisp_codec)
+               return 0;
+
        if (strstr(link->name, "HDMI")) {
                ret = skl_hda_hdmi_add_pcm(card, ctx->pcm_count);
 
 static int skl_hda_fill_card_info(struct snd_soc_acpi_mach_params *mach_params)
 {
        struct snd_soc_card *card = &hda_soc_card;
+       struct skl_hda_private *ctx = snd_soc_card_get_drvdata(card);
        struct snd_soc_dai_link *dai_link;
-       u32 codec_count, codec_mask, idisp_mask;
+       u32 codec_count, codec_mask;
        int i, num_links, num_route;
 
        codec_mask = mach_params->codec_mask;
        codec_count = hweight_long(codec_mask);
-       idisp_mask = codec_mask & IDISP_CODEC_MASK;
+       ctx->idisp_codec = !!(codec_mask & IDISP_CODEC_MASK);
 
        if (!codec_count || codec_count > 2 ||
-           (codec_count == 2 && !idisp_mask))
+           (codec_count == 2 && !ctx->idisp_codec))
                return -EINVAL;
 
-       if (codec_mask == idisp_mask) {
+       if (codec_mask == IDISP_CODEC_MASK) {
                /* topology with iDisp as the only HDA codec */
                num_links = IDISP_DAI_COUNT + DMIC_DAI_COUNT;
                num_route = IDISP_ROUTE_COUNT;
                num_route = ARRAY_SIZE(skl_hda_map);
                card->dapm_widgets = skl_hda_widgets;
                card->num_dapm_widgets = ARRAY_SIZE(skl_hda_widgets);
-               if (!idisp_mask) {
+               if (!ctx->idisp_codec) {
                        for (i = 0; i < IDISP_DAI_COUNT; i++) {
                                skl_hda_be_dai_links[i].codecs = dummy_codec;
                                skl_hda_be_dai_links[i].num_codecs =
        if (!mach)
                return -EINVAL;
 
+       snd_soc_card_set_drvdata(&hda_soc_card, ctx);
+
        ret = skl_hda_fill_card_info(&mach->mach_params);
        if (ret < 0) {
                dev_err(&pdev->dev, "Unsupported HDAudio/iDisp configuration found\n");
        ctx->common_hdmi_codec_drv = mach->mach_params.common_hdmi_codec_drv;
 
        hda_soc_card.dev = &pdev->dev;
-       snd_soc_card_set_drvdata(&hda_soc_card, ctx);
 
        if (mach->mach_params.dmic_num > 0) {
                snprintf(hda_soc_components, sizeof(hda_soc_components),