SOC_DAPM_SINGLE("PCM Playback Switch", AC97_PCM, 14, 1, 1), }; /* Phone Mixer */ static const struct snd_kcontrol_new wm9712_phone_mixer_controls[] = { SOC_DAPM_SINGLE("PCBeep Bypass Switch", AC97_PC_BEEP, 7, 1, 1), SOC_DAPM_SINGLE("Aux Playback Switch", AC97_CD, 7, 1, 1), SOC_DAPM_SINGLE("Line Bypass Switch", AC97_LINE, 13, 1, 1), SOC_DAPM_SINGLE("PCM Playback Switch", AC97_PCM, 13, 1, 1), SOC_DAPM_SINGLE("Mic 1 Sidetone Switch", AC97_MIC, 14, 1, 1), SOC_DAPM_SINGLE("Mic 2 Sidetone Switch", AC97_MIC, 13, 1, 1), }; /* ALC headphone mux */ static const struct snd_kcontrol_new wm9712_alc_mux_controls = SOC_DAPM_ENUM("Route", wm9712_enum[1]); /* out 3 mux */ static const struct snd_kcontrol_new wm9712_out3_mux_controls = SOC_DAPM_ENUM("Route", wm9712_enum[2]); /* spk mux */ static const struct snd_kcontrol_new wm9712_spk_mux_controls = SOC_DAPM_ENUM("Route", wm9712_enum[3]); /* Capture to Phone mux */ static const struct snd_kcontrol_new wm9712_capture_phone_mux_controls = SOC_DAPM_ENUM("Route", wm9712_enum[4]); /* Capture left select */ static const struct snd_kcontrol_new wm9712_capture_selectl_controls =
SOC_SINGLE("Mic Boost (+20dB)", SSM2602_APANA, 0, 1, 0), SOC_SINGLE("Mic Boost2 (+20dB)", SSM2602_APANA, 8, 1, 0), SOC_SINGLE("Mic Switch", SSM2602_APANA, 1, 1, 1), }; /* Output Mixer */ static const struct snd_kcontrol_new ssm260x_output_mixer_controls[] = { SOC_DAPM_SINGLE("Line Bypass Switch", SSM2602_APANA, 3, 1, 0), SOC_DAPM_SINGLE("HiFi Playback Switch", SSM2602_APANA, 4, 1, 0), SOC_DAPM_SINGLE("Mic Sidetone Switch", SSM2602_APANA, 5, 1, 0), }; /* Input mux */ static const struct snd_kcontrol_new ssm2602_input_mux_controls = SOC_DAPM_ENUM("Input Select", ssm2602_enum[0]); static const struct snd_soc_dapm_widget ssm260x_dapm_widgets[] = { SND_SOC_DAPM_DAC("DAC", "HiFi Playback", SSM2602_PWR, 3, 1), SND_SOC_DAPM_ADC("ADC", "HiFi Capture", SSM2602_PWR, 2, 1), SND_SOC_DAPM_PGA("Line Input", SSM2602_PWR, 0, 1, NULL, 0), SND_SOC_DAPM_SUPPLY("Digital Core Power", SSM2602_ACTIVE, 0, 0, NULL, 0), SND_SOC_DAPM_OUTPUT("LOUT"), SND_SOC_DAPM_OUTPUT("ROUT"), SND_SOC_DAPM_INPUT("RLINEIN"), SND_SOC_DAPM_INPUT("LLINEIN"), }; static const struct snd_soc_dapm_widget ssm2602_dapm_widgets[] = {
SOC_DAPM_SINGLE_TLV("Mic Sidetone Volume", AK4641_VOL, 4, 7, 0, mic_stereo_sidetone_tlv), SOC_DAPM_SINGLE("Mic Sidetone Switch", AK4641_SIG2, 4, 1, 0), SOC_DAPM_SINGLE("Playback Switch", AK4641_SIG2, 7, 1, 0), SOC_DAPM_SINGLE("Aux Bypass Switch", AK4641_SIG2, 5, 1, 0), }; /* Input Mixer */ static const struct snd_kcontrol_new ak4641_input_mixer_controls[] = { SOC_DAPM_SINGLE("Mic Capture Switch", AK4641_MIC, 2, 1, 0), SOC_DAPM_SINGLE("Aux Capture Switch", AK4641_MIC, 5, 1, 0), }; /* Mic mux */ static const struct snd_kcontrol_new ak4641_mic_mux_control = SOC_DAPM_ENUM("Mic Select", ak4641_mic_select_enum); /* Input mux */ static const struct snd_kcontrol_new ak4641_input_mux_control = SOC_DAPM_ENUM("Input Select", ak4641_mic_or_dac_enum); /* mono 2 switch */ static const struct snd_kcontrol_new ak4641_mono2_control = SOC_DAPM_SINGLE("Switch", AK4641_SIG1, 0, 1, 0); /* ak4641 dapm widgets */ static const struct snd_soc_dapm_widget ak4641_dapm_widgets[] = { SND_SOC_DAPM_MIXER("Stereo Mixer", SND_SOC_NOPM, 0, 0, &ak4641_stereo_mixer_controls[0], ARRAY_SIZE(ak4641_stereo_mixer_controls)), SND_SOC_DAPM_MIXER("Mono1 Mixer", SND_SOC_NOPM, 0, 0,
/* Right PGA Mux */ static const struct soc_enum wm8988_rpga_enum = SOC_VALUE_ENUM_SINGLE(WM8988_RADCIN, 6, 3, ARRAY_SIZE(wm8988_pga_sel), wm8988_pga_sel, wm8988_pga_val); static const struct snd_kcontrol_new wm8988_right_pga_controls = SOC_DAPM_VALUE_ENUM("Route", wm8988_rpga_enum); /* Differential Mux */ static const char *wm8988_diff_sel[] = {"Line 1", "Line 2"}; static const struct soc_enum diffmux = SOC_ENUM_SINGLE(WM8988_ADCIN, 8, 2, wm8988_diff_sel); static const struct snd_kcontrol_new wm8988_diffmux_controls = SOC_DAPM_ENUM("Route", diffmux); /* Mono ADC Mux */ static const char *wm8988_mono_mux[] = {"Stereo", "Mono (Left)", "Mono (Right)", "Digital Mono"}; static const struct soc_enum monomux = SOC_ENUM_SINGLE(WM8988_ADCIN, 6, 4, wm8988_mono_mux); static const struct snd_kcontrol_new wm8988_monomux_controls = SOC_DAPM_ENUM("Route", monomux); static const struct snd_soc_dapm_widget wm8988_dapm_widgets[] = { SND_SOC_DAPM_SUPPLY("Mic Bias", WM8988_PWR1, 1, 0, NULL, 0), SND_SOC_DAPM_MUX("Differential Mux", SND_SOC_NOPM, 0, 0, &wm8988_diffmux_controls), SND_SOC_DAPM_MUX("Left ADC Mux", SND_SOC_NOPM, 0, 0,
SOC_DAPM_SINGLE("RINPGA12 Switch", WM8400_INPUT_MIXER3, WM8400_L12MNB_SHIFT, 1, 0), SOC_DAPM_SINGLE("RINPGA34 Switch", WM8400_INPUT_MIXER3, WM8400_L34MNB_SHIFT, 1, 0), }; /* AINLMUX */ static const char *wm8400_ainlmux[] = {"INMIXL Mix", "RXVOICE Mix", "DIFFINL Mix"}; static const struct soc_enum wm8400_ainlmux_enum = SOC_ENUM_SINGLE( WM8400_INPUT_MIXER1, WM8400_AINLMODE_SHIFT, ARRAY_SIZE(wm8400_ainlmux), wm8400_ainlmux); static const struct snd_kcontrol_new wm8400_dapm_ainlmux_controls = SOC_DAPM_ENUM("Route", wm8400_ainlmux_enum); /* DIFFINL */ /* AINRMUX */ static const char *wm8400_ainrmux[] = {"INMIXR Mix", "RXVOICE Mix", "DIFFINR Mix"}; static const struct soc_enum wm8400_ainrmux_enum = SOC_ENUM_SINGLE( WM8400_INPUT_MIXER1, WM8400_AINRMODE_SHIFT, ARRAY_SIZE(wm8400_ainrmux), wm8400_ainrmux); static const struct snd_kcontrol_new wm8400_dapm_ainrmux_controls = SOC_DAPM_ENUM("Route", wm8400_ainrmux_enum); /* RXVOICE */
SOC_DAPM_SINGLE("LINPUT3 Switch", WM8900_REG_INCTL, 4, 1, 0), }; static const struct snd_kcontrol_new wm8900_rinpga_controls[] = { SOC_DAPM_SINGLE("RINPUT1 Switch", WM8900_REG_INCTL, 2, 1, 0), SOC_DAPM_SINGLE("RINPUT2 Switch", WM8900_REG_INCTL, 1, 1, 0), SOC_DAPM_SINGLE("RINPUT3 Switch", WM8900_REG_INCTL, 0, 1, 0), }; static const char *wm9700_lp_mux[] = { "Disabled", "Enabled" }; static const struct soc_enum wm8900_lineout2_lp_mux = SOC_ENUM_SINGLE(WM8900_REG_LOUTMIXCTL1, 1, 2, wm9700_lp_mux); static const struct snd_kcontrol_new wm8900_lineout2_lp = SOC_DAPM_ENUM("Route", wm8900_lineout2_lp_mux); static const struct snd_soc_dapm_widget wm8900_dapm_widgets[] = { /* Externally visible pins */ SND_SOC_DAPM_OUTPUT("LINEOUT1L"), SND_SOC_DAPM_OUTPUT("LINEOUT1R"), SND_SOC_DAPM_OUTPUT("LINEOUT2L"), SND_SOC_DAPM_OUTPUT("LINEOUT2R"), SND_SOC_DAPM_OUTPUT("HP_L"), SND_SOC_DAPM_OUTPUT("HP_R"), SND_SOC_DAPM_INPUT("RINPUT1"), SND_SOC_DAPM_INPUT("LINPUT1"), SND_SOC_DAPM_INPUT("RINPUT2"), SND_SOC_DAPM_INPUT("LINPUT2"),
SOC_DAPM_SINGLE("Switch", MC13783_AUDIO_TX, 9, 1, 0); static const struct snd_kcontrol_new atx_amp_ctl = SOC_DAPM_SINGLE("Switch", MC13783_AUDIO_TX, 11, 1, 0); /* Virtual mux. The chip does the input selection automatically * as soon as we enable one input. */ static const char * const adcl_enum_text[] = { "MC1L", "RXINL", }; static SOC_ENUM_SINGLE_VIRT_DECL(adcl_enum, adcl_enum_text); static const struct snd_kcontrol_new left_input_mux = SOC_DAPM_ENUM("Route", adcl_enum); static const char * const adcr_enum_text[] = { "MC1R", "MC2", "RXINR", "TXIN", }; static SOC_ENUM_SINGLE_VIRT_DECL(adcr_enum, adcr_enum_text); static const struct snd_kcontrol_new right_input_mux = SOC_DAPM_ENUM("Route", adcr_enum); static const struct snd_kcontrol_new samp_ctl = SOC_DAPM_SINGLE("Switch", MC13783_AUDIO_RX0, 3, 1, 0); static const char * const speaker_amp_source_text[] = { "CODEC", "Right"
SOC_SINGLE_TLV("Frontend PGA2 Volume", NAU8540_REG_FEPGA3, 8, 0x25, 0, fepga_gain_tlv), SOC_SINGLE_TLV("Frontend PGA3 Volume", NAU8540_REG_FEPGA4, 0, 0x25, 0, fepga_gain_tlv), SOC_SINGLE_TLV("Frontend PGA4 Volume", NAU8540_REG_FEPGA4, 8, 0x25, 0, fepga_gain_tlv), }; static const char * const adc_channel[] = { "ADC channel 1", "ADC channel 2", "ADC channel 3", "ADC channel 4" }; static SOC_ENUM_SINGLE_DECL( digital_ch4_enum, NAU8540_REG_DIGITAL_MUX, 6, adc_channel); static const struct snd_kcontrol_new digital_ch4_mux = SOC_DAPM_ENUM("Digital CH4 Select", digital_ch4_enum); static SOC_ENUM_SINGLE_DECL( digital_ch3_enum, NAU8540_REG_DIGITAL_MUX, 4, adc_channel); static const struct snd_kcontrol_new digital_ch3_mux = SOC_DAPM_ENUM("Digital CH3 Select", digital_ch3_enum); static SOC_ENUM_SINGLE_DECL( digital_ch2_enum, NAU8540_REG_DIGITAL_MUX, 2, adc_channel); static const struct snd_kcontrol_new digital_ch2_mux = SOC_DAPM_ENUM("Digital CH2 Select", digital_ch2_enum); static SOC_ENUM_SINGLE_DECL( digital_ch1_enum, NAU8540_REG_DIGITAL_MUX, 0, adc_channel);
SOC_DAPM_SINGLE("Bypass Playback Switch", HPL_MIXER, 0, 1, 0), }; /* Right Headphone Mixers */ static const struct snd_kcontrol_new wm9713_hpr_mixer_controls[] = { SOC_DAPM_SINGLE("Beep Playback Switch", HPR_MIXER, 5, 1, 0), SOC_DAPM_SINGLE("Voice Playback Switch", HPR_MIXER, 4, 1, 0), SOC_DAPM_SINGLE("Aux Playback Switch", HPR_MIXER, 3, 1, 0), SOC_DAPM_SINGLE("PCM Playback Switch", HPR_MIXER, 2, 1, 0), SOC_DAPM_SINGLE("MonoIn Playback Switch", HPR_MIXER, 1, 1, 0), SOC_DAPM_SINGLE("Bypass Playback Switch", HPR_MIXER, 0, 1, 0), }; /* headphone capture mux */ static const struct snd_kcontrol_new wm9713_hp_rec_mux_controls = SOC_DAPM_ENUM("Route", wm9713_enum[1]); /* headphone mic mux */ static const struct snd_kcontrol_new wm9713_hp_mic_mux_controls = SOC_DAPM_ENUM("Route", wm9713_enum[0]); /* Speaker Mixer */ static const struct snd_kcontrol_new wm9713_speaker_mixer_controls[] = { SOC_DAPM_SINGLE("Beep Playback Switch", AC97_AUX, 11, 1, 1), SOC_DAPM_SINGLE("Voice Playback Switch", AC97_PCM, 11, 1, 1), SOC_DAPM_SINGLE("Aux Playback Switch", AC97_REC_SEL, 11, 1, 1), SOC_DAPM_SINGLE("PCM Playback Switch", AC97_PHONE, 14, 1, 1), SOC_DAPM_SINGLE("MonoIn Playback Switch", AC97_MASTER_TONE, 14, 1, 1), SOC_DAPM_SINGLE("Bypass Playback Switch", AC97_PC_BEEP, 14, 1, 1), };
{"Off", "HS DAC", "Line-In amp"}; static const char *twl6040_hf_texts[] = {"Off", "HF DAC", "Line-In amp"}; static const struct soc_enum twl6040_enum[] = { SOC_ENUM_SINGLE(TWL6040_REG_MICLCTL, 3, 4, twl6040_amicl_texts), SOC_ENUM_SINGLE(TWL6040_REG_MICRCTL, 3, 4, twl6040_amicr_texts), SOC_ENUM_SINGLE(TWL6040_REG_HSLCTL, 5, 3, twl6040_hs_texts), SOC_ENUM_SINGLE(TWL6040_REG_HSRCTL, 5, 3, twl6040_hs_texts), SOC_ENUM_SINGLE(TWL6040_REG_HFLCTL, 2, 3, twl6040_hf_texts), SOC_ENUM_SINGLE(TWL6040_REG_HFRCTL, 2, 3, twl6040_hf_texts), }; static const struct snd_kcontrol_new amicl_control = SOC_DAPM_ENUM("Route", twl6040_enum[0]); static const struct snd_kcontrol_new amicr_control = SOC_DAPM_ENUM("Route", twl6040_enum[1]); /* Headset DAC playback switches */ static const struct snd_kcontrol_new hsl_mux_controls = SOC_DAPM_ENUM("Route", twl6040_enum[2]); static const struct snd_kcontrol_new hsr_mux_controls = SOC_DAPM_ENUM("Route", twl6040_enum[3]); /* Handsfree DAC playback switches */ static const struct snd_kcontrol_new hfl_mux_controls = SOC_DAPM_ENUM("Route", twl6040_enum[4]);
mutex_unlock(&tscs42xx->coeff_ram_lock); return ret; } /* Input L Capture Route */ static char const * const input_select_text[] = { "Line 1", "Line 2", "Line 3", "D2S" }; static const struct soc_enum left_input_select_enum = SOC_ENUM_SINGLE(R_INSELL, FB_INSELL, ARRAY_SIZE(input_select_text), input_select_text); static const struct snd_kcontrol_new left_input_select = SOC_DAPM_ENUM("LEFT_INPUT_SELECT_ENUM", left_input_select_enum); /* Input R Capture Route */ static const struct soc_enum right_input_select_enum = SOC_ENUM_SINGLE(R_INSELR, FB_INSELR, ARRAY_SIZE(input_select_text), input_select_text); static const struct snd_kcontrol_new right_input_select = SOC_DAPM_ENUM("RIGHT_INPUT_SELECT_ENUM", right_input_select_enum); /* Input Channel Mapping */ static char const * const ch_map_select_text[] = { "Normal", "Left to Right", "Right to Left", "Swap" }; static const struct soc_enum ch_map_select_enum =
9, }; static const char * const lm4857_mode_texts[] = { "Off", "Earpiece", "Loudspeaker", "Loudspeaker + Headphone", "Headphone", }; static SOC_VALUE_ENUM_SINGLE_AUTODISABLE_DECL(lm4857_mode_enum, LM4857_CTRL, 0, 0xf, lm4857_mode_texts, lm4857_mode_values); static const struct snd_kcontrol_new lm4857_mode_ctrl = SOC_DAPM_ENUM("Mode", lm4857_mode_enum); static const struct snd_soc_dapm_widget lm4857_dapm_widgets[] = { SND_SOC_DAPM_INPUT("IN"), SND_SOC_DAPM_DEMUX("Mode", SND_SOC_NOPM, 0, 0, &lm4857_mode_ctrl), SND_SOC_DAPM_OUTPUT("LS"), SND_SOC_DAPM_OUTPUT("HP"), SND_SOC_DAPM_OUTPUT("EP"), }; static const DECLARE_TLV_DB_SCALE(stereo_tlv, -4050, 150, 0); static const DECLARE_TLV_DB_SCALE(mono_tlv, -3450, 150, 0); static const struct snd_kcontrol_new lm4857_controls[] = {
SOC_DAPM_SINGLE("RINS1", AK4671_ROUT3_SIGNAL_SELECT, 1, 1, 0), SOC_DAPM_SINGLE("RINS2", AK4671_ROUT3_SIGNAL_SELECT, 2, 1, 0), SOC_DAPM_SINGLE("RINS3", AK4671_ROUT3_SIGNAL_SELECT, 3, 1, 0), SOC_DAPM_SINGLE("RINS4", AK4671_ROUT3_SIGNAL_SELECT, 4, 1, 0), SOC_DAPM_SINGLE("LOOPSR", AK4671_ROUT3_SIGNAL_SELECT, 5, 1, 0), }; /* Input MUXs */ static const char *ak4671_lin_mux_texts[] = {"LIN1", "LIN2", "LIN3", "LIN4"}; static const struct soc_enum ak4671_lin_mux_enum = SOC_ENUM_SINGLE(AK4671_MIC_SIGNAL_SELECT, 0, ARRAY_SIZE(ak4671_lin_mux_texts), ak4671_lin_mux_texts); static const struct snd_kcontrol_new ak4671_lin_mux_control = SOC_DAPM_ENUM("Route", ak4671_lin_mux_enum); static const char *ak4671_rin_mux_texts[] = {"RIN1", "RIN2", "RIN3", "RIN4"}; static const struct soc_enum ak4671_rin_mux_enum = SOC_ENUM_SINGLE(AK4671_MIC_SIGNAL_SELECT, 2, ARRAY_SIZE(ak4671_rin_mux_texts), ak4671_rin_mux_texts); static const struct snd_kcontrol_new ak4671_rin_mux_control = SOC_DAPM_ENUM("Route", ak4671_rin_mux_enum); static const struct snd_soc_dapm_widget ak4671_dapm_widgets[] = { /* Inputs */ SND_SOC_DAPM_INPUT("LIN1"), SND_SOC_DAPM_INPUT("RIN1"), SND_SOC_DAPM_INPUT("LIN2"),
u16 pmic_rev; u16 codec_version; struct clk *mclk; struct regulator_bulk_data supplies[ARRAY_SIZE(supply_names)]; bool micbias1_cap_mode; bool micbias2_cap_mode; }; static const char *const adc2_mux_text[] = { "ZERO", "INP2", "INP3" }; static const char *const rdac2_mux_text[] = { "ZERO", "RX2", "RX1" }; static const char *const hph_text[] = { "ZERO", "Switch", }; static const struct soc_enum hph_enum = SOC_ENUM_SINGLE_VIRT( ARRAY_SIZE(hph_text), hph_text); static const struct snd_kcontrol_new hphl_mux = SOC_DAPM_ENUM("HPHL", hph_enum); static const struct snd_kcontrol_new hphr_mux = SOC_DAPM_ENUM("HPHR", hph_enum); /* ADC2 MUX */ static const struct soc_enum adc2_enum = SOC_ENUM_SINGLE_VIRT( ARRAY_SIZE(adc2_mux_text), adc2_mux_text); /* RDAC2 MUX */ static const struct soc_enum rdac2_mux_enum = SOC_ENUM_SINGLE( CDC_D_CDC_CONN_HPHR_DAC_CTL, 0, 3, rdac2_mux_text); static const struct snd_kcontrol_new spkr_switch[] = { SOC_DAPM_SINGLE("Switch", CDC_A_SPKR_DAC_CTL, 7, 1, 0) }; static const struct snd_kcontrol_new rdac2_mux = SOC_DAPM_ENUM(
/* Left analog microphone selection */ static const char *twl6040_amicl_texts[] = {"Headset Mic", "Main Mic", "Aux/FM Left", "Off"}; /* Right analog microphone selection */ static const char *twl6040_amicr_texts[] = {"Headset Mic", "Sub Mic", "Aux/FM Right", "Off"}; static const struct soc_enum twl6040_enum[] = { SOC_ENUM_SINGLE(TWL6040_REG_MICLCTL, 3, 3, twl6040_amicl_texts), SOC_ENUM_SINGLE(TWL6040_REG_MICRCTL, 3, 3, twl6040_amicr_texts), }; static const struct snd_kcontrol_new amicl_control = SOC_DAPM_ENUM("Route", twl6040_enum[0]); static const struct snd_kcontrol_new amicr_control = SOC_DAPM_ENUM("Route", twl6040_enum[1]); /* Headset DAC playback switches */ static const struct snd_kcontrol_new hsdacl_switch_controls = SOC_DAPM_SINGLE("Switch", TWL6040_REG_HSLCTL, 5, 1, 0); static const struct snd_kcontrol_new hsdacr_switch_controls = SOC_DAPM_SINGLE("Switch", TWL6040_REG_HSRCTL, 5, 1, 0); /* Handsfree DAC playback switches */ static const struct snd_kcontrol_new hfdacl_switch_controls = SOC_DAPM_SINGLE("Switch", TWL6040_REG_HFLCTL, 2, 1, 0);
WM8961_LEFT_INPUT_VOLUME, WM8961_RIGHT_INPUT_VOLUME, 7, 1, 1), }; static const char *sidetone_text[] = { "None", "Left", "Right" }; static const struct soc_enum dacl_sidetone = SOC_ENUM_SINGLE(WM8961_DSP_SIDETONE_0, 2, 3, sidetone_text); static const struct soc_enum dacr_sidetone = SOC_ENUM_SINGLE(WM8961_DSP_SIDETONE_1, 2, 3, sidetone_text); static const struct snd_kcontrol_new dacl_mux = SOC_DAPM_ENUM("DACL Sidetone", dacl_sidetone); static const struct snd_kcontrol_new dacr_mux = SOC_DAPM_ENUM("DACR Sidetone", dacr_sidetone); static const struct snd_soc_dapm_widget wm8961_dapm_widgets[] = { SND_SOC_DAPM_INPUT("LINPUT"), SND_SOC_DAPM_INPUT("RINPUT"), SND_SOC_DAPM_SUPPLY("CLK_DSP", WM8961_CLOCKING2, 4, 0, NULL, 0), SND_SOC_DAPM_PGA("Left Input", WM8961_PWR_MGMT_1, 5, 0, NULL, 0), SND_SOC_DAPM_PGA("Right Input", WM8961_PWR_MGMT_1, 4, 0, NULL, 0), SND_SOC_DAPM_ADC("ADCL", "HiFi Capture", WM8961_PWR_MGMT_1, 3, 0), SND_SOC_DAPM_ADC("ADCR", "HiFi Capture", WM8961_PWR_MGMT_1, 2, 0),
/* Stereo Mixer */ static const struct snd_kcontrol_new ak4535_stereo_mixer_controls[] = { SOC_DAPM_SINGLE("Mic Sidetone Switch", AK4535_SIG2, 4, 1, 0), SOC_DAPM_SINGLE("Playback Switch", AK4535_SIG2, 7, 1, 0), SOC_DAPM_SINGLE("Aux Bypass Switch", AK4535_SIG2, 5, 1, 0), }; /* Input Mixer */ static const struct snd_kcontrol_new ak4535_input_mixer_controls[] = { SOC_DAPM_SINGLE("Mic Capture Switch", AK4535_MIC, 2, 1, 0), SOC_DAPM_SINGLE("Aux Capture Switch", AK4535_MIC, 5, 1, 0), }; /* Input mux */ static const struct snd_kcontrol_new ak4535_input_mux_control = SOC_DAPM_ENUM("Input Select", ak4535_enum[4]); /* HP L switch */ static const struct snd_kcontrol_new ak4535_hpl_control = SOC_DAPM_SINGLE("Switch", AK4535_SIG2, 1, 1, 1); /* HP R switch */ static const struct snd_kcontrol_new ak4535_hpr_control = SOC_DAPM_SINGLE("Switch", AK4535_SIG2, 0, 1, 1); /* mono 2 switch */ static const struct snd_kcontrol_new ak4535_mono2_control = SOC_DAPM_SINGLE("Switch", AK4535_SIG1, 0, 1, 0); /* Line out switch */ static const struct snd_kcontrol_new ak4535_line_control =
static const struct snd_kcontrol_new right_speaker_mixer[] = { SOC_DAPM_SINGLE("Input Switch", WM8993_SPEAKER_MIXER, 6, 1, 0), SOC_DAPM_SINGLE("IN1RP Switch", WM8993_SPEAKER_MIXER, 4, 1, 0), SOC_DAPM_SINGLE("Output Switch", WM8993_SPEAKER_MIXER, 2, 1, 0), SOC_DAPM_SINGLE("DAC Switch", WM8993_SPEAKER_MIXER, 0, 1, 0), }; static const char *aif_text[] = { "Left", "Right" }; static const struct soc_enum aifoutl_enum = SOC_ENUM_SINGLE(WM8993_AUDIO_INTERFACE_1, 15, 2, aif_text); static const struct snd_kcontrol_new aifoutl_mux = SOC_DAPM_ENUM("AIFOUTL Mux", aifoutl_enum); static const struct soc_enum aifoutr_enum = SOC_ENUM_SINGLE(WM8993_AUDIO_INTERFACE_1, 14, 2, aif_text); static const struct snd_kcontrol_new aifoutr_mux = SOC_DAPM_ENUM("AIFOUTR Mux", aifoutr_enum); static const struct soc_enum aifinl_enum = SOC_ENUM_SINGLE(WM8993_AUDIO_INTERFACE_2, 15, 2, aif_text); static const struct snd_kcontrol_new aifinl_mux = SOC_DAPM_ENUM("AIFINL Mux", aifinl_enum); static const struct soc_enum aifinr_enum = SOC_ENUM_SINGLE(WM8993_AUDIO_INTERFACE_2, 14, 2, aif_text);
SOC_SINGLE_TLV("ALC Target Volume", WM8737_ALC1, 0, 15, 0, alc_target_tlv), SOC_ENUM("ALC Hold Time", alc_hold), SOC_SINGLE("ALC ZC Switch", WM8737_ALC2, 4, 1, 0), SOC_ENUM("ALC Attack Time", alc_atk), SOC_ENUM("ALC Decay Time", alc_dcy), }; static const char *linsel_text[] = { "LINPUT1", "LINPUT2", "LINPUT3", "LINPUT1 DC", }; static SOC_ENUM_SINGLE_DECL(linsel_enum, WM8737_AUDIO_PATH_L, 7, linsel_text); static const struct snd_kcontrol_new linsel_mux = SOC_DAPM_ENUM("LINSEL", linsel_enum); static const char *rinsel_text[] = { "RINPUT1", "RINPUT2", "RINPUT3", "RINPUT1 DC", }; static SOC_ENUM_SINGLE_DECL(rinsel_enum, WM8737_AUDIO_PATH_R, 7, rinsel_text); static const struct snd_kcontrol_new rinsel_mux = SOC_DAPM_ENUM("RINSEL", rinsel_enum); static const char *bypass_text[] = { "Direct", "Preamp" };
/* Sound Effect */ static const char *rt3261_dsp_mode[] = { "Disable", "AEC+NS+FENS", "HFBF", "Far Field Pick-up"}; static const SOC_ENUM_SINGLE_DECL(rt3261_dsp_enum, 0, 0, rt3261_dsp_mode); static const char *rt3261_rxdp2_src[] = {"IF2_DAC", "Stereo_ADC"}; static const SOC_ENUM_SINGLE_DECL( rt3261_rxdp2_enum, RT3261_GEN_CTRL2, RT3261_RXDP2_SEL_SFT, rt3261_rxdp2_src); static const struct snd_kcontrol_new rt3261_rxdp2_mux = SOC_DAPM_ENUM("RxDP2 sel", rt3261_rxdp2_enum); static const char *rt3261_rxdp_src[] = {"RxDP2", "RxDP1"}; static const SOC_ENUM_SINGLE_DECL( rt3261_rxdp_enum, RT3261_DUMMY_PR3F, 10, rt3261_rxdp_src); static const struct snd_kcontrol_new rt3261_rxdp_mux = SOC_DAPM_ENUM("RxDP sel", rt3261_rxdp_enum); static const char *rt3261_rxdc_src[] = {"Mono_ADC", "Stereo_ADC"}; static const SOC_ENUM_SINGLE_DECL(
SOC_DOUBLE_R_TLV("Speaker Analog Playback Volume", AIC31XX_LANALOGSPL, AIC31XX_RANALOGSPR, 0, 0x7F, 1, sp_vol_tlv), }; static const struct snd_kcontrol_new aic310x_snd_controls[] = { SOC_SINGLE("Speaker Driver Playback Switch", AIC31XX_SPLGAIN, 2, 1, 0), SOC_SINGLE_TLV("Speaker Driver Playback Volume", AIC31XX_SPLGAIN, 3, 3, 0, class_D_drv_tlv), SOC_SINGLE_TLV("Speaker Analog Playback Volume", AIC31XX_LANALOGSPL, 0, 0x7F, 1, sp_vol_tlv), }; static const struct snd_kcontrol_new ldac_in_control = SOC_DAPM_ENUM("DAC Left Input", ldac_in_enum); static const struct snd_kcontrol_new rdac_in_control = SOC_DAPM_ENUM("DAC Right Input", rdac_in_enum); static int aic31xx_wait_bits(struct aic31xx_priv *aic31xx, unsigned int reg, unsigned int mask, unsigned int wbits, int sleep, int count) { unsigned int bits; int counter = count; int ret = regmap_read(aic31xx->regmap, reg, &bits); while ((bits & mask) != wbits && counter && !ret) { usleep_range(sleep, sleep * 2); ret = regmap_read(aic31xx->regmap, reg, &bits);
SOC_SINGLE_TLV("ADC Right Volume", MAX9867_ADCLEVEL, 0, 15, 1, max9860_adc_right_tlv), SOC_ENUM("Speaker Mode", max9867_spkmode), SOC_SINGLE("Volume Smoothing Switch", MAX9867_MODECONFIG, 6, 1, 0), SOC_SINGLE("ZCD Switch", MAX9867_MODECONFIG, 5, 1, 0), SOC_ENUM("DSP Filter", max9867_filter), }; static const char *const max9867_mux[] = {"None", "Mic", "Line", "Mic_Line"}; static SOC_ENUM_SINGLE_DECL(max9867_mux_enum, MAX9867_INPUTCONFIG, MAX9867_INPUT_SHIFT, max9867_mux); static const struct snd_kcontrol_new max9867_dapm_mux_controls = SOC_DAPM_ENUM("Route", max9867_mux_enum); static const struct snd_kcontrol_new max9867_left_dapm_control = SOC_DAPM_SINGLE("Switch", MAX9867_PWRMAN, 6, 1, 0); static const struct snd_kcontrol_new max9867_right_dapm_control = SOC_DAPM_SINGLE("Switch", MAX9867_PWRMAN, 5, 1, 0); static const struct snd_kcontrol_new max9867_line_dapm_control = SOC_DAPM_SINGLE("Switch", MAX9867_LEFTLINELVL, 6, 1, 1); static const struct snd_soc_dapm_widget max9867_dapm_widgets[] = { SND_SOC_DAPM_AIF_IN("DAI_OUT", "HiFi Playback", 0, SND_SOC_NOPM, 0, 0), SND_SOC_DAPM_DAC("Left DAC", NULL, MAX9867_PWRMAN, 3, 0), SND_SOC_DAPM_DAC("Right DAC", NULL, MAX9867_PWRMAN, 2, 0), SND_SOC_DAPM_MIXER("Output Mixer", SND_SOC_NOPM, 0, 0, NULL, 0), SND_SOC_DAPM_OUTPUT("HPOUT"),
"Vmid", "HP Right Mix"}; static const char * const alc5632_spkout_input_sel[] = { "Vmid", "HPOut Mix", "Speaker Mix", "Mono Mix"}; static const char * const alc5632_aux_out_input_sel[] = { "Vmid", "HPOut Mix", "Speaker Mix", "Mono Mix"}; static const char * const alc5632_adcr_func_sel[] = { "Stereo ADC", "Voice ADC"}; static const char * const alc5632_i2s_out_sel[] = { "ADC LR", "Voice Stereo Digital"}; /* auxout output mux */ static SOC_ENUM_SINGLE_DECL(alc5632_aux_out_input_enum, ALC5632_OUTPUT_MIXER_CTRL, 6, alc5632_aux_out_input_sel); static const struct snd_kcontrol_new alc5632_auxout_mux_controls = SOC_DAPM_ENUM("AuxOut Mux", alc5632_aux_out_input_enum); /* speaker output mux */ static SOC_ENUM_SINGLE_DECL(alc5632_spkout_input_enum, ALC5632_OUTPUT_MIXER_CTRL, 10, alc5632_spkout_input_sel); static const struct snd_kcontrol_new alc5632_spkout_mux_controls = SOC_DAPM_ENUM("SpeakerOut Mux", alc5632_spkout_input_enum); /* headphone left output mux */ static SOC_ENUM_SINGLE_DECL(alc5632_hpl_out_input_enum, ALC5632_OUTPUT_MIXER_CTRL, 9, alc5632_hpl_out_input_sel); static const struct snd_kcontrol_new alc5632_hpl_out_mux_controls = SOC_DAPM_ENUM("Left Headphone Mux", alc5632_hpl_out_input_enum);
SOC_SINGLE("Store DC Offset Switch", WM8731_APDIGI, 4, 1, 0), SOC_SINGLE_BOOL_EXT("Playback Deemphasis Switch", 0, wm8731_get_deemph, wm8731_put_deemph), }; /* Output Mixer */ static const struct snd_kcontrol_new wm8731_output_mixer_controls[] = { SOC_DAPM_SINGLE("Line Bypass Switch", WM8731_APANA, 3, 1, 0), SOC_DAPM_SINGLE("Mic Sidetone Switch", WM8731_APANA, 5, 1, 0), SOC_DAPM_SINGLE("HiFi Playback Switch", WM8731_APANA, 4, 1, 0), }; /* Input mux */ static const struct snd_kcontrol_new wm8731_input_mux_controls = SOC_DAPM_ENUM("Input Select", wm8731_insel_enum); static const struct snd_soc_dapm_widget wm8731_dapm_widgets[] = { SND_SOC_DAPM_SUPPLY("ACTIVE",WM8731_ACTIVE, 0, 0, NULL, 0), SND_SOC_DAPM_SUPPLY("OSC", WM8731_PWR, 5, 1, NULL, 0), SND_SOC_DAPM_MIXER("Output Mixer", WM8731_PWR, 4, 1, &wm8731_output_mixer_controls[0], ARRAY_SIZE(wm8731_output_mixer_controls)), SND_SOC_DAPM_DAC("DAC", "HiFi Playback", WM8731_PWR, 3, 1), SND_SOC_DAPM_OUTPUT("LOUT"), SND_SOC_DAPM_OUTPUT("LHPOUT"), SND_SOC_DAPM_OUTPUT("ROUT"), SND_SOC_DAPM_OUTPUT("RHPOUT"), SND_SOC_DAPM_ADC("ADC", "HiFi Capture", WM8731_PWR, 2, 1), SND_SOC_DAPM_MUX("Input Mux", SND_SOC_NOPM, 0, 0, &wm8731_input_mux_controls), SND_SOC_DAPM_PGA("Line Input", WM8731_PWR, 0, 1, NULL, 0),
"HPOUT1L", "HPOUT1R", "EPOUT", "SPKOUT", "SPKDAT1L", "SPKDAT1R", }; static const unsigned int wm8997_aec_loopback_values[] = { 0, 1, 4, 6, 8, 9, }; static const struct soc_enum wm8997_aec_loopback = SOC_VALUE_ENUM_SINGLE(ARIZONA_DAC_AEC_CONTROL_1, ARIZONA_AEC_LOOPBACK_SRC_SHIFT, 0xf, ARRAY_SIZE(wm8997_aec_loopback_texts), wm8997_aec_loopback_texts, wm8997_aec_loopback_values); static const struct snd_kcontrol_new wm8997_aec_loopback_mux = SOC_DAPM_ENUM("AEC Loopback", wm8997_aec_loopback); static const struct snd_soc_dapm_widget wm8997_dapm_widgets[] = { SND_SOC_DAPM_SUPPLY("SYSCLK", ARIZONA_SYSTEM_CLOCK_1, ARIZONA_SYSCLK_ENA_SHIFT, 0, wm8997_sysclk_ev, SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_PRE_PMD), SND_SOC_DAPM_SUPPLY("ASYNCCLK", ARIZONA_ASYNC_CLOCK_1, ARIZONA_ASYNC_CLK_ENA_SHIFT, 0, NULL, 0), SND_SOC_DAPM_SUPPLY("OPCLK", ARIZONA_OUTPUT_SYSTEM_CLOCK, ARIZONA_OPCLK_ENA_SHIFT, 0, NULL, 0), SND_SOC_DAPM_SUPPLY("ASYNCOPCLK", ARIZONA_OUTPUT_ASYNC_CLOCK, ARIZONA_OPCLK_ASYNC_ENA_SHIFT, 0, NULL, 0), SND_SOC_DAPM_REGULATOR_SUPPLY("DBVDD2", 0, 0), SND_SOC_DAPM_REGULATOR_SUPPLY("CPVDD", 20, 0), SND_SOC_DAPM_REGULATOR_SUPPLY("MICVDD", 0, SND_SOC_DAPM_REGULATOR_BYPASS),
SOC_DAPM_SINGLE("Left Bypass Switch", WM8971_ROUTM1, 7, 1, 0), SOC_DAPM_SINGLE("Playback Switch", WM8971_ROUTM2, 8, 1, 0), SOC_DAPM_SINGLE("Right Bypass Switch", WM8971_ROUTM2, 7, 1, 0), }; /* Mono Mixer */ static const struct snd_kcontrol_new wm8971_mono_mixer_controls[] = { SOC_DAPM_SINGLE("Left Playback Switch", WM8971_MOUTM1, 8, 1, 0), SOC_DAPM_SINGLE("Left Bypass Switch", WM8971_MOUTM1, 7, 1, 0), SOC_DAPM_SINGLE("Right Playback Switch", WM8971_MOUTM2, 8, 1, 0), SOC_DAPM_SINGLE("Right Bypass Switch", WM8971_MOUTM2, 7, 1, 0), }; /* Left Line Mux */ static const struct snd_kcontrol_new wm8971_left_line_controls = SOC_DAPM_ENUM("Route", wm8971_enum[8]); /* Right Line Mux */ static const struct snd_kcontrol_new wm8971_right_line_controls = SOC_DAPM_ENUM("Route", wm8971_enum[9]); /* Left PGA Mux */ static const struct snd_kcontrol_new wm8971_left_pga_controls = SOC_DAPM_ENUM("Route", wm8971_enum[10]); /* Right PGA Mux */ static const struct snd_kcontrol_new wm8971_right_pga_controls = SOC_DAPM_ENUM("Route", wm8971_enum[11]); /* Mono ADC Mux */ static const struct snd_kcontrol_new wm8971_monomux_controls =
{ "SDIN1-L", "SDIN1-R", "SDIN2-L", "SDIN2-R", "SDIN3-L", "SDIN3-R", "Ground (0)", "nc" }; static const struct soc_enum tas5086_dapm_input_mux_enum[] = { SOC_ENUM_SINGLE(TAS5086_INPUT_MUX, 20, 8, tas5086_dapm_sdin_texts), SOC_ENUM_SINGLE(TAS5086_INPUT_MUX, 16, 8, tas5086_dapm_sdin_texts), SOC_ENUM_SINGLE(TAS5086_INPUT_MUX, 12, 8, tas5086_dapm_sdin_texts), SOC_ENUM_SINGLE(TAS5086_INPUT_MUX, 8, 8, tas5086_dapm_sdin_texts), SOC_ENUM_SINGLE(TAS5086_INPUT_MUX, 4, 8, tas5086_dapm_sdin_texts), SOC_ENUM_SINGLE(TAS5086_INPUT_MUX, 0, 8, tas5086_dapm_sdin_texts), }; static const struct snd_kcontrol_new tas5086_dapm_input_mux_controls[] = { SOC_DAPM_ENUM("Channel 1 input", tas5086_dapm_input_mux_enum[0]), SOC_DAPM_ENUM("Channel 2 input", tas5086_dapm_input_mux_enum[1]), SOC_DAPM_ENUM("Channel 3 input", tas5086_dapm_input_mux_enum[2]), SOC_DAPM_ENUM("Channel 4 input", tas5086_dapm_input_mux_enum[3]), SOC_DAPM_ENUM("Channel 5 input", tas5086_dapm_input_mux_enum[4]), SOC_DAPM_ENUM("Channel 6 input", tas5086_dapm_input_mux_enum[5]), }; /* Output mux controls */ static const char *tas5086_dapm_channel_texts[] = { "Channel 1 Mux", "Channel 2 Mux", "Channel 3 Mux", "Channel 4 Mux", "Channel 5 Mux", "Channel 6 Mux" }; static const struct soc_enum tas5086_dapm_output_mux_enum[] = { SOC_ENUM_SINGLE(TAS5086_PWM_OUTPUT_MUX, 20, 6, tas5086_dapm_channel_texts), SOC_ENUM_SINGLE(TAS5086_PWM_OUTPUT_MUX, 16, 6, tas5086_dapm_channel_texts),
ARIZONA_ADC_DIGITAL_VOLUME_1L, ARIZONA_IN1L_SRC_SHIFT, wm8998_in1mux_texts); static const SOC_ENUM_SINGLE_DECL(wm8998_in1muxr_enum, ARIZONA_ADC_DIGITAL_VOLUME_1R, ARIZONA_IN1R_SRC_SHIFT, wm8998_in1mux_texts); static const SOC_ENUM_SINGLE_DECL(wm8998_in2mux_enum, ARIZONA_ADC_DIGITAL_VOLUME_2L, ARIZONA_IN2L_SRC_SHIFT, wm8998_in2mux_texts); static const struct snd_kcontrol_new wm8998_in1mux[2] = { SOC_DAPM_ENUM("Route", wm8998_in1muxl_enum), SOC_DAPM_ENUM("Route", wm8998_in1muxr_enum), }; static const struct snd_kcontrol_new wm8998_in2mux = SOC_DAPM_ENUM("Route", wm8998_in2mux_enum); static DECLARE_TLV_DB_SCALE(ana_tlv, 0, 100, 0); static DECLARE_TLV_DB_SCALE(eq_tlv, -1200, 100, 0); static DECLARE_TLV_DB_SCALE(digital_tlv, -6400, 50, 0); static DECLARE_TLV_DB_SCALE(noise_tlv, 0, 600, 0); static DECLARE_TLV_DB_SCALE(ng_tlv, -10200, 600, 0); #define WM8998_NG_SRC(name, base) \ SOC_SINGLE(name " NG HPOUTL Switch", base, 0, 1, 0), \ SOC_SINGLE(name " NG HPOUTR Switch", base, 1, 1, 0), \
static const DECLARE_TLV_DB_SCALE(attn_tlv, -6300, 100, 1); static const char * const cs42l73_pgaa_text[] = { "Line A", "Mic 1" }; static const char * const cs42l73_pgab_text[] = { "Line B", "Mic 2" }; static const struct soc_enum pgaa_enum = SOC_ENUM_SINGLE(CS42L73_ADCIPC, 3, ARRAY_SIZE(cs42l73_pgaa_text), cs42l73_pgaa_text); static const struct soc_enum pgab_enum = SOC_ENUM_SINGLE(CS42L73_ADCIPC, 7, ARRAY_SIZE(cs42l73_pgab_text), cs42l73_pgab_text); static const struct snd_kcontrol_new pgaa_mux = SOC_DAPM_ENUM("Left Analog Input Capture Mux", pgaa_enum); static const struct snd_kcontrol_new pgab_mux = SOC_DAPM_ENUM("Right Analog Input Capture Mux", pgab_enum); static const struct snd_kcontrol_new input_left_mixer[] = { SOC_DAPM_SINGLE("ADC Left Input", CS42L73_PWRCTL1, 5, 1, 1), SOC_DAPM_SINGLE("DMIC Left Input", CS42L73_PWRCTL1, 4, 1, 1), }; static const struct snd_kcontrol_new input_right_mixer[] = { SOC_DAPM_SINGLE("ADC Right Input", CS42L73_PWRCTL1, 7, 1, 1), SOC_DAPM_SINGLE("DMIC Right Input", CS42L73_PWRCTL1,
0); break; } return 0; } static const char *lin_text[] = { "IN1L", "IN2L", "IN3L" }; static SOC_ENUM_SINGLE_DECL(lin_enum, WM8904_ANALOGUE_LEFT_INPUT_1, 2, lin_text); static const struct snd_kcontrol_new lin_mux = SOC_DAPM_ENUM("Left Capture Mux", lin_enum); static SOC_ENUM_SINGLE_DECL(lin_inv_enum, WM8904_ANALOGUE_LEFT_INPUT_1, 4, lin_text); static const struct snd_kcontrol_new lin_inv_mux = SOC_DAPM_ENUM("Left Capture Inveting Mux", lin_inv_enum); static const char *rin_text[] = { "IN1R", "IN2R", "IN3R" }; static SOC_ENUM_SINGLE_DECL(rin_enum, WM8904_ANALOGUE_RIGHT_INPUT_1, 2, rin_text); static const struct snd_kcontrol_new rin_mux =