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>
This commit is contained in:
parent
bb023080fe
commit
622e84cdff
1 changed files with 98 additions and 0 deletions
|
@ -188,6 +188,8 @@ enum {
|
|||
ALC663_ASUS_MODE4,
|
||||
ALC663_ASUS_MODE5,
|
||||
ALC663_ASUS_MODE6,
|
||||
ALC272_DELL,
|
||||
ALC272_DELL_ZM1,
|
||||
ALC662_AUTO,
|
||||
ALC662_MODEL_LAST,
|
||||
};
|
||||
|
@ -12976,10 +12978,17 @@ static struct snd_pci_quirk alc269_cfg_tbl[] = {
|
|||
SND_PCI_QUIRK(0x17aa, 0x3bf8, "Quanta FL1", ALC269_QUANTA_FL1),
|
||||
SND_PCI_QUIRK(0x1043, 0x8330, "ASUS Eeepc P703 P900A",
|
||||
ALC269_ASUS_EEEPC_P703),
|
||||
SND_PCI_QUIRK(0x1043, 0x1883, "ASUS F81Se", ALC269_ASUS_EEEPC_P703),
|
||||
SND_PCI_QUIRK(0x1043, 0x16a3, "ASUS F5Q", ALC269_ASUS_EEEPC_P703),
|
||||
SND_PCI_QUIRK(0x1043, 0x1723, "ASUS P80", ALC269_ASUS_EEEPC_P703),
|
||||
SND_PCI_QUIRK(0x1043, 0x1773, "ASUS U20A", ALC269_ASUS_EEEPC_P703),
|
||||
SND_PCI_QUIRK(0x1043, 0x1743, "ASUS U80", ALC269_ASUS_EEEPC_P703),
|
||||
SND_PCI_QUIRK(0x1043, 0x1653, "ASUS U50", ALC269_ASUS_EEEPC_P703),
|
||||
SND_PCI_QUIRK(0x1043, 0x831a, "ASUS Eeepc P901",
|
||||
ALC269_ASUS_EEEPC_P901),
|
||||
SND_PCI_QUIRK(0x1043, 0x834a, "ASUS Eeepc S101",
|
||||
ALC269_ASUS_EEEPC_P901),
|
||||
SND_PCI_QUIRK(0x1043, 0x16e3, "ASUS UX50", ALC269_ASUS_EEEPC_P901),
|
||||
SND_PCI_QUIRK(0x1734, 0x115d, "FSC Amilo", ALC269_FUJITSU),
|
||||
SND_PCI_QUIRK(0x10cf, 0x1475, "Lifebook ICH9M-based", ALC269_LIFEBOOK),
|
||||
{}
|
||||
|
@ -15210,12 +15219,23 @@ static hda_nid_t alc662_dac_nids[4] = {
|
|||
0x02, 0x03, 0x04
|
||||
};
|
||||
|
||||
static hda_nid_t alc272_dac_nids[2] = {
|
||||
0x02, 0x03
|
||||
};
|
||||
|
||||
static hda_nid_t alc662_adc_nids[1] = {
|
||||
/* ADC1-2 */
|
||||
0x09,
|
||||
};
|
||||
|
||||
static hda_nid_t alc272_adc_nids[1] = {
|
||||
/* ADC1-2 */
|
||||
0x08,
|
||||
};
|
||||
|
||||
static hda_nid_t alc662_capsrc_nids[1] = { 0x22 };
|
||||
static hda_nid_t alc272_capsrc_nids[1] = { 0x23 };
|
||||
|
||||
|
||||
/* input MUX */
|
||||
/* FIXME: should be a matrix-type input source selection */
|
||||
|
@ -15836,12 +15856,48 @@ static struct hda_verb alc662_ecs_init_verbs[] = {
|
|||
{}
|
||||
};
|
||||
|
||||
static struct hda_verb alc272_dell_zm1_init_verbs[] = {
|
||||
{0x12, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN},
|
||||
{0x13, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN},
|
||||
{0x15, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN},
|
||||
{0x16, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN},
|
||||
{0x21, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_HP},
|
||||
{0x21, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE},
|
||||
{0x21, AC_VERB_SET_CONNECT_SEL, 0x01}, /* Headphone */
|
||||
{0x22, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0)},
|
||||
{0x22, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(9)},
|
||||
{0x18, AC_VERB_SET_UNSOLICITED_ENABLE, AC_USRSP_EN | ALC880_MIC_EVENT},
|
||||
{0x21, AC_VERB_SET_UNSOLICITED_ENABLE, AC_USRSP_EN | ALC880_HP_EVENT},
|
||||
{}
|
||||
};
|
||||
|
||||
static struct hda_verb alc272_dell_init_verbs[] = {
|
||||
{0x12, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN},
|
||||
{0x13, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN},
|
||||
{0x15, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN},
|
||||
{0x16, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN},
|
||||
{0x21, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_HP},
|
||||
{0x21, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE},
|
||||
{0x21, AC_VERB_SET_CONNECT_SEL, 0x01}, /* Headphone */
|
||||
{0x23, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0)},
|
||||
{0x23, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(9)},
|
||||
{0x18, AC_VERB_SET_UNSOLICITED_ENABLE, AC_USRSP_EN | ALC880_MIC_EVENT},
|
||||
{0x21, AC_VERB_SET_UNSOLICITED_ENABLE, AC_USRSP_EN | ALC880_HP_EVENT},
|
||||
{}
|
||||
};
|
||||
|
||||
static struct snd_kcontrol_new alc662_auto_capture_mixer[] = {
|
||||
HDA_CODEC_VOLUME("Capture Volume", 0x09, 0x0, HDA_INPUT),
|
||||
HDA_CODEC_MUTE("Capture Switch", 0x09, 0x0, HDA_INPUT),
|
||||
{ } /* end */
|
||||
};
|
||||
|
||||
static struct snd_kcontrol_new alc272_auto_capture_mixer[] = {
|
||||
HDA_CODEC_VOLUME("Capture Volume", 0x08, 0x0, HDA_INPUT),
|
||||
HDA_CODEC_MUTE("Capture Switch", 0x08, 0x0, HDA_INPUT),
|
||||
{ } /* end */
|
||||
};
|
||||
|
||||
static void alc662_lenovo_101e_ispeaker_automute(struct hda_codec *codec)
|
||||
{
|
||||
unsigned int present;
|
||||
|
@ -16353,6 +16409,8 @@ static const char *alc662_models[ALC662_MODEL_LAST] = {
|
|||
|
||||
static struct snd_pci_quirk alc662_cfg_tbl[] = {
|
||||
SND_PCI_QUIRK(0x1019, 0x9087, "ECS", ALC662_ECS),
|
||||
SND_PCI_QUIRK(0x1028, 0x02d6, "DELL", ALC272_DELL),
|
||||
SND_PCI_QUIRK(0x1028, 0x02f4, "DELL ZM1", ALC272_DELL_ZM1),
|
||||
SND_PCI_QUIRK(0x1043, 0x1000, "ASUS N50Vm", ALC663_ASUS_MODE1),
|
||||
SND_PCI_QUIRK(0x1043, 0x1092, "ASUS NB", ALC663_ASUS_MODE3),
|
||||
SND_PCI_QUIRK(0x1043, 0x11c3, "ASUS M70V", ALC663_ASUS_MODE3),
|
||||
|
@ -16365,26 +16423,36 @@ static struct snd_pci_quirk alc662_cfg_tbl[] = {
|
|||
SND_PCI_QUIRK(0x1043, 0x1763, "ASUS NB", ALC663_ASUS_MODE6),
|
||||
SND_PCI_QUIRK(0x1043, 0x1765, "ASUS NB", ALC663_ASUS_MODE6),
|
||||
SND_PCI_QUIRK(0x1043, 0x1783, "ASUS NB", ALC662_ASUS_MODE2),
|
||||
SND_PCI_QUIRK(0x1043, 0x17b3, "ASUS F70SL", ALC663_ASUS_MODE3),
|
||||
SND_PCI_QUIRK(0x1043, 0x17c3, "ASUS UX20", ALC663_ASUS_M51VA),
|
||||
SND_PCI_QUIRK(0x1043, 0x17f3, "ASUS X58LE", ALC662_ASUS_MODE2),
|
||||
SND_PCI_QUIRK(0x1043, 0x1813, "ASUS NB", ALC662_ASUS_MODE2),
|
||||
SND_PCI_QUIRK(0x1043, 0x1823, "ASUS NB", ALC663_ASUS_MODE5),
|
||||
SND_PCI_QUIRK(0x1043, 0x1833, "ASUS NB", ALC663_ASUS_MODE6),
|
||||
SND_PCI_QUIRK(0x1043, 0x1843, "ASUS NB", ALC662_ASUS_MODE2),
|
||||
SND_PCI_QUIRK(0x1043, 0x1853, "ASUS F50Z", ALC663_ASUS_MODE1),
|
||||
SND_PCI_QUIRK(0x1043, 0x1864, "ASUS NB", ALC662_ASUS_MODE2),
|
||||
SND_PCI_QUIRK(0x1043, 0x1876, "ASUS NB", ALC662_ASUS_MODE2),
|
||||
SND_PCI_QUIRK(0x1043, 0x1878, "ASUS M51VA", ALC663_ASUS_M51VA),
|
||||
/*SND_PCI_QUIRK(0x1043, 0x1878, "ASUS M50Vr", ALC663_ASUS_MODE1),*/
|
||||
SND_PCI_QUIRK(0x1043, 0x1893, "ASUS M50Vm", ALC663_ASUS_MODE3),
|
||||
SND_PCI_QUIRK(0x1043, 0x1894, "ASUS X55", ALC663_ASUS_MODE3),
|
||||
SND_PCI_QUIRK(0x1043, 0x18b3, "ASUS N80Vc", ALC663_ASUS_MODE1),
|
||||
SND_PCI_QUIRK(0x1043, 0x18d3, "ASUS N81Te", ALC663_ASUS_MODE1),
|
||||
SND_PCI_QUIRK(0x1043, 0x18f3, "ASUS N505Tp", ALC663_ASUS_MODE1),
|
||||
SND_PCI_QUIRK(0x1043, 0x1903, "ASUS F5GL", ALC663_ASUS_MODE1),
|
||||
SND_PCI_QUIRK(0x1043, 0x1913, "ASUS NB", ALC662_ASUS_MODE2),
|
||||
SND_PCI_QUIRK(0x1043, 0x1933, "ASUS F80Q", ALC662_ASUS_MODE2),
|
||||
SND_PCI_QUIRK(0x1043, 0x1943, "ASUS Vx3V", ALC663_ASUS_MODE1),
|
||||
SND_PCI_QUIRK(0x1043, 0x1953, "ASUS NB", ALC663_ASUS_MODE1),
|
||||
SND_PCI_QUIRK(0x1043, 0x1963, "ASUS X71C", ALC663_ASUS_MODE3),
|
||||
SND_PCI_QUIRK(0x1043, 0x1983, "ASUS N5051A", ALC663_ASUS_MODE1),
|
||||
SND_PCI_QUIRK(0x1043, 0x1993, "ASUS N20", ALC663_ASUS_MODE1),
|
||||
SND_PCI_QUIRK(0x1043, 0x19a3, "ASUS G50V", ALC663_ASUS_G50V),
|
||||
/*SND_PCI_QUIRK(0x1043, 0x19a3, "ASUS NB", ALC663_ASUS_MODE1),*/
|
||||
SND_PCI_QUIRK(0x1043, 0x19b3, "ASUS F7Z", ALC663_ASUS_MODE1),
|
||||
SND_PCI_QUIRK(0x1043, 0x19c3, "ASUS F5Z/F6x", ALC662_ASUS_MODE2),
|
||||
SND_PCI_QUIRK(0x1043, 0x19d3, "ASUS NB", ALC663_ASUS_M51VA),
|
||||
SND_PCI_QUIRK(0x1043, 0x19e3, "ASUS NB", ALC663_ASUS_MODE1),
|
||||
SND_PCI_QUIRK(0x1043, 0x19f3, "ASUS NB", ALC663_ASUS_MODE4),
|
||||
SND_PCI_QUIRK(0x1043, 0x8290, "ASUS P5GC-MX", ALC662_3ST_6ch_DIG),
|
||||
|
@ -16633,6 +16701,36 @@ static struct alc_config_preset alc662_presets[] = {
|
|||
.unsol_event = alc663_mode6_unsol_event,
|
||||
.init_hook = alc663_mode6_inithook,
|
||||
},
|
||||
[ALC272_DELL] = {
|
||||
.mixers = { alc663_m51va_mixer },
|
||||
.cap_mixer = alc272_auto_capture_mixer,
|
||||
.init_verbs = { alc662_init_verbs, alc272_dell_init_verbs },
|
||||
.num_dacs = ARRAY_SIZE(alc272_dac_nids),
|
||||
.dac_nids = alc662_dac_nids,
|
||||
.num_channel_mode = ARRAY_SIZE(alc662_3ST_2ch_modes),
|
||||
.adc_nids = alc272_adc_nids,
|
||||
.num_adc_nids = ARRAY_SIZE(alc272_adc_nids),
|
||||
.capsrc_nids = alc272_capsrc_nids,
|
||||
.channel_mode = alc662_3ST_2ch_modes,
|
||||
.input_mux = &alc663_m51va_capture_source,
|
||||
.unsol_event = alc663_m51va_unsol_event,
|
||||
.init_hook = alc663_m51va_inithook,
|
||||
},
|
||||
[ALC272_DELL_ZM1] = {
|
||||
.mixers = { alc663_m51va_mixer },
|
||||
.cap_mixer = alc662_auto_capture_mixer,
|
||||
.init_verbs = { alc662_init_verbs, alc272_dell_zm1_init_verbs },
|
||||
.num_dacs = ARRAY_SIZE(alc272_dac_nids),
|
||||
.dac_nids = alc662_dac_nids,
|
||||
.num_channel_mode = ARRAY_SIZE(alc662_3ST_2ch_modes),
|
||||
.adc_nids = alc662_adc_nids,
|
||||
.num_adc_nids = ARRAY_SIZE(alc662_adc_nids),
|
||||
.capsrc_nids = alc662_capsrc_nids,
|
||||
.channel_mode = alc662_3ST_2ch_modes,
|
||||
.input_mux = &alc663_m51va_capture_source,
|
||||
.unsol_event = alc663_m51va_unsol_event,
|
||||
.init_hook = alc663_m51va_inithook,
|
||||
},
|
||||
};
|
||||
|
||||
|
||||
|
|
Loading…
Reference in a new issue