ASoC: Intel: skl_hda_dsp_generic: add DMIC support
authorRander Wang <rander.wang@linux.intel.com>
Tue, 30 Apr 2019 22:37:42 +0000 (17:37 -0500)
committerMark Brown <broonie@kernel.org>
Fri, 3 May 2019 06:03:30 +0000 (15:03 +0900)
Add dmic dai links using naming conventions used in
previous machine drivers.

Tested on whiskylake & icelake with SOF driver. Due
to a missing topology file, the DMIC functionality
could not be tested with the Skylake driver but was
tested for non-regressions on a GeminiLake platform
without DMICs.

Signed-off-by: Rander Wang <rander.wang@linux.intel.com>
Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/intel/boards/skl_hda_dsp_common.c
sound/soc/intel/boards/skl_hda_dsp_common.h
sound/soc/intel/boards/skl_hda_dsp_generic.c

index 3fdbf23..8b68f41 100644 (file)
@@ -78,7 +78,6 @@ struct snd_soc_dai_link skl_hda_be_dai_links[HDA_DSP_MAX_BE_DAI_LINKS] = {
                .platform_name = "0000:00:1f.3",
                .dpcm_playback = 1,
                .dpcm_capture = 1,
-               .init = NULL,
                .no_pcm = 1,
        },
        {
@@ -90,7 +89,26 @@ struct snd_soc_dai_link skl_hda_be_dai_links[HDA_DSP_MAX_BE_DAI_LINKS] = {
                .platform_name = "0000:00:1f.3",
                .dpcm_playback = 1,
                .dpcm_capture = 1,
-               .init = NULL,
+               .no_pcm = 1,
+       },
+       {
+               .name = "dmic01",
+               .id = 6,
+               .cpu_dai_name = "DMIC01 Pin",
+               .codec_name = "dmic-codec",
+               .codec_dai_name = "dmic-hifi",
+               .platform_name = "0000:00:1f.3",
+               .dpcm_capture = 1,
+               .no_pcm = 1,
+       },
+       {
+               .name = "dmic16k",
+               .id = 7,
+               .cpu_dai_name = "DMIC16k Pin",
+               .codec_name = "dmic-codec",
+               .codec_dai_name = "dmic-hifi",
+               .platform_name = "0000:00:1f.3",
+               .dpcm_capture = 1,
                .no_pcm = 1,
        },
 };
index 87c50af..daa582e 100644 (file)
@@ -15,7 +15,7 @@
 #include <sound/core.h>
 #include <sound/jack.h>
 
-#define HDA_DSP_MAX_BE_DAI_LINKS 5
+#define HDA_DSP_MAX_BE_DAI_LINKS 7
 
 struct skl_hda_hdmi_pcm {
        struct list_head head;
index b9a21e6..e69dc36 100644 (file)
@@ -97,6 +97,9 @@ static struct snd_soc_card hda_soc_card = {
 };
 
 #define IDISP_DAI_COUNT                3
+#define HDAC_DAI_COUNT         2
+#define DMIC_DAI_COUNT         2
+
 /* there are two routes per iDisp output */
 #define IDISP_ROUTE_COUNT      (IDISP_DAI_COUNT * 2)
 #define IDISP_CODEC_MASK       0x4
@@ -112,8 +115,20 @@ static int skl_hda_fill_card_info(struct snd_soc_acpi_mach_params *mach_params)
        codec_count = hweight_long(codec_mask);
 
        if (codec_count == 1 && codec_mask & IDISP_CODEC_MASK) {
-               num_links = IDISP_DAI_COUNT;
+               num_links = IDISP_DAI_COUNT + DMIC_DAI_COUNT;
                num_route = IDISP_ROUTE_COUNT;
+
+               /*
+                * rearrange the dai link array and make the
+                * dmic dai links follow idsp dai links for only
+                * num_links of dai links need to be registered
+                * to ASoC.
+                */
+               for (i = 0; i < DMIC_DAI_COUNT; i++) {
+                       skl_hda_be_dai_links[IDISP_DAI_COUNT + i] =
+                               skl_hda_be_dai_links[IDISP_DAI_COUNT +
+                                       HDAC_DAI_COUNT + i];
+               }
        } else if (codec_count == 2 && codec_mask & IDISP_CODEC_MASK) {
                num_links = ARRAY_SIZE(skl_hda_be_dai_links);
                num_route = ARRAY_SIZE(skl_hda_map),