.. | .. |
---|
121 | 121 | unsigned int ultra_low_power:1; |
---|
122 | 122 | unsigned int has_hs_key:1; |
---|
123 | 123 | unsigned int no_internal_mic_pin:1; |
---|
| 124 | + unsigned int en_3kpull_low:1; |
---|
124 | 125 | |
---|
125 | 126 | /* for PLL fix */ |
---|
126 | 127 | hda_nid_t pll_nid; |
---|
.. | .. |
---|
827 | 828 | alc_setup_gpio(codec, 0x02); |
---|
828 | 829 | break; |
---|
829 | 830 | case 7: |
---|
830 | | - alc_setup_gpio(codec, 0x03); |
---|
| 831 | + alc_setup_gpio(codec, 0x04); |
---|
831 | 832 | break; |
---|
832 | 833 | case 5: |
---|
833 | 834 | default: |
---|
.. | .. |
---|
2632 | 2633 | SND_PCI_QUIRK(0x1462, 0xda57, "MSI Z270-Gaming", ALC1220_FIXUP_GB_DUAL_CODECS), |
---|
2633 | 2634 | SND_PCI_QUIRK_VENDOR(0x1462, "MSI", ALC882_FIXUP_GPIO3), |
---|
2634 | 2635 | SND_PCI_QUIRK(0x147b, 0x107a, "Abit AW9D-MAX", ALC882_FIXUP_ABIT_AW9D_MAX), |
---|
| 2636 | + SND_PCI_QUIRK(0x1558, 0x3702, "Clevo X370SN[VW]", ALC1220_FIXUP_CLEVO_PB51ED_PINS), |
---|
2635 | 2637 | SND_PCI_QUIRK(0x1558, 0x50d3, "Clevo PC50[ER][CDF]", ALC1220_FIXUP_CLEVO_PB51ED_PINS), |
---|
2636 | 2638 | SND_PCI_QUIRK(0x1558, 0x65d1, "Clevo PB51[ER][CDF]", ALC1220_FIXUP_CLEVO_PB51ED_PINS), |
---|
2637 | 2639 | SND_PCI_QUIRK(0x1558, 0x65d2, "Clevo PB51R[CDF]", ALC1220_FIXUP_CLEVO_PB51ED_PINS), |
---|
.. | .. |
---|
3561 | 3563 | hda_nid_t hp_pin = alc_get_hp_pin(spec); |
---|
3562 | 3564 | bool hp_pin_sense; |
---|
3563 | 3565 | |
---|
| 3566 | + if (spec->ultra_low_power) { |
---|
| 3567 | + alc_update_coef_idx(codec, 0x03, 1<<1, 1<<1); |
---|
| 3568 | + alc_update_coef_idx(codec, 0x08, 3<<2, 3<<2); |
---|
| 3569 | + alc_update_coef_idx(codec, 0x08, 7<<4, 0); |
---|
| 3570 | + alc_update_coef_idx(codec, 0x3b, 1<<15, 0); |
---|
| 3571 | + alc_update_coef_idx(codec, 0x0e, 7<<6, 7<<6); |
---|
| 3572 | + msleep(30); |
---|
| 3573 | + } |
---|
| 3574 | + |
---|
3564 | 3575 | if (!hp_pin) |
---|
3565 | 3576 | hp_pin = 0x21; |
---|
3566 | 3577 | |
---|
.. | .. |
---|
3572 | 3583 | msleep(2); |
---|
3573 | 3584 | |
---|
3574 | 3585 | alc_update_coefex_idx(codec, 0x57, 0x04, 0x0007, 0x1); /* Low power */ |
---|
3575 | | - if (spec->ultra_low_power) { |
---|
3576 | | - alc_update_coef_idx(codec, 0x03, 1<<1, 1<<1); |
---|
3577 | | - alc_update_coef_idx(codec, 0x08, 3<<2, 3<<2); |
---|
3578 | | - alc_update_coef_idx(codec, 0x08, 7<<4, 0); |
---|
3579 | | - alc_update_coef_idx(codec, 0x3b, 1<<15, 0); |
---|
3580 | | - alc_update_coef_idx(codec, 0x0e, 7<<6, 7<<6); |
---|
3581 | | - msleep(30); |
---|
3582 | | - } |
---|
3583 | 3586 | |
---|
3584 | 3587 | snd_hda_codec_write(codec, hp_pin, 0, |
---|
3585 | 3588 | AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE); |
---|
.. | .. |
---|
3615 | 3618 | if (!hp_pin) |
---|
3616 | 3619 | hp_pin = 0x21; |
---|
3617 | 3620 | |
---|
| 3621 | + alc_update_coefex_idx(codec, 0x57, 0x04, 0x0007, 0x1); /* Low power */ |
---|
3618 | 3622 | hp_pin_sense = snd_hda_jack_detect(codec, hp_pin); |
---|
3619 | 3623 | |
---|
3620 | 3624 | if (hp_pin_sense) |
---|
.. | .. |
---|
3631 | 3635 | /* If disable 3k pulldown control for alc257, the Mic detection will not work correctly |
---|
3632 | 3636 | * when booting with headset plugged. So skip setting it for the codec alc257 |
---|
3633 | 3637 | */ |
---|
3634 | | - if (codec->core.vendor_id != 0x10ec0236 && |
---|
3635 | | - codec->core.vendor_id != 0x10ec0257) |
---|
| 3638 | + if (spec->en_3kpull_low) |
---|
3636 | 3639 | alc_update_coef_idx(codec, 0x46, 0, 3 << 12); |
---|
3637 | 3640 | |
---|
3638 | 3641 | if (!spec->no_shutup_pins) |
---|
.. | .. |
---|
3661 | 3664 | hda_nid_t hp_pin = alc_get_hp_pin(spec); |
---|
3662 | 3665 | bool hp1_pin_sense, hp2_pin_sense; |
---|
3663 | 3666 | |
---|
| 3667 | + if (spec->ultra_low_power) { |
---|
| 3668 | + alc_update_coef_idx(codec, 0x08, 0x0f << 2, 3<<2); |
---|
| 3669 | + alc_update_coef_idx(codec, 0x0e, 7<<6, 7<<6); |
---|
| 3670 | + alc_update_coef_idx(codec, 0x33, 1<<11, 0); |
---|
| 3671 | + msleep(30); |
---|
| 3672 | + } |
---|
| 3673 | + |
---|
3664 | 3674 | if (!hp_pin) |
---|
3665 | 3675 | hp_pin = 0x21; |
---|
3666 | 3676 | msleep(30); |
---|
.. | .. |
---|
3672 | 3682 | msleep(2); |
---|
3673 | 3683 | |
---|
3674 | 3684 | alc_update_coefex_idx(codec, 0x57, 0x04, 0x0007, 0x1); /* Low power */ |
---|
3675 | | - if (spec->ultra_low_power) { |
---|
3676 | | - alc_update_coef_idx(codec, 0x08, 0x0f << 2, 3<<2); |
---|
3677 | | - alc_update_coef_idx(codec, 0x0e, 7<<6, 7<<6); |
---|
3678 | | - alc_update_coef_idx(codec, 0x33, 1<<11, 0); |
---|
3679 | | - msleep(30); |
---|
3680 | | - } |
---|
3681 | 3685 | |
---|
3682 | 3686 | if (hp1_pin_sense || spec->ultra_low_power) |
---|
3683 | 3687 | snd_hda_codec_write(codec, hp_pin, 0, |
---|
.. | .. |
---|
4555 | 4559 | } |
---|
4556 | 4560 | } |
---|
4557 | 4561 | |
---|
| 4562 | +static void alc236_fixup_hp_mute_led_coefbit2(struct hda_codec *codec, |
---|
| 4563 | + const struct hda_fixup *fix, int action) |
---|
| 4564 | +{ |
---|
| 4565 | + struct alc_spec *spec = codec->spec; |
---|
| 4566 | + |
---|
| 4567 | + if (action == HDA_FIXUP_ACT_PRE_PROBE) { |
---|
| 4568 | + spec->mute_led_polarity = 0; |
---|
| 4569 | + spec->mute_led_coef.idx = 0x07; |
---|
| 4570 | + spec->mute_led_coef.mask = 1; |
---|
| 4571 | + spec->mute_led_coef.on = 1; |
---|
| 4572 | + spec->mute_led_coef.off = 0; |
---|
| 4573 | + snd_hda_gen_add_mute_led_cdev(codec, coef_mute_led_set); |
---|
| 4574 | + } |
---|
| 4575 | +} |
---|
| 4576 | + |
---|
4558 | 4577 | /* turn on/off mic-mute LED per capture hook by coef bit */ |
---|
4559 | 4578 | static int coef_micmute_led_set(struct led_classdev *led_cdev, |
---|
4560 | 4579 | enum led_brightness brightness) |
---|
.. | .. |
---|
4581 | 4600 | } |
---|
4582 | 4601 | } |
---|
4583 | 4602 | |
---|
| 4603 | +static void alc285_fixup_hp_gpio_micmute_led(struct hda_codec *codec, |
---|
| 4604 | + const struct hda_fixup *fix, int action) |
---|
| 4605 | +{ |
---|
| 4606 | + struct alc_spec *spec = codec->spec; |
---|
| 4607 | + |
---|
| 4608 | + if (action == HDA_FIXUP_ACT_PRE_PROBE) |
---|
| 4609 | + spec->micmute_led_polarity = 1; |
---|
| 4610 | + alc_fixup_hp_gpio_led(codec, action, 0, 0x04); |
---|
| 4611 | +} |
---|
| 4612 | + |
---|
4584 | 4613 | static void alc236_fixup_hp_coef_micmute_led(struct hda_codec *codec, |
---|
4585 | 4614 | const struct hda_fixup *fix, int action) |
---|
4586 | 4615 | { |
---|
.. | .. |
---|
4600 | 4629 | { |
---|
4601 | 4630 | alc285_fixup_hp_mute_led_coefbit(codec, fix, action); |
---|
4602 | 4631 | alc285_fixup_hp_coef_micmute_led(codec, fix, action); |
---|
| 4632 | +} |
---|
| 4633 | + |
---|
| 4634 | +static void alc285_fixup_hp_spectre_x360_mute_led(struct hda_codec *codec, |
---|
| 4635 | + const struct hda_fixup *fix, int action) |
---|
| 4636 | +{ |
---|
| 4637 | + alc285_fixup_hp_mute_led_coefbit(codec, fix, action); |
---|
| 4638 | + alc285_fixup_hp_gpio_micmute_led(codec, fix, action); |
---|
4603 | 4639 | } |
---|
4604 | 4640 | |
---|
4605 | 4641 | static void alc236_fixup_hp_mute_led(struct hda_codec *codec, |
---|
.. | .. |
---|
6654 | 6690 | } |
---|
6655 | 6691 | } |
---|
6656 | 6692 | |
---|
| 6693 | +static void alc295_fixup_dell_inspiron_top_speakers(struct hda_codec *codec, |
---|
| 6694 | + const struct hda_fixup *fix, int action) |
---|
| 6695 | +{ |
---|
| 6696 | + static const struct hda_pintbl pincfgs[] = { |
---|
| 6697 | + { 0x14, 0x90170151 }, |
---|
| 6698 | + { 0x17, 0x90170150 }, |
---|
| 6699 | + { } |
---|
| 6700 | + }; |
---|
| 6701 | + static const hda_nid_t conn[] = { 0x02, 0x03 }; |
---|
| 6702 | + static const hda_nid_t preferred_pairs[] = { |
---|
| 6703 | + 0x14, 0x02, |
---|
| 6704 | + 0x17, 0x03, |
---|
| 6705 | + 0x21, 0x02, |
---|
| 6706 | + 0 |
---|
| 6707 | + }; |
---|
| 6708 | + struct alc_spec *spec = codec->spec; |
---|
| 6709 | + |
---|
| 6710 | + alc_fixup_no_shutup(codec, fix, action); |
---|
| 6711 | + |
---|
| 6712 | + switch (action) { |
---|
| 6713 | + case HDA_FIXUP_ACT_PRE_PROBE: |
---|
| 6714 | + snd_hda_apply_pincfgs(codec, pincfgs); |
---|
| 6715 | + snd_hda_override_conn_list(codec, 0x17, ARRAY_SIZE(conn), conn); |
---|
| 6716 | + spec->gen.preferred_dacs = preferred_pairs; |
---|
| 6717 | + break; |
---|
| 6718 | + } |
---|
| 6719 | +} |
---|
| 6720 | + |
---|
6657 | 6721 | enum { |
---|
6658 | 6722 | ALC269_FIXUP_GPIO2, |
---|
6659 | 6723 | ALC269_FIXUP_SONY_VAIO, |
---|
.. | .. |
---|
6828 | 6892 | ALC285_FIXUP_ASUS_G533Z_PINS, |
---|
6829 | 6893 | ALC285_FIXUP_HP_GPIO_LED, |
---|
6830 | 6894 | ALC285_FIXUP_HP_MUTE_LED, |
---|
| 6895 | + ALC285_FIXUP_HP_SPECTRE_X360_MUTE_LED, |
---|
| 6896 | + ALC236_FIXUP_HP_MUTE_LED_COEFBIT2, |
---|
6831 | 6897 | ALC236_FIXUP_HP_GPIO_LED, |
---|
6832 | 6898 | ALC236_FIXUP_HP_MUTE_LED, |
---|
6833 | 6899 | ALC236_FIXUP_HP_MUTE_LED_MICMUTE_VREF, |
---|
.. | .. |
---|
6884 | 6950 | ALC285_FIXUP_LEGION_Y9000X_SPEAKERS, |
---|
6885 | 6951 | ALC285_FIXUP_LEGION_Y9000X_AUTOMUTE, |
---|
6886 | 6952 | ALC285_FIXUP_HP_SPEAKERS_MICMUTE_LED, |
---|
| 6953 | + ALC295_FIXUP_DELL_INSPIRON_TOP_SPEAKERS, |
---|
| 6954 | + ALC236_FIXUP_DELL_DUAL_CODECS, |
---|
6887 | 6955 | }; |
---|
6888 | 6956 | |
---|
6889 | 6957 | /* A special fixup for Lenovo C940 and Yoga Duet 7; |
---|
.. | .. |
---|
8194 | 8262 | .type = HDA_FIXUP_FUNC, |
---|
8195 | 8263 | .v.func = alc285_fixup_hp_mute_led, |
---|
8196 | 8264 | }, |
---|
| 8265 | + [ALC285_FIXUP_HP_SPECTRE_X360_MUTE_LED] = { |
---|
| 8266 | + .type = HDA_FIXUP_FUNC, |
---|
| 8267 | + .v.func = alc285_fixup_hp_spectre_x360_mute_led, |
---|
| 8268 | + }, |
---|
| 8269 | + [ALC236_FIXUP_HP_MUTE_LED_COEFBIT2] = { |
---|
| 8270 | + .type = HDA_FIXUP_FUNC, |
---|
| 8271 | + .v.func = alc236_fixup_hp_mute_led_coefbit2, |
---|
| 8272 | + }, |
---|
8197 | 8273 | [ALC236_FIXUP_HP_GPIO_LED] = { |
---|
8198 | 8274 | .type = HDA_FIXUP_FUNC, |
---|
8199 | 8275 | .v.func = alc236_fixup_hp_gpio_led, |
---|
.. | .. |
---|
8704 | 8780 | .chained = true, |
---|
8705 | 8781 | .chain_id = ALC285_FIXUP_HP_MUTE_LED, |
---|
8706 | 8782 | }, |
---|
| 8783 | + [ALC295_FIXUP_DELL_INSPIRON_TOP_SPEAKERS] = { |
---|
| 8784 | + .type = HDA_FIXUP_FUNC, |
---|
| 8785 | + .v.func = alc295_fixup_dell_inspiron_top_speakers, |
---|
| 8786 | + .chained = true, |
---|
| 8787 | + .chain_id = ALC269_FIXUP_DELL4_MIC_NO_PRESENCE, |
---|
| 8788 | + }, |
---|
| 8789 | + [ALC236_FIXUP_DELL_DUAL_CODECS] = { |
---|
| 8790 | + .type = HDA_FIXUP_PINS, |
---|
| 8791 | + .v.func = alc1220_fixup_gb_dual_codecs, |
---|
| 8792 | + .chained = true, |
---|
| 8793 | + .chain_id = ALC255_FIXUP_DELL1_MIC_NO_PRESENCE, |
---|
| 8794 | + }, |
---|
8707 | 8795 | }; |
---|
8708 | 8796 | |
---|
8709 | 8797 | static const struct snd_pci_quirk alc269_fixup_tbl[] = { |
---|
.. | .. |
---|
8745 | 8833 | SND_PCI_QUIRK(0x1025, 0x142b, "Acer Swift SF314-42", ALC255_FIXUP_ACER_MIC_NO_PRESENCE), |
---|
8746 | 8834 | SND_PCI_QUIRK(0x1025, 0x1430, "Acer TravelMate B311R-31", ALC256_FIXUP_ACER_MIC_NO_PRESENCE), |
---|
8747 | 8835 | SND_PCI_QUIRK(0x1025, 0x1466, "Acer Aspire A515-56", ALC255_FIXUP_ACER_HEADPHONE_AND_MIC), |
---|
| 8836 | + SND_PCI_QUIRK(0x1025, 0x1534, "Acer Predator PH315-54", ALC255_FIXUP_ACER_MIC_NO_PRESENCE), |
---|
8748 | 8837 | SND_PCI_QUIRK(0x1028, 0x0470, "Dell M101z", ALC269_FIXUP_DELL_M101Z), |
---|
8749 | 8838 | SND_PCI_QUIRK(0x1028, 0x053c, "Dell Latitude E5430", ALC292_FIXUP_DELL_E7X), |
---|
8750 | 8839 | SND_PCI_QUIRK(0x1028, 0x054b, "Dell XPS one 2710", ALC275_FIXUP_DELL_XPS), |
---|
.. | .. |
---|
8803 | 8892 | SND_PCI_QUIRK(0x1028, 0x0a9e, "Dell Latitude 5430", ALC269_FIXUP_DELL4_MIC_NO_PRESENCE), |
---|
8804 | 8893 | SND_PCI_QUIRK(0x1028, 0x0b19, "Dell XPS 15 9520", ALC289_FIXUP_DUAL_SPK), |
---|
8805 | 8894 | SND_PCI_QUIRK(0x1028, 0x0b1a, "Dell Precision 5570", ALC289_FIXUP_DUAL_SPK), |
---|
| 8895 | + SND_PCI_QUIRK(0x1028, 0x0b37, "Dell Inspiron 16 Plus 7620 2-in-1", ALC295_FIXUP_DELL_INSPIRON_TOP_SPEAKERS), |
---|
| 8896 | + SND_PCI_QUIRK(0x1028, 0x0b71, "Dell Inspiron 16 Plus 7620", ALC295_FIXUP_DELL_INSPIRON_TOP_SPEAKERS), |
---|
| 8897 | + SND_PCI_QUIRK(0x1028, 0x0c03, "Dell Precision 5340", ALC269_FIXUP_DELL4_MIC_NO_PRESENCE), |
---|
| 8898 | + SND_PCI_QUIRK(0x1028, 0x0c19, "Dell Precision 3340", ALC236_FIXUP_DELL_DUAL_CODECS), |
---|
| 8899 | + SND_PCI_QUIRK(0x1028, 0x0c1a, "Dell Precision 3340", ALC236_FIXUP_DELL_DUAL_CODECS), |
---|
| 8900 | + SND_PCI_QUIRK(0x1028, 0x0c1b, "Dell Precision 3440", ALC236_FIXUP_DELL_DUAL_CODECS), |
---|
| 8901 | + SND_PCI_QUIRK(0x1028, 0x0c1c, "Dell Precision 3540", ALC236_FIXUP_DELL_DUAL_CODECS), |
---|
| 8902 | + SND_PCI_QUIRK(0x1028, 0x0c1d, "Dell Precision 3440", ALC236_FIXUP_DELL_DUAL_CODECS), |
---|
| 8903 | + SND_PCI_QUIRK(0x1028, 0x0c1e, "Dell Precision 3540", ALC236_FIXUP_DELL_DUAL_CODECS), |
---|
8806 | 8904 | SND_PCI_QUIRK(0x1028, 0x164a, "Dell", ALC293_FIXUP_DELL1_MIC_NO_PRESENCE), |
---|
8807 | 8905 | SND_PCI_QUIRK(0x1028, 0x164b, "Dell", ALC293_FIXUP_DELL1_MIC_NO_PRESENCE), |
---|
8808 | 8906 | SND_PCI_QUIRK(0x103c, 0x1586, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC2), |
---|
.. | .. |
---|
8867 | 8965 | SND_PCI_QUIRK(0x103c, 0x802f, "HP Z240", ALC221_FIXUP_HP_MIC_NO_PRESENCE), |
---|
8868 | 8966 | SND_PCI_QUIRK(0x103c, 0x8077, "HP", ALC256_FIXUP_HP_HEADSET_MIC), |
---|
8869 | 8967 | SND_PCI_QUIRK(0x103c, 0x8158, "HP", ALC256_FIXUP_HP_HEADSET_MIC), |
---|
8870 | | - SND_PCI_QUIRK(0x103c, 0x820d, "HP Pavilion 15", ALC269_FIXUP_HP_MUTE_LED_MIC3), |
---|
| 8968 | + SND_PCI_QUIRK(0x103c, 0x820d, "HP Pavilion 15", ALC295_FIXUP_HP_X360), |
---|
8871 | 8969 | SND_PCI_QUIRK(0x103c, 0x8256, "HP", ALC221_FIXUP_HP_FRONT_MIC), |
---|
8872 | 8970 | SND_PCI_QUIRK(0x103c, 0x827e, "HP x360", ALC295_FIXUP_HP_X360), |
---|
8873 | 8971 | SND_PCI_QUIRK(0x103c, 0x827f, "HP x360", ALC269_FIXUP_HP_MUTE_LED_MIC3), |
---|
.. | .. |
---|
8885 | 8983 | SND_PCI_QUIRK(0x103c, 0x86c7, "HP Envy AiO 32", ALC274_FIXUP_HP_ENVY_GPIO), |
---|
8886 | 8984 | SND_PCI_QUIRK(0x103c, 0x86e7, "HP Spectre x360 15-eb0xxx", ALC285_FIXUP_HP_SPECTRE_X360_EB1), |
---|
8887 | 8985 | SND_PCI_QUIRK(0x103c, 0x86e8, "HP Spectre x360 15-eb0xxx", ALC285_FIXUP_HP_SPECTRE_X360_EB1), |
---|
| 8986 | + SND_PCI_QUIRK(0x103c, 0x86f9, "HP Spectre x360 13-aw0xxx", ALC285_FIXUP_HP_SPECTRE_X360_MUTE_LED), |
---|
8888 | 8987 | SND_PCI_QUIRK(0x103c, 0x8716, "HP Elite Dragonfly G2 Notebook PC", ALC285_FIXUP_HP_GPIO_AMP_INIT), |
---|
8889 | 8988 | SND_PCI_QUIRK(0x103c, 0x8720, "HP EliteBook x360 1040 G8 Notebook PC", ALC285_FIXUP_HP_GPIO_AMP_INIT), |
---|
8890 | 8989 | SND_PCI_QUIRK(0x103c, 0x8724, "HP EliteBook 850 G7", ALC285_FIXUP_HP_GPIO_LED), |
---|
.. | .. |
---|
8916 | 9015 | SND_PCI_QUIRK(0x103c, 0x880d, "HP EliteBook 830 G8 Notebook PC", ALC285_FIXUP_HP_GPIO_LED), |
---|
8917 | 9016 | SND_PCI_QUIRK(0x103c, 0x8811, "HP Spectre x360 15-eb1xxx", ALC285_FIXUP_HP_SPECTRE_X360_EB1), |
---|
8918 | 9017 | SND_PCI_QUIRK(0x103c, 0x8812, "HP Spectre x360 15-eb1xxx", ALC285_FIXUP_HP_SPECTRE_X360_EB1), |
---|
| 9018 | + SND_PCI_QUIRK(0x103c, 0x881d, "HP 250 G8 Notebook PC", ALC236_FIXUP_HP_MUTE_LED_COEFBIT2), |
---|
8919 | 9019 | SND_PCI_QUIRK(0x103c, 0x8846, "HP EliteBook 850 G8 Notebook PC", ALC285_FIXUP_HP_GPIO_LED), |
---|
8920 | 9020 | SND_PCI_QUIRK(0x103c, 0x8847, "HP EliteBook x360 830 G8 Notebook PC", ALC285_FIXUP_HP_GPIO_LED), |
---|
8921 | 9021 | SND_PCI_QUIRK(0x103c, 0x884b, "HP EliteBook 840 Aero G8 Notebook PC", ALC285_FIXUP_HP_GPIO_LED), |
---|
.. | .. |
---|
8925 | 9025 | SND_PCI_QUIRK(0x103c, 0x886d, "HP ZBook Fury 17.3 Inch G8 Mobile Workstation PC", ALC285_FIXUP_HP_GPIO_AMP_INIT), |
---|
8926 | 9026 | SND_PCI_QUIRK(0x103c, 0x8870, "HP ZBook Fury 15.6 Inch G8 Mobile Workstation PC", ALC285_FIXUP_HP_GPIO_AMP_INIT), |
---|
8927 | 9027 | SND_PCI_QUIRK(0x103c, 0x8873, "HP ZBook Studio 15.6 Inch G8 Mobile Workstation PC", ALC285_FIXUP_HP_GPIO_AMP_INIT), |
---|
| 9028 | + SND_PCI_QUIRK(0x103c, 0x887a, "HP Laptop 15s-eq2xxx", ALC236_FIXUP_HP_MUTE_LED_COEFBIT2), |
---|
8928 | 9029 | SND_PCI_QUIRK(0x103c, 0x888d, "HP ZBook Power 15.6 inch G8 Mobile Workstation PC", ALC236_FIXUP_HP_GPIO_LED), |
---|
8929 | 9030 | SND_PCI_QUIRK(0x103c, 0x8895, "HP EliteBook 855 G8 Notebook PC", ALC285_FIXUP_HP_SPEAKERS_MICMUTE_LED), |
---|
8930 | 9031 | SND_PCI_QUIRK(0x103c, 0x8896, "HP EliteBook 855 G8 Notebook PC", ALC285_FIXUP_HP_MUTE_LED), |
---|
.. | .. |
---|
8966 | 9067 | SND_PCI_QUIRK(0x1043, 0x1b13, "Asus U41SV", ALC269_FIXUP_INV_DMIC), |
---|
8967 | 9068 | SND_PCI_QUIRK(0x1043, 0x1bbd, "ASUS Z550MA", ALC255_FIXUP_ASUS_MIC_NO_PRESENCE), |
---|
8968 | 9069 | SND_PCI_QUIRK(0x1043, 0x1c23, "Asus X55U", ALC269_FIXUP_LIMIT_INT_MIC_BOOST), |
---|
| 9070 | + SND_PCI_QUIRK(0x1043, 0x1c62, "ASUS GU603", ALC289_FIXUP_ASUS_GA401), |
---|
8969 | 9071 | SND_PCI_QUIRK(0x1043, 0x1c92, "ASUS ROG Strix G15", ALC285_FIXUP_ASUS_G533Z_PINS), |
---|
8970 | 9072 | SND_PCI_QUIRK(0x1043, 0x1ccd, "ASUS X555UB", ALC256_FIXUP_ASUS_MIC), |
---|
8971 | 9073 | SND_PCI_QUIRK(0x1043, 0x1d42, "ASUS Zephyrus G14 2022", ALC289_FIXUP_ASUS_GA401), |
---|
.. | .. |
---|
9013 | 9115 | SND_PCI_QUIRK(0x144d, 0xc812, "Samsung Notebook Pen S (NT950SBE-X58)", ALC298_FIXUP_SAMSUNG_AMP), |
---|
9014 | 9116 | SND_PCI_QUIRK(0x144d, 0xc830, "Samsung Galaxy Book Ion (NT950XCJ-X716A)", ALC298_FIXUP_SAMSUNG_AMP), |
---|
9015 | 9117 | SND_PCI_QUIRK(0x144d, 0xc832, "Samsung Galaxy Book Flex Alpha (NP730QCJ)", ALC256_FIXUP_SAMSUNG_HEADPHONE_VERY_QUIET), |
---|
| 9118 | + SND_PCI_QUIRK(0x144d, 0xca03, "Samsung Galaxy Book2 Pro 360 (NP930QED)", ALC298_FIXUP_SAMSUNG_AMP), |
---|
| 9119 | + SND_PCI_QUIRK(0x144d, 0xc868, "Samsung Galaxy Book2 Pro (NP930XED)", ALC298_FIXUP_SAMSUNG_AMP), |
---|
9016 | 9120 | SND_PCI_QUIRK(0x1458, 0xfa53, "Gigabyte BXBT-2807", ALC283_FIXUP_HEADSET_MIC), |
---|
9017 | 9121 | SND_PCI_QUIRK(0x1462, 0xb120, "MSI Cubi MS-B120", ALC283_FIXUP_HEADSET_MIC), |
---|
9018 | 9122 | SND_PCI_QUIRK(0x1462, 0xb171, "Cubi N 8GL (MS-B171)", ALC283_FIXUP_HEADSET_MIC), |
---|
.. | .. |
---|
9056 | 9160 | SND_PCI_QUIRK(0x1558, 0x7716, "Clevo NS50PU", ALC256_FIXUP_SYSTEM76_MIC_NO_PRESENCE), |
---|
9057 | 9161 | SND_PCI_QUIRK(0x1558, 0x7717, "Clevo NS70PU", ALC256_FIXUP_SYSTEM76_MIC_NO_PRESENCE), |
---|
9058 | 9162 | SND_PCI_QUIRK(0x1558, 0x7718, "Clevo L140PU", ALC256_FIXUP_SYSTEM76_MIC_NO_PRESENCE), |
---|
| 9163 | + SND_PCI_QUIRK(0x1558, 0x7724, "Clevo L140AU", ALC256_FIXUP_SYSTEM76_MIC_NO_PRESENCE), |
---|
9059 | 9164 | SND_PCI_QUIRK(0x1558, 0x8228, "Clevo NR40BU", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE), |
---|
9060 | 9165 | SND_PCI_QUIRK(0x1558, 0x8520, "Clevo NH50D[CD]", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE), |
---|
9061 | 9166 | SND_PCI_QUIRK(0x1558, 0x8521, "Clevo NH77D[CD]", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE), |
---|
.. | .. |
---|
9174 | 9279 | SND_PCI_QUIRK(0x17aa, 0x511e, "Thinkpad", ALC298_FIXUP_TPT470_DOCK), |
---|
9175 | 9280 | SND_PCI_QUIRK(0x17aa, 0x511f, "Thinkpad", ALC298_FIXUP_TPT470_DOCK), |
---|
9176 | 9281 | SND_PCI_QUIRK(0x17aa, 0x9e54, "LENOVO NB", ALC269_FIXUP_LENOVO_EAPD), |
---|
| 9282 | + SND_PCI_QUIRK(0x17aa, 0x9e56, "Lenovo ZhaoYang CF4620Z", ALC286_FIXUP_SONY_MIC_NO_PRESENCE), |
---|
9177 | 9283 | SND_PCI_QUIRK(0x1849, 0x1233, "ASRock NUC Box 1100", ALC233_FIXUP_NO_AUDIO_JACK), |
---|
9178 | 9284 | SND_PCI_QUIRK(0x1849, 0xa233, "Positivo Master C6300", ALC269_FIXUP_HEADSET_MIC), |
---|
9179 | 9285 | SND_PCI_QUIRK(0x19e5, 0x3204, "Huawei MACH-WX9", ALC256_FIXUP_HUAWEI_MACH_WX9_PINS), |
---|
.. | .. |
---|
9184 | 9290 | SND_PCI_QUIRK(0x1b7d, 0xa831, "Ordissimo EVE2 ", ALC269VB_FIXUP_ORDISSIMO_EVE2), /* Also known as Malata PC-B1303 */ |
---|
9185 | 9291 | SND_PCI_QUIRK(0x1c06, 0x2013, "Lemote A1802", ALC269_FIXUP_LEMOTE_A1802), |
---|
9186 | 9292 | SND_PCI_QUIRK(0x1c06, 0x2015, "Lemote A190X", ALC269_FIXUP_LEMOTE_A190X), |
---|
| 9293 | + SND_PCI_QUIRK(0x1c6c, 0x1251, "Positivo N14KP6-TG", ALC288_FIXUP_DELL1_MIC_NO_PRESENCE), |
---|
9187 | 9294 | SND_PCI_QUIRK(0x1d05, 0x1132, "TongFang PHxTxX1", ALC256_FIXUP_SET_COEF_DEFAULTS), |
---|
9188 | 9295 | SND_PCI_QUIRK(0x1d05, 0x1096, "TongFang GMxMRxx", ALC269_FIXUP_NO_SHUTUP), |
---|
9189 | 9296 | SND_PCI_QUIRK(0x1d05, 0x1100, "TongFang GKxNRxx", ALC269_FIXUP_NO_SHUTUP), |
---|
.. | .. |
---|
9899 | 10006 | spec = codec->spec; |
---|
9900 | 10007 | spec->gen.shared_mic_vref_pin = 0x18; |
---|
9901 | 10008 | codec->power_save_node = 0; |
---|
| 10009 | + spec->en_3kpull_low = true; |
---|
9902 | 10010 | |
---|
9903 | 10011 | #ifdef CONFIG_PM |
---|
9904 | 10012 | codec->patch_ops.suspend = alc269_suspend; |
---|
.. | .. |
---|
9981 | 10089 | spec->shutup = alc256_shutup; |
---|
9982 | 10090 | spec->init_hook = alc256_init; |
---|
9983 | 10091 | spec->gen.mixer_nid = 0; /* ALC256 does not have any loopback mixer path */ |
---|
| 10092 | + if (codec->core.vendor_id == 0x10ec0236 && |
---|
| 10093 | + codec->bus->pci->vendor != PCI_VENDOR_ID_AMD) |
---|
| 10094 | + spec->en_3kpull_low = false; |
---|
9984 | 10095 | break; |
---|
9985 | 10096 | case 0x10ec0257: |
---|
9986 | 10097 | spec->codec_variant = ALC269_TYPE_ALC257; |
---|
9987 | 10098 | spec->shutup = alc256_shutup; |
---|
9988 | 10099 | spec->init_hook = alc256_init; |
---|
9989 | 10100 | spec->gen.mixer_nid = 0; |
---|
| 10101 | + spec->en_3kpull_low = false; |
---|
9990 | 10102 | break; |
---|
9991 | 10103 | case 0x10ec0215: |
---|
9992 | 10104 | case 0x10ec0245: |
---|
.. | .. |
---|
10514 | 10626 | } |
---|
10515 | 10627 | } |
---|
10516 | 10628 | |
---|
| 10629 | +static void alc897_fixup_lenovo_headset_mode(struct hda_codec *codec, |
---|
| 10630 | + const struct hda_fixup *fix, int action) |
---|
| 10631 | +{ |
---|
| 10632 | + struct alc_spec *spec = codec->spec; |
---|
| 10633 | + |
---|
| 10634 | + if (action == HDA_FIXUP_ACT_PRE_PROBE) { |
---|
| 10635 | + spec->parse_flags |= HDA_PINCFG_HEADSET_MIC; |
---|
| 10636 | + spec->gen.hp_automute_hook = alc897_hp_automute_hook; |
---|
| 10637 | + } |
---|
| 10638 | +} |
---|
| 10639 | + |
---|
10517 | 10640 | static const struct coef_fw alc668_coefs[] = { |
---|
10518 | 10641 | WRITE_COEF(0x01, 0xbebe), WRITE_COEF(0x02, 0xaaaa), WRITE_COEF(0x03, 0x0), |
---|
10519 | 10642 | WRITE_COEF(0x04, 0x0180), WRITE_COEF(0x06, 0x0), WRITE_COEF(0x07, 0x0f80), |
---|
.. | .. |
---|
10597 | 10720 | ALC897_FIXUP_LENOVO_HEADSET_MIC, |
---|
10598 | 10721 | ALC897_FIXUP_HEADSET_MIC_PIN, |
---|
10599 | 10722 | ALC897_FIXUP_HP_HSMIC_VERB, |
---|
| 10723 | + ALC897_FIXUP_LENOVO_HEADSET_MODE, |
---|
| 10724 | + ALC897_FIXUP_HEADSET_MIC_PIN2, |
---|
| 10725 | + ALC897_FIXUP_UNIS_H3C_X500S, |
---|
10600 | 10726 | }; |
---|
10601 | 10727 | |
---|
10602 | 10728 | static const struct hda_fixup alc662_fixups[] = { |
---|
.. | .. |
---|
11023 | 11149 | { } |
---|
11024 | 11150 | }, |
---|
11025 | 11151 | }, |
---|
| 11152 | + [ALC897_FIXUP_LENOVO_HEADSET_MODE] = { |
---|
| 11153 | + .type = HDA_FIXUP_FUNC, |
---|
| 11154 | + .v.func = alc897_fixup_lenovo_headset_mode, |
---|
| 11155 | + }, |
---|
| 11156 | + [ALC897_FIXUP_HEADSET_MIC_PIN2] = { |
---|
| 11157 | + .type = HDA_FIXUP_PINS, |
---|
| 11158 | + .v.pins = (const struct hda_pintbl[]) { |
---|
| 11159 | + { 0x1a, 0x01a11140 }, /* use as headset mic, without its own jack detect */ |
---|
| 11160 | + { } |
---|
| 11161 | + }, |
---|
| 11162 | + .chained = true, |
---|
| 11163 | + .chain_id = ALC897_FIXUP_LENOVO_HEADSET_MODE |
---|
| 11164 | + }, |
---|
| 11165 | + [ALC897_FIXUP_UNIS_H3C_X500S] = { |
---|
| 11166 | + .type = HDA_FIXUP_VERBS, |
---|
| 11167 | + .v.verbs = (const struct hda_verb[]) { |
---|
| 11168 | + { 0x14, AC_VERB_SET_EAPD_BTLENABLE, 0 }, |
---|
| 11169 | + {} |
---|
| 11170 | + }, |
---|
| 11171 | + }, |
---|
11026 | 11172 | }; |
---|
11027 | 11173 | |
---|
11028 | 11174 | static const struct snd_pci_quirk alc662_fixup_tbl[] = { |
---|
.. | .. |
---|
11048 | 11194 | SND_PCI_QUIRK(0x1028, 0x0698, "Dell", ALC668_FIXUP_DELL_MIC_NO_PRESENCE), |
---|
11049 | 11195 | SND_PCI_QUIRK(0x1028, 0x069f, "Dell", ALC668_FIXUP_DELL_MIC_NO_PRESENCE), |
---|
11050 | 11196 | SND_PCI_QUIRK(0x103c, 0x1632, "HP RP5800", ALC662_FIXUP_HP_RP5800), |
---|
| 11197 | + SND_PCI_QUIRK(0x103c, 0x870c, "HP", ALC897_FIXUP_HP_HSMIC_VERB), |
---|
11051 | 11198 | SND_PCI_QUIRK(0x103c, 0x8719, "HP", ALC897_FIXUP_HP_HSMIC_VERB), |
---|
| 11199 | + SND_PCI_QUIRK(0x103c, 0x872b, "HP", ALC897_FIXUP_HP_HSMIC_VERB), |
---|
11052 | 11200 | SND_PCI_QUIRK(0x103c, 0x873e, "HP", ALC671_FIXUP_HP_HEADSET_MIC2), |
---|
| 11201 | + SND_PCI_QUIRK(0x103c, 0x8768, "HP Slim Desktop S01", ALC671_FIXUP_HP_HEADSET_MIC2), |
---|
11053 | 11202 | SND_PCI_QUIRK(0x103c, 0x877e, "HP 288 Pro G6", ALC671_FIXUP_HP_HEADSET_MIC2), |
---|
11054 | 11203 | SND_PCI_QUIRK(0x103c, 0x885f, "HP 288 Pro G8", ALC671_FIXUP_HP_HEADSET_MIC2), |
---|
11055 | 11204 | SND_PCI_QUIRK(0x1043, 0x1080, "Asus UX501VW", ALC668_FIXUP_HEADSET_MODE), |
---|
.. | .. |
---|
11071 | 11220 | SND_PCI_QUIRK(0x14cd, 0x5003, "USI", ALC662_FIXUP_USI_HEADSET_MODE), |
---|
11072 | 11221 | SND_PCI_QUIRK(0x17aa, 0x1036, "Lenovo P520", ALC662_FIXUP_LENOVO_MULTI_CODECS), |
---|
11073 | 11222 | SND_PCI_QUIRK(0x17aa, 0x1057, "Lenovo P360", ALC897_FIXUP_HEADSET_MIC_PIN), |
---|
| 11223 | + SND_PCI_QUIRK(0x17aa, 0x1064, "Lenovo P3 Tower", ALC897_FIXUP_HEADSET_MIC_PIN), |
---|
11074 | 11224 | SND_PCI_QUIRK(0x17aa, 0x32ca, "Lenovo ThinkCentre M80", ALC897_FIXUP_HEADSET_MIC_PIN), |
---|
11075 | 11225 | SND_PCI_QUIRK(0x17aa, 0x32cb, "Lenovo ThinkCentre M70", ALC897_FIXUP_HEADSET_MIC_PIN), |
---|
11076 | 11226 | SND_PCI_QUIRK(0x17aa, 0x32cf, "Lenovo ThinkCentre M950", ALC897_FIXUP_HEADSET_MIC_PIN), |
---|
11077 | 11227 | SND_PCI_QUIRK(0x17aa, 0x32f7, "Lenovo ThinkCentre M90", ALC897_FIXUP_HEADSET_MIC_PIN), |
---|
| 11228 | + SND_PCI_QUIRK(0x17aa, 0x3321, "Lenovo ThinkCentre M70 Gen4", ALC897_FIXUP_HEADSET_MIC_PIN), |
---|
| 11229 | + SND_PCI_QUIRK(0x17aa, 0x331b, "Lenovo ThinkCentre M90 Gen4", ALC897_FIXUP_HEADSET_MIC_PIN), |
---|
| 11230 | + SND_PCI_QUIRK(0x17aa, 0x3742, "Lenovo TianYi510Pro-14IOB", ALC897_FIXUP_HEADSET_MIC_PIN2), |
---|
11078 | 11231 | SND_PCI_QUIRK(0x17aa, 0x38af, "Lenovo Ideapad Y550P", ALC662_FIXUP_IDEAPAD), |
---|
11079 | 11232 | SND_PCI_QUIRK(0x17aa, 0x3a0d, "Lenovo Ideapad Y550", ALC662_FIXUP_IDEAPAD), |
---|
11080 | 11233 | SND_PCI_QUIRK(0x1849, 0x5892, "ASRock B150M", ALC892_FIXUP_ASROCK_MOBO), |
---|
.. | .. |
---|
11082 | 11235 | SND_PCI_QUIRK(0x1b0a, 0x01b8, "ACER Veriton", ALC662_FIXUP_ACER_VERITON), |
---|
11083 | 11236 | SND_PCI_QUIRK(0x1b35, 0x1234, "CZC ET26", ALC662_FIXUP_CZC_ET26), |
---|
11084 | 11237 | SND_PCI_QUIRK(0x1b35, 0x2206, "CZC P10T", ALC662_FIXUP_CZC_P10T), |
---|
| 11238 | + SND_PCI_QUIRK(0x1c6c, 0x1239, "Compaq N14JP6-V2", ALC897_FIXUP_HP_HSMIC_VERB), |
---|
11085 | 11239 | |
---|
11086 | 11240 | #if 0 |
---|
11087 | 11241 | /* Below is a quirk table taken from the old code. |
---|
.. | .. |
---|
11176 | 11330 | {.id = ALC662_FIXUP_USI_HEADSET_MODE, .name = "usi-headset"}, |
---|
11177 | 11331 | {.id = ALC662_FIXUP_LENOVO_MULTI_CODECS, .name = "dual-codecs"}, |
---|
11178 | 11332 | {.id = ALC669_FIXUP_ACER_ASPIRE_ETHOS, .name = "aspire-ethos"}, |
---|
| 11333 | + {.id = ALC897_FIXUP_UNIS_H3C_X500S, .name = "unis-h3c-x500s"}, |
---|
11179 | 11334 | {} |
---|
11180 | 11335 | }; |
---|
11181 | 11336 | |
---|