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: 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>
This commit is contained in:
parent
dc20e5f315
commit
2b131b5a25
|
@ -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,
|
||||
},
|
||||
};
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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),
|
||||
|
|
Loading…
Reference in New Issue