MAX98505_ALC_TH_MASK, MAX98505_ALC_TH_SHIFT); } static int max98505_alc_threshold_put(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) { return max98505_reg_put(kcontrol, ucontrol, MAX98505_R030_THRESHOLD, MAX98505_ALC_TH_MASK, MAX98505_ALC_TH_SHIFT); } static const char * const max98505_boost_voltage_text[] = {"8.5V", "8.25V", "8.0V", "7.75V", "7.5V", "7.25V", "7.0V", "6.75V", "6.5V", "6.5V", "6.5V", "6.5V", "6.5V", "6.5V", "6.5V", "6.5V"}; static const struct soc_enum max98505_boost_voltage_enum = SOC_ENUM_SINGLE(MAX98505_R037_CONFIGURATION, MAX98505_BST_VOUT_SHIFT, 16, max98505_boost_voltage_text); static const char * const spk_state_text[] = {"Disable", "Enable"}; static const struct soc_enum spk_state_enum[] = { SOC_ENUM_SINGLE_EXT(ARRAY_SIZE(spk_state_text), spk_state_text), }; static int max98505_spk_out_get(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) { struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol); struct max98505_priv *max98505 = snd_soc_codec_get_drvdata(codec); unsigned int val; regmap_read(max98505->regmap, MAX98505_R038_GLOBAL_ENABLE, &val);
tlv_array) {\ .iface = SNDRV_CTL_ELEM_IFACE_MIXER, .name = (xname), \ .access = SNDRV_CTL_ELEM_ACCESS_TLV_READ |\ SNDRV_CTL_ELEM_ACCESS_READWRITE,\ .tlv.p = (tlv_array), \ .info = snd_soc_info_volsw, \ .get = snd_soc_get_volsw, .put = wm899x_outpga_put_volsw_vu, \ .private_value = SOC_SINGLE_VALUE(reg, shift, max, invert) } static const char *wm8990_digital_sidetone[] = {"None", "Left ADC", "Right ADC", "Reserved"}; static const struct soc_enum wm8990_left_digital_sidetone_enum = SOC_ENUM_SINGLE(WM8990_DIGITAL_SIDE_TONE, WM8990_ADC_TO_DACL_SHIFT, WM8990_ADC_TO_DACL_MASK, wm8990_digital_sidetone); static const struct soc_enum wm8990_right_digital_sidetone_enum = SOC_ENUM_SINGLE(WM8990_DIGITAL_SIDE_TONE, WM8990_ADC_TO_DACR_SHIFT, WM8990_ADC_TO_DACR_MASK, wm8990_digital_sidetone); static const char *wm8990_adcmode[] = {"Hi-fi mode", "Voice mode 1", "Voice mode 2", "Voice mode 3"}; static const struct soc_enum wm8990_right_adcmode_enum = SOC_ENUM_SINGLE(WM8990_ADC_CTRL, WM8990_ADC_HPF_CUT_SHIFT, WM8990_ADC_HPF_CUT_MASK,
0x0000, 0x0002, 0x0001, 0x0000, 0x0000, 0x0000, 0x0039, 0x0000, 0x0001, }; #define WM8510_POWER1_BIASEN 0x08 #define WM8510_POWER1_BUFIOEN 0x10 #define wm8510_reset(c) snd_soc_write(c, WM8510_RESET, 0) 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),
value |= CS42L51_POWER_CTL1_PDN; break; default: case SND_SOC_DAPM_POST_PMD: break; } snd_soc_update_bits(w->codec, CS42L51_POWER_CTL1, CS42L51_POWER_CTL1_PDN, value); return 0; } static const char *cs42l51_dac_names[] = {"Direct PCM", "DSP PCM", "ADC"}; static const struct soc_enum cs42l51_dac_mux_enum = SOC_ENUM_SINGLE(CS42L51_DAC_CTL, 6, 3, cs42l51_dac_names); static const struct snd_kcontrol_new cs42l51_dac_mux_controls = SOC_DAPM_ENUM("Route", cs42l51_dac_mux_enum); static const char *cs42l51_adcl_names[] = {"AIN1 Left", "AIN2 Left", "MIC Left", "MIC+preamp Left"}; static const struct soc_enum cs42l51_adcl_mux_enum = SOC_ENUM_SINGLE(CS42L51_ADC_INPUT, 4, 4, cs42l51_adcl_names); static const struct snd_kcontrol_new cs42l51_adcl_mux_controls = SOC_DAPM_ENUM("Route", cs42l51_adcl_mux_enum); static const char *cs42l51_adcr_names[] = {"AIN1 Right", "AIN2 Right", "MIC Right", "MIC+preamp Right"}; static const struct soc_enum cs42l51_adcr_mux_enum = SOC_ENUM_SINGLE(CS42L51_ADC_INPUT, 6, 4, cs42l51_adcr_names); static const struct snd_kcontrol_new cs42l51_adcr_mux_controls =
.info = snd_soc_info_volsw_2r, \ .get = wm8350_get_volsw_2r, .put = wm8350_put_volsw_2r_vu, \ .private_value = (unsigned long)&(struct soc_mixer_control) \ {.reg = reg_left, .rreg = reg_right, .shift = xshift, \ .rshift = xshift, .max = xmax, .invert = xinvert}, } static const char *wm8350_deemp[] = { "None", "32kHz", "44.1kHz", "48kHz" }; static const char *wm8350_pol[] = { "Normal", "Inv R", "Inv L", "Inv L & R" }; static const char *wm8350_dacmutem[] = { "Normal", "Soft" }; static const char *wm8350_dacmutes[] = { "Fast", "Slow" }; static const char *wm8350_adcfilter[] = { "None", "High Pass" }; static const char *wm8350_adchp[] = { "44.1kHz", "8kHz", "16kHz", "32kHz" }; static const char *wm8350_lr[] = { "Left", "Right" }; static const struct soc_enum wm8350_enum[] = { SOC_ENUM_SINGLE(WM8350_DAC_CONTROL, 4, 4, wm8350_deemp), SOC_ENUM_SINGLE(WM8350_DAC_CONTROL, 0, 4, wm8350_pol), SOC_ENUM_SINGLE(WM8350_DAC_MUTE_VOLUME, 14, 2, wm8350_dacmutem), SOC_ENUM_SINGLE(WM8350_DAC_MUTE_VOLUME, 13, 2, wm8350_dacmutes), SOC_ENUM_SINGLE(WM8350_ADC_CONTROL, 15, 2, wm8350_adcfilter), SOC_ENUM_SINGLE(WM8350_ADC_CONTROL, 8, 4, wm8350_adchp), SOC_ENUM_SINGLE(WM8350_ADC_CONTROL, 0, 4, wm8350_pol), SOC_ENUM_SINGLE(WM8350_INPUT_MIXER_VOLUME, 15, 2, wm8350_lr), }; static DECLARE_TLV_DB_SCALE(pre_amp_tlv, -1200, 3525, 0); static DECLARE_TLV_DB_SCALE(out_pga_tlv, -5700, 600, 0); static DECLARE_TLV_DB_SCALE(dac_pcm_tlv, -7163, 36, 1); static DECLARE_TLV_DB_SCALE(adc_pcm_tlv, -12700, 50, 1); static DECLARE_TLV_DB_SCALE(out_mix_tlv, -1500, 300, 1);
{ unsigned int ldo = 0; if (SND_SOC_DAPM_EVENT_ON(event)) ldo = BIT(7)|BIT(6); /* program DMIC LDO */ snd_soc_update_bits(w->codec, SN95031_MICBIAS, BIT(7)|BIT(6), ldo); return 0; } /* mux controls */ static const char *sn95031_mic_texts[] = { "AMIC", "LineIn" }; static const struct soc_enum sn95031_micl_enum = SOC_ENUM_SINGLE(SN95031_ADCCONFIG, 1, 2, sn95031_mic_texts); static const struct snd_kcontrol_new sn95031_micl_mux_control = SOC_DAPM_ENUM("Route", sn95031_micl_enum); static const struct soc_enum sn95031_micr_enum = SOC_ENUM_SINGLE(SN95031_ADCCONFIG, 3, 2, sn95031_mic_texts); static const struct snd_kcontrol_new sn95031_micr_mux_control = SOC_DAPM_ENUM("Route", sn95031_micr_enum); static const char *sn95031_input_texts[] = { "DMIC1", "DMIC2", "DMIC3", "DMIC4", "DMIC5", "DMIC6", "ADC Left", "ADC Right" }; static const struct soc_enum sn95031_input1_enum =
snd_soc_update_bits(codec, ADAU1373_PLL_CTRL6(pll_id), ADAU1373_PLL_CTRL6_PLL_EN, val); if (SND_SOC_DAPM_EVENT_ON(event)) mdelay(5); return 0; } static const char *adau1373_decimator_text[] = { "ADC", "DMIC1", }; static const struct soc_enum adau1373_decimator_enum = SOC_ENUM_SINGLE(0, 0, 2, adau1373_decimator_text); static const struct snd_kcontrol_new adau1373_decimator_mux = SOC_DAPM_ENUM_VIRT("Decimator Mux", adau1373_decimator_enum); static const struct snd_kcontrol_new adau1373_left_adc_mixer_controls[] = { SOC_DAPM_SINGLE("DAC1 Switch", ADAU1373_LADC_MIXER, 4, 1, 0), SOC_DAPM_SINGLE("Input 4 Switch", ADAU1373_LADC_MIXER, 3, 1, 0), SOC_DAPM_SINGLE("Input 3 Switch", ADAU1373_LADC_MIXER, 2, 1, 0), SOC_DAPM_SINGLE("Input 2 Switch", ADAU1373_LADC_MIXER, 1, 1, 0), SOC_DAPM_SINGLE("Input 1 Switch", ADAU1373_LADC_MIXER, 0, 1, 0), }; static const struct snd_kcontrol_new adau1373_right_adc_mixer_controls[] = { SOC_DAPM_SINGLE("DAC1 Switch", ADAU1373_RADC_MIXER, 4, 1, 0), SOC_DAPM_SINGLE("Input 4 Switch", ADAU1373_RADC_MIXER, 3, 1, 0),
{"Vmid", "Zh", "Headphone", "Speaker", "Inv", "Headphone Vmid", "Speaker Vmid", "Inv Vmid"}; static const char *wm9713_hp_pga[] = {"Vmid", "Zh", "Headphone", "Headphone Vmid"}; static const char *wm9713_out3_pga[] = {"Vmid", "Zh", "Inv 1", "Inv 1 Vmid"}; static const char *wm9713_out4_pga[] = {"Vmid", "Zh", "Inv 2", "Inv 2 Vmid"}; static const char *wm9713_dac_inv[] = {"Off", "Mono", "Speaker", "Left Headphone", "Right Headphone", "Headphone Mono", "NC", "Vmid"}; static const char *wm9713_bass[] = {"Linear Control", "Adaptive Boost"}; static const char *wm9713_ng_type[] = {"Constant Gain", "Mute"}; static const char *wm9713_mic_select[] = {"Mic 1", "Mic 2 A", "Mic 2 B"}; static const char *wm9713_micb_select[] = {"MPB", "MPA"}; static const struct soc_enum wm9713_enum[] = { SOC_ENUM_SINGLE(AC97_LINE, 3, 4, wm9713_mic_mixer), /* record mic mixer 0 */ SOC_ENUM_SINGLE(AC97_VIDEO, 14, 4, wm9713_rec_mux), /* record mux hp 1 */ SOC_ENUM_SINGLE(AC97_VIDEO, 9, 4, wm9713_rec_mux), /* record mux mono 2 */ SOC_ENUM_SINGLE(AC97_VIDEO, 3, 8, wm9713_rec_src), /* record mux left 3 */ SOC_ENUM_SINGLE(AC97_VIDEO, 0, 8, wm9713_rec_src), /* record mux right 4*/ SOC_ENUM_DOUBLE(AC97_CD, 14, 6, 2, wm9713_rec_gain), /* record step size 5 */ SOC_ENUM_SINGLE(AC97_PCI_SVID, 14, 4, wm9713_alc_select), /* alc source select 6*/ SOC_ENUM_SINGLE(AC97_REC_GAIN, 14, 4, wm9713_mono_pga), /* mono input select 7 */ SOC_ENUM_SINGLE(AC97_REC_GAIN, 11, 8, wm9713_spk_pga), /* speaker left input select 8 */ SOC_ENUM_SINGLE(AC97_REC_GAIN, 8, 8, wm9713_spk_pga), /* speaker right input select 9 */ SOC_ENUM_SINGLE(AC97_REC_GAIN, 6, 3, wm9713_hp_pga), /* headphone left input 10 */ SOC_ENUM_SINGLE(AC97_REC_GAIN, 4, 3, wm9713_hp_pga), /* headphone right input 11 */ SOC_ENUM_SINGLE(AC97_REC_GAIN, 2, 4, wm9713_out3_pga), /* out 3 source 12 */ SOC_ENUM_SINGLE(AC97_REC_GAIN, 0, 4, wm9713_out4_pga), /* out 4 source 13 */ SOC_ENUM_SINGLE(AC97_REC_GAIN_MIC, 13, 8, wm9713_dac_inv), /* dac invert 1 14 */ SOC_ENUM_SINGLE(AC97_REC_GAIN_MIC, 10, 8, wm9713_dac_inv), /* dac invert 2 15 */
static const char *stac9766_record_mux[] = {"Mic", "CD", "Video", "AUX", "Line", "Stereo Mix", "Mono Mix", "Phone"}; static const char *stac9766_mono_mux[] = {"Mix", "Mic"}; static const char *stac9766_mic_mux[] = {"Mic1", "Mic2"}; static const char *stac9766_SPDIF_mux[] = {"PCM", "ADC Record"}; static const char *stac9766_popbypass_mux[] = {"Normal", "Bypass Mixer"}; static const char *stac9766_record_all_mux[] = {"All analog", "Analog plus DAC"}; static const char *stac9766_boost1[] = {"0dB", "10dB"}; static const char *stac9766_boost2[] = {"0dB", "20dB"}; static const char *stac9766_stereo_mic[] = {"Off", "On"}; static const struct soc_enum stac9766_record_enum = SOC_ENUM_DOUBLE(AC97_REC_SEL, 8, 0, 8, stac9766_record_mux); static const struct soc_enum stac9766_mono_enum = SOC_ENUM_SINGLE(AC97_GENERAL_PURPOSE, 9, 2, stac9766_mono_mux); static const struct soc_enum stac9766_mic_enum = SOC_ENUM_SINGLE(AC97_GENERAL_PURPOSE, 8, 2, stac9766_mic_mux); static const struct soc_enum stac9766_SPDIF_enum = SOC_ENUM_SINGLE(AC97_STAC_DA_CONTROL, 1, 2, stac9766_SPDIF_mux); static const struct soc_enum stac9766_popbypass_enum = SOC_ENUM_SINGLE(AC97_GENERAL_PURPOSE, 15, 2, stac9766_popbypass_mux); static const struct soc_enum stac9766_record_all_enum = SOC_ENUM_SINGLE(AC97_STAC_ANALOG_SPECIAL, 12, 2, stac9766_record_all_mux); static const struct soc_enum stac9766_boost1_enum = SOC_ENUM_SINGLE(AC97_MIC, 6, 2, stac9766_boost1); /* 0/10dB */ static const struct soc_enum stac9766_boost2_enum = SOC_ENUM_SINGLE(AC97_STAC_ANALOG_SPECIAL, 2, 2, stac9766_boost2); /* 0/20dB */ static const struct soc_enum stac9766_stereo_mic_enum = SOC_ENUM_SINGLE(AC97_STAC_STEREO_MIC, 2, 1, stac9766_stereo_mic);
static const struct snd_kcontrol_new ak4671_rout3_mixer_controls[] = { SOC_DAPM_SINGLE("DACSR", AK4671_ROUT3_SIGNAL_SELECT, 0, 1, 0), 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 */
{ 0x2F, 0x00 }, /* Speaker Amplifier */ { 0x30, 0x0A }, /* Threshold */ { 0x31, 0x00 }, /* ALC Attack */ { 0x32, 0x80 }, /* ALC Atten and Release */ { 0x33, 0x00 }, /* ALC Infinite Hold Release */ { 0x34, 0x92 }, /* ALC Configuration */ { 0x35, 0x01 }, /* Boost Converter */ { 0x36, 0x00 }, /* Block Enable */ { 0x37, 0x00 }, /* Configuration */ { 0x38, 0x00 }, /* Global Enable */ { 0x3A, 0x00 }, /* Boost Limiter */ }; static const struct soc_enum max98926_voltage_enum[] = { SOC_ENUM_SINGLE(MAX98926_DAI_CLK_DIV_N_LSBS, 0, ARRAY_SIZE(max98926_pdm_ch_text), max98926_pdm_ch_text), }; static const struct snd_kcontrol_new max98926_voltage_control = SOC_DAPM_ENUM("Route", max98926_voltage_enum); static const struct soc_enum max98926_current_enum[] = { SOC_ENUM_SINGLE(MAX98926_DAI_CLK_DIV_N_LSBS, MAX98926_PDM_SOURCE_1_SHIFT, ARRAY_SIZE(max98926_pdm_ch_text), max98926_pdm_ch_text), }; static const struct snd_kcontrol_new max98926_current_control = SOC_DAPM_ENUM("Route", max98926_current_enum);
int i, r = 0; for (i = 0; i < AK4535_CACHEREGNUM; i++) r |= ak4535_write(codec, i, cache[i]); return r; }; static const char *ak4535_mono_gain[] = {"+6dB", "-17dB"}; 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]),
0, 0x0002, 0, 0x0002, 0x0000, 0, 0, 0, 0x0079, 0, 0x0000, }; static const char *wm8940_companding[] = { "Off", "NC", "u-law", "A-law" }; static const struct soc_enum wm8940_adc_companding_enum = SOC_ENUM_SINGLE(WM8940_COMPANDINGCTL, 1, 4, wm8940_companding); static const struct soc_enum wm8940_dac_companding_enum = SOC_ENUM_SINGLE(WM8940_COMPANDINGCTL, 3, 4, wm8940_companding); static const char *wm8940_alc_mode_text[] = {"ALC", "Limiter"}; static const struct soc_enum wm8940_alc_mode_enum = SOC_ENUM_SINGLE(WM8940_ALC3, 8, 2, wm8940_alc_mode_text); static const char *wm8940_mic_bias_level_text[] = {"0.9", "0.65"}; static const struct soc_enum wm8940_mic_bias_level_enum = SOC_ENUM_SINGLE(WM8940_INPUTCTL, 8, 2, wm8940_mic_bias_level_text); static const char *wm8940_filter_mode_text[] = {"Audio", "Application"}; static const struct soc_enum wm8940_filter_mode_enum = SOC_ENUM_SINGLE(WM8940_ADC, 7, 2, wm8940_filter_mode_text);
"Mute ADC Output"}; static const char *wm8750_line_mux[] = {"Line 1", "Line 2", "Line 3", "PGA", "Differential"}; static const char *wm8750_pga_sel[] = {"Line 1", "Line 2", "Line 3", "Differential"}; static const char *wm8750_out3[] = {"VREF", "ROUT1 + Vol", "MonoOut", "ROUT1"}; static const char *wm8750_diff_sel[] = {"Line 1", "Line 2"}; static const char *wm8750_adcpol[] = {"Normal", "L Invert", "R Invert", "L + R Invert"}; static const char *wm8750_deemph[] = {"None", "32Khz", "44.1Khz", "48Khz"}; static const char *wm8750_mono_mux[] = {"Stereo", "Mono (Left)", "Mono (Right)", "Digital Mono"}; static const struct soc_enum wm8750_enum[] = { SOC_ENUM_SINGLE(WM8750_BASS, 7, 2, wm8750_bass), SOC_ENUM_SINGLE(WM8750_BASS, 6, 2, wm8750_bass_filter), SOC_ENUM_SINGLE(WM8750_TREBLE, 6, 2, wm8750_treble), SOC_ENUM_SINGLE(WM8750_3D, 5, 2, wm8750_3d_lc), SOC_ENUM_SINGLE(WM8750_3D, 6, 2, wm8750_3d_uc), SOC_ENUM_SINGLE(WM8750_3D, 7, 2, wm8750_3d_func), SOC_ENUM_SINGLE(WM8750_ALC1, 7, 4, wm8750_alc_func), SOC_ENUM_SINGLE(WM8750_NGATE, 1, 2, wm8750_ng_type), SOC_ENUM_SINGLE(WM8750_LOUTM1, 0, 5, wm8750_line_mux), SOC_ENUM_SINGLE(WM8750_ROUTM1, 0, 5, wm8750_line_mux), SOC_ENUM_SINGLE(WM8750_LADCIN, 6, 4, wm8750_pga_sel), /* 10 */ SOC_ENUM_SINGLE(WM8750_RADCIN, 6, 4, wm8750_pga_sel), SOC_ENUM_SINGLE(WM8750_ADCTL2, 7, 4, wm8750_out3), SOC_ENUM_SINGLE(WM8750_ADCIN, 8, 2, wm8750_diff_sel), SOC_ENUM_SINGLE(WM8750_ADCDAC, 5, 4, wm8750_adcpol), SOC_ENUM_SINGLE(WM8750_ADCDAC, 1, 4, wm8750_deemph),
static const DECLARE_TLV_DB_SCALE(spkmixout_tlv, -1800, 600, 1); static const DECLARE_TLV_DB_SCALE(outpga_tlv, -5700, 100, 0); static const unsigned int spkboost_tlv[] = { TLV_DB_RANGE_HEAD(2), 0, 6, TLV_DB_SCALE_ITEM(0, 150, 0), 7, 7, TLV_DB_SCALE_ITEM(1200, 0, 0), }; static const DECLARE_TLV_DB_SCALE(line_tlv, -600, 600, 0); static const char *speaker_ref_text[] = { "SPKVDD/2", "VMID", }; static const struct soc_enum speaker_ref = SOC_ENUM_SINGLE(WM8993_SPEAKER_MIXER, 8, 2, speaker_ref_text); static const char *speaker_mode_text[] = { "Class D", "Class AB", }; static const struct soc_enum speaker_mode = SOC_ENUM_SINGLE(WM8993_SPKMIXR_ATTENUATION, 8, 2, speaker_mode_text); static void wait_for_dc_servo(struct snd_soc_codec *codec, unsigned int op) { struct wm_hubs_data *hubs = snd_soc_codec_get_drvdata(codec); unsigned int reg; int count = 0; int timeout;
static DECLARE_TLV_DB_SCALE(pga_tlv, -600, 50, 0); static const unsigned int limiter_tlv[] = { TLV_DB_RANGE_HEAD(2), 0, 2, TLV_DB_SCALE_ITEM(-3000, 600, 0), 3, 7, TLV_DB_SCALE_ITEM(-1200, 300, 0), }; static const char * const cs42l52_adca_text[] = { "Input1A", "Input2A", "Input3A", "Input4A", "PGA Input Left"}; static const char * const cs42l52_adcb_text[] = { "Input1B", "Input2B", "Input3B", "Input4B", "PGA Input Right"}; static const struct soc_enum adca_enum = SOC_ENUM_SINGLE(CS42L52_ADC_PGA_A, 5, ARRAY_SIZE(cs42l52_adca_text), cs42l52_adca_text); static const struct soc_enum adcb_enum = SOC_ENUM_SINGLE(CS42L52_ADC_PGA_B, 5, ARRAY_SIZE(cs42l52_adcb_text), cs42l52_adcb_text); static const struct snd_kcontrol_new adca_mux = SOC_DAPM_ENUM("Left ADC Input Capture Mux", adca_enum); static const struct snd_kcontrol_new adcb_mux = SOC_DAPM_ENUM("Right ADC Input Capture Mux", adcb_enum); static const char * const mic_bias_level_text[] = { "0.5 +VA", "0.6 +VA", "0.7 +VA", "0.8 +VA", "0.83 +VA", "0.91 +VA" };
struct snd_soc_codec codec; u16 reg_cache[AD1836_NUM_REGS]; }; static struct snd_soc_codec *ad1836_codec; struct snd_soc_codec_device soc_codec_dev_ad1836; static int ad1836_register(struct ad1836_priv *ad1836); static void ad1836_unregister(struct ad1836_priv *ad1836); /* * AD1836 volume/mute/de-emphasis etc. controls */ static const char *ad1836_deemp[] = {"None", "44.1kHz", "32kHz", "48kHz"}; static const struct soc_enum ad1836_deemp_enum = SOC_ENUM_SINGLE(AD1836_DAC_CTRL1, 8, 4, ad1836_deemp); static const struct snd_kcontrol_new ad1836_snd_controls[] = { /* DAC volume control */ SOC_DOUBLE_R("DAC1 Volume", AD1836_DAC_L1_VOL, AD1836_DAC_R1_VOL, 0, 0x3FF, 0), SOC_DOUBLE_R("DAC2 Volume", AD1836_DAC_L2_VOL, AD1836_DAC_R2_VOL, 0, 0x3FF, 0), SOC_DOUBLE_R("DAC3 Volume", AD1836_DAC_L3_VOL, AD1836_DAC_R3_VOL, 0, 0x3FF, 0), /* ADC switch control */ SOC_DOUBLE("ADC1 Switch", AD1836_ADC_CTRL2, AD1836_ADCL1_MUTE, AD1836_ADCR1_MUTE, 1, 1), SOC_DOUBLE("ADC2 Switch", AD1836_ADC_CTRL2, AD1836_ADCL2_MUTE, AD1836_ADCR2_MUTE, 1, 1),