Unverified Commit 2b131b5a authored by Rander Wang's avatar Rander Wang Committed by Mark Brown
Browse files

ASoC: Intel: skl_hda_dsp_generic: add DMIC support



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: default avatarRander Wang <rander.wang@linux.intel.com>
Signed-off-by: default avatarPierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent dc20e5f3
Loading
Loading
Loading
Loading
+20 −2
Original line number Diff line number Diff line
@@ -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,
	},
};
+1 −1
Original line number Diff line number Diff line
@@ -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;
+16 −1
Original line number Diff line number Diff line
@@ -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),