config SND_SOC_INTEL_BYT_CHT_ES8316_MACH
        tristate "Baytrail & Cherrytrail with ES8316 codec"
        depends on X86_INTEL_LPSS && I2C && ACPI
+       select SND_SOC_ACPI
        select SND_SOC_ES8316
        help
          This adds support for ASoC machine driver for Intel(R) Baytrail &
 
        .fully_routed = true,
 };
 
+static char codec_name[16]; /* i2c-<HID>:00 with HID being 8 chars */
+
 static int snd_byt_cht_es8316_mc_probe(struct platform_device *pdev)
 {
-       int ret = 0;
        struct byt_cht_es8316_private *priv;
+       struct snd_soc_acpi_mach *mach;
+       const char *i2c_name = NULL;
+       int dai_index = 0;
+       int i;
+       int ret = 0;
 
        priv = devm_kzalloc(&pdev->dev, sizeof(*priv), GFP_ATOMIC);
        if (!priv)
                return -ENOMEM;
 
+       mach = (&pdev->dev)->platform_data;
+       /* fix index of codec dai */
+       for (i = 0; i < ARRAY_SIZE(byt_cht_es8316_dais); i++) {
+               if (!strcmp(byt_cht_es8316_dais[i].codec_name,
+                           "i2c-ESSX8316:00")) {
+                       dai_index = i;
+                       break;
+               }
+       }
+
+       /* fixup codec name based on HID */
+       i2c_name = snd_soc_acpi_find_name_from_hid(mach->id);
+       if (i2c_name) {
+               snprintf(codec_name, sizeof(codec_name),
+                       "%s%s", "i2c-", i2c_name);
+               byt_cht_es8316_dais[dai_index].codec_name = codec_name;
+       }
+
        /* register the soc card */
        byt_cht_es8316_card.dev = &pdev->dev;
        snd_soc_card_set_drvdata(&byt_cht_es8316_card, priv);