ALSA: hda - Add quirks for Realtek codecs

- Support ASUS F81Se F5Q P80 U20A U80 U50 UX50 for ALC269
- Support ASUS F70SL UX20 X58LE F50Z N80Vc N81Te N505Tp Vx3V N5051A
for ALC663
- Support DELL ZM1 for ALC272

Signed-off-by: Kailang Yang <kailang@realtek.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>

authored by Kailang Yang and committed by Takashi Iwai 622e84cd bb023080

+98
+98
sound/pci/hda/patch_realtek.c
··· 188 188 ALC663_ASUS_MODE4, 189 189 ALC663_ASUS_MODE5, 190 190 ALC663_ASUS_MODE6, 191 + ALC272_DELL, 192 + ALC272_DELL_ZM1, 191 193 ALC662_AUTO, 192 194 ALC662_MODEL_LAST, 193 195 }; ··· 12978 12976 SND_PCI_QUIRK(0x17aa, 0x3bf8, "Quanta FL1", ALC269_QUANTA_FL1), 12979 12977 SND_PCI_QUIRK(0x1043, 0x8330, "ASUS Eeepc P703 P900A", 12980 12978 ALC269_ASUS_EEEPC_P703), 12979 + SND_PCI_QUIRK(0x1043, 0x1883, "ASUS F81Se", ALC269_ASUS_EEEPC_P703), 12980 + SND_PCI_QUIRK(0x1043, 0x16a3, "ASUS F5Q", ALC269_ASUS_EEEPC_P703), 12981 + SND_PCI_QUIRK(0x1043, 0x1723, "ASUS P80", ALC269_ASUS_EEEPC_P703), 12982 + SND_PCI_QUIRK(0x1043, 0x1773, "ASUS U20A", ALC269_ASUS_EEEPC_P703), 12983 + SND_PCI_QUIRK(0x1043, 0x1743, "ASUS U80", ALC269_ASUS_EEEPC_P703), 12984 + SND_PCI_QUIRK(0x1043, 0x1653, "ASUS U50", ALC269_ASUS_EEEPC_P703), 12981 12985 SND_PCI_QUIRK(0x1043, 0x831a, "ASUS Eeepc P901", 12982 12986 ALC269_ASUS_EEEPC_P901), 12983 12987 SND_PCI_QUIRK(0x1043, 0x834a, "ASUS Eeepc S101", 12984 12988 ALC269_ASUS_EEEPC_P901), 12989 + SND_PCI_QUIRK(0x1043, 0x16e3, "ASUS UX50", ALC269_ASUS_EEEPC_P901), 12985 12990 SND_PCI_QUIRK(0x1734, 0x115d, "FSC Amilo", ALC269_FUJITSU), 12986 12991 SND_PCI_QUIRK(0x10cf, 0x1475, "Lifebook ICH9M-based", ALC269_LIFEBOOK), 12987 12992 {} ··· 15219 15210 0x02, 0x03, 0x04 15220 15211 }; 15221 15212 15213 + static hda_nid_t alc272_dac_nids[2] = { 15214 + 0x02, 0x03 15215 + }; 15216 + 15222 15217 static hda_nid_t alc662_adc_nids[1] = { 15223 15218 /* ADC1-2 */ 15224 15219 0x09, 15225 15220 }; 15226 15221 15222 + static hda_nid_t alc272_adc_nids[1] = { 15223 + /* ADC1-2 */ 15224 + 0x08, 15225 + }; 15226 + 15227 15227 static hda_nid_t alc662_capsrc_nids[1] = { 0x22 }; 15228 + static hda_nid_t alc272_capsrc_nids[1] = { 0x23 }; 15229 + 15228 15230 15229 15231 /* input MUX */ 15230 15232 /* FIXME: should be a matrix-type input source selection */ ··· 15856 15836 {} 15857 15837 }; 15858 15838 15839 + static struct hda_verb alc272_dell_zm1_init_verbs[] = { 15840 + {0x12, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN}, 15841 + {0x13, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN}, 15842 + {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN}, 15843 + {0x16, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN}, 15844 + {0x21, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_HP}, 15845 + {0x21, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE}, 15846 + {0x21, AC_VERB_SET_CONNECT_SEL, 0x01}, /* Headphone */ 15847 + {0x22, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0)}, 15848 + {0x22, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(9)}, 15849 + {0x18, AC_VERB_SET_UNSOLICITED_ENABLE, AC_USRSP_EN | ALC880_MIC_EVENT}, 15850 + {0x21, AC_VERB_SET_UNSOLICITED_ENABLE, AC_USRSP_EN | ALC880_HP_EVENT}, 15851 + {} 15852 + }; 15853 + 15854 + static struct hda_verb alc272_dell_init_verbs[] = { 15855 + {0x12, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN}, 15856 + {0x13, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN}, 15857 + {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN}, 15858 + {0x16, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN}, 15859 + {0x21, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_HP}, 15860 + {0x21, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE}, 15861 + {0x21, AC_VERB_SET_CONNECT_SEL, 0x01}, /* Headphone */ 15862 + {0x23, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0)}, 15863 + {0x23, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(9)}, 15864 + {0x18, AC_VERB_SET_UNSOLICITED_ENABLE, AC_USRSP_EN | ALC880_MIC_EVENT}, 15865 + {0x21, AC_VERB_SET_UNSOLICITED_ENABLE, AC_USRSP_EN | ALC880_HP_EVENT}, 15866 + {} 15867 + }; 15868 + 15859 15869 static struct snd_kcontrol_new alc662_auto_capture_mixer[] = { 15860 15870 HDA_CODEC_VOLUME("Capture Volume", 0x09, 0x0, HDA_INPUT), 15861 15871 HDA_CODEC_MUTE("Capture Switch", 0x09, 0x0, HDA_INPUT), 15872 + { } /* end */ 15873 + }; 15874 + 15875 + static struct snd_kcontrol_new alc272_auto_capture_mixer[] = { 15876 + HDA_CODEC_VOLUME("Capture Volume", 0x08, 0x0, HDA_INPUT), 15877 + HDA_CODEC_MUTE("Capture Switch", 0x08, 0x0, HDA_INPUT), 15862 15878 { } /* end */ 15863 15879 }; 15864 15880 ··· 16409 16353 16410 16354 static struct snd_pci_quirk alc662_cfg_tbl[] = { 16411 16355 SND_PCI_QUIRK(0x1019, 0x9087, "ECS", ALC662_ECS), 16356 + SND_PCI_QUIRK(0x1028, 0x02d6, "DELL", ALC272_DELL), 16357 + SND_PCI_QUIRK(0x1028, 0x02f4, "DELL ZM1", ALC272_DELL_ZM1), 16412 16358 SND_PCI_QUIRK(0x1043, 0x1000, "ASUS N50Vm", ALC663_ASUS_MODE1), 16413 16359 SND_PCI_QUIRK(0x1043, 0x1092, "ASUS NB", ALC663_ASUS_MODE3), 16414 16360 SND_PCI_QUIRK(0x1043, 0x11c3, "ASUS M70V", ALC663_ASUS_MODE3), ··· 16423 16365 SND_PCI_QUIRK(0x1043, 0x1763, "ASUS NB", ALC663_ASUS_MODE6), 16424 16366 SND_PCI_QUIRK(0x1043, 0x1765, "ASUS NB", ALC663_ASUS_MODE6), 16425 16367 SND_PCI_QUIRK(0x1043, 0x1783, "ASUS NB", ALC662_ASUS_MODE2), 16368 + SND_PCI_QUIRK(0x1043, 0x17b3, "ASUS F70SL", ALC663_ASUS_MODE3), 16369 + SND_PCI_QUIRK(0x1043, 0x17c3, "ASUS UX20", ALC663_ASUS_M51VA), 16370 + SND_PCI_QUIRK(0x1043, 0x17f3, "ASUS X58LE", ALC662_ASUS_MODE2), 16426 16371 SND_PCI_QUIRK(0x1043, 0x1813, "ASUS NB", ALC662_ASUS_MODE2), 16427 16372 SND_PCI_QUIRK(0x1043, 0x1823, "ASUS NB", ALC663_ASUS_MODE5), 16428 16373 SND_PCI_QUIRK(0x1043, 0x1833, "ASUS NB", ALC663_ASUS_MODE6), 16429 16374 SND_PCI_QUIRK(0x1043, 0x1843, "ASUS NB", ALC662_ASUS_MODE2), 16375 + SND_PCI_QUIRK(0x1043, 0x1853, "ASUS F50Z", ALC663_ASUS_MODE1), 16430 16376 SND_PCI_QUIRK(0x1043, 0x1864, "ASUS NB", ALC662_ASUS_MODE2), 16431 16377 SND_PCI_QUIRK(0x1043, 0x1876, "ASUS NB", ALC662_ASUS_MODE2), 16432 16378 SND_PCI_QUIRK(0x1043, 0x1878, "ASUS M51VA", ALC663_ASUS_M51VA), 16433 16379 /*SND_PCI_QUIRK(0x1043, 0x1878, "ASUS M50Vr", ALC663_ASUS_MODE1),*/ 16434 16380 SND_PCI_QUIRK(0x1043, 0x1893, "ASUS M50Vm", ALC663_ASUS_MODE3), 16435 16381 SND_PCI_QUIRK(0x1043, 0x1894, "ASUS X55", ALC663_ASUS_MODE3), 16382 + SND_PCI_QUIRK(0x1043, 0x18b3, "ASUS N80Vc", ALC663_ASUS_MODE1), 16383 + SND_PCI_QUIRK(0x1043, 0x18d3, "ASUS N81Te", ALC663_ASUS_MODE1), 16384 + SND_PCI_QUIRK(0x1043, 0x18f3, "ASUS N505Tp", ALC663_ASUS_MODE1), 16436 16385 SND_PCI_QUIRK(0x1043, 0x1903, "ASUS F5GL", ALC663_ASUS_MODE1), 16437 16386 SND_PCI_QUIRK(0x1043, 0x1913, "ASUS NB", ALC662_ASUS_MODE2), 16438 16387 SND_PCI_QUIRK(0x1043, 0x1933, "ASUS F80Q", ALC662_ASUS_MODE2), 16388 + SND_PCI_QUIRK(0x1043, 0x1943, "ASUS Vx3V", ALC663_ASUS_MODE1), 16439 16389 SND_PCI_QUIRK(0x1043, 0x1953, "ASUS NB", ALC663_ASUS_MODE1), 16440 16390 SND_PCI_QUIRK(0x1043, 0x1963, "ASUS X71C", ALC663_ASUS_MODE3), 16391 + SND_PCI_QUIRK(0x1043, 0x1983, "ASUS N5051A", ALC663_ASUS_MODE1), 16441 16392 SND_PCI_QUIRK(0x1043, 0x1993, "ASUS N20", ALC663_ASUS_MODE1), 16442 16393 SND_PCI_QUIRK(0x1043, 0x19a3, "ASUS G50V", ALC663_ASUS_G50V), 16443 16394 /*SND_PCI_QUIRK(0x1043, 0x19a3, "ASUS NB", ALC663_ASUS_MODE1),*/ 16444 16395 SND_PCI_QUIRK(0x1043, 0x19b3, "ASUS F7Z", ALC663_ASUS_MODE1), 16445 16396 SND_PCI_QUIRK(0x1043, 0x19c3, "ASUS F5Z/F6x", ALC662_ASUS_MODE2), 16397 + SND_PCI_QUIRK(0x1043, 0x19d3, "ASUS NB", ALC663_ASUS_M51VA), 16446 16398 SND_PCI_QUIRK(0x1043, 0x19e3, "ASUS NB", ALC663_ASUS_MODE1), 16447 16399 SND_PCI_QUIRK(0x1043, 0x19f3, "ASUS NB", ALC663_ASUS_MODE4), 16448 16400 SND_PCI_QUIRK(0x1043, 0x8290, "ASUS P5GC-MX", ALC662_3ST_6ch_DIG), ··· 16700 16632 .input_mux = &alc662_eeepc_capture_source, 16701 16633 .unsol_event = alc663_mode6_unsol_event, 16702 16634 .init_hook = alc663_mode6_inithook, 16635 + }, 16636 + [ALC272_DELL] = { 16637 + .mixers = { alc663_m51va_mixer }, 16638 + .cap_mixer = alc272_auto_capture_mixer, 16639 + .init_verbs = { alc662_init_verbs, alc272_dell_init_verbs }, 16640 + .num_dacs = ARRAY_SIZE(alc272_dac_nids), 16641 + .dac_nids = alc662_dac_nids, 16642 + .num_channel_mode = ARRAY_SIZE(alc662_3ST_2ch_modes), 16643 + .adc_nids = alc272_adc_nids, 16644 + .num_adc_nids = ARRAY_SIZE(alc272_adc_nids), 16645 + .capsrc_nids = alc272_capsrc_nids, 16646 + .channel_mode = alc662_3ST_2ch_modes, 16647 + .input_mux = &alc663_m51va_capture_source, 16648 + .unsol_event = alc663_m51va_unsol_event, 16649 + .init_hook = alc663_m51va_inithook, 16650 + }, 16651 + [ALC272_DELL_ZM1] = { 16652 + .mixers = { alc663_m51va_mixer }, 16653 + .cap_mixer = alc662_auto_capture_mixer, 16654 + .init_verbs = { alc662_init_verbs, alc272_dell_zm1_init_verbs }, 16655 + .num_dacs = ARRAY_SIZE(alc272_dac_nids), 16656 + .dac_nids = alc662_dac_nids, 16657 + .num_channel_mode = ARRAY_SIZE(alc662_3ST_2ch_modes), 16658 + .adc_nids = alc662_adc_nids, 16659 + .num_adc_nids = ARRAY_SIZE(alc662_adc_nids), 16660 + .capsrc_nids = alc662_capsrc_nids, 16661 + .channel_mode = alc662_3ST_2ch_modes, 16662 + .input_mux = &alc663_m51va_capture_source, 16663 + .unsol_event = alc663_m51va_unsol_event, 16664 + .init_hook = alc663_m51va_inithook, 16703 16665 }, 16704 16666 }; 16705 16667