/* DAC switch control */ SOC_DOUBLE("DAC1 Switch", AD193X_DAC_CHNL_MUTE, AD193X_DACL1_MUTE, AD193X_DACR1_MUTE, 1, 1), SOC_DOUBLE("DAC2 Switch", AD193X_DAC_CHNL_MUTE, AD193X_DACL2_MUTE, AD193X_DACR2_MUTE, 1, 1), SOC_DOUBLE("DAC3 Switch", AD193X_DAC_CHNL_MUTE, AD193X_DACL3_MUTE, AD193X_DACR3_MUTE, 1, 1), SOC_DOUBLE("DAC4 Switch", AD193X_DAC_CHNL_MUTE, AD193X_DACL4_MUTE, AD193X_DACR4_MUTE, 1, 1), /* ADC high-pass filter */ SOC_SINGLE("ADC High Pass Filter Switch", AD193X_ADC_CTRL0, AD193X_ADC_HIGHPASS_FILTER, 1, 0), /* DAC de-emphasis */ SOC_ENUM("Playback Deemphasis", ad193x_deemp_enum), }; static const struct snd_soc_dapm_widget ad193x_dapm_widgets[] = { SND_SOC_DAPM_DAC("DAC", "Playback", SND_SOC_NOPM, 0, 0), SND_SOC_DAPM_PGA("DAC Output", AD193X_DAC_CTRL0, 0, 1, NULL, 0), SND_SOC_DAPM_ADC("ADC", "Capture", SND_SOC_NOPM, 0, 0), SND_SOC_DAPM_SUPPLY("PLL_PWR", AD193X_PLL_CLK_CTRL0, 0, 1, NULL, 0), SND_SOC_DAPM_SUPPLY("ADC_PWR", AD193X_ADC_CTRL0, 0, 1, NULL, 0), SND_SOC_DAPM_SUPPLY("SYSCLK", AD193X_PLL_CLK_CTRL0, 7, 0, NULL, 0), SND_SOC_DAPM_VMID("VMID"), SND_SOC_DAPM_OUTPUT("DAC1OUT"), SND_SOC_DAPM_OUTPUT("DAC2OUT"), SND_SOC_DAPM_OUTPUT("DAC3OUT"), SND_SOC_DAPM_OUTPUT("DAC4OUT"), SND_SOC_DAPM_INPUT("ADC1IN"),
"1024", "2048", }; static const struct soc_enum wm8523_zc_count = SOC_ENUM_SINGLE(WM8523_ZERO_DETECT, 0, 2, wm8523_zd_count_text); static const struct snd_kcontrol_new wm8523_controls[] = { SOC_DOUBLE_R_TLV("Playback Volume", WM8523_DAC_GAINL, WM8523_DAC_GAINR, 0, 448, 0, dac_tlv), SOC_SINGLE("ZC Switch", WM8523_DAC_CTRL3, 4, 1, 0), SOC_SINGLE("Playback Deemphasis Switch", WM8523_AIF_CTRL1, 8, 1, 0), SOC_DOUBLE("Playback Switch", WM8523_DAC_CTRL3, 2, 3, 1, 1), SOC_SINGLE("Volume Ramp Up Switch", WM8523_DAC_CTRL3, 1, 1, 0), SOC_SINGLE("Volume Ramp Down Switch", WM8523_DAC_CTRL3, 0, 1, 0), SOC_ENUM("Zero Detect Count", wm8523_zc_count), }; static const struct snd_soc_dapm_widget wm8523_dapm_widgets[] = { SND_SOC_DAPM_DAC("DAC", "Playback", SND_SOC_NOPM, 0, 0), SND_SOC_DAPM_OUTPUT("LINEVOUTL"), SND_SOC_DAPM_OUTPUT("LINEVOUTR"), }; static const struct snd_soc_dapm_route wm8523_dapm_routes[] = { { "LINEVOUTL", NULL, "DAC" }, { "LINEVOUTR", NULL, "DAC" }, }; static struct { int value;
ARIZONA_MIXER_CONTROLS("DRC1L", ARIZONA_DRC1LMIX_INPUT_1_SOURCE), ARIZONA_MIXER_CONTROLS("DRC1R", ARIZONA_DRC1RMIX_INPUT_1_SOURCE), ARIZONA_MIXER_CONTROLS("DRC2L", ARIZONA_DRC2LMIX_INPUT_1_SOURCE), ARIZONA_MIXER_CONTROLS("DRC2R", ARIZONA_DRC2RMIX_INPUT_1_SOURCE), SND_SOC_BYTES_MASK("DRC1", ARIZONA_DRC1_CTRL1, 5, ARIZONA_DRC1R_ENA | ARIZONA_DRC1L_ENA), SND_SOC_BYTES_MASK("DRC2", ARIZONA_DRC2_CTRL1, 5, ARIZONA_DRC2R_ENA | ARIZONA_DRC2L_ENA), ARIZONA_MIXER_CONTROLS("LHPF1", ARIZONA_HPLP1MIX_INPUT_1_SOURCE), ARIZONA_MIXER_CONTROLS("LHPF2", ARIZONA_HPLP2MIX_INPUT_1_SOURCE), ARIZONA_MIXER_CONTROLS("LHPF3", ARIZONA_HPLP3MIX_INPUT_1_SOURCE), ARIZONA_MIXER_CONTROLS("LHPF4", ARIZONA_HPLP4MIX_INPUT_1_SOURCE), SOC_ENUM("LHPF1 Mode", arizona_lhpf1_mode), SOC_ENUM("LHPF2 Mode", arizona_lhpf2_mode), SOC_ENUM("LHPF3 Mode", arizona_lhpf3_mode), SOC_ENUM("LHPF4 Mode", arizona_lhpf4_mode), ARIZONA_MIXER_CONTROLS("Mic", ARIZONA_MICMIX_INPUT_1_SOURCE), ARIZONA_MIXER_CONTROLS("Noise", ARIZONA_NOISEMIX_INPUT_1_SOURCE), SOC_SINGLE_TLV("Noise Generator Volume", ARIZONA_COMFORT_NOISE_GENERATOR, ARIZONA_NOISE_GEN_GAIN_SHIFT, 0x16, 0, noise_tlv), ARIZONA_MIXER_CONTROLS("HPOUT1L", ARIZONA_OUT1LMIX_INPUT_1_SOURCE), ARIZONA_MIXER_CONTROLS("HPOUT1R", ARIZONA_OUT1RMIX_INPUT_1_SOURCE), ARIZONA_MIXER_CONTROLS("HPOUT2L", ARIZONA_OUT2LMIX_INPUT_1_SOURCE), ARIZONA_MIXER_CONTROLS("HPOUT2R", ARIZONA_OUT2RMIX_INPUT_1_SOURCE), ARIZONA_MIXER_CONTROLS("EPOUT", ARIZONA_OUT3LMIX_INPUT_1_SOURCE),
ARIZONA_IN1R_PGA_VOL_SHIFT, 0x40, 0x5f, 0, ana_tlv), SOC_SINGLE_RANGE_TLV("IN2L Volume", ARIZONA_IN2L_CONTROL, ARIZONA_IN2L_PGA_VOL_SHIFT, 0x40, 0x5f, 0, ana_tlv), SOC_SINGLE_RANGE_TLV("IN2R Volume", ARIZONA_IN2R_CONTROL, ARIZONA_IN2R_PGA_VOL_SHIFT, 0x40, 0x5f, 0, ana_tlv), SOC_SINGLE_TLV("IN1L Digital Volume", ARIZONA_ADC_DIGITAL_VOLUME_1L, ARIZONA_IN1L_DIG_VOL_SHIFT, 0xbf, 0, digital_tlv), SOC_SINGLE_TLV("IN1R Digital Volume", ARIZONA_ADC_DIGITAL_VOLUME_1R, ARIZONA_IN1R_DIG_VOL_SHIFT, 0xbf, 0, digital_tlv), SOC_SINGLE_TLV("IN2L Digital Volume", ARIZONA_ADC_DIGITAL_VOLUME_2L, ARIZONA_IN2L_DIG_VOL_SHIFT, 0xbf, 0, digital_tlv), SOC_SINGLE_TLV("IN2R Digital Volume", ARIZONA_ADC_DIGITAL_VOLUME_2R, ARIZONA_IN2R_DIG_VOL_SHIFT, 0xbf, 0, digital_tlv), SOC_ENUM("Input Ramp Up", arizona_in_vi_ramp), SOC_ENUM("Input Ramp Down", arizona_in_vd_ramp), ARIZONA_MIXER_CONTROLS("EQ1", ARIZONA_EQ1MIX_INPUT_1_SOURCE), ARIZONA_MIXER_CONTROLS("EQ2", ARIZONA_EQ2MIX_INPUT_1_SOURCE), ARIZONA_MIXER_CONTROLS("EQ3", ARIZONA_EQ3MIX_INPUT_1_SOURCE), ARIZONA_MIXER_CONTROLS("EQ4", ARIZONA_EQ4MIX_INPUT_1_SOURCE), ARIZONA_EQ_CONTROL("EQ1 Coefficients", ARIZONA_EQ1_2), SOC_SINGLE_TLV("EQ1 B1 Volume", ARIZONA_EQ1_1, ARIZONA_EQ1_B1_GAIN_SHIFT, 24, 0, eq_tlv), SOC_SINGLE_TLV("EQ1 B2 Volume", ARIZONA_EQ1_1, ARIZONA_EQ1_B2_GAIN_SHIFT, 24, 0, eq_tlv), SOC_SINGLE_TLV("EQ1 B3 Volume", ARIZONA_EQ1_1, ARIZONA_EQ1_B3_GAIN_SHIFT, 24, 0, eq_tlv), SOC_SINGLE_TLV("EQ1 B4 Volume", ARIZONA_EQ1_2, ARIZONA_EQ1_B4_GAIN_SHIFT,
0, 255, 0, dac_tlv), SOC_DOUBLE_R_TLV("Headphone Playback Volume", WM8960_LOUT1, WM8960_ROUT1, 0, 127, 0, out_tlv), SOC_DOUBLE_R("Headphone Playback ZC Switch", WM8960_LOUT1, WM8960_ROUT1, 7, 1, 0), SOC_DOUBLE_R_TLV("Speaker Playback Volume", WM8960_LOUT2, WM8960_ROUT2, 0, 127, 0, out_tlv), SOC_DOUBLE_R("Speaker Playback ZC Switch", WM8960_LOUT2, WM8960_ROUT2, 7, 1, 0), SOC_SINGLE("Speaker DC Volume", WM8960_CLASSD3, 3, 5, 0), SOC_SINGLE("Speaker AC Volume", WM8960_CLASSD3, 0, 5, 0), SOC_SINGLE("PCM Playback -6dB Switch", WM8960_DACCTL1, 7, 1, 0), SOC_ENUM("ADC Polarity", wm8960_enum[1]), SOC_ENUM("Playback De-emphasis", wm8960_enum[0]), SOC_SINGLE("ADC High Pass Filter Switch", WM8960_DACCTL1, 0, 1, 0), SOC_ENUM("DAC Polarity", wm8960_enum[2]), SOC_ENUM("3D Filter Upper Cut-Off", wm8960_enum[3]), SOC_ENUM("3D Filter Lower Cut-Off", wm8960_enum[4]), SOC_SINGLE("3D Volume", WM8960_3D, 1, 15, 0), SOC_SINGLE("3D Switch", WM8960_3D, 0, 1, 0), SOC_ENUM("ALC Function", wm8960_enum[5]), SOC_SINGLE("ALC Max Gain", WM8960_ALC1, 4, 7, 0), SOC_SINGLE("ALC Target", WM8960_ALC1, 0, 15, 1), SOC_SINGLE("ALC Min Gain", WM8960_ALC2, 4, 7, 0), SOC_SINGLE("ALC Hold Time", WM8960_ALC2, 0, 15, 0),
SOC_ENUM_SINGLE(WM8988_ADCDAC, 1, 4, deemph_txt); static const char *adcpol_txt[] = {"Normal", "L Invert", "R Invert", "L + R Invert"}; static const struct soc_enum adcpol = SOC_ENUM_SINGLE(WM8988_ADCDAC, 5, 4, adcpol_txt); static const DECLARE_TLV_DB_SCALE(pga_tlv, -1725, 75, 0); static const DECLARE_TLV_DB_SCALE(adc_tlv, -9750, 50, 1); static const DECLARE_TLV_DB_SCALE(dac_tlv, -12750, 50, 1); static const DECLARE_TLV_DB_SCALE(out_tlv, -12100, 100, 1); static const DECLARE_TLV_DB_SCALE(bypass_tlv, -1500, 300, 0); static const struct snd_kcontrol_new wm8988_snd_controls[] = { SOC_ENUM("Bass Boost", bass_boost), SOC_ENUM("Bass Filter", bass_filter), SOC_SINGLE("Bass Volume", WM8988_BASS, 0, 15, 1), SOC_SINGLE("Treble Volume", WM8988_TREBLE, 0, 15, 0), SOC_ENUM("Treble Cut-off", treble), SOC_SINGLE("3D Switch", WM8988_3D, 0, 1, 0), SOC_SINGLE("3D Volume", WM8988_3D, 1, 15, 0), SOC_ENUM("3D Lower Cut-off", stereo_3d_lc), SOC_ENUM("3D Upper Cut-off", stereo_3d_uc), SOC_ENUM("3D Mode", stereo_3d_func), SOC_SINGLE("ALC Capture Target Volume", WM8988_ALC1, 0, 7, 0), SOC_SINGLE("ALC Capture Max Volume", WM8988_ALC1, 4, 7, 0), SOC_ENUM("ALC Capture Function", alc_func),
"60%", "66.7%", "73.3%", "80%", "86.7%", "93.3%", "100%" }; static const SOC_ENUM_SINGLE_DECL(depth_3d, WM8985_3D_CONTROL, 0, depth_3d_text); static const struct snd_kcontrol_new wm8985_snd_controls[] = { SOC_SINGLE("Digital Loopback Switch", WM8985_COMPANDING_CONTROL, 0, 1, 0), SOC_ENUM("ALC Capture Function", alc_sel), SOC_SINGLE_TLV("ALC Capture Max Volume", WM8985_ALC_CONTROL_1, 3, 7, 0, alc_max_tlv), SOC_SINGLE_TLV("ALC Capture Min Volume", WM8985_ALC_CONTROL_1, 0, 7, 0, alc_min_tlv), SOC_SINGLE_TLV("ALC Capture Target Volume", WM8985_ALC_CONTROL_2, 0, 15, 0, alc_tar_tlv), SOC_SINGLE("ALC Capture Attack", WM8985_ALC_CONTROL_3, 0, 10, 0), SOC_SINGLE("ALC Capture Hold", WM8985_ALC_CONTROL_2, 4, 10, 0), SOC_SINGLE("ALC Capture Decay", WM8985_ALC_CONTROL_3, 4, 10, 0), SOC_ENUM("ALC Mode", alc_mode), SOC_SINGLE("ALC Capture NG Switch", WM8985_NOISE_GATE, 3, 1, 0), SOC_SINGLE("ALC Capture NG Threshold", WM8985_NOISE_GATE, 0, 7, 1),
tas5707_volume_slew_step_values); static const struct snd_kcontrol_new tas5707_controls[] = { SOC_SINGLE_TLV("Master Volume", TAS571X_MVOL_REG, 0, 0xff, 1, tas5707_volume_tlv), SOC_DOUBLE_R_TLV("Speaker Volume", TAS571X_CH1_VOL_REG, TAS571X_CH2_VOL_REG, 0, 0xff, 1, tas5707_volume_tlv), SOC_DOUBLE("Speaker Switch", TAS571X_SOFT_MUTE_REG, TAS571X_SOFT_MUTE_CH1_SHIFT, TAS571X_SOFT_MUTE_CH2_SHIFT, 1, 1), SOC_ENUM("Slew Rate Steps", tas5707_volume_slew_step_enum), BIQUAD_COEFS("CH1 - Biquad 0", TAS5707_CH1_BQ0_REG), BIQUAD_COEFS("CH1 - Biquad 1", TAS5707_CH1_BQ1_REG), BIQUAD_COEFS("CH1 - Biquad 2", TAS5707_CH1_BQ2_REG), BIQUAD_COEFS("CH1 - Biquad 3", TAS5707_CH1_BQ3_REG), BIQUAD_COEFS("CH1 - Biquad 4", TAS5707_CH1_BQ4_REG), BIQUAD_COEFS("CH1 - Biquad 5", TAS5707_CH1_BQ5_REG), BIQUAD_COEFS("CH1 - Biquad 6", TAS5707_CH1_BQ6_REG), BIQUAD_COEFS("CH2 - Biquad 0", TAS5707_CH2_BQ0_REG), BIQUAD_COEFS("CH2 - Biquad 1", TAS5707_CH2_BQ1_REG), BIQUAD_COEFS("CH2 - Biquad 2", TAS5707_CH2_BQ2_REG), BIQUAD_COEFS("CH2 - Biquad 3", TAS5707_CH2_BQ3_REG), BIQUAD_COEFS("CH2 - Biquad 4", TAS5707_CH2_BQ4_REG), BIQUAD_COEFS("CH2 - Biquad 5", TAS5707_CH2_BQ5_REG),
static const SNDRV_CTL_TLVD_DECLARE_DB_RANGE(max98088_micboost_tlv, 0, 1, TLV_DB_SCALE_ITEM(0, 2000, 0), 2, 2, TLV_DB_SCALE_ITEM(3000, 0, 0), ); static const struct snd_kcontrol_new max9867_snd_controls[] = { SOC_DOUBLE_R("Master Playback Volume", MAX9867_LEFTVOL, MAX9867_RIGHTVOL, 0, 63, 1), SOC_DOUBLE_R_TLV("Capture Volume", MAX9867_LEFTMICGAIN, MAX9867_RIGHTMICGAIN, 0, 15, 1, max9860_capture_tlv), SOC_DOUBLE_R_TLV("Mic Volume", MAX9867_LEFTMICGAIN, MAX9867_RIGHTMICGAIN, 0, 31, 1, max9860_mic_tlv), SOC_DOUBLE_R_TLV("Mic Boost Volume", MAX9867_LEFTMICGAIN, MAX9867_RIGHTMICGAIN, 5, 3, 0, max98088_micboost_tlv), SOC_ENUM("Digital Sidetone Src", max9867_sidetone), SOC_SINGLE("Sidetone Volume", MAX9867_DACGAIN, 0, 31, 1), SOC_SINGLE("DAC Volume", MAX9867_DACLEVEL, 4, 3, 0), SOC_SINGLE("DAC Attenuation", MAX9867_DACLEVEL, 0, 15, 1), SOC_SINGLE_TLV("ADC Left Volume", MAX9867_ADCLEVEL, 4, 15, 1, max9860_adc_left_tlv), 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 const char *wm8510_companding[] = { "Off", "NC", "u-law", "A-law" }; static const char *wm8510_deemp[] = { "None", "32kHz", "44.1kHz", "48kHz" }; static const char *wm8510_alc[] = { "ALC", "Limiter" }; static const struct soc_enum wm8510_enum[] = { SOC_ENUM_SINGLE(WM8510_COMP, 1, 4, wm8510_companding), /* adc */ SOC_ENUM_SINGLE(WM8510_COMP, 3, 4, wm8510_companding), /* dac */ SOC_ENUM_SINGLE(WM8510_DAC, 4, 4, wm8510_deemp), SOC_ENUM_SINGLE(WM8510_ALC3, 8, 2, wm8510_alc), }; static const struct snd_kcontrol_new wm8510_snd_controls[] = { SOC_SINGLE("Digital Loopback Switch", WM8510_COMP, 0, 1, 0), SOC_ENUM("DAC Companding", wm8510_enum[1]), SOC_ENUM("ADC Companding", wm8510_enum[0]), SOC_ENUM("Playback De-emphasis", wm8510_enum[2]), SOC_SINGLE("DAC Inversion Switch", WM8510_DAC, 0, 1, 0), SOC_SINGLE("Master Playback Volume", WM8510_DACVOL, 0, 127, 0), SOC_SINGLE("High Pass Filter Switch", WM8510_ADC, 8, 1, 0), SOC_SINGLE("High Pass Cut Off", WM8510_ADC, 4, 7, 0), SOC_SINGLE("ADC Inversion Switch", WM8510_COMP, 0, 1, 0), SOC_SINGLE("Capture Volume", WM8510_ADCVOL, 0, 127, 0), SOC_SINGLE("DAC Playback Limiter Switch", WM8510_DACLIM1, 8, 1, 0), SOC_SINGLE("DAC Playback Limiter Decay", WM8510_DACLIM1, 4, 15, 0),
MAX98925_SPK_GAIN_SHIFT, (1<<MAX98925_SPK_GAIN_WIDTH)-1, 0, max98925_spk_vol_get, max98925_spk_vol_put, max98925_spk_tlv), SOC_SINGLE_EXT("Speaker Ramp", 0, 0, 1, 0, max98925_spk_ramp_get, max98925_spk_ramp_put), SOC_SINGLE_EXT("Speaker ZCD", 0, 0, 1, 0, max98925_spk_zcd_get, max98925_spk_zcd_put), SOC_SINGLE_EXT("ALC Enable", 0, 0, 1, 0, max98925_alc_en_get, max98925_alc_en_put), SOC_SINGLE_EXT("ALC Threshold", 0, 0, (1<<MAX98925_ALC_TH_WIDTH)-1, 0, max98925_alc_threshold_get, max98925_alc_threshold_put), SOC_ENUM("Boost Output Voltage", max98925_boost_voltage_enum), }; static int max98925_add_widgets(struct snd_soc_codec *codec) { int ret; ret = snd_soc_add_codec_controls(codec, max98925_snd_controls, ARRAY_SIZE(max98925_snd_controls)); return 0; } /* codec sample rate and n/m dividers parameter table */ static const struct { u32 rate;
SOC_DOUBLE_R("Capture Volume ZC Switch", ACS42200_INVOLL, ACS42200_INVOLR, 6, 1, 0), SOC_DOUBLE_R("Capture Switch", ACS42200_INVOLL, ACS42200_INVOLR, 7, 1, 0), SOC_DOUBLE_R_TLV("Playback Volume", ACS42200_DACVOLL, ACS42200_DACVOLR, 0, 255, 0, dac_tlv), SOC_DOUBLE_R_TLV("Headphone Playback Volume", ACS42200_HPVOLL, ACS42200_HPVOLR, 0, 127, 0, out_tlv), SOC_SINGLE("Headphone Playback ZC Switch", ACS42200_CTL, 0, 1, 0), SOC_DOUBLE_R_TLV("Speaker Playback Volume", ACS42200_SPKVOLL, ACS42200_SPKVOLR, 0, 127, 0, out_tlv), SOC_ENUM("Speaker Playback Off Switch", acs42200_enum[6]), SOC_SINGLE("Speaker DC Volume", WM8960_CLASSD3, 3, 5, 0), SOC_SINGLE("Speaker AC Volume", WM8960_CLASSD3, 0, 5, 0), SOC_SINGLE("PCM Playback -6dB Switch", WM8960_DACCTL1, 7, 1, 0), SOC_ENUM("ADC Polarity", acs42200_enum[1]), SOC_ENUM("Playback De-emphasis", acs42200_enum[0]), SOC_SINGLE("ADC High Pass Filter Switch", ACS42200_CNVRTR0, 0, 3, 1), SOC_ENUM("Record channels", acs42200_enum[5]), SOC_ENUM("DAC Polarity", acs42200_enum[2]), SOC_SINGLE("3D Volume", WM8960_3D, 1, 15, 0), SOC_SINGLE("3D Switch", WM8960_3D, 0, 1, 0), SOC_ENUM("ALC Function", acs42200_enum[3]),
static const char *wm8974_auxmode_text[] = { "Buffer", "Mixer" }; static const struct soc_enum wm8974_auxmode = SOC_ENUM_SINGLE(WM8974_INPUT, 3, 2, wm8974_auxmode_text); static const DECLARE_TLV_DB_SCALE(digital_tlv, -12750, 50, 1); static const DECLARE_TLV_DB_SCALE(eq_tlv, -1200, 100, 0); static const DECLARE_TLV_DB_SCALE(inpga_tlv, -1200, 75, 0); static const DECLARE_TLV_DB_SCALE(spk_tlv, -5700, 100, 0); static const struct snd_kcontrol_new wm8974_snd_controls[] = { SOC_SINGLE("Digital Loopback Switch", WM8974_COMP, 0, 1, 0), SOC_ENUM("DAC Companding", wm8974_enum[1]), SOC_ENUM("ADC Companding", wm8974_enum[0]), SOC_ENUM("Playback De-emphasis", wm8974_enum[2]), SOC_SINGLE("DAC Inversion Switch", WM8974_DAC, 0, 1, 0), SOC_SINGLE_TLV("PCM Volume", WM8974_DACVOL, 0, 255, 0, digital_tlv), SOC_SINGLE("High Pass Filter Switch", WM8974_ADC, 8, 1, 0), SOC_SINGLE("High Pass Cut Off", WM8974_ADC, 4, 7, 0), SOC_SINGLE("ADC Inversion Switch", WM8974_ADC, 0, 1, 0), SOC_SINGLE_TLV("Capture Volume", WM8974_ADCVOL, 0, 255, 0, digital_tlv), SOC_ENUM("Equaliser Function", wm8974_enum[3]), SOC_ENUM("EQ1 Cut Off", wm8974_enum[4]),
static const struct snd_kcontrol_new rt3261_rxdc_mux = SOC_DAPM_ENUM("RxDC sel", rt3261_rxdc_enum); static const char *rt3261_rxdp1_src[] = {"DAC1", "IF1_DAC"}; static const SOC_ENUM_SINGLE_DECL( rt3261_rxdp1_enum, RT3261_DUMMY_PR3F, 9, rt3261_rxdp1_src); static const struct snd_kcontrol_new rt3261_rxdp1_mux = SOC_DAPM_ENUM("RxDP1 sel", rt3261_rxdp1_enum); static const struct snd_kcontrol_new rt3261_dsp_snd_controls[] = { SOC_ENUM("RxDC input data", rt3261_rxdc_data_enum), SOC_ENUM("RxDP input data", rt3261_rxdp_data_enum), SOC_ENUM("TxDC input data", rt3261_txdc_data_enum), SOC_ENUM("TxDP input data", rt3261_txdp_data_enum), SOC_ENUM("SRC for RxDP", rt3261_src_rxdp_enum), SOC_ENUM("SRC for TxDP", rt3261_src_txdp_enum), /* AEC */ SOC_ENUM_EXT("DSP Function Switch", rt3261_dsp_enum, rt3261_dsp_get, rt3261_dsp_put), }; /*static int rt3261_dsp_patch_3(struct snd_soc_codec *codec) { struct rt3261_dsp_param param; int ret, i;
{ "CDCOUT", "CDCOUT Switch", "Voice CODEC PGA"}, }; static const char * const mc13783_3d_mixer[] = {"Stereo", "Phase Mix", "Mono", "Mono Mix"}; static SOC_ENUM_SINGLE_DECL(mc13783_enum_3d_mixer, MC13783_AUDIO_RX1, 16, mc13783_3d_mixer); static struct snd_kcontrol_new mc13783_control_list[] = { SOC_SINGLE("Loudspeaker enable", MC13783_AUDIO_RX0, 5, 1, 0), SOC_SINGLE("PCM Playback Volume", MC13783_AUDIO_RX1, 6, 15, 0), SOC_SINGLE("PCM Playback Switch", MC13783_AUDIO_RX1, 5, 1, 0), SOC_DOUBLE("PCM Capture Volume", MC13783_AUDIO_TX, 19, 14, 31, 0), SOC_ENUM("3D Control", mc13783_enum_3d_mixer), SOC_SINGLE("CDCOUT Switch", MC13783_AUDIO_RX0, 18, 1, 0), SOC_SINGLE("Earpiece Amp Switch", MC13783_AUDIO_RX0, 3, 1, 0), SOC_DOUBLE("Headset Amp Switch", MC13783_AUDIO_RX0, 10, 9, 1, 0), SOC_DOUBLE("Line out Amp Switch", MC13783_AUDIO_RX0, 16, 15, 1, 0), SOC_SINGLE("PCM Capture Mixin Switch", MC13783_AUDIO_RX0, 22, 1, 0), SOC_SINGLE("Line in Capture Mixin Switch", MC13783_AUDIO_RX0, 23, 1, 0), SOC_SINGLE("CODEC Capture Volume", MC13783_AUDIO_RX1, 1, 15, 0), SOC_SINGLE("CODEC Capture Mixin Switch", MC13783_AUDIO_RX0, 21, 1, 0), SOC_SINGLE("Line in Capture Volume", MC13783_AUDIO_RX1, 12, 15, 0), SOC_SINGLE("Line in Capture Switch", MC13783_AUDIO_RX1, 10, 1, 0),
SOC_DOUBLE_R("PCM Volume", WM8971_LDAC, WM8971_RDAC, 0, 255, 0), SOC_DOUBLE_R("Bypass Left Playback Volume", WM8971_LOUTM1, WM8971_LOUTM2, 4, 7, 1), SOC_DOUBLE_R("Bypass Right Playback Volume", WM8971_ROUTM1, WM8971_ROUTM2, 4, 7, 1), SOC_DOUBLE_R("Bypass Mono Playback Volume", WM8971_MOUTM1, WM8971_MOUTM2, 4, 7, 1), SOC_DOUBLE_R("Headphone Playback Volume", WM8971_LOUT1V, WM8971_ROUT1V, 0, 127, 0), SOC_DOUBLE_R("Speaker Playback Volume", WM8971_LOUT2V, WM8971_ROUT2V, 0, 127, 0), SOC_ENUM("Bass Boost", wm8971_enum[0]), SOC_ENUM("Bass Filter", wm8971_enum[1]), SOC_SINGLE("Bass Volume", WM8971_BASS, 0, 7, 1), SOC_SINGLE("Treble Volume", WM8971_TREBLE, 0, 7, 0), SOC_ENUM("Treble Cut-off", wm8971_enum[2]), SOC_SINGLE("Capture Filter Switch", WM8971_ADCDAC, 0, 1, 1), SOC_SINGLE("ALC Target Volume", WM8971_ALC1, 0, 7, 0), SOC_SINGLE("ALC Max Volume", WM8971_ALC1, 4, 7, 0), SOC_SINGLE("ALC Capture Target Volume", WM8971_ALC1, 0, 7, 0), SOC_SINGLE("ALC Capture Max Volume", WM8971_ALC1, 4, 7, 0), SOC_ENUM("ALC Capture Function", wm8971_enum[3]), SOC_SINGLE("ALC Capture ZC Switch", WM8971_ALC2, 7, 1, 0),
.info = sta32x_coefficient_info, \ .get = sta32x_coefficient_get,\ .put = sta32x_coefficient_put, \ .private_value = index | (5 << 16) } static const struct snd_kcontrol_new sta32x_snd_controls[] = { SOC_SINGLE_TLV("Master Volume", STA32X_MVOL, 0, 0xff, 1, mvol_tlv), SOC_SINGLE("Master Switch", STA32X_MMUTE, 0, 1, 1), SOC_SINGLE("Ch1 Switch", STA32X_MMUTE, 1, 1, 1), SOC_SINGLE("Ch2 Switch", STA32X_MMUTE, 2, 1, 1), SOC_SINGLE("Ch3 Switch", STA32X_MMUTE, 3, 1, 1), SOC_SINGLE_TLV("Ch1 Volume", STA32X_C1VOL, 0, 0xff, 1, chvol_tlv), SOC_SINGLE_TLV("Ch2 Volume", STA32X_C2VOL, 0, 0xff, 1, chvol_tlv), SOC_SINGLE_TLV("Ch3 Volume", STA32X_C3VOL, 0, 0xff, 1, chvol_tlv), SOC_SINGLE("De-emphasis Filter Switch", STA32X_CONFD, STA32X_CONFD_DEMP_SHIFT, 1, 0), SOC_ENUM("Compressor/Limiter Switch", sta32x_drc_ac_enum), SOC_SINGLE("Miami Mode Switch", STA32X_CONFD, STA32X_CONFD_MME_SHIFT, 1, 0), SOC_SINGLE("Zero Cross Switch", STA32X_CONFE, STA32X_CONFE_ZCE_SHIFT, 1, 0), SOC_SINGLE("Soft Ramp Switch", STA32X_CONFE, STA32X_CONFE_SVE_SHIFT, 1, 0), SOC_SINGLE("Auto-Mute Switch", STA32X_CONFF, STA32X_CONFF_IDE_SHIFT, 1, 0), SOC_ENUM("Automode EQ", sta32x_auto_eq_enum), SOC_ENUM("Automode GC", sta32x_auto_gc_enum), SOC_ENUM("Automode XO", sta32x_auto_xo_enum), SOC_ENUM("Preset EQ", sta32x_preset_eq_enum), SOC_SINGLE("Ch1 Tone Control Bypass Switch", STA32X_C1CFG, STA32X_CxCFG_TCB_SHIFT, 1, 0), SOC_SINGLE("Ch2 Tone Control Bypass Switch", STA32X_C2CFG, STA32X_CxCFG_TCB_SHIFT, 1, 0), SOC_SINGLE("Ch1 EQ Bypass Switch", STA32X_C1CFG, STA32X_CxCFG_EQBP_SHIFT, 1, 0), SOC_SINGLE("Ch2 EQ Bypass Switch", STA32X_C2CFG, STA32X_CxCFG_EQBP_SHIFT, 1, 0), SOC_SINGLE("Ch1 Master Volume Bypass Switch", STA32X_C1CFG, STA32X_CxCFG_VBP_SHIFT, 1, 0), SOC_SINGLE("Ch2 Master Volume Bypass Switch", STA32X_C1CFG, STA32X_CxCFG_VBP_SHIFT, 1, 0), SOC_SINGLE("Ch3 Master Volume Bypass Switch", STA32X_C1CFG, STA32X_CxCFG_VBP_SHIFT, 1, 0),
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), \ SOC_SINGLE(name " NG EPOUT Switch", base, 4, 1, 0), \ SOC_SINGLE(name " NG SPKOUTL Switch", base, 6, 1, 0) static const struct snd_kcontrol_new wm8998_snd_controls[] = { SOC_ENUM("IN1 OSR", arizona_in_dmic_osr[0]), SOC_ENUM("IN2 OSR", arizona_in_dmic_osr[1]), SOC_SINGLE_RANGE_TLV("IN1L Volume", ARIZONA_IN1L_CONTROL, ARIZONA_IN1L_PGA_VOL_SHIFT, 0x40, 0x5f, 0, ana_tlv), SOC_SINGLE_RANGE_TLV("IN1R Volume", ARIZONA_IN1R_CONTROL, ARIZONA_IN1R_PGA_VOL_SHIFT, 0x40, 0x5f, 0, ana_tlv), SOC_SINGLE_RANGE_TLV("IN2 Volume", ARIZONA_IN2L_CONTROL, ARIZONA_IN2L_PGA_VOL_SHIFT, 0x40, 0x5f, 0, ana_tlv), SOC_ENUM("IN HPF Cutoff Frequency", arizona_in_hpf_cut_enum), SOC_SINGLE("IN1L HPF Switch", ARIZONA_IN1L_CONTROL, ARIZONA_IN1L_HPF_SHIFT, 1, 0), SOC_SINGLE("IN1R HPF Switch", ARIZONA_IN1R_CONTROL, ARIZONA_IN1R_HPF_SHIFT, 1, 0),
SOC_DOUBLE_R_TLV("Speaker Mixer Volume", WM8993_SPKMIXL_ATTENUATION, WM8993_SPKMIXR_ATTENUATION, 0, 3, 1, spkmixout_tlv), SOC_DOUBLE_R_TLV("Speaker Volume", WM8993_SPEAKER_VOLUME_LEFT, WM8993_SPEAKER_VOLUME_RIGHT, 0, 63, 0, outpga_tlv), SOC_DOUBLE_R("Speaker Switch", WM8993_SPEAKER_VOLUME_LEFT, WM8993_SPEAKER_VOLUME_RIGHT, 6, 1, 0), SOC_DOUBLE_R("Speaker ZC Switch", WM8993_SPEAKER_VOLUME_LEFT, WM8993_SPEAKER_VOLUME_RIGHT, 7, 1, 0), SOC_DOUBLE_TLV("Speaker Boost Volume", WM8993_SPKOUT_BOOST, 0, 3, 7, 0, spkboost_tlv), SOC_ENUM("Speaker Reference", speaker_ref), SOC_ENUM("Speaker Mode", speaker_mode), { .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = "Headphone Volume", .access = SNDRV_CTL_ELEM_ACCESS_TLV_READ | SNDRV_CTL_ELEM_ACCESS_READWRITE, .tlv.p = outpga_tlv, .info = snd_soc_info_volsw_2r, .get = snd_soc_get_volsw_2r, .put = wm8993_put_dc_servo, .private_value = (unsigned long)&(struct soc_mixer_control) { .reg = WM8993_LEFT_OUTPUT_VOLUME, .rreg = WM8993_RIGHT_OUTPUT_VOLUME, .shift = 0, .max = 63 }, },
static DECLARE_TLV_DB_SCALE(wm8940_spk_vol_tlv, -5700, 100, 1); static DECLARE_TLV_DB_SCALE(wm8940_att_tlv, -1000, 1000, 0); static DECLARE_TLV_DB_SCALE(wm8940_pga_vol_tlv, -1200, 75, 0); static DECLARE_TLV_DB_SCALE(wm8940_alc_min_tlv, -1200, 600, 0); static DECLARE_TLV_DB_SCALE(wm8940_alc_max_tlv, 675, 600, 0); static DECLARE_TLV_DB_SCALE(wm8940_alc_tar_tlv, -2250, 50, 0); static DECLARE_TLV_DB_SCALE(wm8940_lim_boost_tlv, 0, 100, 0); static DECLARE_TLV_DB_SCALE(wm8940_lim_thresh_tlv, -600, 100, 0); static DECLARE_TLV_DB_SCALE(wm8940_adc_tlv, -12750, 50, 1); static DECLARE_TLV_DB_SCALE(wm8940_capture_boost_vol_tlv, 0, 2000, 0); static const struct snd_kcontrol_new wm8940_snd_controls[] = { SOC_SINGLE("Digital Loopback Switch", WM8940_COMPANDINGCTL, 6, 1, 0), SOC_ENUM("DAC Companding", wm8940_dac_companding_enum), SOC_ENUM("ADC Companding", wm8940_adc_companding_enum), SOC_ENUM("ALC Mode", wm8940_alc_mode_enum), SOC_SINGLE("ALC Switch", WM8940_ALC1, 8, 1, 0), SOC_SINGLE_TLV("ALC Capture Max Gain", WM8940_ALC1, 3, 7, 1, wm8940_alc_max_tlv), SOC_SINGLE_TLV("ALC Capture Min Gain", WM8940_ALC1, 0, 7, 0, wm8940_alc_min_tlv), SOC_SINGLE_TLV("ALC Capture Target", WM8940_ALC2, 0, 14, 0, wm8940_alc_tar_tlv), SOC_SINGLE("ALC Capture Hold", WM8940_ALC2, 4, 10, 0), SOC_SINGLE("ALC Capture Decay", WM8940_ALC3, 4, 10, 0), SOC_SINGLE("ALC Capture Attach", WM8940_ALC3, 0, 10, 0), SOC_SINGLE("ALC ZC Switch", WM8940_ALC4, 1, 1, 0), SOC_SINGLE("ALC Capture Noise Gate Switch", WM8940_NOISEGATE,
SOC_SINGLE("Speaker Output Attenuation Volume", WM8400_SPEAKER_VOLUME, WM8400_SPKATTN_SHIFT, WM8400_SPKATTN_MASK, 0), SOC_SINGLE("Speaker DC Boost Volume", WM8400_CLASSD3, WM8400_DCGAIN_SHIFT, 6, 0), SOC_SINGLE("Speaker AC Boost Volume", WM8400_CLASSD3, WM8400_ACGAIN_SHIFT, 6, 0), WM8400_OUTPGA_SINGLE_R_TLV("Left DAC Digital Volume", WM8400_LEFT_DAC_DIGITAL_VOLUME, WM8400_DACL_VOL_SHIFT, 127, 0, out_dac_tlv), WM8400_OUTPGA_SINGLE_R_TLV("Right DAC Digital Volume", WM8400_RIGHT_DAC_DIGITAL_VOLUME, WM8400_DACR_VOL_SHIFT, 127, 0, out_dac_tlv), SOC_ENUM("Left Digital Sidetone", wm8400_left_digital_sidetone_enum), SOC_ENUM("Right Digital Sidetone", wm8400_right_digital_sidetone_enum), SOC_SINGLE_TLV("Left Digital Sidetone Volume", WM8400_DIGITAL_SIDE_TONE, WM8400_ADCL_DAC_SVOL_SHIFT, 15, 0, out_sidetone_tlv), SOC_SINGLE_TLV("Right Digital Sidetone Volume", WM8400_DIGITAL_SIDE_TONE, WM8400_ADCR_DAC_SVOL_SHIFT, 15, 0, out_sidetone_tlv), SOC_SINGLE("ADC Digital High Pass Filter Switch", WM8400_ADC_CTRL, WM8400_ADC_HPF_ENA_SHIFT, 1, 0), SOC_ENUM("ADC HPF Mode", wm8400_right_adcmode_enum), WM8400_OUTPGA_SINGLE_R_TLV("Left ADC Digital Volume", WM8400_LEFT_ADC_DIGITAL_VOLUME, WM8400_ADCL_VOL_SHIFT,
} static const char *pwm_mode_text[] = { "Binary", "Headphone", "Ternary", "Phase-shift"}; static const DECLARE_TLV_DB_SCALE(out_gain_tlv, -9150, 50, 0); static const DECLARE_TLV_DB_SCALE(master_vol_tlv, -12750, 50, 0); static const SOC_ENUM_SINGLE_DECL(pwm_src, STA529_FFXCFG1, 4, pwm_mode_text); static const struct snd_kcontrol_new sta529_snd_controls[] = { SOC_DOUBLE_R_TLV("Digital Playback Volume", STA529_LVOL, STA529_RVOL, 0, 127, 0, out_gain_tlv), SOC_SINGLE_TLV("Master Playback Volume", STA529_MVOL, 0, 127, 1, master_vol_tlv), SOC_ENUM("PWM Select", pwm_src), }; static int sta529_set_bias_level(struct snd_soc_codec *codec, enum snd_soc_bias_level level) { struct sta529 *sta529 = snd_soc_codec_get_drvdata(codec); switch (level) { case SND_SOC_BIAS_ON: case SND_SOC_BIAS_PREPARE: snd_soc_update_bits(codec, STA529_FFXCFG0, POWER_CNTLMSAK, POWER_UP); snd_soc_update_bits(codec, STA529_MISC, FFX_CLK_MSK, FFX_CLK_ENB); break;
0, 47, TLV_DB_SCALE_ITEM(TLV_DB_GAIN_MUTE, 0, 0), 48, 127, TLV_DB_SCALE_ITEM(-7400, 100, 0), }; static const DECLARE_TLV_DB_SCALE(ssm260x_inpga_tlv, -3450, 150, 0); static const DECLARE_TLV_DB_SCALE(ssm260x_sidetone_tlv, -1500, 300, 0); static const struct snd_kcontrol_new ssm260x_snd_controls[] = { SOC_DOUBLE_R_TLV("Capture Volume", SSM2602_LINVOL, SSM2602_RINVOL, 0, 45, 0, ssm260x_inpga_tlv), SOC_DOUBLE_R("Capture Switch", SSM2602_LINVOL, SSM2602_RINVOL, 7, 1, 1), SOC_SINGLE("ADC High Pass Filter Switch", SSM2602_APDIGI, 0, 1, 1), SOC_SINGLE("Store DC Offset Switch", SSM2602_APDIGI, 4, 1, 0), SOC_ENUM("Playback De-emphasis", ssm2602_enum[1]), }; static const struct snd_kcontrol_new ssm2602_snd_controls[] = { SOC_DOUBLE_R_TLV("Master Playback Volume", SSM2602_LOUT1V, SSM2602_ROUT1V, 0, 127, 0, ssm260x_outmix_tlv), SOC_DOUBLE_R("Master Playback ZC Switch", SSM2602_LOUT1V, SSM2602_ROUT1V, 7, 1, 0), SOC_SINGLE_TLV("Sidetone Playback Volume", SSM2602_APANA, 6, 3, 1, ssm260x_sidetone_tlv), 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), };
static const char *ak4535_mono_out[] = {"(L + R)/2", "Hi-Z"}; static const char *ak4535_hp_out[] = {"Stereo", "Mono"}; static const char *ak4535_deemp[] = {"44.1kHz", "Off", "48kHz", "32kHz"}; static const char *ak4535_mic_select[] = {"Internal", "External"}; static const struct soc_enum ak4535_enum[] = { SOC_ENUM_SINGLE(AK4535_SIG1, 7, 2, ak4535_mono_gain), SOC_ENUM_SINGLE(AK4535_SIG1, 6, 2, ak4535_mono_out), SOC_ENUM_SINGLE(AK4535_MODE2, 2, 2, ak4535_hp_out), SOC_ENUM_SINGLE(AK4535_DAC, 0, 4, ak4535_deemp), SOC_ENUM_SINGLE(AK4535_MIC, 1, 2, ak4535_mic_select), }; static const struct snd_kcontrol_new ak4535_snd_controls[] = { SOC_SINGLE("ALC2 Switch", AK4535_SIG1, 1, 1, 0), SOC_ENUM("Mono 1 Output", ak4535_enum[1]), SOC_ENUM("Mono 1 Gain", ak4535_enum[0]), SOC_ENUM("Headphone Output", ak4535_enum[2]), SOC_ENUM("Playback Deemphasis", ak4535_enum[3]), SOC_SINGLE("Bass Volume", AK4535_DAC, 2, 3, 0), SOC_SINGLE("Mic Boost (+20dB) Switch", AK4535_MIC, 0, 1, 0), SOC_ENUM("Mic Select", ak4535_enum[4]), SOC_SINGLE("ALC Operation Time", AK4535_TIMER, 0, 3, 0), SOC_SINGLE("ALC Recovery Time", AK4535_TIMER, 2, 3, 0), SOC_SINGLE("ALC ZC Time", AK4535_TIMER, 4, 3, 0), SOC_SINGLE("ALC 1 Switch", AK4535_ALC1, 5, 1, 0), SOC_SINGLE("ALC 2 Switch", AK4535_ALC1, 6, 1, 0), SOC_SINGLE("ALC Volume", AK4535_ALC2, 0, 127, 0), SOC_SINGLE("Capture Volume", AK4535_PGA, 0, 127, 0), SOC_SINGLE("Left Playback Volume", AK4535_LATT, 0, 127, 1), SOC_SINGLE("Right Playback Volume", AK4535_RATT, 0, 127, 1),
static const DECLARE_TLV_DB_SCALE(capture_tlv, -800, 50, 0); static const DECLARE_TLV_DB_SCALE(alc_tlv, -800, 50, 0); static const DECLARE_TLV_DB_SCALE(aux_in_tlv, -2100, 300, 0); static SOC_ENUM_SINGLE_DECL(ak4641_mono_out_enum, AK4641_SIG1, 6, ak4641_mono_out); static SOC_ENUM_SINGLE_DECL(ak4641_hp_out_enum, AK4641_MODE2, 2, ak4641_hp_out); static SOC_ENUM_SINGLE_DECL(ak4641_mic_select_enum, AK4641_MIC, 1, ak4641_mic_select); static SOC_ENUM_SINGLE_DECL(ak4641_mic_or_dac_enum, AK4641_BTIF, 4, ak4641_mic_or_dac); static const struct snd_kcontrol_new ak4641_snd_controls[] = { SOC_ENUM("Mono 1 Output", ak4641_mono_out_enum), SOC_SINGLE_TLV("Mono 1 Gain Volume", AK4641_SIG1, 7, 1, 1, mono_gain_tlv), SOC_ENUM("Headphone Output", ak4641_hp_out_enum), SOC_SINGLE_BOOL_EXT("Playback Deemphasis Switch", 0, ak4641_get_deemph, ak4641_put_deemph), SOC_SINGLE_TLV("Mic Boost Volume", AK4641_MIC, 0, 1, 0, mic_boost_tlv), SOC_SINGLE("ALC Operation Time", AK4641_TIMER, 0, 3, 0), SOC_SINGLE("ALC Recovery Time", AK4641_TIMER, 2, 3, 0), SOC_SINGLE("ALC ZC Time", AK4641_TIMER, 4, 3, 0), SOC_SINGLE("ALC 1 Switch", AK4641_ALC1, 5, 1, 0), SOC_SINGLE_TLV("ALC Volume", AK4641_ALC2, 0, 71, 0, alc_tlv),
static const struct soc_enum dacr_src = SOC_ENUM_SINGLE(WM8900_REG_AUDIO2, 14, 2, lr_txt); static const char *sidetone_txt[] = { "Disabled", "Left ADC", "Right ADC" }; static const struct soc_enum dacl_sidetone = SOC_ENUM_SINGLE(WM8900_REG_SIDETONE, 2, 3, sidetone_txt); static const struct soc_enum dacr_sidetone = SOC_ENUM_SINGLE(WM8900_REG_SIDETONE, 0, 3, sidetone_txt); static const struct snd_kcontrol_new wm8900_snd_controls[] = { SOC_ENUM("Mic Bias Level", mic_bias_level), SOC_SINGLE_TLV("Left Input PGA Volume", WM8900_REG_LINVOL, 0, 31, 0, in_pga_tlv), SOC_SINGLE("Left Input PGA Switch", WM8900_REG_LINVOL, 6, 1, 1), SOC_SINGLE("Left Input PGA ZC Switch", WM8900_REG_LINVOL, 7, 1, 0), SOC_SINGLE_TLV("Right Input PGA Volume", WM8900_REG_RINVOL, 0, 31, 0, in_pga_tlv), SOC_SINGLE("Right Input PGA Switch", WM8900_REG_RINVOL, 6, 1, 1), SOC_SINGLE("Right Input PGA ZC Switch", WM8900_REG_RINVOL, 7, 1, 0), SOC_SINGLE("DAC Soft Mute Switch", WM8900_REG_DACCTRL, 6, 1, 1), SOC_ENUM("DAC Mute Rate", dac_mute_rate), SOC_SINGLE("DAC Mono Switch", WM8900_REG_DACCTRL, 9, 1, 0), SOC_ENUM("DAC Deemphasis", dac_deemphasis),
SOC_SINGLE("ALC Release Rate Volume", CS42L73_ALCRRATE, 0, 0x3F, 0), SOC_DOUBLE("ALC Switch", CS42L73_ALCARATE, 6, 7, 1, 0), SOC_SINGLE_TLV("ALC Max Threshold Volume", CS42L73_ALCMINMAX, 5, 7, 0, limiter_tlv), SOC_SINGLE_TLV("ALC Min Threshold Volume", CS42L73_ALCMINMAX, 2, 7, 0, limiter_tlv), SOC_DOUBLE("NG Enable Switch", CS42L73_NGCAB, 6, 7, 1, 0), SOC_SINGLE("NG Boost Switch", CS42L73_NGCAB, 5, 1, 0), /* NG Threshold depends on NG_BOOTSAB, which selects between two threshold scales in decibels. Set linear values for now .. */ SOC_SINGLE("NG Threshold", CS42L73_NGCAB, 2, 7, 0), SOC_ENUM("NG Delay", ng_delay_enum), SOC_ENUM("Charge Pump Frequency", charge_pump_enum), SOC_DOUBLE_R_TLV("XSP-IP Volume", CS42L73_XSPAIPAA, CS42L73_XSPBIPBA, 0, 0x3F, 1, attn_tlv), SOC_DOUBLE_R_TLV("XSP-XSP Volume", CS42L73_XSPAXSPAA, CS42L73_XSPBXSPBA, 0, 0x3F, 1, attn_tlv), SOC_DOUBLE_R_TLV("XSP-ASP Volume", CS42L73_XSPAASPAA, CS42L73_XSPAASPBA, 0, 0x3F, 1, attn_tlv), SOC_DOUBLE_R_TLV("XSP-VSP Volume", CS42L73_XSPAVSPMA, CS42L73_XSPBVSPMA, 0, 0x3F, 1, attn_tlv),
static const struct snd_kcontrol_new wm8737_snd_controls[] = { SOC_DOUBLE_R_TLV("Mic Boost Volume", WM8737_AUDIO_PATH_L, WM8737_AUDIO_PATH_R, 6, 3, 0, micboost_tlv), SOC_DOUBLE_R("Mic Boost Switch", WM8737_AUDIO_PATH_L, WM8737_AUDIO_PATH_R, 4, 1, 0), SOC_DOUBLE("Mic ZC Switch", WM8737_AUDIO_PATH_L, WM8737_AUDIO_PATH_R, 3, 1, 0), SOC_DOUBLE_R_TLV("Capture Volume", WM8737_LEFT_PGA_VOLUME, WM8737_RIGHT_PGA_VOLUME, 0, 255, 0, pga_tlv), SOC_DOUBLE("Capture ZC Switch", WM8737_AUDIO_PATH_L, WM8737_AUDIO_PATH_R, 2, 1, 0), SOC_DOUBLE("INPUT1 DC Bias Switch", WM8737_MISC_BIAS_CONTROL, 0, 1, 1, 0), SOC_ENUM("Mic PGA Bias", micbias_enum), SOC_SINGLE("ADC Low Power Switch", WM8737_ADC_CONTROL, 2, 1, 0), SOC_SINGLE("High Pass Filter Switch", WM8737_ADC_CONTROL, 0, 1, 1), SOC_DOUBLE("Polarity Invert Switch", WM8737_ADC_CONTROL, 5, 6, 1, 0), SOC_SINGLE("3D Switch", WM8737_3D_ENHANCE, 0, 1, 0), SOC_SINGLE("3D Depth", WM8737_3D_ENHANCE, 1, 15, 0), SOC_ENUM("3D Low Cut-off", low_3d), SOC_ENUM("3D High Cut-off", low_3d), SOC_SINGLE_TLV("3D ADC Volume", WM8737_3D_ENHANCE, 7, 1, 1, adc_tlv), SOC_SINGLE("Noise Gate Switch", WM8737_NOISE_GATE, 0, 1, 0), SOC_SINGLE_TLV("Noise Gate Threshold Volume", WM8737_NOISE_GATE, 2, 7, 0, ng_tlv), SOC_ENUM("ALC", alc_fn),
static const struct soc_enum pcm512x_veds = SOC_ENUM_SINGLE(PCM512x_DIGITAL_MUTE_2, PCM512x_VEDS_SHIFT, 4, pcm512x_ramp_step_text); static const struct snd_kcontrol_new pcm512x_controls[] = { SOC_DOUBLE_R_TLV("Digital Playback Volume", PCM512x_DIGITAL_VOLUME_2, PCM512x_DIGITAL_VOLUME_3, 0, 255, 1, digital_tlv), SOC_DOUBLE_TLV("Analogue Playback Volume", PCM512x_ANALOG_GAIN_CTRL, PCM512x_LAGN_SHIFT, PCM512x_RAGN_SHIFT, 1, 1, analog_tlv), SOC_DOUBLE_TLV("Analogue Playback Boost Volume", PCM512x_ANALOG_GAIN_BOOST, PCM512x_AGBL_SHIFT, PCM512x_AGBR_SHIFT, 1, 0, boost_tlv), SOC_DOUBLE("Digital Playback Switch", PCM512x_MUTE, PCM512x_RQML_SHIFT, PCM512x_RQMR_SHIFT, 1, 1), SOC_SINGLE("Deemphasis Switch", PCM512x_DSP, PCM512x_DEMP_SHIFT, 1, 1), SOC_ENUM("DSP Program", pcm512x_dsp_program), SOC_ENUM("Clock Missing Period", pcm512x_clk_missing), SOC_ENUM("Auto Mute Time Left", pcm512x_autom_l), SOC_ENUM("Auto Mute Time Right", pcm512x_autom_r), SOC_SINGLE("Auto Mute Mono Switch", PCM512x_DIGITAL_MUTE_3, PCM512x_ACTL_SHIFT, 1, 0), SOC_DOUBLE("Auto Mute Switch", PCM512x_DIGITAL_MUTE_3, PCM512x_AMLE_SHIFT, PCM512x_AMRE_SHIFT, 1, 0), SOC_ENUM("Volume Ramp Down Rate", pcm512x_vndf), SOC_ENUM("Volume Ramp Down Step", pcm512x_vnds), SOC_ENUM("Volume Ramp Up Rate", pcm512x_vnuf), SOC_ENUM("Volume Ramp Up Step", pcm512x_vnus), SOC_ENUM("Volume Ramp Down Emergency Rate", pcm512x_vedf), SOC_ENUM("Volume Ramp Down Emergency Step", pcm512x_veds),
static const char *drc_smooth_text[] = { "Low", "Medium", "High", }; static const struct soc_enum drc_smooth = SOC_ENUM_SINGLE(WM8993_DRC_CONTROL_1, 4, 3, drc_smooth_text); static const struct snd_kcontrol_new wm8993_snd_controls[] = { SOC_DOUBLE_TLV("Digital Sidetone Volume", WM8993_DIGITAL_SIDE_TONE, 5, 9, 12, 0, sidetone_tlv), SOC_SINGLE("DRC Switch", WM8993_DRC_CONTROL_1, 15, 1, 0), SOC_ENUM("DRC Path", drc_path), SOC_SINGLE_TLV("DRC Compressor Threshold Volume", WM8993_DRC_CONTROL_2, 2, 60, 1, drc_comp_threash), SOC_SINGLE_TLV("DRC Compressor Amplitude Volume", WM8993_DRC_CONTROL_3, 11, 30, 1, drc_comp_amp), SOC_ENUM("DRC R0", drc_r0), SOC_ENUM("DRC R1", drc_r1), SOC_SINGLE_TLV("DRC Minimum Volume", WM8993_DRC_CONTROL_1, 2, 3, 1, drc_min_tlv), SOC_SINGLE_TLV("DRC Maximum Volume", WM8993_DRC_CONTROL_1, 0, 3, 0, drc_max_tlv), SOC_ENUM("DRC Attack Rate", drc_attack), SOC_ENUM("DRC Decay Rate", drc_decay), SOC_ENUM("DRC FF Delay", drc_ff), SOC_SINGLE("DRC Anti-clip Switch", WM8993_DRC_CONTROL_1, 9, 1, 0), SOC_SINGLE("DRC Quick Release Switch", WM8993_DRC_CONTROL_1, 10, 1, 0),