diff options
Diffstat (limited to 'sound/pci/hda/patch_realtek.c')
-rw-r--r-- | sound/pci/hda/patch_realtek.c | 56 |
1 files changed, 55 insertions, 1 deletions
diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c index 6ee34593774a..cf3886171109 100644 --- a/sound/pci/hda/patch_realtek.c +++ b/sound/pci/hda/patch_realtek.c | |||
@@ -5817,6 +5817,9 @@ enum { | |||
5817 | ALC269_TYPE_ALC269VB, | 5817 | ALC269_TYPE_ALC269VB, |
5818 | ALC269_TYPE_ALC269VC, | 5818 | ALC269_TYPE_ALC269VC, |
5819 | ALC269_TYPE_ALC269VD, | 5819 | ALC269_TYPE_ALC269VD, |
5820 | ALC269_TYPE_ALC280, | ||
5821 | ALC269_TYPE_ALC282, | ||
5822 | ALC269_TYPE_ALC284, | ||
5820 | }; | 5823 | }; |
5821 | 5824 | ||
5822 | /* | 5825 | /* |
@@ -5833,10 +5836,13 @@ static int alc269_parse_auto_config(struct hda_codec *codec) | |||
5833 | switch (spec->codec_variant) { | 5836 | switch (spec->codec_variant) { |
5834 | case ALC269_TYPE_ALC269VA: | 5837 | case ALC269_TYPE_ALC269VA: |
5835 | case ALC269_TYPE_ALC269VC: | 5838 | case ALC269_TYPE_ALC269VC: |
5839 | case ALC269_TYPE_ALC280: | ||
5840 | case ALC269_TYPE_ALC284: | ||
5836 | ssids = alc269va_ssids; | 5841 | ssids = alc269va_ssids; |
5837 | break; | 5842 | break; |
5838 | case ALC269_TYPE_ALC269VB: | 5843 | case ALC269_TYPE_ALC269VB: |
5839 | case ALC269_TYPE_ALC269VD: | 5844 | case ALC269_TYPE_ALC269VD: |
5845 | case ALC269_TYPE_ALC282: | ||
5840 | ssids = alc269_ssids; | 5846 | ssids = alc269_ssids; |
5841 | break; | 5847 | break; |
5842 | default: | 5848 | default: |
@@ -5992,6 +5998,30 @@ static void alc269_fixup_quanta_mute(struct hda_codec *codec, | |||
5992 | spec->automute_hook = alc269_quanta_automute; | 5998 | spec->automute_hook = alc269_quanta_automute; |
5993 | } | 5999 | } |
5994 | 6000 | ||
6001 | /* update mute-LED according to the speaker mute state via mic1 VREF pin */ | ||
6002 | static void alc269_fixup_mic1_mute_hook(void *private_data, int enabled) | ||
6003 | { | ||
6004 | struct hda_codec *codec = private_data; | ||
6005 | unsigned int pinval = AC_PINCTL_IN_EN + (enabled ? | ||
6006 | AC_PINCTL_VREF_HIZ : AC_PINCTL_VREF_80); | ||
6007 | snd_hda_set_pin_ctl_cache(codec, 0x18, pinval); | ||
6008 | } | ||
6009 | |||
6010 | static void alc269_fixup_mic1_mute(struct hda_codec *codec, | ||
6011 | const struct alc_fixup *fix, int action) | ||
6012 | { | ||
6013 | struct alc_spec *spec = codec->spec; | ||
6014 | switch (action) { | ||
6015 | case ALC_FIXUP_ACT_BUILD: | ||
6016 | spec->vmaster_mute.hook = alc269_fixup_mic1_mute_hook; | ||
6017 | snd_hda_add_vmaster_hook(codec, &spec->vmaster_mute, true); | ||
6018 | /* fallthru */ | ||
6019 | case ALC_FIXUP_ACT_INIT: | ||
6020 | snd_hda_sync_vmaster_hook(&spec->vmaster_mute); | ||
6021 | break; | ||
6022 | } | ||
6023 | } | ||
6024 | |||
5995 | /* update mute-LED according to the speaker mute state via mic2 VREF pin */ | 6025 | /* update mute-LED according to the speaker mute state via mic2 VREF pin */ |
5996 | static void alc269_fixup_mic2_mute_hook(void *private_data, int enabled) | 6026 | static void alc269_fixup_mic2_mute_hook(void *private_data, int enabled) |
5997 | { | 6027 | { |
@@ -6043,6 +6073,7 @@ enum { | |||
6043 | ALC269_FIXUP_DMIC, | 6073 | ALC269_FIXUP_DMIC, |
6044 | ALC269VB_FIXUP_AMIC, | 6074 | ALC269VB_FIXUP_AMIC, |
6045 | ALC269VB_FIXUP_DMIC, | 6075 | ALC269VB_FIXUP_DMIC, |
6076 | ALC269_FIXUP_MIC1_MUTE_LED, | ||
6046 | ALC269_FIXUP_MIC2_MUTE_LED, | 6077 | ALC269_FIXUP_MIC2_MUTE_LED, |
6047 | ALC269_FIXUP_INV_DMIC, | 6078 | ALC269_FIXUP_INV_DMIC, |
6048 | ALC269_FIXUP_LENOVO_DOCK, | 6079 | ALC269_FIXUP_LENOVO_DOCK, |
@@ -6171,6 +6202,10 @@ static const struct alc_fixup alc269_fixups[] = { | |||
6171 | { } | 6202 | { } |
6172 | }, | 6203 | }, |
6173 | }, | 6204 | }, |
6205 | [ALC269_FIXUP_MIC1_MUTE_LED] = { | ||
6206 | .type = ALC_FIXUP_FUNC, | ||
6207 | .v.func = alc269_fixup_mic1_mute, | ||
6208 | }, | ||
6174 | [ALC269_FIXUP_MIC2_MUTE_LED] = { | 6209 | [ALC269_FIXUP_MIC2_MUTE_LED] = { |
6175 | .type = ALC_FIXUP_FUNC, | 6210 | .type = ALC_FIXUP_FUNC, |
6176 | .v.func = alc269_fixup_mic2_mute, | 6211 | .v.func = alc269_fixup_mic2_mute, |
@@ -6215,6 +6250,8 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = { | |||
6215 | SND_PCI_QUIRK(0x1025, 0x029b, "Acer 1810TZ", ALC269_FIXUP_INV_DMIC), | 6250 | SND_PCI_QUIRK(0x1025, 0x029b, "Acer 1810TZ", ALC269_FIXUP_INV_DMIC), |
6216 | SND_PCI_QUIRK(0x1025, 0x0349, "Acer AOD260", ALC269_FIXUP_INV_DMIC), | 6251 | SND_PCI_QUIRK(0x1025, 0x0349, "Acer AOD260", ALC269_FIXUP_INV_DMIC), |
6217 | SND_PCI_QUIRK(0x103c, 0x1586, "HP", ALC269_FIXUP_MIC2_MUTE_LED), | 6252 | SND_PCI_QUIRK(0x103c, 0x1586, "HP", ALC269_FIXUP_MIC2_MUTE_LED), |
6253 | SND_PCI_QUIRK(0x103c, 0x1972, "HP Pavilion 17", ALC269_FIXUP_MIC1_MUTE_LED), | ||
6254 | SND_PCI_QUIRK(0x103c, 0x1977, "HP Pavilion 14", ALC269_FIXUP_MIC1_MUTE_LED), | ||
6218 | SND_PCI_QUIRK(0x1043, 0x1427, "Asus Zenbook UX31E", ALC269VB_FIXUP_DMIC), | 6255 | SND_PCI_QUIRK(0x1043, 0x1427, "Asus Zenbook UX31E", ALC269VB_FIXUP_DMIC), |
6219 | SND_PCI_QUIRK(0x1043, 0x1517, "Asus Zenbook UX31A", ALC269VB_FIXUP_DMIC), | 6256 | SND_PCI_QUIRK(0x1043, 0x1517, "Asus Zenbook UX31A", ALC269VB_FIXUP_DMIC), |
6220 | SND_PCI_QUIRK(0x1043, 0x1a13, "Asus G73Jw", ALC269_FIXUP_ASUS_G73JW), | 6257 | SND_PCI_QUIRK(0x1043, 0x1a13, "Asus G73Jw", ALC269_FIXUP_ASUS_G73JW), |
@@ -6229,6 +6266,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = { | |||
6229 | SND_PCI_QUIRK(0x104d, 0x9084, "Sony VAIO", ALC275_FIXUP_SONY_HWEQ), | 6266 | SND_PCI_QUIRK(0x104d, 0x9084, "Sony VAIO", ALC275_FIXUP_SONY_HWEQ), |
6230 | SND_PCI_QUIRK_VENDOR(0x104d, "Sony VAIO", ALC269_FIXUP_SONY_VAIO), | 6267 | SND_PCI_QUIRK_VENDOR(0x104d, "Sony VAIO", ALC269_FIXUP_SONY_VAIO), |
6231 | SND_PCI_QUIRK(0x1028, 0x0470, "Dell M101z", ALC269_FIXUP_DELL_M101Z), | 6268 | SND_PCI_QUIRK(0x1028, 0x0470, "Dell M101z", ALC269_FIXUP_DELL_M101Z), |
6269 | SND_PCI_QUIRK(0x1025, 0x0740, "Acer AO725", ALC271_FIXUP_HP_GATE_MIC_JACK), | ||
6232 | SND_PCI_QUIRK(0x1025, 0x0742, "Acer AO756", ALC271_FIXUP_HP_GATE_MIC_JACK), | 6270 | SND_PCI_QUIRK(0x1025, 0x0742, "Acer AO756", ALC271_FIXUP_HP_GATE_MIC_JACK), |
6233 | SND_PCI_QUIRK_VENDOR(0x1025, "Acer Aspire", ALC271_FIXUP_DMIC), | 6271 | SND_PCI_QUIRK_VENDOR(0x1025, "Acer Aspire", ALC271_FIXUP_DMIC), |
6234 | SND_PCI_QUIRK(0x10cf, 0x1475, "Lifebook", ALC269_FIXUP_LIFEBOOK), | 6272 | SND_PCI_QUIRK(0x10cf, 0x1475, "Lifebook", ALC269_FIXUP_LIFEBOOK), |
@@ -6370,7 +6408,8 @@ static int patch_alc269(struct hda_codec *codec) | |||
6370 | 6408 | ||
6371 | alc_auto_parse_customize_define(codec); | 6409 | alc_auto_parse_customize_define(codec); |
6372 | 6410 | ||
6373 | if (codec->vendor_id == 0x10ec0269) { | 6411 | switch (codec->vendor_id) { |
6412 | case 0x10ec0269: | ||
6374 | spec->codec_variant = ALC269_TYPE_ALC269VA; | 6413 | spec->codec_variant = ALC269_TYPE_ALC269VA; |
6375 | switch (alc_get_coef0(codec) & 0x00f0) { | 6414 | switch (alc_get_coef0(codec) & 0x00f0) { |
6376 | case 0x0010: | 6415 | case 0x0010: |
@@ -6395,6 +6434,20 @@ static int patch_alc269(struct hda_codec *codec) | |||
6395 | goto error; | 6434 | goto error; |
6396 | spec->init_hook = alc269_fill_coef; | 6435 | spec->init_hook = alc269_fill_coef; |
6397 | alc269_fill_coef(codec); | 6436 | alc269_fill_coef(codec); |
6437 | break; | ||
6438 | |||
6439 | case 0x10ec0280: | ||
6440 | case 0x10ec0290: | ||
6441 | spec->codec_variant = ALC269_TYPE_ALC280; | ||
6442 | break; | ||
6443 | case 0x10ec0282: | ||
6444 | case 0x10ec0283: | ||
6445 | spec->codec_variant = ALC269_TYPE_ALC282; | ||
6446 | break; | ||
6447 | case 0x10ec0284: | ||
6448 | case 0x10ec0292: | ||
6449 | spec->codec_variant = ALC269_TYPE_ALC284; | ||
6450 | break; | ||
6398 | } | 6451 | } |
6399 | 6452 | ||
6400 | /* automatic parse from the BIOS config */ | 6453 | /* automatic parse from the BIOS config */ |
@@ -7099,6 +7152,7 @@ static const struct hda_codec_preset snd_hda_preset_realtek[] = { | |||
7099 | { .id = 0x10ec0280, .name = "ALC280", .patch = patch_alc269 }, | 7152 | { .id = 0x10ec0280, .name = "ALC280", .patch = patch_alc269 }, |
7100 | { .id = 0x10ec0282, .name = "ALC282", .patch = patch_alc269 }, | 7153 | { .id = 0x10ec0282, .name = "ALC282", .patch = patch_alc269 }, |
7101 | { .id = 0x10ec0283, .name = "ALC283", .patch = patch_alc269 }, | 7154 | { .id = 0x10ec0283, .name = "ALC283", .patch = patch_alc269 }, |
7155 | { .id = 0x10ec0284, .name = "ALC284", .patch = patch_alc269 }, | ||
7102 | { .id = 0x10ec0290, .name = "ALC290", .patch = patch_alc269 }, | 7156 | { .id = 0x10ec0290, .name = "ALC290", .patch = patch_alc269 }, |
7103 | { .id = 0x10ec0292, .name = "ALC292", .patch = patch_alc269 }, | 7157 | { .id = 0x10ec0292, .name = "ALC292", .patch = patch_alc269 }, |
7104 | { .id = 0x10ec0861, .rev = 0x100340, .name = "ALC660", | 7158 | { .id = 0x10ec0861, .rev = 0x100340, .name = "ALC660", |