*/
 #define TEGRA194_NUM_SDO_LINES   4
 
+struct hda_tegra_soc {
+       bool has_hda2codec_2x_reset;
+};
+
 struct hda_tegra {
        struct azx chip;
        struct device *dev;
-       struct reset_control *reset;
+       struct reset_control_bulk_data resets[3];
        struct clk_bulk_data clocks[3];
+       unsigned int nresets;
        unsigned int nclocks;
        void __iomem *regs;
        struct work_struct probe_work;
+       const struct hda_tegra_soc *soc;
 };
 
 #ifdef CONFIG_PM
        int rc;
 
        if (!chip->running) {
-               rc = reset_control_assert(hda->reset);
+               rc = reset_control_bulk_assert(hda->nresets, hda->resets);
                if (rc)
                        return rc;
        }
        } else {
                usleep_range(10, 100);
 
-               rc = reset_control_deassert(hda->reset);
+               rc = reset_control_bulk_deassert(hda->nresets, hda->resets);
                if (rc)
                        return rc;
        }
        return 0;
 }
 
+static const struct hda_tegra_soc tegra30_data = {
+       .has_hda2codec_2x_reset = true,
+};
+
+static const struct hda_tegra_soc tegra194_data = {
+       .has_hda2codec_2x_reset = false,
+};
+
 static const struct of_device_id hda_tegra_match[] = {
-       { .compatible = "nvidia,tegra30-hda" },
-       { .compatible = "nvidia,tegra194-hda" },
+       { .compatible = "nvidia,tegra30-hda", .data = &tegra30_data },
+       { .compatible = "nvidia,tegra194-hda", .data = &tegra194_data },
        {},
 };
 MODULE_DEVICE_TABLE(of, hda_tegra_match);
        hda->dev = &pdev->dev;
        chip = &hda->chip;
 
+       hda->soc = of_device_get_match_data(&pdev->dev);
+
        err = snd_card_new(&pdev->dev, SNDRV_DEFAULT_IDX1, SNDRV_DEFAULT_STR1,
                           THIS_MODULE, 0, &card);
        if (err < 0) {
                return err;
        }
 
-       hda->reset = devm_reset_control_array_get_exclusive(&pdev->dev);
-       if (IS_ERR(hda->reset)) {
-               err = PTR_ERR(hda->reset);
+       hda->resets[hda->nresets++].id = "hda";
+       hda->resets[hda->nresets++].id = "hda2hdmi";
+       /*
+        * "hda2codec_2x" reset is not present on Tegra194. Though DT would
+        * be updated to reflect this, but to have backward compatibility
+        * below is necessary.
+        */
+       if (hda->soc->has_hda2codec_2x_reset)
+               hda->resets[hda->nresets++].id = "hda2codec_2x";
+
+       err = devm_reset_control_bulk_get_exclusive(&pdev->dev, hda->nresets,
+                                                   hda->resets);
+       if (err)
                goto out_free;
-       }
 
        hda->clocks[hda->nclocks++].id = "hda";
        hda->clocks[hda->nclocks++].id = "hda2hdmi";