diff options
| -rw-r--r-- | sound/pci/hda/patch_realtek.c | 112 |
1 files changed, 44 insertions, 68 deletions
diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c index 826ecdbdd2bb..82772f0ab3e7 100644 --- a/sound/pci/hda/patch_realtek.c +++ b/sound/pci/hda/patch_realtek.c | |||
| @@ -16597,13 +16597,6 @@ static struct hda_verb alc662_init_verbs[] = { | |||
| 16597 | /* ADC: mute amp left and right */ | 16597 | /* ADC: mute amp left and right */ |
| 16598 | {0x09, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0)}, | 16598 | {0x09, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0)}, |
| 16599 | {0x09, AC_VERB_SET_CONNECT_SEL, 0x00}, | 16599 | {0x09, AC_VERB_SET_CONNECT_SEL, 0x00}, |
| 16600 | /* Front mixer: unmute input/output amp left and right (volume = 0) */ | ||
| 16601 | |||
| 16602 | {0x0b, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0)}, | ||
| 16603 | {0x0b, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(1)}, | ||
| 16604 | {0x0b, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(2)}, | ||
| 16605 | {0x0b, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(3)}, | ||
| 16606 | {0x0b, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(4)}, | ||
| 16607 | 16600 | ||
| 16608 | {0x0c, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)}, | 16601 | {0x0c, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)}, |
| 16609 | {0x0c, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(1)}, | 16602 | {0x0c, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(1)}, |
| @@ -16653,6 +16646,28 @@ static struct hda_verb alc662_init_verbs[] = { | |||
| 16653 | { } | 16646 | { } |
| 16654 | }; | 16647 | }; |
| 16655 | 16648 | ||
| 16649 | static struct hda_verb alc663_init_verbs[] = { | ||
| 16650 | {0x17, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT}, | ||
| 16651 | {0x17, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE}, | ||
| 16652 | {0x21, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT}, | ||
| 16653 | {0x21, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE}, | ||
| 16654 | {0x0f, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)}, | ||
| 16655 | {0x0f, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(1)}, | ||
| 16656 | { } | ||
| 16657 | }; | ||
| 16658 | |||
| 16659 | static struct hda_verb alc272_init_verbs[] = { | ||
| 16660 | {0x16, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN}, | ||
| 16661 | {0x16, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE}, | ||
| 16662 | {0x17, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT}, | ||
| 16663 | {0x17, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE}, | ||
| 16664 | {0x21, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT}, | ||
| 16665 | {0x21, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE}, | ||
| 16666 | {0x0f, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)}, | ||
| 16667 | {0x0f, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(1)}, | ||
| 16668 | { } | ||
| 16669 | }; | ||
| 16670 | |||
| 16656 | static struct hda_verb alc662_sue_init_verbs[] = { | 16671 | static struct hda_verb alc662_sue_init_verbs[] = { |
| 16657 | {0x14, AC_VERB_SET_UNSOLICITED_ENABLE, AC_USRSP_EN|ALC880_FRONT_EVENT}, | 16672 | {0x14, AC_VERB_SET_UNSOLICITED_ENABLE, AC_USRSP_EN|ALC880_FRONT_EVENT}, |
| 16658 | {0x1b, AC_VERB_SET_UNSOLICITED_ENABLE, AC_USRSP_EN|ALC880_HP_EVENT}, | 16673 | {0x1b, AC_VERB_SET_UNSOLICITED_ENABLE, AC_USRSP_EN|ALC880_HP_EVENT}, |
| @@ -16672,61 +16687,6 @@ static struct hda_verb alc662_eeepc_ep20_sue_init_verbs[] = { | |||
| 16672 | {} | 16687 | {} |
| 16673 | }; | 16688 | }; |
| 16674 | 16689 | ||
| 16675 | /* | ||
| 16676 | * generic initialization of ADC, input mixers and output mixers | ||
| 16677 | */ | ||
| 16678 | static struct hda_verb alc662_auto_init_verbs[] = { | ||
| 16679 | /* | ||
| 16680 | * Unmute ADC and set the default input to mic-in | ||
| 16681 | */ | ||
| 16682 | {0x09, AC_VERB_SET_CONNECT_SEL, 0x00}, | ||
| 16683 | {0x09, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)}, | ||
| 16684 | |||
| 16685 | /* Unmute input amps (CD, Line In, Mic 1 & Mic 2) of the analog-loopback | ||
| 16686 | * mixer widget | ||
| 16687 | * Note: PASD motherboards uses the Line In 2 as the input for front | ||
| 16688 | * panel mic (mic 2) | ||
| 16689 | */ | ||
| 16690 | /* Amp Indices: Mic1 = 0, Mic2 = 1, Line1 = 2, Line2 = 3, CD = 4 */ | ||
| 16691 | {0x0b, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0)}, | ||
| 16692 | {0x0b, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(1)}, | ||
| 16693 | {0x0b, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(2)}, | ||
| 16694 | {0x0b, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(3)}, | ||
| 16695 | {0x0b, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(4)}, | ||
| 16696 | |||
| 16697 | /* | ||
| 16698 | * Set up output mixers (0x0c - 0x0f) | ||
| 16699 | */ | ||
| 16700 | /* set vol=0 to output mixers */ | ||
| 16701 | {0x02, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_ZERO}, | ||
| 16702 | {0x03, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_ZERO}, | ||
| 16703 | {0x04, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_ZERO}, | ||
| 16704 | |||
| 16705 | /* set up input amps for analog loopback */ | ||
| 16706 | /* Amp Indices: DAC = 0, mixer = 1 */ | ||
| 16707 | {0x0c, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)}, | ||
| 16708 | {0x0c, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(1)}, | ||
| 16709 | {0x0d, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)}, | ||
| 16710 | {0x0d, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(1)}, | ||
| 16711 | {0x0e, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)}, | ||
| 16712 | {0x0e, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(1)}, | ||
| 16713 | |||
| 16714 | |||
| 16715 | /* FIXME: use matrix-type input source selection */ | ||
| 16716 | /* Mixer elements: 0x18, 19, 1a, 1b, 1c, 1d, 14, 15, 16, 17, 0b */ | ||
| 16717 | /* Input mixer */ | ||
| 16718 | {0x22, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)}, | ||
| 16719 | {0x23, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)}, | ||
| 16720 | { } | ||
| 16721 | }; | ||
| 16722 | |||
| 16723 | /* additional verbs for ALC663 */ | ||
| 16724 | static struct hda_verb alc663_auto_init_verbs[] = { | ||
| 16725 | {0x0f, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)}, | ||
| 16726 | {0x0f, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(1)}, | ||
| 16727 | { } | ||
| 16728 | }; | ||
| 16729 | |||
| 16730 | static struct hda_verb alc663_m51va_init_verbs[] = { | 16690 | static struct hda_verb alc663_m51va_init_verbs[] = { |
| 16731 | {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN}, | 16691 | {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN}, |
| 16732 | {0x16, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN}, | 16692 | {0x16, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN}, |
| @@ -17477,6 +17437,7 @@ static struct snd_pci_quirk alc662_cfg_tbl[] = { | |||
| 17477 | SND_PCI_QUIRK(0x1028, 0x02f4, "DELL ZM1", ALC272_DELL_ZM1), | 17437 | SND_PCI_QUIRK(0x1028, 0x02f4, "DELL ZM1", ALC272_DELL_ZM1), |
| 17478 | SND_PCI_QUIRK(0x1043, 0x1000, "ASUS N50Vm", ALC663_ASUS_MODE1), | 17438 | SND_PCI_QUIRK(0x1043, 0x1000, "ASUS N50Vm", ALC663_ASUS_MODE1), |
| 17479 | SND_PCI_QUIRK(0x1043, 0x1092, "ASUS NB", ALC663_ASUS_MODE3), | 17439 | SND_PCI_QUIRK(0x1043, 0x1092, "ASUS NB", ALC663_ASUS_MODE3), |
| 17440 | SND_PCI_QUIRK(0x1043, 0x1173, "ASUS K73Jn", ALC663_ASUS_MODE1), | ||
| 17480 | SND_PCI_QUIRK(0x1043, 0x11c3, "ASUS M70V", ALC663_ASUS_MODE3), | 17441 | SND_PCI_QUIRK(0x1043, 0x11c3, "ASUS M70V", ALC663_ASUS_MODE3), |
| 17481 | SND_PCI_QUIRK(0x1043, 0x11d3, "ASUS NB", ALC663_ASUS_MODE1), | 17442 | SND_PCI_QUIRK(0x1043, 0x11d3, "ASUS NB", ALC663_ASUS_MODE1), |
| 17482 | SND_PCI_QUIRK(0x1043, 0x11f3, "ASUS NB", ALC662_ASUS_MODE2), | 17443 | SND_PCI_QUIRK(0x1043, 0x11f3, "ASUS NB", ALC662_ASUS_MODE2), |
| @@ -17512,6 +17473,7 @@ static struct snd_pci_quirk alc662_cfg_tbl[] = { | |||
| 17512 | SND_PCI_QUIRK(0x1043, 0x1893, "ASUS M50Vm", ALC663_ASUS_MODE3), | 17473 | SND_PCI_QUIRK(0x1043, 0x1893, "ASUS M50Vm", ALC663_ASUS_MODE3), |
| 17513 | SND_PCI_QUIRK(0x1043, 0x1894, "ASUS X55", ALC663_ASUS_MODE3), | 17474 | SND_PCI_QUIRK(0x1043, 0x1894, "ASUS X55", ALC663_ASUS_MODE3), |
| 17514 | SND_PCI_QUIRK(0x1043, 0x18b3, "ASUS N80Vc", ALC663_ASUS_MODE1), | 17475 | SND_PCI_QUIRK(0x1043, 0x18b3, "ASUS N80Vc", ALC663_ASUS_MODE1), |
| 17476 | SND_PCI_QUIRK(0x1043, 0x18c3, "ASUS VX5", ALC663_ASUS_MODE1), | ||
| 17515 | SND_PCI_QUIRK(0x1043, 0x18d3, "ASUS N81Te", ALC663_ASUS_MODE1), | 17477 | SND_PCI_QUIRK(0x1043, 0x18d3, "ASUS N81Te", ALC663_ASUS_MODE1), |
| 17516 | SND_PCI_QUIRK(0x1043, 0x18f3, "ASUS N505Tp", ALC663_ASUS_MODE1), | 17478 | SND_PCI_QUIRK(0x1043, 0x18f3, "ASUS N505Tp", ALC663_ASUS_MODE1), |
| 17517 | SND_PCI_QUIRK(0x1043, 0x1903, "ASUS F5GL", ALC663_ASUS_MODE1), | 17479 | SND_PCI_QUIRK(0x1043, 0x1903, "ASUS F5GL", ALC663_ASUS_MODE1), |
| @@ -18157,9 +18119,13 @@ static int alc662_parse_auto_config(struct hda_codec *codec) | |||
| 18157 | spec->num_mux_defs = 1; | 18119 | spec->num_mux_defs = 1; |
| 18158 | spec->input_mux = &spec->private_imux[0]; | 18120 | spec->input_mux = &spec->private_imux[0]; |
| 18159 | 18121 | ||
| 18160 | add_verb(spec, alc662_auto_init_verbs); | 18122 | add_verb(spec, alc662_init_verbs); |
| 18161 | if (codec->vendor_id == 0x10ec0663) | 18123 | if (codec->vendor_id == 0x10ec0272 || codec->vendor_id == 0x10ec0663 || |
| 18162 | add_verb(spec, alc663_auto_init_verbs); | 18124 | codec->vendor_id == 0x10ec0665) |
| 18125 | add_verb(spec, alc663_init_verbs); | ||
| 18126 | |||
| 18127 | if (codec->vendor_id == 0x10ec0272) | ||
| 18128 | add_verb(spec, alc272_init_verbs); | ||
| 18163 | 18129 | ||
| 18164 | err = alc_auto_add_mic_boost(codec); | 18130 | err = alc_auto_add_mic_boost(codec); |
| 18165 | if (err < 0) | 18131 | if (err < 0) |
| @@ -18251,11 +18217,20 @@ static int patch_alc662(struct hda_codec *codec) | |||
| 18251 | 18217 | ||
| 18252 | if (!spec->cap_mixer) | 18218 | if (!spec->cap_mixer) |
| 18253 | set_capture_mixer(codec); | 18219 | set_capture_mixer(codec); |
| 18254 | if (codec->vendor_id == 0x10ec0662) | 18220 | |
| 18221 | switch (codec->vendor_id) { | ||
| 18222 | case 0x10ec0662: | ||
| 18255 | set_beep_amp(spec, 0x0b, 0x05, HDA_INPUT); | 18223 | set_beep_amp(spec, 0x0b, 0x05, HDA_INPUT); |
| 18256 | else | 18224 | break; |
| 18225 | case 0x10ec0272: | ||
| 18226 | case 0x10ec0663: | ||
| 18227 | case 0x10ec0665: | ||
| 18257 | set_beep_amp(spec, 0x0b, 0x04, HDA_INPUT); | 18228 | set_beep_amp(spec, 0x0b, 0x04, HDA_INPUT); |
| 18258 | 18229 | break; | |
| 18230 | case 0x10ec0273: | ||
| 18231 | set_beep_amp(spec, 0x0b, 0x03, HDA_INPUT); | ||
| 18232 | break; | ||
| 18233 | } | ||
| 18259 | spec->vmaster_nid = 0x02; | 18234 | spec->vmaster_nid = 0x02; |
| 18260 | 18235 | ||
| 18261 | codec->patch_ops = alc_patch_ops; | 18236 | codec->patch_ops = alc_patch_ops; |
| @@ -18305,6 +18280,7 @@ static struct hda_codec_preset snd_hda_preset_realtek[] = { | |||
| 18305 | { .id = 0x10ec0662, .rev = 0x100101, .name = "ALC662 rev1", | 18280 | { .id = 0x10ec0662, .rev = 0x100101, .name = "ALC662 rev1", |
| 18306 | .patch = patch_alc662 }, | 18281 | .patch = patch_alc662 }, |
| 18307 | { .id = 0x10ec0663, .name = "ALC663", .patch = patch_alc662 }, | 18282 | { .id = 0x10ec0663, .name = "ALC663", .patch = patch_alc662 }, |
| 18283 | { .id = 0x10ec0665, .name = "ALC665", .patch = patch_alc662 }, | ||
| 18308 | { .id = 0x10ec0880, .name = "ALC880", .patch = patch_alc880 }, | 18284 | { .id = 0x10ec0880, .name = "ALC880", .patch = patch_alc880 }, |
| 18309 | { .id = 0x10ec0882, .name = "ALC882", .patch = patch_alc882 }, | 18285 | { .id = 0x10ec0882, .name = "ALC882", .patch = patch_alc882 }, |
| 18310 | { .id = 0x10ec0883, .name = "ALC883", .patch = patch_alc882 }, | 18286 | { .id = 0x10ec0883, .name = "ALC883", .patch = patch_alc882 }, |
