|
@@ -786,6 +786,30 @@ static const struct snd_kcontrol_new sun6i_codec_mixer_controls[] = {
|
|
|
SUN6I_CODEC_OM_DACA_CTRL_RMIX_MIC2, 1, 0),
|
|
|
};
|
|
|
|
|
|
+/* ADC mixer controls */
|
|
|
+static const struct snd_kcontrol_new sun6i_codec_adc_mixer_controls[] = {
|
|
|
+ SOC_DAPM_DOUBLE("Mixer Capture Switch",
|
|
|
+ SUN6I_CODEC_ADC_ACTL,
|
|
|
+ SUN6I_CODEC_ADC_ACTL_LADCMIX_OMIXL,
|
|
|
+ SUN6I_CODEC_ADC_ACTL_RADCMIX_OMIXR, 1, 0),
|
|
|
+ SOC_DAPM_DOUBLE("Mixer Reversed Capture Switch",
|
|
|
+ SUN6I_CODEC_ADC_ACTL,
|
|
|
+ SUN6I_CODEC_ADC_ACTL_LADCMIX_OMIXR,
|
|
|
+ SUN6I_CODEC_ADC_ACTL_RADCMIX_OMIXL, 1, 0),
|
|
|
+ SOC_DAPM_DOUBLE("Line In Capture Switch",
|
|
|
+ SUN6I_CODEC_ADC_ACTL,
|
|
|
+ SUN6I_CODEC_ADC_ACTL_LADCMIX_LINEINL,
|
|
|
+ SUN6I_CODEC_ADC_ACTL_RADCMIX_LINEINR, 1, 0),
|
|
|
+ SOC_DAPM_DOUBLE("Mic1 Capture Switch",
|
|
|
+ SUN6I_CODEC_ADC_ACTL,
|
|
|
+ SUN6I_CODEC_ADC_ACTL_LADCMIX_MIC1,
|
|
|
+ SUN6I_CODEC_ADC_ACTL_RADCMIX_MIC1, 1, 0),
|
|
|
+ SOC_DAPM_DOUBLE("Mic2 Capture Switch",
|
|
|
+ SUN6I_CODEC_ADC_ACTL,
|
|
|
+ SUN6I_CODEC_ADC_ACTL_LADCMIX_MIC2,
|
|
|
+ SUN6I_CODEC_ADC_ACTL_RADCMIX_MIC2, 1, 0),
|
|
|
+};
|
|
|
+
|
|
|
/* headphone controls */
|
|
|
static const char * const sun6i_codec_hp_src_enum_text[] = {
|
|
|
"DAC", "Mixer",
|
|
@@ -885,6 +909,10 @@ static const struct snd_kcontrol_new sun6i_codec_codec_widgets[] = {
|
|
|
SOC_SINGLE_TLV("Mic2 Boost Volume", SUN6I_CODEC_MIC_CTRL,
|
|
|
SUN6I_CODEC_MIC_CTRL_MIC2BOOST, 0x7, 0,
|
|
|
sun6i_codec_mic_gain_scale),
|
|
|
+ SOC_DOUBLE_TLV("ADC Capture Volume",
|
|
|
+ SUN6I_CODEC_ADC_ACTL, SUN6I_CODEC_ADC_ACTL_ADCLG,
|
|
|
+ SUN6I_CODEC_ADC_ACTL_ADCRG, 0x7, 0,
|
|
|
+ sun6i_codec_out_mixer_pregain_scale),
|
|
|
};
|
|
|
|
|
|
static const struct snd_soc_dapm_widget sun6i_codec_codec_dapm_widgets[] = {
|
|
@@ -910,6 +938,23 @@ static const struct snd_soc_dapm_widget sun6i_codec_codec_dapm_widgets[] = {
|
|
|
/* Line In */
|
|
|
SND_SOC_DAPM_INPUT("LINEIN"),
|
|
|
|
|
|
+ /* Digital parts of the ADCs */
|
|
|
+ SND_SOC_DAPM_SUPPLY("ADC Enable", SUN6I_CODEC_ADC_FIFOC,
|
|
|
+ SUN6I_CODEC_ADC_FIFOC_EN_AD, 0,
|
|
|
+ NULL, 0),
|
|
|
+
|
|
|
+ /* Analog parts of the ADCs */
|
|
|
+ SND_SOC_DAPM_ADC("Left ADC", "Codec Capture", SUN6I_CODEC_ADC_ACTL,
|
|
|
+ SUN6I_CODEC_ADC_ACTL_ADCLEN, 0),
|
|
|
+ SND_SOC_DAPM_ADC("Right ADC", "Codec Capture", SUN6I_CODEC_ADC_ACTL,
|
|
|
+ SUN6I_CODEC_ADC_ACTL_ADCREN, 0),
|
|
|
+
|
|
|
+ /* ADC Mixers */
|
|
|
+ SOC_MIXER_ARRAY("Left ADC Mixer", SND_SOC_NOPM, 0, 0,
|
|
|
+ sun6i_codec_adc_mixer_controls),
|
|
|
+ SOC_MIXER_ARRAY("Right ADC Mixer", SND_SOC_NOPM, 0, 0,
|
|
|
+ sun6i_codec_adc_mixer_controls),
|
|
|
+
|
|
|
/* Digital parts of the DACs */
|
|
|
SND_SOC_DAPM_SUPPLY("DAC Enable", SUN4I_CODEC_DAC_DPC,
|
|
|
SUN4I_CODEC_DAC_DPC_EN_DA, 0,
|
|
@@ -973,6 +1018,20 @@ static const struct snd_soc_dapm_route sun6i_codec_codec_dapm_routes[] = {
|
|
|
{ "Right Mixer", "Mic1 Playback Switch", "Mic1 Amplifier" },
|
|
|
{ "Right Mixer", "Mic2 Playback Switch", "Mic2 Amplifier" },
|
|
|
|
|
|
+ /* Left ADC Mixer Routes */
|
|
|
+ { "Left ADC Mixer", "Mixer Capture Switch", "Left Mixer" },
|
|
|
+ { "Left ADC Mixer", "Mixer Reversed Capture Switch", "Right Mixer" },
|
|
|
+ { "Left ADC Mixer", "Line In Capture Switch", "LINEIN" },
|
|
|
+ { "Left ADC Mixer", "Mic1 Capture Switch", "Mic1 Amplifier" },
|
|
|
+ { "Left ADC Mixer", "Mic2 Capture Switch", "Mic2 Amplifier" },
|
|
|
+
|
|
|
+ /* Right ADC Mixer Routes */
|
|
|
+ { "Right ADC Mixer", "Mixer Capture Switch", "Right Mixer" },
|
|
|
+ { "Right ADC Mixer", "Mixer Reversed Capture Switch", "Left Mixer" },
|
|
|
+ { "Right ADC Mixer", "Line In Capture Switch", "LINEIN" },
|
|
|
+ { "Right ADC Mixer", "Mic1 Capture Switch", "Mic1 Amplifier" },
|
|
|
+ { "Right ADC Mixer", "Mic2 Capture Switch", "Mic2 Amplifier" },
|
|
|
+
|
|
|
/* Headphone Routes */
|
|
|
{ "Headphone Source Playback Route", "DAC", "Left DAC" },
|
|
|
{ "Headphone Source Playback Route", "DAC", "Right DAC" },
|
|
@@ -987,6 +1046,12 @@ static const struct snd_soc_dapm_route sun6i_codec_codec_dapm_routes[] = {
|
|
|
{ "Line Out Source Playback Route", "Stereo", "Right Mixer" },
|
|
|
{ "Line Out Source Playback Route", "Mono Differential", "Left Mixer" },
|
|
|
{ "LINEOUT", NULL, "Line Out Source Playback Route" },
|
|
|
+
|
|
|
+ /* ADC Routes */
|
|
|
+ { "Left ADC", NULL, "ADC Enable" },
|
|
|
+ { "Right ADC", NULL, "ADC Enable" },
|
|
|
+ { "Left ADC", NULL, "Left ADC Mixer" },
|
|
|
+ { "Right ADC", NULL, "Right ADC Mixer" },
|
|
|
};
|
|
|
|
|
|
static struct snd_soc_codec_driver sun6i_codec_codec = {
|