diff options
Diffstat (limited to 'sound')
| -rw-r--r-- | sound/pci/hda/hda_auto_parser.c | 4 | ||||
| -rw-r--r-- | sound/pci/hda/hda_generic.c | 3 | ||||
| -rw-r--r-- | sound/pci/hda/hda_generic.h | 1 | ||||
| -rw-r--r-- | sound/pci/hda/patch_realtek.c | 17 |
4 files changed, 22 insertions, 3 deletions
diff --git a/sound/pci/hda/hda_auto_parser.c b/sound/pci/hda/hda_auto_parser.c index 92390d457567..18e6546b4467 100644 --- a/sound/pci/hda/hda_auto_parser.c +++ b/sound/pci/hda/hda_auto_parser.c | |||
| @@ -824,6 +824,8 @@ static void apply_fixup(struct hda_codec *codec, int id, int action, int depth) | |||
| 824 | while (id >= 0) { | 824 | while (id >= 0) { |
| 825 | const struct hda_fixup *fix = codec->fixup_list + id; | 825 | const struct hda_fixup *fix = codec->fixup_list + id; |
| 826 | 826 | ||
| 827 | if (++depth > 10) | ||
| 828 | break; | ||
| 827 | if (fix->chained_before) | 829 | if (fix->chained_before) |
| 828 | apply_fixup(codec, fix->chain_id, action, depth + 1); | 830 | apply_fixup(codec, fix->chain_id, action, depth + 1); |
| 829 | 831 | ||
| @@ -863,8 +865,6 @@ static void apply_fixup(struct hda_codec *codec, int id, int action, int depth) | |||
| 863 | } | 865 | } |
| 864 | if (!fix->chained || fix->chained_before) | 866 | if (!fix->chained || fix->chained_before) |
| 865 | break; | 867 | break; |
| 866 | if (++depth > 10) | ||
| 867 | break; | ||
| 868 | id = fix->chain_id; | 868 | id = fix->chain_id; |
| 869 | } | 869 | } |
| 870 | } | 870 | } |
diff --git a/sound/pci/hda/hda_generic.c b/sound/pci/hda/hda_generic.c index 5bf24fb819d2..10d502328b76 100644 --- a/sound/pci/hda/hda_generic.c +++ b/sound/pci/hda/hda_generic.c | |||
| @@ -6009,7 +6009,8 @@ int snd_hda_gen_init(struct hda_codec *codec) | |||
| 6009 | if (spec->init_hook) | 6009 | if (spec->init_hook) |
| 6010 | spec->init_hook(codec); | 6010 | spec->init_hook(codec); |
| 6011 | 6011 | ||
| 6012 | snd_hda_apply_verbs(codec); | 6012 | if (!spec->skip_verbs) |
| 6013 | snd_hda_apply_verbs(codec); | ||
| 6013 | 6014 | ||
| 6014 | init_multi_out(codec); | 6015 | init_multi_out(codec); |
| 6015 | init_extra_out(codec); | 6016 | init_extra_out(codec); |
diff --git a/sound/pci/hda/hda_generic.h b/sound/pci/hda/hda_generic.h index 5f199dcb0d18..fb9f1a90238b 100644 --- a/sound/pci/hda/hda_generic.h +++ b/sound/pci/hda/hda_generic.h | |||
| @@ -243,6 +243,7 @@ struct hda_gen_spec { | |||
| 243 | unsigned int indep_hp_enabled:1; /* independent HP enabled */ | 243 | unsigned int indep_hp_enabled:1; /* independent HP enabled */ |
| 244 | unsigned int have_aamix_ctl:1; | 244 | unsigned int have_aamix_ctl:1; |
| 245 | unsigned int hp_mic_jack_modes:1; | 245 | unsigned int hp_mic_jack_modes:1; |
| 246 | unsigned int skip_verbs:1; /* don't apply verbs at snd_hda_gen_init() */ | ||
| 246 | 247 | ||
| 247 | /* additional mute flags (only effective with auto_mute_via_amp=1) */ | 248 | /* additional mute flags (only effective with auto_mute_via_amp=1) */ |
| 248 | u64 mute_bits; | 249 | u64 mute_bits; |
diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c index e333b3e30e31..c1ddfd2fac52 100644 --- a/sound/pci/hda/patch_realtek.c +++ b/sound/pci/hda/patch_realtek.c | |||
| @@ -837,9 +837,11 @@ static int alc_init(struct hda_codec *codec) | |||
| 837 | if (spec->init_hook) | 837 | if (spec->init_hook) |
| 838 | spec->init_hook(codec); | 838 | spec->init_hook(codec); |
| 839 | 839 | ||
| 840 | spec->gen.skip_verbs = 1; /* applied in below */ | ||
| 840 | snd_hda_gen_init(codec); | 841 | snd_hda_gen_init(codec); |
| 841 | alc_fix_pll(codec); | 842 | alc_fix_pll(codec); |
| 842 | alc_auto_init_amp(codec, spec->init_amp); | 843 | alc_auto_init_amp(codec, spec->init_amp); |
| 844 | snd_hda_apply_verbs(codec); /* apply verbs here after own init */ | ||
| 843 | 845 | ||
| 844 | snd_hda_apply_fixup(codec, HDA_FIXUP_ACT_INIT); | 846 | snd_hda_apply_fixup(codec, HDA_FIXUP_ACT_INIT); |
| 845 | 847 | ||
| @@ -5797,6 +5799,7 @@ enum { | |||
| 5797 | ALC286_FIXUP_ACER_AIO_HEADSET_MIC, | 5799 | ALC286_FIXUP_ACER_AIO_HEADSET_MIC, |
| 5798 | ALC256_FIXUP_ASUS_MIC_NO_PRESENCE, | 5800 | ALC256_FIXUP_ASUS_MIC_NO_PRESENCE, |
| 5799 | ALC299_FIXUP_PREDATOR_SPK, | 5801 | ALC299_FIXUP_PREDATOR_SPK, |
| 5802 | ALC294_FIXUP_ASUS_INTSPK_HEADSET_MIC, | ||
| 5800 | }; | 5803 | }; |
| 5801 | 5804 | ||
| 5802 | static const struct hda_fixup alc269_fixups[] = { | 5805 | static const struct hda_fixup alc269_fixups[] = { |
| @@ -6837,6 +6840,16 @@ static const struct hda_fixup alc269_fixups[] = { | |||
| 6837 | { } | 6840 | { } |
| 6838 | } | 6841 | } |
| 6839 | }, | 6842 | }, |
| 6843 | [ALC294_FIXUP_ASUS_INTSPK_HEADSET_MIC] = { | ||
| 6844 | .type = HDA_FIXUP_PINS, | ||
| 6845 | .v.pins = (const struct hda_pintbl[]) { | ||
| 6846 | { 0x14, 0x411111f0 }, /* disable confusing internal speaker */ | ||
| 6847 | { 0x19, 0x04a11150 }, /* use as headset mic, without its own jack detect */ | ||
| 6848 | { } | ||
| 6849 | }, | ||
| 6850 | .chained = true, | ||
| 6851 | .chain_id = ALC269_FIXUP_HEADSET_MODE_NO_HP_MIC | ||
| 6852 | }, | ||
| 6840 | }; | 6853 | }; |
| 6841 | 6854 | ||
| 6842 | static const struct snd_pci_quirk alc269_fixup_tbl[] = { | 6855 | static const struct snd_pci_quirk alc269_fixup_tbl[] = { |
| @@ -6979,6 +6992,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = { | |||
| 6979 | SND_PCI_QUIRK(0x103c, 0x82c0, "HP G3 mini premium", ALC221_FIXUP_HP_MIC_NO_PRESENCE), | 6992 | SND_PCI_QUIRK(0x103c, 0x82c0, "HP G3 mini premium", ALC221_FIXUP_HP_MIC_NO_PRESENCE), |
| 6980 | SND_PCI_QUIRK(0x103c, 0x83b9, "HP Spectre x360", ALC269_FIXUP_HP_MUTE_LED_MIC3), | 6993 | SND_PCI_QUIRK(0x103c, 0x83b9, "HP Spectre x360", ALC269_FIXUP_HP_MUTE_LED_MIC3), |
| 6981 | SND_PCI_QUIRK(0x103c, 0x8497, "HP Envy x360", ALC269_FIXUP_HP_MUTE_LED_MIC3), | 6994 | SND_PCI_QUIRK(0x103c, 0x8497, "HP Envy x360", ALC269_FIXUP_HP_MUTE_LED_MIC3), |
| 6995 | SND_PCI_QUIRK(0x103c, 0x84e7, "HP Pavilion 15", ALC269_FIXUP_HP_MUTE_LED_MIC3), | ||
| 6982 | SND_PCI_QUIRK(0x1043, 0x103e, "ASUS X540SA", ALC256_FIXUP_ASUS_MIC), | 6996 | SND_PCI_QUIRK(0x1043, 0x103e, "ASUS X540SA", ALC256_FIXUP_ASUS_MIC), |
| 6983 | SND_PCI_QUIRK(0x1043, 0x103f, "ASUS TX300", ALC282_FIXUP_ASUS_TX300), | 6997 | SND_PCI_QUIRK(0x1043, 0x103f, "ASUS TX300", ALC282_FIXUP_ASUS_TX300), |
| 6984 | SND_PCI_QUIRK(0x1043, 0x106d, "Asus K53BE", ALC269_FIXUP_LIMIT_INT_MIC_BOOST), | 6998 | SND_PCI_QUIRK(0x1043, 0x106d, "Asus K53BE", ALC269_FIXUP_LIMIT_INT_MIC_BOOST), |
| @@ -6995,6 +7009,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = { | |||
| 6995 | SND_PCI_QUIRK(0x1043, 0x1427, "Asus Zenbook UX31E", ALC269VB_FIXUP_ASUS_ZENBOOK), | 7009 | SND_PCI_QUIRK(0x1043, 0x1427, "Asus Zenbook UX31E", ALC269VB_FIXUP_ASUS_ZENBOOK), |
| 6996 | SND_PCI_QUIRK(0x1043, 0x1517, "Asus Zenbook UX31A", ALC269VB_FIXUP_ASUS_ZENBOOK_UX31A), | 7010 | SND_PCI_QUIRK(0x1043, 0x1517, "Asus Zenbook UX31A", ALC269VB_FIXUP_ASUS_ZENBOOK_UX31A), |
| 6997 | SND_PCI_QUIRK(0x1043, 0x16e3, "ASUS UX50", ALC269_FIXUP_STEREO_DMIC), | 7011 | SND_PCI_QUIRK(0x1043, 0x16e3, "ASUS UX50", ALC269_FIXUP_STEREO_DMIC), |
| 7012 | SND_PCI_QUIRK(0x1043, 0x17d1, "ASUS UX431FL", ALC294_FIXUP_ASUS_INTSPK_HEADSET_MIC), | ||
| 6998 | SND_PCI_QUIRK(0x1043, 0x1a13, "Asus G73Jw", ALC269_FIXUP_ASUS_G73JW), | 7013 | SND_PCI_QUIRK(0x1043, 0x1a13, "Asus G73Jw", ALC269_FIXUP_ASUS_G73JW), |
| 6999 | SND_PCI_QUIRK(0x1043, 0x1a30, "ASUS X705UD", ALC256_FIXUP_ASUS_MIC), | 7014 | SND_PCI_QUIRK(0x1043, 0x1a30, "ASUS X705UD", ALC256_FIXUP_ASUS_MIC), |
| 7000 | SND_PCI_QUIRK(0x1043, 0x1b13, "Asus U41SV", ALC269_FIXUP_INV_DMIC), | 7015 | SND_PCI_QUIRK(0x1043, 0x1b13, "Asus U41SV", ALC269_FIXUP_INV_DMIC), |
| @@ -7072,6 +7087,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = { | |||
| 7072 | SND_PCI_QUIRK(0x17aa, 0x312a, "ThinkCentre Station", ALC294_FIXUP_LENOVO_MIC_LOCATION), | 7087 | SND_PCI_QUIRK(0x17aa, 0x312a, "ThinkCentre Station", ALC294_FIXUP_LENOVO_MIC_LOCATION), |
| 7073 | SND_PCI_QUIRK(0x17aa, 0x312f, "ThinkCentre Station", ALC294_FIXUP_LENOVO_MIC_LOCATION), | 7088 | SND_PCI_QUIRK(0x17aa, 0x312f, "ThinkCentre Station", ALC294_FIXUP_LENOVO_MIC_LOCATION), |
| 7074 | SND_PCI_QUIRK(0x17aa, 0x313c, "ThinkCentre Station", ALC294_FIXUP_LENOVO_MIC_LOCATION), | 7089 | SND_PCI_QUIRK(0x17aa, 0x313c, "ThinkCentre Station", ALC294_FIXUP_LENOVO_MIC_LOCATION), |
| 7090 | SND_PCI_QUIRK(0x17aa, 0x3151, "ThinkCentre Station", ALC283_FIXUP_HEADSET_MIC), | ||
| 7075 | SND_PCI_QUIRK(0x17aa, 0x3902, "Lenovo E50-80", ALC269_FIXUP_DMIC_THINKPAD_ACPI), | 7091 | SND_PCI_QUIRK(0x17aa, 0x3902, "Lenovo E50-80", ALC269_FIXUP_DMIC_THINKPAD_ACPI), |
| 7076 | SND_PCI_QUIRK(0x17aa, 0x3977, "IdeaPad S210", ALC283_FIXUP_INT_MIC), | 7092 | SND_PCI_QUIRK(0x17aa, 0x3977, "IdeaPad S210", ALC283_FIXUP_INT_MIC), |
| 7077 | SND_PCI_QUIRK(0x17aa, 0x3978, "Lenovo B50-70", ALC269_FIXUP_DMIC_THINKPAD_ACPI), | 7093 | SND_PCI_QUIRK(0x17aa, 0x3978, "Lenovo B50-70", ALC269_FIXUP_DMIC_THINKPAD_ACPI), |
| @@ -8946,6 +8962,7 @@ static int patch_alc680(struct hda_codec *codec) | |||
| 8946 | static const struct hda_device_id snd_hda_id_realtek[] = { | 8962 | static const struct hda_device_id snd_hda_id_realtek[] = { |
| 8947 | HDA_CODEC_ENTRY(0x10ec0215, "ALC215", patch_alc269), | 8963 | HDA_CODEC_ENTRY(0x10ec0215, "ALC215", patch_alc269), |
| 8948 | HDA_CODEC_ENTRY(0x10ec0221, "ALC221", patch_alc269), | 8964 | HDA_CODEC_ENTRY(0x10ec0221, "ALC221", patch_alc269), |
| 8965 | HDA_CODEC_ENTRY(0x10ec0222, "ALC222", patch_alc269), | ||
| 8949 | HDA_CODEC_ENTRY(0x10ec0225, "ALC225", patch_alc269), | 8966 | HDA_CODEC_ENTRY(0x10ec0225, "ALC225", patch_alc269), |
| 8950 | HDA_CODEC_ENTRY(0x10ec0231, "ALC231", patch_alc269), | 8967 | HDA_CODEC_ENTRY(0x10ec0231, "ALC231", patch_alc269), |
| 8951 | HDA_CODEC_ENTRY(0x10ec0233, "ALC233", patch_alc269), | 8968 | HDA_CODEC_ENTRY(0x10ec0233, "ALC233", patch_alc269), |
