diff --git a/asoc/codecs/wcd938x/wcd938x.c b/asoc/codecs/wcd938x/wcd938x.c index d58f18f438..d5bd6ae3da 100644 --- a/asoc/codecs/wcd938x/wcd938x.c +++ b/asoc/codecs/wcd938x/wcd938x.c @@ -3060,6 +3060,62 @@ static const struct snd_kcontrol_new adc4_switch[] = { SOC_DAPM_SINGLE("Switch", SND_SOC_NOPM, 0, 1, 0) }; +static const struct snd_kcontrol_new amic1_switch[] = { + SOC_DAPM_SINGLE("Switch", SND_SOC_NOPM, 0, 1, 0) +}; + +static const struct snd_kcontrol_new amic2_switch[] = { + SOC_DAPM_SINGLE("Switch", SND_SOC_NOPM, 0, 1, 0) +}; + +static const struct snd_kcontrol_new amic3_switch[] = { + SOC_DAPM_SINGLE("Switch", SND_SOC_NOPM, 0, 1, 0) +}; + +static const struct snd_kcontrol_new amic4_switch[] = { + SOC_DAPM_SINGLE("Switch", SND_SOC_NOPM, 0, 1, 0) +}; + +static const struct snd_kcontrol_new amic5_switch[] = { + SOC_DAPM_SINGLE("Switch", SND_SOC_NOPM, 0, 1, 0) +}; + +static const struct snd_kcontrol_new amic6_switch[] = { + SOC_DAPM_SINGLE("Switch", SND_SOC_NOPM, 0, 1, 0) +}; + +static const struct snd_kcontrol_new amic7_switch[] = { + SOC_DAPM_SINGLE("Switch", SND_SOC_NOPM, 0, 1, 0) +}; + +static const struct snd_kcontrol_new va_amic1_switch[] = { + SOC_DAPM_SINGLE("Switch", SND_SOC_NOPM, 0, 1, 0) +}; + +static const struct snd_kcontrol_new va_amic2_switch[] = { + SOC_DAPM_SINGLE("Switch", SND_SOC_NOPM, 0, 1, 0) +}; + +static const struct snd_kcontrol_new va_amic3_switch[] = { + SOC_DAPM_SINGLE("Switch", SND_SOC_NOPM, 0, 1, 0) +}; + +static const struct snd_kcontrol_new va_amic4_switch[] = { + SOC_DAPM_SINGLE("Switch", SND_SOC_NOPM, 0, 1, 0) +}; + +static const struct snd_kcontrol_new va_amic5_switch[] = { + SOC_DAPM_SINGLE("Switch", SND_SOC_NOPM, 0, 1, 0) +}; + +static const struct snd_kcontrol_new va_amic6_switch[] = { + SOC_DAPM_SINGLE("Switch", SND_SOC_NOPM, 0, 1, 0) +}; + +static const struct snd_kcontrol_new va_amic7_switch[] = { + SOC_DAPM_SINGLE("Switch", SND_SOC_NOPM, 0, 1, 0) +}; + static const struct snd_kcontrol_new dmic1_switch[] = { SOC_DAPM_SINGLE("Switch", SND_SOC_NOPM, 0, 1, 0) }; @@ -3184,6 +3240,13 @@ static const struct snd_soc_dapm_widget wcd938x_dapm_widgets[] = { SND_SOC_DAPM_INPUT("AMIC5"), SND_SOC_DAPM_INPUT("AMIC6"), SND_SOC_DAPM_INPUT("AMIC7"), + SND_SOC_DAPM_INPUT("VA AMIC1"), + SND_SOC_DAPM_INPUT("VA AMIC2"), + SND_SOC_DAPM_INPUT("VA AMIC3"), + SND_SOC_DAPM_INPUT("VA AMIC4"), + SND_SOC_DAPM_INPUT("VA AMIC5"), + SND_SOC_DAPM_INPUT("VA AMIC6"), + SND_SOC_DAPM_INPUT("VA AMIC7"), SND_SOC_DAPM_INPUT("IN1_HPHL"), SND_SOC_DAPM_INPUT("IN2_HPHR"), @@ -3246,6 +3309,48 @@ static const struct snd_soc_dapm_widget wcd938x_dapm_widgets[] = { SND_SOC_DAPM_MIXER_E("ADC4 REQ", SND_SOC_NOPM, 3, 0, NULL, 0, wcd938x_enable_req, SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD), + SND_SOC_DAPM_MIXER_E("AMIC1_MIXER", SND_SOC_NOPM, 0, 0, + amic1_switch, ARRAY_SIZE(amic1_switch), NULL, + SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD), + SND_SOC_DAPM_MIXER_E("AMIC2_MIXER", SND_SOC_NOPM, 0, 0, + amic2_switch, ARRAY_SIZE(amic2_switch), NULL, + SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD), + SND_SOC_DAPM_MIXER_E("AMIC3_MIXER", SND_SOC_NOPM, 0, 0, + amic3_switch, ARRAY_SIZE(amic3_switch), NULL, + SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD), + SND_SOC_DAPM_MIXER_E("AMIC4_MIXER", SND_SOC_NOPM, 0, 0, + amic4_switch, ARRAY_SIZE(amic4_switch), NULL, + SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD), + SND_SOC_DAPM_MIXER_E("AMIC5_MIXER", SND_SOC_NOPM, 0, 0, + amic5_switch, ARRAY_SIZE(amic5_switch), NULL, + SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD), + SND_SOC_DAPM_MIXER_E("AMIC6_MIXER", SND_SOC_NOPM, 0, 0, + amic6_switch, ARRAY_SIZE(amic6_switch), NULL, + SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD), + SND_SOC_DAPM_MIXER_E("AMIC7_MIXER", SND_SOC_NOPM, 0, 0, + amic7_switch, ARRAY_SIZE(amic7_switch), NULL, + SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD), + SND_SOC_DAPM_MIXER_E("VA_AMIC1_MIXER", SND_SOC_NOPM, 0, 0, + va_amic1_switch, ARRAY_SIZE(va_amic1_switch), NULL, + SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD), + SND_SOC_DAPM_MIXER_E("VA_AMIC2_MIXER", SND_SOC_NOPM, 0, 0, + va_amic2_switch, ARRAY_SIZE(va_amic2_switch), NULL, + SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD), + SND_SOC_DAPM_MIXER_E("VA_AMIC3_MIXER", SND_SOC_NOPM, 0, 0, + va_amic3_switch, ARRAY_SIZE(va_amic3_switch), NULL, + SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD), + SND_SOC_DAPM_MIXER_E("VA_AMIC4_MIXER", SND_SOC_NOPM, 0, 0, + va_amic4_switch, ARRAY_SIZE(va_amic4_switch), NULL, + SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD), + SND_SOC_DAPM_MIXER_E("VA_AMIC5_MIXER", SND_SOC_NOPM, 0, 0, + va_amic5_switch, ARRAY_SIZE(va_amic5_switch), NULL, + SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD), + SND_SOC_DAPM_MIXER_E("VA_AMIC6_MIXER", SND_SOC_NOPM, 0, 0, + va_amic6_switch, ARRAY_SIZE(va_amic6_switch), NULL, + SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD), + SND_SOC_DAPM_MIXER_E("VA_AMIC7_MIXER", SND_SOC_NOPM, 0, 0, + va_amic7_switch, ARRAY_SIZE(va_amic7_switch), NULL, + SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD), SND_SOC_DAPM_MUX("ADC2 MUX", SND_SOC_NOPM, 0, 0, &tx_adc2_mux), @@ -3435,32 +3540,53 @@ static const struct snd_soc_dapm_route wcd938x_audio_map[] = { {"WCD_TX_OUTPUT", NULL, "ADC1_MIXER"}, {"ADC1_MIXER", "Switch", "ADC1 REQ"}, {"ADC1 REQ", NULL, "ADC1"}, - {"ADC1", NULL, "AMIC1"}, + {"ADC1", NULL, "AMIC1_MIXER"}, + {"AMIC1_MIXER", "Switch", "AMIC1"}, + {"AMIC1_MIXER", NULL, "VA_AMIC1_MIXER"}, + {"VA_AMIC1_MIXER", "Switch", "VA AMIC1"}, {"WCD_TX_OUTPUT", NULL, "ADC2_MIXER"}, {"ADC2_MIXER", "Switch", "ADC2 REQ"}, {"ADC2 REQ", NULL, "ADC2"}, {"ADC2", NULL, "HDR12 MUX"}, {"HDR12 MUX", "NO_HDR12", "ADC2 MUX"}, - {"HDR12 MUX", "HDR12", "AMIC1"}, - {"ADC2 MUX", "INP3", "AMIC3"}, - {"ADC2 MUX", "INP2", "AMIC2"}, + {"HDR12 MUX", "HDR12", "AMIC1_MIXER"}, + {"ADC2 MUX", "INP3", "AMIC3_MIXER"}, + {"AMIC3_MIXER", "Switch", "AMIC3"}, + {"AMIC3_MIXER", NULL, "VA_AMIC3_MIXER"}, + {"VA_AMIC3_MIXER", "Switch", "VA AMIC3"}, + {"ADC2 MUX", "INP2", "AMIC2_MIXER"}, + {"AMIC2_MIXER", "Switch", "AMIC2"}, + {"AMIC2_MIXER", NULL, "VA_AMIC2_MIXER"}, + {"VA_AMIC2_MIXER", "Switch", "VA AMIC2"}, {"WCD_TX_OUTPUT", NULL, "ADC3_MIXER"}, {"ADC3_MIXER", "Switch", "ADC3 REQ"}, {"ADC3 REQ", NULL, "ADC3"}, {"ADC3", NULL, "HDR34 MUX"}, {"HDR34 MUX", "NO_HDR34", "ADC3 MUX"}, - {"HDR34 MUX", "HDR34", "AMIC5"}, - {"ADC3 MUX", "INP4", "AMIC4"}, - {"ADC3 MUX", "INP6", "AMIC6"}, + {"HDR34 MUX", "HDR34", "AMIC5_MIXER"}, + {"ADC3 MUX", "INP4", "AMIC4_MIXER"}, + {"AMIC4_MIXER", "Switch", "AMIC4"}, + {"AMIC4_MIXER", NULL, "VA_AMIC4_MIXER"}, + {"VA_AMIC4_MIXER", "Switch", "VA AMIC4"}, + {"ADC3 MUX", "INP6", "AMIC6_MIXER"}, + {"AMIC6_MIXER", "Switch", "AMIC6"}, + {"AMIC6_MIXER", NULL, "VA_AMIC6_MIXER"}, + {"VA_AMIC6_MIXER", "Switch", "VA AMIC6"}, {"WCD_TX_OUTPUT", NULL, "ADC4_MIXER"}, {"ADC4_MIXER", "Switch", "ADC4 REQ"}, {"ADC4 REQ", NULL, "ADC4"}, {"ADC4", NULL, "ADC4 MUX"}, - {"ADC4 MUX", "INP5", "AMIC5"}, - {"ADC4 MUX", "INP7", "AMIC7"}, + {"ADC4 MUX", "INP5", "AMIC5_MIXER"}, + {"AMIC5_MIXER", "Switch", "AMIC5"}, + {"AMIC5_MIXER", NULL, "VA_AMIC5_MIXER"}, + {"VA_AMIC5_MIXER", "Switch", "VA AMIC5"}, + {"ADC4 MUX", "INP7", "AMIC7_MIXER"}, + {"AMIC7_MIXER", "Switch", "AMIC7"}, + {"AMIC7_MIXER", NULL, "VA_AMIC7_MIXER"}, + {"VA_AMIC7_MIXER", "Switch", "VA AMIC7"}, {"WCD_TX_OUTPUT", NULL, "DMIC1_MIXER"}, {"DMIC1_MIXER", "Switch", "DMIC1"}, @@ -3789,6 +3915,13 @@ static int wcd938x_soc_codec_probe(struct snd_soc_component *component) snd_soc_dapm_ignore_suspend(dapm, "AMIC5"); snd_soc_dapm_ignore_suspend(dapm, "AMIC6"); snd_soc_dapm_ignore_suspend(dapm, "AMIC7"); + snd_soc_dapm_ignore_suspend(dapm, "VA AMIC1"); + snd_soc_dapm_ignore_suspend(dapm, "VA AMIC2"); + snd_soc_dapm_ignore_suspend(dapm, "VA AMIC3"); + snd_soc_dapm_ignore_suspend(dapm, "VA AMIC4"); + snd_soc_dapm_ignore_suspend(dapm, "VA AMIC5"); + snd_soc_dapm_ignore_suspend(dapm, "VA AMIC6"); + snd_soc_dapm_ignore_suspend(dapm, "VA AMIC7"); snd_soc_dapm_ignore_suspend(dapm, "WCD_TX_OUTPUT"); snd_soc_dapm_ignore_suspend(dapm, "IN1_HPHL"); snd_soc_dapm_ignore_suspend(dapm, "IN2_HPHR");