diff options
author | Takashi Iwai <tiwai@suse.de> | 2012-02-17 11:54:44 -0500 |
---|---|---|
committer | Takashi Iwai <tiwai@suse.de> | 2012-02-17 11:59:22 -0500 |
commit | b9368f5c10b15f2b79a58666849827edc1f2f3d4 (patch) | |
tree | f6750197e59fdcc2d7cc8e2b78584adb244c790d /sound/pci | |
parent | 27e917f82bfcf8c51a2c025ddfb69e0b5947f50b (diff) |
ALSA: hda/realtek - Replace ALC880 model=tcl with auto-parser
It needs a few extra setups for EAPD, but others look fairly
straightforward.
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'sound/pci')
-rw-r--r-- | sound/pci/hda/alc880_quirks.c | 56 | ||||
-rw-r--r-- | sound/pci/hda/patch_realtek.c | 13 |
2 files changed, 13 insertions, 56 deletions
diff --git a/sound/pci/hda/alc880_quirks.c b/sound/pci/hda/alc880_quirks.c index b64d2464a780..56f8fa1e3460 100644 --- a/sound/pci/hda/alc880_quirks.c +++ b/sound/pci/hda/alc880_quirks.c | |||
@@ -22,7 +22,6 @@ enum { | |||
22 | ALC880_UNIWILL_DIG, | 22 | ALC880_UNIWILL_DIG, |
23 | ALC880_UNIWILL, | 23 | ALC880_UNIWILL, |
24 | ALC880_UNIWILL_P53, | 24 | ALC880_UNIWILL_P53, |
25 | ALC880_TCL_S700, | ||
26 | #ifdef CONFIG_SND_DEBUG | 25 | #ifdef CONFIG_SND_DEBUG |
27 | ALC880_TEST, | 26 | ALC880_TEST, |
28 | #endif | 27 | #endif |
@@ -344,20 +343,6 @@ static const struct snd_kcontrol_new alc880_asus_w1v_mixer[] = { | |||
344 | { } /* end */ | 343 | { } /* end */ |
345 | }; | 344 | }; |
346 | 345 | ||
347 | /* TCL S700 */ | ||
348 | static const struct snd_kcontrol_new alc880_tcl_s700_mixer[] = { | ||
349 | HDA_CODEC_VOLUME("Front Playback Volume", 0x0c, 0x0, HDA_OUTPUT), | ||
350 | HDA_CODEC_MUTE("Front Playback Switch", 0x1b, 0x0, HDA_OUTPUT), | ||
351 | HDA_CODEC_MUTE("Headphone Playback Switch", 0x14, 0x0, HDA_OUTPUT), | ||
352 | HDA_CODEC_VOLUME("CD Playback Volume", 0x0B, 0x04, HDA_INPUT), | ||
353 | HDA_CODEC_MUTE("CD Playback Switch", 0x0B, 0x04, HDA_INPUT), | ||
354 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0B, 0x0, HDA_INPUT), | ||
355 | HDA_CODEC_MUTE("Mic Playback Switch", 0x0B, 0x0, HDA_INPUT), | ||
356 | HDA_CODEC_VOLUME("Capture Volume", 0x08, 0x0, HDA_INPUT), | ||
357 | HDA_CODEC_MUTE("Capture Switch", 0x08, 0x0, HDA_INPUT), | ||
358 | { } /* end */ | ||
359 | }; | ||
360 | |||
361 | /* Uniwill */ | 346 | /* Uniwill */ |
362 | static const struct snd_kcontrol_new alc880_uniwill_mixer[] = { | 347 | static const struct snd_kcontrol_new alc880_uniwill_mixer[] = { |
363 | HDA_CODEC_VOLUME("Headphone Playback Volume", 0x0c, 0x0, HDA_OUTPUT), | 348 | HDA_CODEC_VOLUME("Headphone Playback Volume", 0x0c, 0x0, HDA_OUTPUT), |
@@ -808,31 +793,6 @@ static const struct hda_verb alc880_pin_asus_init_verbs[] = { | |||
808 | #define alc880_gpio2_init_verbs alc_gpio2_init_verbs | 793 | #define alc880_gpio2_init_verbs alc_gpio2_init_verbs |
809 | #define alc880_gpio3_init_verbs alc_gpio3_init_verbs | 794 | #define alc880_gpio3_init_verbs alc_gpio3_init_verbs |
810 | 795 | ||
811 | static const struct hda_verb alc880_pin_tcl_S700_init_verbs[] = { | ||
812 | /* change to EAPD mode */ | ||
813 | {0x20, AC_VERB_SET_COEF_INDEX, 0x07}, | ||
814 | {0x20, AC_VERB_SET_PROC_COEF, 0x3060}, | ||
815 | |||
816 | /* Headphone output */ | ||
817 | {0x14, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_HP}, | ||
818 | /* Front output*/ | ||
819 | {0x1b, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT}, | ||
820 | {0x1b, AC_VERB_SET_CONNECT_SEL, 0x00}, | ||
821 | |||
822 | /* Line In pin widget for input */ | ||
823 | {0x1a, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN}, | ||
824 | /* CD pin widget for input */ | ||
825 | {0x1c, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN}, | ||
826 | /* Mic1 (rear panel) pin widget for input and vref at 80% */ | ||
827 | {0x18, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_VREF80}, | ||
828 | |||
829 | /* change to EAPD mode */ | ||
830 | {0x20, AC_VERB_SET_COEF_INDEX, 0x07}, | ||
831 | {0x20, AC_VERB_SET_PROC_COEF, 0x3070}, | ||
832 | |||
833 | { } | ||
834 | }; | ||
835 | |||
836 | /* | 796 | /* |
837 | * Test configuration for debugging | 797 | * Test configuration for debugging |
838 | * | 798 | * |
@@ -1102,7 +1062,6 @@ static const struct hda_verb alc880_test_init_verbs[] = { | |||
1102 | 1062 | ||
1103 | static const char * const alc880_models[ALC880_MODEL_LAST] = { | 1063 | static const char * const alc880_models[ALC880_MODEL_LAST] = { |
1104 | [ALC880_3ST] = "3stack", | 1064 | [ALC880_3ST] = "3stack", |
1105 | [ALC880_TCL_S700] = "tcl", | ||
1106 | [ALC880_3ST_DIG] = "3stack-digout", | 1065 | [ALC880_3ST_DIG] = "3stack-digout", |
1107 | [ALC880_5ST] = "5stack", | 1066 | [ALC880_5ST] = "5stack", |
1108 | [ALC880_5ST_DIG] = "5stack-digout", | 1067 | [ALC880_5ST_DIG] = "5stack-digout", |
@@ -1169,7 +1128,6 @@ static const struct snd_pci_quirk alc880_cfg_tbl[] = { | |||
1169 | SND_PCI_QUIRK(0x1734, 0x1094, "FSC Amilo M1451G", ALC880_FUJITSU), | 1128 | SND_PCI_QUIRK(0x1734, 0x1094, "FSC Amilo M1451G", ALC880_FUJITSU), |
1170 | SND_PCI_QUIRK(0x1734, 0x10ac, "FSC AMILO Xi 1526", ALC880_F1734), | 1129 | SND_PCI_QUIRK(0x1734, 0x10ac, "FSC AMILO Xi 1526", ALC880_F1734), |
1171 | SND_PCI_QUIRK(0x1734, 0x10b0, "Fujitsu", ALC880_FUJITSU), | 1130 | SND_PCI_QUIRK(0x1734, 0x10b0, "Fujitsu", ALC880_FUJITSU), |
1172 | SND_PCI_QUIRK(0x19db, 0x4188, "TCL S700", ALC880_TCL_S700), | ||
1173 | SND_PCI_QUIRK(0x2668, 0x8086, NULL, ALC880_6ST_DIG), /* broken BIOS */ | 1131 | SND_PCI_QUIRK(0x2668, 0x8086, NULL, ALC880_6ST_DIG), /* broken BIOS */ |
1174 | SND_PCI_QUIRK(0x8086, 0x2668, NULL, ALC880_6ST_DIG), | 1132 | SND_PCI_QUIRK(0x8086, 0x2668, NULL, ALC880_6ST_DIG), |
1175 | SND_PCI_QUIRK(0x8086, 0xa100, "Intel mobo", ALC880_5ST_DIG), | 1133 | SND_PCI_QUIRK(0x8086, 0xa100, "Intel mobo", ALC880_5ST_DIG), |
@@ -1216,20 +1174,6 @@ static const struct alc_config_preset alc880_presets[] = { | |||
1216 | .need_dac_fix = 1, | 1174 | .need_dac_fix = 1, |
1217 | .input_mux = &alc880_capture_source, | 1175 | .input_mux = &alc880_capture_source, |
1218 | }, | 1176 | }, |
1219 | [ALC880_TCL_S700] = { | ||
1220 | .mixers = { alc880_tcl_s700_mixer }, | ||
1221 | .init_verbs = { alc880_volume_init_verbs, | ||
1222 | alc880_pin_tcl_S700_init_verbs, | ||
1223 | alc880_gpio2_init_verbs }, | ||
1224 | .num_dacs = ARRAY_SIZE(alc880_dac_nids), | ||
1225 | .dac_nids = alc880_dac_nids, | ||
1226 | .adc_nids = alc880_adc_nids_alt, /* FIXME: correct? */ | ||
1227 | .num_adc_nids = 1, /* single ADC */ | ||
1228 | .hp_nid = 0x03, | ||
1229 | .num_channel_mode = ARRAY_SIZE(alc880_2_jack_modes), | ||
1230 | .channel_mode = alc880_2_jack_modes, | ||
1231 | .input_mux = &alc880_capture_source, | ||
1232 | }, | ||
1233 | [ALC880_5ST] = { | 1177 | [ALC880_5ST] = { |
1234 | .mixers = { alc880_three_stack_mixer, | 1178 | .mixers = { alc880_three_stack_mixer, |
1235 | alc880_five_stack_mixer}, | 1179 | alc880_five_stack_mixer}, |
diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c index 4f8c36207997..e6eec9a9ab47 100644 --- a/sound/pci/hda/patch_realtek.c +++ b/sound/pci/hda/patch_realtek.c | |||
@@ -4407,6 +4407,7 @@ enum { | |||
4407 | ALC880_FIXUP_LG, | 4407 | ALC880_FIXUP_LG, |
4408 | ALC880_FIXUP_W810, | 4408 | ALC880_FIXUP_W810, |
4409 | ALC880_FIXUP_EAPD_COEF, | 4409 | ALC880_FIXUP_EAPD_COEF, |
4410 | ALC880_FIXUP_TCL_S700, | ||
4410 | }; | 4411 | }; |
4411 | 4412 | ||
4412 | static const struct alc_fixup alc880_fixups[] = { | 4413 | static const struct alc_fixup alc880_fixups[] = { |
@@ -4453,6 +4454,17 @@ static const struct alc_fixup alc880_fixups[] = { | |||
4453 | {} | 4454 | {} |
4454 | }, | 4455 | }, |
4455 | }, | 4456 | }, |
4457 | [ALC880_FIXUP_TCL_S700] = { | ||
4458 | .type = ALC_FIXUP_VERBS, | ||
4459 | .v.verbs = (const struct hda_verb[]) { | ||
4460 | /* change to EAPD mode */ | ||
4461 | { 0x20, AC_VERB_SET_COEF_INDEX, 0x07 }, | ||
4462 | { 0x20, AC_VERB_SET_PROC_COEF, 0x3070 }, | ||
4463 | {} | ||
4464 | }, | ||
4465 | .chained = true, | ||
4466 | .chain_id = ALC880_FIXUP_GPIO2, | ||
4467 | }, | ||
4456 | }; | 4468 | }; |
4457 | 4469 | ||
4458 | static const struct snd_pci_quirk alc880_fixup_tbl[] = { | 4470 | static const struct snd_pci_quirk alc880_fixup_tbl[] = { |
@@ -4463,6 +4475,7 @@ static const struct snd_pci_quirk alc880_fixup_tbl[] = { | |||
4463 | SND_PCI_QUIRK(0x1854, 0x003b, "LG", ALC880_FIXUP_LG), | 4475 | SND_PCI_QUIRK(0x1854, 0x003b, "LG", ALC880_FIXUP_LG), |
4464 | SND_PCI_QUIRK(0x1854, 0x005f, "LG P1 Express", ALC880_FIXUP_LG), | 4476 | SND_PCI_QUIRK(0x1854, 0x005f, "LG P1 Express", ALC880_FIXUP_LG), |
4465 | SND_PCI_QUIRK(0x1854, 0x0068, "LG w1", ALC880_FIXUP_LG), | 4477 | SND_PCI_QUIRK(0x1854, 0x0068, "LG w1", ALC880_FIXUP_LG), |
4478 | SND_PCI_QUIRK(0x19db, 0x4188, "TCL S700", ALC880_FIXUP_TCL_S700), | ||
4466 | {} | 4479 | {} |
4467 | }; | 4480 | }; |
4468 | 4481 | ||