From: Pierluigi Passaro pierluigi.p@variscite.com
The WM8904 codec supports both ADC and DMIC inputs. Add dedicated controls to support the additional routing.
Signed-off-by: Pierluigi Passaro pierluigi.p@variscite.com Signed-off by: Alifer Moraes alifer.m@variscite.com --- sound/soc/codecs/wm8904.c | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+)
diff --git a/sound/soc/codecs/wm8904.c b/sound/soc/codecs/wm8904.c index 4121771db104..c7987dc81e4d 100644 --- a/sound/soc/codecs/wm8904.c +++ b/sound/soc/codecs/wm8904.c @@ -837,6 +837,26 @@ static int out_pga_event(struct snd_soc_dapm_widget *w, return 0; }
+static const char *dmic_text[] = { + "DMIC1", "DMIC2" +}; + +static SOC_ENUM_SINGLE_DECL(dmic_enum, + WM8904_DIGITAL_MICROPHONE_0, 11, dmic_text); + +static const struct snd_kcontrol_new dmic_mux = + SOC_DAPM_ENUM("DMIC Mux", dmic_enum); + +static const char *cin_text[] = { + "ADC", "DMIC" +}; + +static SOC_ENUM_SINGLE_DECL(cin_enum, + WM8904_DIGITAL_MICROPHONE_0, 12, cin_text); + +static const struct snd_kcontrol_new cin_mux = + SOC_DAPM_ENUM("Capture Input", cin_enum); + static const char *input_mode_text[] = { "Single-Ended", "Differential Line", "Differential Mic" }; @@ -930,6 +950,10 @@ SND_SOC_DAPM_INPUT("IN2R"), SND_SOC_DAPM_INPUT("IN3L"), SND_SOC_DAPM_INPUT("IN3R"),
+SND_SOC_DAPM_MUX("DMIC Mux", SND_SOC_NOPM, 0, 0, &dmic_mux), +SND_SOC_DAPM_MUX("Left Capture Input", SND_SOC_NOPM, 0, 0, &cin_mux), +SND_SOC_DAPM_MUX("Right Capture Input", SND_SOC_NOPM, 0, 0, &cin_mux), + SND_SOC_DAPM_SUPPLY("MICBIAS", WM8904_MIC_BIAS_CONTROL_0, 0, 0, NULL, 0),
SND_SOC_DAPM_MUX("Left Capture Mux", SND_SOC_NOPM, 0, 0, &lin_mux), @@ -1093,11 +1117,21 @@ static const struct snd_soc_dapm_route adc_intercon[] = { { "AIFOUTL", NULL, "AIFOUTL Mux" }, { "AIFOUTR", NULL, "AIFOUTR Mux" },
+ { "DMIC Mux", "DMIC1", "IN1L" }, + { "DMIC Mux", "DMIC2", "IN1R" }, + + { "Left Capture Input", "ADC", "Left Capture PGA" }, + { "Left Capture Input", "DMIC", "DMIC Mux" }, + { "Right Capture Input", "ADC", "Right Capture PGA" }, + { "Right Capture Input", "DMIC", "DMIC Mux" }, + { "ADCL", NULL, "CLK_DSP" }, { "ADCL", NULL, "Left Capture PGA" }, + { "ADCL", NULL, "Left Capture Input" },
{ "ADCR", NULL, "CLK_DSP" }, { "ADCR", NULL, "Right Capture PGA" }, + { "ADCR", NULL, "Right Capture Input" }, };
static const struct snd_soc_dapm_route dac_intercon[] = {