mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-28 14:44:10 +08:00
ASoC: wm8962: Allow switching between analog and digital inputs
When the DMIC_ENA bit is set the analogue inputs are disconnected from the digital core of the chip, in favour of the digital microphones. Currently the driver will always enable DMIC_ENA whilst the GPIOs are configured for the DMIC function, this means the user can't currently use both the analog inputs and the digital inputs in one system. Add an additional DAPM mutex that allows switching between analog and digital inputs into the digital core. Reported-by: Martin Kepplinger <martin.kepplinger@puri.sm> Signed-off-by: Charles Keepax <ckeepax@opensource.cirrus.com> Reported-and-tested-by: Martin Kepplinger <martin.kepplinger@puri.sm> Link: https://lore.kernel.org/r/20220202164545.30457-1-ckeepax@opensource.cirrus.com Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
bb45f689fa
commit
b5083c0c94
@ -2049,6 +2049,13 @@ static SOC_ENUM_SINGLE_DECL(hpoutl_enum,
|
||||
static const struct snd_kcontrol_new hpoutl_mux =
|
||||
SOC_DAPM_ENUM("HPOUTL Mux", hpoutl_enum);
|
||||
|
||||
static const char * const input_mode_text[] = { "Analog", "Digital" };
|
||||
|
||||
static SOC_ENUM_SINGLE_VIRT_DECL(input_mode_enum, input_mode_text);
|
||||
|
||||
static const struct snd_kcontrol_new input_mode_mux =
|
||||
SOC_DAPM_ENUM("Input Mode", input_mode_enum);
|
||||
|
||||
static const struct snd_kcontrol_new inpgal[] = {
|
||||
SOC_DAPM_SINGLE("IN1L Switch", WM8962_LEFT_INPUT_PGA_CONTROL, 3, 1, 0),
|
||||
SOC_DAPM_SINGLE("IN2L Switch", WM8962_LEFT_INPUT_PGA_CONTROL, 2, 1, 0),
|
||||
@ -2147,6 +2154,9 @@ SND_SOC_DAPM_MIXER("MIXINR", WM8962_PWR_MGMT_1, 4, 0,
|
||||
|
||||
SND_SOC_DAPM_AIF_IN("DMIC_ENA", NULL, 0, WM8962_PWR_MGMT_1, 10, 0),
|
||||
|
||||
SND_SOC_DAPM_MUX("Input Mode L", SND_SOC_NOPM, 0, 0, &input_mode_mux),
|
||||
SND_SOC_DAPM_MUX("Input Mode R", SND_SOC_NOPM, 0, 0, &input_mode_mux),
|
||||
|
||||
SND_SOC_DAPM_ADC("ADCL", "Capture", WM8962_PWR_MGMT_1, 3, 0),
|
||||
SND_SOC_DAPM_ADC("ADCR", "Capture", WM8962_PWR_MGMT_1, 2, 0),
|
||||
|
||||
@ -2226,16 +2236,19 @@ static const struct snd_soc_dapm_route wm8962_intercon[] = {
|
||||
|
||||
{ "DMIC_ENA", NULL, "DMICDAT" },
|
||||
|
||||
{ "Input Mode L", "Analog", "MIXINL" },
|
||||
{ "Input Mode L", "Digital", "DMIC_ENA" },
|
||||
{ "Input Mode R", "Analog", "MIXINR" },
|
||||
{ "Input Mode R", "Digital", "DMIC_ENA" },
|
||||
|
||||
{ "ADCL", NULL, "SYSCLK" },
|
||||
{ "ADCL", NULL, "TOCLK" },
|
||||
{ "ADCL", NULL, "MIXINL" },
|
||||
{ "ADCL", NULL, "DMIC_ENA" },
|
||||
{ "ADCL", NULL, "Input Mode L" },
|
||||
{ "ADCL", NULL, "DSP2" },
|
||||
|
||||
{ "ADCR", NULL, "SYSCLK" },
|
||||
{ "ADCR", NULL, "TOCLK" },
|
||||
{ "ADCR", NULL, "MIXINR" },
|
||||
{ "ADCR", NULL, "DMIC_ENA" },
|
||||
{ "ADCR", NULL, "Input Mode R" },
|
||||
{ "ADCR", NULL, "DSP2" },
|
||||
|
||||
{ "STL", "Left", "ADCL" },
|
||||
|
Loading…
Reference in New Issue
Block a user