mirror of https://gitee.com/openkylin/linux.git
ASoC: intel: sof_rt5682: use separate route map for dmic
dmic map can only be added when dmic dai link is present. Signed-off-by: Bard Liao <yung-chuan.liao@linux.intel.com> Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> Link: https://lore.kernel.org/r/20190927201408.925-3-pierre-louis.bossart@linux.intel.com Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
43b2ab9009
commit
4413adc4fd
|
@ -308,6 +308,9 @@ static const struct snd_soc_dapm_widget sof_widgets[] = {
|
||||||
SND_SOC_DAPM_HP("Headphone Jack", NULL),
|
SND_SOC_DAPM_HP("Headphone Jack", NULL),
|
||||||
SND_SOC_DAPM_MIC("Headset Mic", NULL),
|
SND_SOC_DAPM_MIC("Headset Mic", NULL),
|
||||||
SND_SOC_DAPM_SPK("Spk", NULL),
|
SND_SOC_DAPM_SPK("Spk", NULL),
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct snd_soc_dapm_widget dmic_widgets[] = {
|
||||||
SND_SOC_DAPM_MIC("SoC DMIC", NULL),
|
SND_SOC_DAPM_MIC("SoC DMIC", NULL),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -318,10 +321,6 @@ static const struct snd_soc_dapm_route sof_map[] = {
|
||||||
|
|
||||||
/* other jacks */
|
/* other jacks */
|
||||||
{ "IN1P", NULL, "Headset Mic" },
|
{ "IN1P", NULL, "Headset Mic" },
|
||||||
|
|
||||||
/* digital mics */
|
|
||||||
{"DMic", NULL, "SoC DMIC"},
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct snd_soc_dapm_route speaker_map[] = {
|
static const struct snd_soc_dapm_route speaker_map[] = {
|
||||||
|
@ -329,6 +328,11 @@ static const struct snd_soc_dapm_route speaker_map[] = {
|
||||||
{ "Spk", NULL, "Speaker" },
|
{ "Spk", NULL, "Speaker" },
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static const struct snd_soc_dapm_route dmic_map[] = {
|
||||||
|
/* digital mics */
|
||||||
|
{"DMic", NULL, "SoC DMIC"},
|
||||||
|
};
|
||||||
|
|
||||||
static int speaker_codec_init(struct snd_soc_pcm_runtime *rtd)
|
static int speaker_codec_init(struct snd_soc_pcm_runtime *rtd)
|
||||||
{
|
{
|
||||||
struct snd_soc_card *card = rtd->card;
|
struct snd_soc_card *card = rtd->card;
|
||||||
|
@ -342,6 +346,28 @@ static int speaker_codec_init(struct snd_soc_pcm_runtime *rtd)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int dmic_init(struct snd_soc_pcm_runtime *rtd)
|
||||||
|
{
|
||||||
|
struct snd_soc_card *card = rtd->card;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
ret = snd_soc_dapm_new_controls(&card->dapm, dmic_widgets,
|
||||||
|
ARRAY_SIZE(dmic_widgets));
|
||||||
|
if (ret) {
|
||||||
|
dev_err(card->dev, "DMic widget addition failed: %d\n", ret);
|
||||||
|
/* Don't need to add routes if widget addition failed */
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = snd_soc_dapm_add_routes(&card->dapm, dmic_map,
|
||||||
|
ARRAY_SIZE(dmic_map));
|
||||||
|
|
||||||
|
if (ret)
|
||||||
|
dev_err(card->dev, "DMic map addition failed: %d\n", ret);
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
/* sof audio machine driver for rt5682 codec */
|
/* sof audio machine driver for rt5682 codec */
|
||||||
static struct snd_soc_card sof_audio_card_rt5682 = {
|
static struct snd_soc_card sof_audio_card_rt5682 = {
|
||||||
.name = "sof_rt5682",
|
.name = "sof_rt5682",
|
||||||
|
@ -445,6 +471,7 @@ static struct snd_soc_dai_link *sof_card_dai_links_create(struct device *dev,
|
||||||
links[id].name = "dmic01";
|
links[id].name = "dmic01";
|
||||||
links[id].cpus = &cpus[id];
|
links[id].cpus = &cpus[id];
|
||||||
links[id].cpus->dai_name = "DMIC01 Pin";
|
links[id].cpus->dai_name = "DMIC01 Pin";
|
||||||
|
links[id].init = dmic_init;
|
||||||
if (dmic_be_num > 1) {
|
if (dmic_be_num > 1) {
|
||||||
/* set up 2 BE links at most */
|
/* set up 2 BE links at most */
|
||||||
links[id + 1].name = "dmic16k";
|
links[id + 1].name = "dmic16k";
|
||||||
|
|
Loading…
Reference in New Issue