mirror of
https://github.com/torvalds/linux.git
synced 2024-11-26 06:02:05 +00:00
ALSA: ASoC: TLV320AIC3X: Add support for digital microphone input
AIC33 and AIC34 codecs in TLV320AIC3x family support digital microphone input. When enabled, the codec ADC takes bitstream input to low-pass filter from GPIO2 instead of its own delta-sigma modulator while providing oversampling clock through GPIO1. Signed-off-by: Jarkko Nikula <jarkko.nikula@nokia.com> Signed-off-by: Liam Girdwood <lg@opensource.wolfsonmicro.com> Signed-off-by: Takashi Iwai <tiwai@suse.de> Signed-off-by: Jaroslav Kysela <perex@perex.cz>
This commit is contained in:
parent
81971a1494
commit
ee15ffdb14
@ -455,6 +455,27 @@ static const struct snd_soc_dapm_widget aic3x_dapm_widgets[] = {
|
||||
SND_SOC_DAPM_MUX("Right Line2R Mux", SND_SOC_NOPM, 0, 0,
|
||||
&aic3x_right_line2_mux_controls),
|
||||
|
||||
/*
|
||||
* Not a real mic bias widget but similar function. This is for dynamic
|
||||
* control of GPIO1 digital mic modulator clock output function when
|
||||
* using digital mic.
|
||||
*/
|
||||
SND_SOC_DAPM_REG(snd_soc_dapm_micbias, "GPIO1 dmic modclk",
|
||||
AIC3X_GPIO1_REG, 4, 0xf,
|
||||
AIC3X_GPIO1_FUNC_DIGITAL_MIC_MODCLK,
|
||||
AIC3X_GPIO1_FUNC_DISABLED),
|
||||
|
||||
/*
|
||||
* Also similar function like mic bias. Selects digital mic with
|
||||
* configurable oversampling rate instead of ADC converter.
|
||||
*/
|
||||
SND_SOC_DAPM_REG(snd_soc_dapm_micbias, "DMic Rate 128",
|
||||
AIC3X_ASD_INTF_CTRLA, 0, 3, 1, 0),
|
||||
SND_SOC_DAPM_REG(snd_soc_dapm_micbias, "DMic Rate 64",
|
||||
AIC3X_ASD_INTF_CTRLA, 0, 3, 2, 0),
|
||||
SND_SOC_DAPM_REG(snd_soc_dapm_micbias, "DMic Rate 32",
|
||||
AIC3X_ASD_INTF_CTRLA, 0, 3, 3, 0),
|
||||
|
||||
/* Mic Bias */
|
||||
SND_SOC_DAPM_REG(snd_soc_dapm_micbias, "Mic Bias 2V",
|
||||
MICBIAS_CTRL, 6, 3, 1, 0),
|
||||
@ -570,6 +591,7 @@ static const struct snd_soc_dapm_route intercon[] = {
|
||||
{"Left PGA Mixer", "Mic3L Switch", "MIC3L"},
|
||||
|
||||
{"Left ADC", NULL, "Left PGA Mixer"},
|
||||
{"Left ADC", NULL, "GPIO1 dmic modclk"},
|
||||
|
||||
/* Right Input */
|
||||
{"Right Line1R Mux", "single-ended", "LINE1R"},
|
||||
@ -583,6 +605,7 @@ static const struct snd_soc_dapm_route intercon[] = {
|
||||
{"Right PGA Mixer", "Mic3R Switch", "MIC3R"},
|
||||
|
||||
{"Right ADC", NULL, "Right PGA Mixer"},
|
||||
{"Right ADC", NULL, "GPIO1 dmic modclk"},
|
||||
|
||||
/* Left PGA Bypass */
|
||||
{"Left PGA Bypass Mixer", "Line Switch", "Left PGA Mixer"},
|
||||
@ -643,6 +666,14 @@ static const struct snd_soc_dapm_route intercon[] = {
|
||||
{"Right Line Out", NULL, "Right Line2 Bypass Mixer"},
|
||||
{"Mono Out", NULL, "Right Line2 Bypass Mixer"},
|
||||
{"Right HP Out", NULL, "Right Line2 Bypass Mixer"},
|
||||
|
||||
/*
|
||||
* Logical path between digital mic enable and GPIO1 modulator clock
|
||||
* output function
|
||||
*/
|
||||
{"GPIO1 dmic modclk", NULL, "DMic Rate 128"},
|
||||
{"GPIO1 dmic modclk", NULL, "DMic Rate 64"},
|
||||
{"GPIO1 dmic modclk", NULL, "DMic Rate 32"},
|
||||
};
|
||||
|
||||
static int aic3x_add_widgets(struct snd_soc_codec *codec)
|
||||
|
Loading…
Reference in New Issue
Block a user