Lines Matching +full:codec +full:- +full:1

1 // SPDX-License-Identifier: GPL-2.0-or-later
3 // Realtek ALC882/883/885/888/889 codec support
8 // 6-channel independent captures.
10 // In addition, an independent DAC for the multi-playback (not used in this
66 static void alc889_fixup_coef(struct hda_codec *codec, in alc889_fixup_coef() argument
71 alc_update_coef_idx(codec, 7, 0, 0x2030); in alc889_fixup_coef()
75 static void alc885_fixup_macpro_gpio(struct hda_codec *codec, in alc885_fixup_macpro_gpio() argument
78 struct alc_spec *spec = codec->spec; in alc885_fixup_macpro_gpio()
80 spec->gpio_write_delay = true; in alc885_fixup_macpro_gpio()
81 alc_fixup_gpio3(codec, fix, action); in alc885_fixup_macpro_gpio()
88 static void alc889_fixup_dac_route(struct hda_codec *codec, in alc889_fixup_dac_route() argument
95 snd_hda_override_conn_list(codec, 0x14, ARRAY_SIZE(conn1), conn1); in alc889_fixup_dac_route()
96 snd_hda_override_conn_list(codec, 0x15, ARRAY_SIZE(conn1), conn1); in alc889_fixup_dac_route()
97 snd_hda_override_conn_list(codec, 0x18, ARRAY_SIZE(conn2), conn2); in alc889_fixup_dac_route()
98 snd_hda_override_conn_list(codec, 0x1a, ARRAY_SIZE(conn2), conn2); in alc889_fixup_dac_route()
102 snd_hda_override_conn_list(codec, 0x14, ARRAY_SIZE(conn), conn); in alc889_fixup_dac_route()
103 snd_hda_override_conn_list(codec, 0x15, ARRAY_SIZE(conn), conn); in alc889_fixup_dac_route()
104 snd_hda_override_conn_list(codec, 0x18, ARRAY_SIZE(conn), conn); in alc889_fixup_dac_route()
105 snd_hda_override_conn_list(codec, 0x1a, ARRAY_SIZE(conn), conn); in alc889_fixup_dac_route()
110 static void alc889_fixup_mbp_vref(struct hda_codec *codec, in alc889_fixup_mbp_vref() argument
114 struct alc_spec *spec = codec->spec; in alc889_fixup_mbp_vref()
120 unsigned int val = snd_hda_codec_get_pincfg(codec, nids[i]); in alc889_fixup_mbp_vref()
123 val = snd_hda_codec_get_pin_target(codec, nids[i]); in alc889_fixup_mbp_vref()
125 snd_hda_set_pin_ctl(codec, nids[i], val); in alc889_fixup_mbp_vref()
126 spec->gen.keep_vref_in_automute = 1; in alc889_fixup_mbp_vref()
131 static void alc889_fixup_mac_pins(struct hda_codec *codec, in alc889_fixup_mac_pins() argument
134 struct alc_spec *spec = codec->spec; in alc889_fixup_mac_pins()
139 val = snd_hda_codec_get_pin_target(codec, nids[i]); in alc889_fixup_mac_pins()
141 snd_hda_set_pin_ctl(codec, nids[i], val); in alc889_fixup_mac_pins()
143 spec->gen.keep_vref_in_automute = 1; in alc889_fixup_mac_pins()
147 static void alc889_fixup_imac91_vref(struct hda_codec *codec, in alc889_fixup_imac91_vref() argument
153 alc889_fixup_mac_pins(codec, nids, ARRAY_SIZE(nids)); in alc889_fixup_imac91_vref()
157 static void alc889_fixup_mba11_vref(struct hda_codec *codec, in alc889_fixup_mba11_vref() argument
163 alc889_fixup_mac_pins(codec, nids, ARRAY_SIZE(nids)); in alc889_fixup_mba11_vref()
167 static void alc889_fixup_mba21_vref(struct hda_codec *codec, in alc889_fixup_mba21_vref() argument
173 alc889_fixup_mac_pins(codec, nids, ARRAY_SIZE(nids)); in alc889_fixup_mba21_vref()
178 * all-in-one desktop PCs (for example VGC-LN51JGB) through DAC 0x05
180 static void alc882_fixup_no_primary_hp(struct hda_codec *codec, in alc882_fixup_no_primary_hp() argument
183 struct alc_spec *spec = codec->spec; in alc882_fixup_no_primary_hp()
185 spec->gen.no_primary_hp = 1; in alc882_fixup_no_primary_hp()
186 spec->gen.no_multi_io = 1; in alc882_fixup_no_primary_hp()
190 static void alc1220_fixup_gb_x570(struct hda_codec *codec, in alc1220_fixup_gb_x570() argument
205 snd_hda_override_conn_list(codec, 0x14, ARRAY_SIZE(conn1), conn1); in alc1220_fixup_gb_x570()
206 snd_hda_override_conn_list(codec, 0x1b, ARRAY_SIZE(conn1), conn1); in alc1220_fixup_gb_x570()
209 alc_process_coef_fw(codec, gb_x570_coefs); in alc1220_fixup_gb_x570()
214 static void alc1220_fixup_clevo_p950(struct hda_codec *codec, in alc1220_fixup_clevo_p950() argument
223 alc_update_coef_idx(codec, 0x7, 0, 0x3c3); in alc1220_fixup_clevo_p950()
227 snd_hda_override_conn_list(codec, 0x14, ARRAY_SIZE(conn1), conn1); in alc1220_fixup_clevo_p950()
228 snd_hda_override_conn_list(codec, 0x1b, ARRAY_SIZE(conn1), conn1); in alc1220_fixup_clevo_p950()
231 static void alc1220_fixup_clevo_pb51ed(struct hda_codec *codec, in alc1220_fixup_clevo_pb51ed() argument
235 alc1220_fixup_clevo_p950(codec, fix, action); in alc1220_fixup_clevo_pb51ed()
236 alc_fixup_headset_mode_no_hp_mic(codec, fix, action); in alc1220_fixup_clevo_pb51ed()
239 static void alc887_asus_hp_automute_hook(struct hda_codec *codec, in alc887_asus_hp_automute_hook() argument
242 struct alc_spec *spec = codec->spec; in alc887_asus_hp_automute_hook()
245 snd_hda_gen_hp_automute(codec, jack); in alc887_asus_hp_automute_hook()
247 if (spec->gen.hp_jack_present) in alc887_asus_hp_automute_hook()
251 snd_hda_set_pin_ctl(codec, 0x19, PIN_HP | vref); in alc887_asus_hp_automute_hook()
254 static void alc887_fixup_asus_jack(struct hda_codec *codec, in alc887_fixup_asus_jack() argument
257 struct alc_spec *spec = codec->spec; in alc887_fixup_asus_jack()
260 snd_hda_set_pin_ctl_cache(codec, 0x1b, PIN_HP); in alc887_fixup_asus_jack()
261 spec->gen.hp_automute_hook = alc887_asus_hp_automute_hook; in alc887_fixup_asus_jack()
414 /* DAC DISABLE/MUTE 1? */
415 /* setting bits 1-5 disables DAC nids 0x02-0x06
426 * The mics are only 1cm apart which makes the stereo
431 * codec replicate the sum signal to both channels,
583 SND_PCI_QUIRK(0x1025, 0x0155, "Packard-Bell M5120", ALC882_FIXUP_PB_M5210),
600 SND_PCI_QUIRK(0x1043, 0x8797, "ASUS TUF B550M-PLUS", ALCS1200A_FIXUP_MIC_VREF),
601 SND_PCI_QUIRK(0x104d, 0x9043, "Sony Vaio VGC-LN51JGB", ALC882_FIXUP_NO_PRIMARY_HP),
607 /* All Apple entries are in codec SSIDs */
608 SND_PCI_QUIRK(0x106b, 0x00a0, "MacBookPro 3,1", ALC889_FIXUP_MBP_VREF),
610 SND_PCI_QUIRK(0x106b, 0x00a4, "MacbookPro 4,1", ALC889_FIXUP_MBP_VREF),
616 SND_PCI_QUIRK(0x106b, 0x3200, "iMac 7,1 Aluminum", ALC882_FIXUP_EAPD),
617 SND_PCI_QUIRK(0x106b, 0x3400, "MacBookAir 1,1", ALC889_FIXUP_MBA11_VREF),
618 SND_PCI_QUIRK(0x106b, 0x3500, "MacBookAir 2,1", ALC889_FIXUP_MBA21_VREF),
619 SND_PCI_QUIRK(0x106b, 0x3600, "Macbook 3,1", ALC889_FIXUP_MBP_VREF),
620 SND_PCI_QUIRK(0x106b, 0x3800, "MacbookPro 4,1", ALC889_FIXUP_MBP_VREF),
622 SND_PCI_QUIRK(0x106b, 0x3f00, "Macbook 5,1", ALC889_FIXUP_IMAC91_VREF),
623 SND_PCI_QUIRK(0x106b, 0x4000, "MacbookPro 5,1", ALC889_FIXUP_IMAC91_VREF),
624 SND_PCI_QUIRK(0x106b, 0x4100, "Macmini 3,1", ALC889_FIXUP_IMAC91_VREF),
625 SND_PCI_QUIRK(0x106b, 0x4200, "Mac Pro 4,1/5,1", ALC889_FIXUP_MP41_VREF),
626 SND_PCI_QUIRK(0x106b, 0x4300, "iMac 9,1", ALC889_FIXUP_IMAC91_VREF),
628 SND_PCI_QUIRK(0x106b, 0x4900, "iMac 9,1 Aluminum", ALC889_FIXUP_IMAC91_VREF),
633 SND_PCI_QUIRK(0x13fe, 0x1009, "Advantech MIT-W101", ALC886_FIXUP_EAPD),
634 SND_PCI_QUIRK(0x1458, 0xa002, "Gigabyte EP45-DS3/Z87X-UD3H", ALC889_FIXUP_FRONT_HP_NO_PRESENCE),
635 SND_PCI_QUIRK(0x1458, 0xa0b8, "Gigabyte AZ370-Gaming", ALC1220_FIXUP_GB_DUAL_CODECS),
639 SND_PCI_QUIRK(0x1462, 0x11f7, "MSI-GE63", ALC1220_FIXUP_CLEVO_P950),
640 SND_PCI_QUIRK(0x1462, 0x1228, "MSI-GP63", ALC1220_FIXUP_CLEVO_P950),
641 SND_PCI_QUIRK(0x1462, 0x1229, "MSI-GP73", ALC1220_FIXUP_CLEVO_P950),
642 SND_PCI_QUIRK(0x1462, 0x1275, "MSI-GL63", ALC1220_FIXUP_CLEVO_P950),
643 SND_PCI_QUIRK(0x1462, 0x1276, "MSI-GL73", ALC1220_FIXUP_CLEVO_P950),
644 SND_PCI_QUIRK(0x1462, 0x1293, "MSI-GP65", ALC1220_FIXUP_CLEVO_P950),
645 SND_PCI_QUIRK(0x1462, 0x7350, "MSI-7350", ALC889_FIXUP_CD),
647 SND_PCI_QUIRK(0x1462, 0xda57, "MSI Z270-Gaming", ALC1220_FIXUP_GB_DUAL_CODECS),
649 SND_PCI_QUIRK(0x147b, 0x107a, "Abit AW9D-MAX", ALC882_FIXUP_ABIT_AW9D_MAX),
656 SND_PCI_QUIRK(0x1558, 0x65e5, "Clevo PC50D[PRS](?:-D|-G)?", ALC1220_FIXUP_CLEVO_PB51ED_PINS),
660 SND_PCI_QUIRK(0x1558, 0x66a6, "Clevo PE60SN[CDE]-[GS]", ALC1220_FIXUP_CLEVO_PB51ED_PINS),
663 SND_PCI_QUIRK(0x1558, 0x67e5, "Clevo PC70D[PRS](?:-D|-G)?", ALC1220_FIXUP_CLEVO_PB51ED_PINS),
668 SND_PCI_QUIRK(0x1558, 0x7715, "Clevo X170KM-G", ALC1220_FIXUP_CLEVO_PB51ED),
678 SND_PCI_QUIRK(0x1558, 0x96e1, "Clevo P960[ER][CDFN]-K", ALC1220_FIXUP_CLEVO_P950),
680 SND_PCI_QUIRK(0x1558, 0x97e2, "Clevo P970RC-M", ALC1220_FIXUP_CLEVO_P950),
690 {.id = ALC882_FIXUP_ABIT_AW9D_MAX, .name = "abit-aw9d"},
691 {.id = ALC882_FIXUP_LENOVO_Y530, .name = "lenovo-y530"},
692 {.id = ALC882_FIXUP_ACER_ASPIRE_7736, .name = "acer-aspire-7736"},
693 {.id = ALC882_FIXUP_ASUS_W90V, .name = "asus-w90v"},
695 {.id = ALC889_FIXUP_FRONT_HP_NO_PRESENCE, .name = "no-front-hp"},
696 {.id = ALC889_FIXUP_VAIO_TT, .name = "vaio-tt"},
698 {.id = ALC882_FIXUP_EAPD, .name = "alc882-eapd"},
699 {.id = ALC883_FIXUP_EAPD, .name = "alc883-eapd"},
703 {.id = ALC889_FIXUP_COEF, .name = "alc889-coef"},
704 {.id = ALC882_FIXUP_ASUS_W2JC, .name = "asus-w2jc"},
705 {.id = ALC882_FIXUP_ACER_ASPIRE_4930G, .name = "acer-aspire-4930g"},
706 {.id = ALC882_FIXUP_ACER_ASPIRE_8930G, .name = "acer-aspire-8930g"},
707 {.id = ALC883_FIXUP_ACER_EAPD, .name = "acer-aspire"},
708 {.id = ALC885_FIXUP_MACPRO_GPIO, .name = "macpro-gpio"},
709 {.id = ALC889_FIXUP_DAC_ROUTE, .name = "dac-route"},
710 {.id = ALC889_FIXUP_MBP_VREF, .name = "mbp-vref"},
711 {.id = ALC889_FIXUP_IMAC91_VREF, .name = "imac91-vref"},
712 {.id = ALC889_FIXUP_MBA11_VREF, .name = "mba11-vref"},
713 {.id = ALC889_FIXUP_MBA21_VREF, .name = "mba21-vref"},
714 {.id = ALC889_FIXUP_MP11_VREF, .name = "mp11-vref"},
715 {.id = ALC889_FIXUP_MP41_VREF, .name = "mp41-vref"},
716 {.id = ALC882_FIXUP_INV_DMIC, .name = "inv-dmic"},
717 {.id = ALC882_FIXUP_NO_PRIMARY_HP, .name = "no-primary-hp"},
718 {.id = ALC887_FIXUP_ASUS_BASS, .name = "asus-bass"},
719 {.id = ALC1220_FIXUP_GB_DUAL_CODECS, .name = "dual-codecs"},
720 {.id = ALC1220_FIXUP_GB_X570, .name = "gb-x570"},
721 {.id = ALC1220_FIXUP_CLEVO_P950, .name = "clevo-p950"},
735 SND_HDA_PIN_QUIRK(0x10ec1220, 0x1462, "MS-7C35", ALC1220_FIXUP_CLEVO_P950,
751 static int alc882_parse_auto_config(struct hda_codec *codec) in alc882_parse_auto_config() argument
755 return alc_parse_auto_config(codec, alc882_ignore, alc882_ssids); in alc882_parse_auto_config()
760 static int alc882_probe(struct hda_codec *codec, const struct hda_device_id *id) in alc882_probe() argument
765 err = alc_alloc_spec(codec, 0x0b); in alc882_probe()
769 spec = codec->spec; in alc882_probe()
771 switch (codec->core.vendor_id) { in alc882_probe()
780 alc_fix_pll_init(codec, 0x20, 0x0a, 10); in alc882_probe()
784 alc_pre_init(codec); in alc882_probe()
786 snd_hda_pick_fixup(codec, alc882_fixup_models, alc882_fixup_tbl, in alc882_probe()
788 snd_hda_pick_pin_fixup(codec, alc882_pin_fixup_tbl, alc882_fixups, true); in alc882_probe()
789 snd_hda_apply_fixup(codec, HDA_FIXUP_ACT_PRE_PROBE); in alc882_probe()
791 alc_auto_parse_customize_define(codec); in alc882_probe()
793 if (has_cdefine_beep(codec)) in alc882_probe()
794 spec->gen.beep_nid = 0x01; in alc882_probe()
797 err = alc882_parse_auto_config(codec); in alc882_probe()
801 if (!spec->gen.no_analog && spec->gen.beep_nid) { in alc882_probe()
807 snd_hda_apply_fixup(codec, HDA_FIXUP_ACT_PROBE); in alc882_probe()
812 snd_hda_gen_remove(codec); in alc882_probe()
853 MODULE_DESCRIPTION("Realtek ALC882 and compatible HD-audio codecs");