static const char *wm9712_rec_sel[] = {"Mic", "NC", "NC", "Speaker Mixer", "Line", "Headphone Mixer", "Phone Mixer", "Phone"}; static const char *wm9712_ng_type[] = {"Constant Gain", "Mute"}; static const char *wm9712_diff_sel[] = {"Mic", "Line"}; static const DECLARE_TLV_DB_SCALE(main_tlv, -3450, 150, 0); static const DECLARE_TLV_DB_SCALE(boost_tlv, 0, 2000, 0); static const struct soc_enum wm9712_enum[] = { SOC_ENUM_SINGLE(AC97_PCI_SVID, 14, 4, wm9712_alc_select), SOC_ENUM_SINGLE(AC97_VIDEO, 12, 4, wm9712_alc_mux), SOC_ENUM_SINGLE(AC97_AUX, 9, 4, wm9712_out3_src), SOC_ENUM_SINGLE(AC97_AUX, 8, 2, wm9712_spk_src), SOC_ENUM_SINGLE(AC97_REC_SEL, 12, 4, wm9712_rec_adc), SOC_ENUM_SINGLE(AC97_MASTER_TONE, 15, 2, wm9712_base), SOC_ENUM_DOUBLE(AC97_REC_GAIN, 14, 6, 2, wm9712_rec_gain), SOC_ENUM_SINGLE(AC97_MIC, 5, 4, wm9712_mic), SOC_ENUM_SINGLE(AC97_REC_SEL, 8, 8, wm9712_rec_sel), SOC_ENUM_SINGLE(AC97_REC_SEL, 0, 8, wm9712_rec_sel), SOC_ENUM_SINGLE(AC97_PCI_SVID, 5, 2, wm9712_ng_type), SOC_ENUM_SINGLE(0x5c, 8, 2, wm9712_diff_sel), }; static const struct snd_kcontrol_new wm9712_snd_ac97_controls[] = { SOC_DOUBLE("Speaker Playback Volume", AC97_MASTER, 8, 0, 31, 1), SOC_SINGLE("Speaker Playback Switch", AC97_MASTER, 15, 1, 1), SOC_DOUBLE("Headphone Playback Volume", AC97_HEADPHONE, 8, 0, 31, 1), SOC_SINGLE("Headphone Playback Switch", AC97_HEADPHONE, 15, 1, 1), SOC_DOUBLE("PCM Playback Volume", AC97_PCM, 8, 0, 31, 1), SOC_SINGLE("Speaker Playback ZC Switch", AC97_MASTER, 7, 1, 0),
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 */ SOC_ENUM_SINGLE(AC97_GENERAL_PURPOSE, 15, 2, wm9713_bass), /* bass control 16 */ SOC_ENUM_SINGLE(AC97_PCI_SVID, 5, 2, wm9713_ng_type), /* noise gate type 17 */ SOC_ENUM_SINGLE(AC97_3D_CONTROL, 12, 3, wm9713_mic_select), /* mic selection 18 */ SOC_ENUM_SINGLE(MICB_MUX, 0, 2, wm9713_micb_select), /* mic selection 19 */ };
0x8080, 0x2000, 0x0000, 0x0000, /* 38 - 3e */ 0x0000, 0x0000, 0x0000, 0x0000, /* reserved */ 0x0000, 0x0000, 0x0000, 0x0000, /* reserved */ 0x0000, 0x0000, 0x0000, 0x0000, /* reserved */ 0x0000, 0x0000, 0x0000, 0x0000, /* reserved */ 0x8080, 0x0000, 0x0000, 0x0000, /* 60 - 66 */ 0x0000, 0x0000, 0x0000, 0x0000, /* reserved */ 0x0000, 0x0000, 0x1001, 0x0000, /* 70 - 76 */ 0x0000, 0x0000, 0x4144, 0x5370 /* 78 - 7e */ }; static const char *ad1980_rec_sel[] = {"Mic", "CD", "NC", "AUX", "Line", "Stereo Mix", "Mono Mix", "Phone"}; static const struct soc_enum ad1980_cap_src = SOC_ENUM_DOUBLE(AC97_REC_SEL, 8, 0, 7, ad1980_rec_sel); static const struct snd_kcontrol_new ad1980_snd_ac97_controls[] = { SOC_DOUBLE("Master Playback Volume", AC97_MASTER, 8, 0, 31, 1), SOC_SINGLE("Master Playback Switch", AC97_MASTER, 15, 1, 1), SOC_DOUBLE("Headphone Playback Volume", AC97_HEADPHONE, 8, 0, 31, 1), SOC_SINGLE("Headphone Playback Switch", AC97_HEADPHONE, 15, 1, 1), SOC_DOUBLE("PCM Playback Volume", AC97_PCM, 8, 0, 31, 1), SOC_SINGLE("PCM Playback Switch", AC97_PCM, 15, 1, 1), SOC_DOUBLE("PCM Capture Volume", AC97_REC_GAIN, 8, 0, 31, 0), SOC_SINGLE("PCM Capture Switch", AC97_REC_GAIN, 15, 1, 1), SOC_SINGLE("Mono Playback Volume", AC97_MASTER_MONO, 0, 31, 1),
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), SOC_ENUM_SINGLE(AC97_VIDEO, 14, 4, wm9713_rec_mux), SOC_ENUM_SINGLE(AC97_VIDEO, 9, 4, wm9713_rec_mux), SOC_ENUM_SINGLE(AC97_VIDEO, 3, 8, wm9713_rec_src), SOC_ENUM_SINGLE(AC97_VIDEO, 0, 8, wm9713_rec_src), SOC_ENUM_DOUBLE(AC97_CD, 14, 6, 2, wm9713_rec_gain), SOC_ENUM_SINGLE(AC97_PCI_SVID, 14, 4, wm9713_alc_select), SOC_ENUM_SINGLE(AC97_REC_GAIN, 14, 4, wm9713_mono_pga), SOC_ENUM_SINGLE(AC97_REC_GAIN, 11, 8, wm9713_spk_pga), SOC_ENUM_SINGLE(AC97_REC_GAIN, 8, 8, wm9713_spk_pga), SOC_ENUM_SINGLE(AC97_REC_GAIN, 6, 3, wm9713_hp_pga), SOC_ENUM_SINGLE(AC97_REC_GAIN, 4, 3, wm9713_hp_pga), SOC_ENUM_SINGLE(AC97_REC_GAIN, 2, 4, wm9713_out3_pga), SOC_ENUM_SINGLE(AC97_REC_GAIN, 0, 4, wm9713_out4_pga), SOC_ENUM_SINGLE(AC97_REC_GAIN_MIC, 13, 8, wm9713_dac_inv), SOC_ENUM_SINGLE(AC97_REC_GAIN_MIC, 10, 8, wm9713_dac_inv), SOC_ENUM_SINGLE(AC97_GENERAL_PURPOSE, 15, 2, wm9713_bass), SOC_ENUM_SINGLE(AC97_PCI_SVID, 5, 2, wm9713_ng_type), SOC_ENUM_SINGLE(AC97_3D_CONTROL, 12, 3, wm9713_mic_select), SOC_ENUM_SINGLE(MICB_MUX, 0, 2, wm9713_micb_select), };
WM8770_REGULATOR_EVENT(1) WM8770_REGULATOR_EVENT(2) static const DECLARE_TLV_DB_SCALE(adc_tlv, -1200, 100, 0); static const DECLARE_TLV_DB_SCALE(dac_dig_tlv, -12750, 50, 1); static const DECLARE_TLV_DB_SCALE(dac_alg_tlv, -12700, 100, 1); static const char *dac_phase_text[][2] = { { "DAC1 Normal", "DAC1 Inverted" }, { "DAC2 Normal", "DAC2 Inverted" }, { "DAC3 Normal", "DAC3 Inverted" }, { "DAC4 Normal", "DAC4 Inverted" }, }; static const struct soc_enum dac_phase[] = { SOC_ENUM_DOUBLE(WM8770_DACPHASE, 0, 1, 2, dac_phase_text[0]), SOC_ENUM_DOUBLE(WM8770_DACPHASE, 2, 3, 2, dac_phase_text[1]), SOC_ENUM_DOUBLE(WM8770_DACPHASE, 4, 5, 2, dac_phase_text[2]), SOC_ENUM_DOUBLE(WM8770_DACPHASE, 6, 7, 2, dac_phase_text[3]), }; static const struct snd_kcontrol_new wm8770_snd_controls[] = { /* global DAC playback controls */ SOC_SINGLE_TLV("DAC Playback Volume", WM8770_MSDIGVOL, 0, 255, 0, dac_dig_tlv), SOC_SINGLE("DAC Playback Switch", WM8770_DACMUTE, 4, 1, 1), SOC_SINGLE("DAC Playback ZC Switch", WM8770_DACCTRL1, 0, 1, 0), /* global VOUT playback controls */ SOC_SINGLE_TLV("VOUT Playback Volume", WM8770_MSALGVOL, 0, 127, 0, dac_alg_tlv),
}; 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 char *cs42888_dacinvert[] = { "Disabled", "Enabled" }; static const char *cs42888_adcinvert[] = { "Disabled", "Enabled" }; static const char *cs42888_dacamute[] = { "Disabled", "AutoMute" }; static const char *cs42888_dac_sngvol[] = { "Disabled", "Enabled" }; static const char *cs42888_dac_szc[] = { "Immediate Change", "Zero Cross", "Soft Ramp", "Soft Ramp on Zero Cross" }; static const char *cs42888_mute_adc[] = { "UnMute", "Mute" }; static const char *cs42888_adc_sngvol[] = { "Disabled", "Enabled" }; static const char *cs42888_adc_szc[] = { "Immediate Change", "Zero Cross", "Soft Ramp", "Soft Ramp on Zero Cross" }; static const char *cs42888_dac_dem[] = { "No-De-Emphasis", "De-Emphasis" }; static const char *cs42888_adc_single[] = { "Differential", "Single-Ended" }; static const struct soc_enum cs42888_enum[] = { SOC_ENUM_SINGLE(CS42888_ADCCTL, 7, 2, cs42888_adcfilter), SOC_ENUM_DOUBLE(CS42888_DACINV, 0, 1, 2, cs42888_dacinvert), SOC_ENUM_DOUBLE(CS42888_DACINV, 2, 3, 2, cs42888_dacinvert), SOC_ENUM_DOUBLE(CS42888_DACINV, 4, 5, 2, cs42888_dacinvert), SOC_ENUM_DOUBLE(CS42888_DACINV, 6, 7, 2, cs42888_dacinvert), SOC_ENUM_DOUBLE(CS42888_ADCINV, 0, 1, 2, cs42888_adcinvert), SOC_ENUM_DOUBLE(CS42888_ADCINV, 2, 3, 2, cs42888_adcinvert), SOC_ENUM_SINGLE(CS42888_TRANS, 4, 2, cs42888_dacamute), SOC_ENUM_SINGLE(CS42888_TRANS, 7, 2, cs42888_dac_sngvol), SOC_ENUM_SINGLE(CS42888_TRANS, 5, 4, cs42888_dac_szc), SOC_ENUM_SINGLE(CS42888_TRANS, 3, 2, cs42888_mute_adc), SOC_ENUM_SINGLE(CS42888_TRANS, 2, 2, cs42888_adc_sngvol), SOC_ENUM_SINGLE(CS42888_TRANS, 0, 4, cs42888_adc_szc), SOC_ENUM_SINGLE(CS42888_ADCCTL, 5, 2, cs42888_dac_dem), SOC_ENUM_SINGLE(CS42888_ADCCTL, 4, 2, cs42888_adc_single), SOC_ENUM_SINGLE(CS42888_ADCCTL, 3, 2, cs42888_adc_single), };