diff options
Diffstat (limited to 'sound/pci/hda/patch_realtek.c')
-rw-r--r-- | sound/pci/hda/patch_realtek.c | 70 |
1 files changed, 69 insertions, 1 deletions
diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c index bc07d369fac4..bf313bea7085 100644 --- a/sound/pci/hda/patch_realtek.c +++ b/sound/pci/hda/patch_realtek.c | |||
@@ -2819,6 +2819,15 @@ static void alc269_fixup_hweq(struct hda_codec *codec, | |||
2819 | alc_write_coef_idx(codec, 0x1e, coef | 0x80); | 2819 | alc_write_coef_idx(codec, 0x1e, coef | 0x80); |
2820 | } | 2820 | } |
2821 | 2821 | ||
2822 | static void alc269_fixup_headset_mic(struct hda_codec *codec, | ||
2823 | const struct hda_fixup *fix, int action) | ||
2824 | { | ||
2825 | struct alc_spec *spec = codec->spec; | ||
2826 | |||
2827 | if (action == HDA_FIXUP_ACT_PRE_PROBE) | ||
2828 | spec->parse_flags |= HDA_PINCFG_HEADSET_MIC; | ||
2829 | } | ||
2830 | |||
2822 | static void alc271_fixup_dmic(struct hda_codec *codec, | 2831 | static void alc271_fixup_dmic(struct hda_codec *codec, |
2823 | const struct hda_fixup *fix, int action) | 2832 | const struct hda_fixup *fix, int action) |
2824 | { | 2833 | { |
@@ -3439,6 +3448,9 @@ static void alc283_fixup_chromebook(struct hda_codec *codec, | |||
3439 | /* Set to manual mode */ | 3448 | /* Set to manual mode */ |
3440 | val = alc_read_coef_idx(codec, 0x06); | 3449 | val = alc_read_coef_idx(codec, 0x06); |
3441 | alc_write_coef_idx(codec, 0x06, val & ~0x000c); | 3450 | alc_write_coef_idx(codec, 0x06, val & ~0x000c); |
3451 | /* Enable Line1 input control by verb */ | ||
3452 | val = alc_read_coef_idx(codec, 0x1a); | ||
3453 | alc_write_coef_idx(codec, 0x1a, val | (1 << 4)); | ||
3442 | break; | 3454 | break; |
3443 | } | 3455 | } |
3444 | } | 3456 | } |
@@ -3493,6 +3505,15 @@ static void alc282_fixup_asus_tx300(struct hda_codec *codec, | |||
3493 | } | 3505 | } |
3494 | } | 3506 | } |
3495 | 3507 | ||
3508 | static void alc290_fixup_mono_speakers(struct hda_codec *codec, | ||
3509 | const struct hda_fixup *fix, int action) | ||
3510 | { | ||
3511 | if (action == HDA_FIXUP_ACT_PRE_PROBE) | ||
3512 | /* Remove DAC node 0x03, as it seems to be | ||
3513 | giving mono output */ | ||
3514 | snd_hda_override_wcaps(codec, 0x03, 0); | ||
3515 | } | ||
3516 | |||
3496 | enum { | 3517 | enum { |
3497 | ALC269_FIXUP_SONY_VAIO, | 3518 | ALC269_FIXUP_SONY_VAIO, |
3498 | ALC275_FIXUP_SONY_VAIO_GPIO2, | 3519 | ALC275_FIXUP_SONY_VAIO_GPIO2, |
@@ -3504,6 +3525,7 @@ enum { | |||
3504 | ALC271_FIXUP_DMIC, | 3525 | ALC271_FIXUP_DMIC, |
3505 | ALC269_FIXUP_PCM_44K, | 3526 | ALC269_FIXUP_PCM_44K, |
3506 | ALC269_FIXUP_STEREO_DMIC, | 3527 | ALC269_FIXUP_STEREO_DMIC, |
3528 | ALC269_FIXUP_HEADSET_MIC, | ||
3507 | ALC269_FIXUP_QUANTA_MUTE, | 3529 | ALC269_FIXUP_QUANTA_MUTE, |
3508 | ALC269_FIXUP_LIFEBOOK, | 3530 | ALC269_FIXUP_LIFEBOOK, |
3509 | ALC269_FIXUP_AMIC, | 3531 | ALC269_FIXUP_AMIC, |
@@ -3516,9 +3538,11 @@ enum { | |||
3516 | ALC269_FIXUP_HP_GPIO_LED, | 3538 | ALC269_FIXUP_HP_GPIO_LED, |
3517 | ALC269_FIXUP_INV_DMIC, | 3539 | ALC269_FIXUP_INV_DMIC, |
3518 | ALC269_FIXUP_LENOVO_DOCK, | 3540 | ALC269_FIXUP_LENOVO_DOCK, |
3541 | ALC286_FIXUP_SONY_MIC_NO_PRESENCE, | ||
3519 | ALC269_FIXUP_PINCFG_NO_HP_TO_LINEOUT, | 3542 | ALC269_FIXUP_PINCFG_NO_HP_TO_LINEOUT, |
3520 | ALC269_FIXUP_DELL1_MIC_NO_PRESENCE, | 3543 | ALC269_FIXUP_DELL1_MIC_NO_PRESENCE, |
3521 | ALC269_FIXUP_DELL2_MIC_NO_PRESENCE, | 3544 | ALC269_FIXUP_DELL2_MIC_NO_PRESENCE, |
3545 | ALC269_FIXUP_DELL3_MIC_NO_PRESENCE, | ||
3522 | ALC269_FIXUP_HEADSET_MODE, | 3546 | ALC269_FIXUP_HEADSET_MODE, |
3523 | ALC269_FIXUP_HEADSET_MODE_NO_HP_MIC, | 3547 | ALC269_FIXUP_HEADSET_MODE_NO_HP_MIC, |
3524 | ALC269_FIXUP_ASUS_X101_FUNC, | 3548 | ALC269_FIXUP_ASUS_X101_FUNC, |
@@ -3531,6 +3555,8 @@ enum { | |||
3531 | ALC269VB_FIXUP_ORDISSIMO_EVE2, | 3555 | ALC269VB_FIXUP_ORDISSIMO_EVE2, |
3532 | ALC283_FIXUP_CHROME_BOOK, | 3556 | ALC283_FIXUP_CHROME_BOOK, |
3533 | ALC282_FIXUP_ASUS_TX300, | 3557 | ALC282_FIXUP_ASUS_TX300, |
3558 | ALC283_FIXUP_INT_MIC, | ||
3559 | ALC290_FIXUP_MONO_SPEAKERS, | ||
3534 | }; | 3560 | }; |
3535 | 3561 | ||
3536 | static const struct hda_fixup alc269_fixups[] = { | 3562 | static const struct hda_fixup alc269_fixups[] = { |
@@ -3599,6 +3625,10 @@ static const struct hda_fixup alc269_fixups[] = { | |||
3599 | .type = HDA_FIXUP_FUNC, | 3625 | .type = HDA_FIXUP_FUNC, |
3600 | .v.func = alc269_fixup_stereo_dmic, | 3626 | .v.func = alc269_fixup_stereo_dmic, |
3601 | }, | 3627 | }, |
3628 | [ALC269_FIXUP_HEADSET_MIC] = { | ||
3629 | .type = HDA_FIXUP_FUNC, | ||
3630 | .v.func = alc269_fixup_headset_mic, | ||
3631 | }, | ||
3602 | [ALC269_FIXUP_QUANTA_MUTE] = { | 3632 | [ALC269_FIXUP_QUANTA_MUTE] = { |
3603 | .type = HDA_FIXUP_FUNC, | 3633 | .type = HDA_FIXUP_FUNC, |
3604 | .v.func = alc269_fixup_quanta_mute, | 3634 | .v.func = alc269_fixup_quanta_mute, |
@@ -3708,6 +3738,15 @@ static const struct hda_fixup alc269_fixups[] = { | |||
3708 | .chained = true, | 3738 | .chained = true, |
3709 | .chain_id = ALC269_FIXUP_HEADSET_MODE_NO_HP_MIC | 3739 | .chain_id = ALC269_FIXUP_HEADSET_MODE_NO_HP_MIC |
3710 | }, | 3740 | }, |
3741 | [ALC269_FIXUP_DELL3_MIC_NO_PRESENCE] = { | ||
3742 | .type = HDA_FIXUP_PINS, | ||
3743 | .v.pins = (const struct hda_pintbl[]) { | ||
3744 | { 0x1a, 0x01a1913c }, /* use as headset mic, without its own jack detect */ | ||
3745 | { } | ||
3746 | }, | ||
3747 | .chained = true, | ||
3748 | .chain_id = ALC269_FIXUP_HEADSET_MODE_NO_HP_MIC | ||
3749 | }, | ||
3711 | [ALC269_FIXUP_HEADSET_MODE] = { | 3750 | [ALC269_FIXUP_HEADSET_MODE] = { |
3712 | .type = HDA_FIXUP_FUNC, | 3751 | .type = HDA_FIXUP_FUNC, |
3713 | .v.func = alc_fixup_headset_mode, | 3752 | .v.func = alc_fixup_headset_mode, |
@@ -3716,6 +3755,15 @@ static const struct hda_fixup alc269_fixups[] = { | |||
3716 | .type = HDA_FIXUP_FUNC, | 3755 | .type = HDA_FIXUP_FUNC, |
3717 | .v.func = alc_fixup_headset_mode_no_hp_mic, | 3756 | .v.func = alc_fixup_headset_mode_no_hp_mic, |
3718 | }, | 3757 | }, |
3758 | [ALC286_FIXUP_SONY_MIC_NO_PRESENCE] = { | ||
3759 | .type = HDA_FIXUP_PINS, | ||
3760 | .v.pins = (const struct hda_pintbl[]) { | ||
3761 | { 0x18, 0x01a1913c }, /* use as headset mic, without its own jack detect */ | ||
3762 | { } | ||
3763 | }, | ||
3764 | .chained = true, | ||
3765 | .chain_id = ALC269_FIXUP_HEADSET_MIC | ||
3766 | }, | ||
3719 | [ALC269_FIXUP_ASUS_X101_FUNC] = { | 3767 | [ALC269_FIXUP_ASUS_X101_FUNC] = { |
3720 | .type = HDA_FIXUP_FUNC, | 3768 | .type = HDA_FIXUP_FUNC, |
3721 | .v.func = alc269_fixup_x101_headset_mic, | 3769 | .v.func = alc269_fixup_x101_headset_mic, |
@@ -3790,6 +3838,22 @@ static const struct hda_fixup alc269_fixups[] = { | |||
3790 | .type = HDA_FIXUP_FUNC, | 3838 | .type = HDA_FIXUP_FUNC, |
3791 | .v.func = alc282_fixup_asus_tx300, | 3839 | .v.func = alc282_fixup_asus_tx300, |
3792 | }, | 3840 | }, |
3841 | [ALC283_FIXUP_INT_MIC] = { | ||
3842 | .type = HDA_FIXUP_VERBS, | ||
3843 | .v.verbs = (const struct hda_verb[]) { | ||
3844 | {0x20, AC_VERB_SET_COEF_INDEX, 0x1a}, | ||
3845 | {0x20, AC_VERB_SET_PROC_COEF, 0x0011}, | ||
3846 | { } | ||
3847 | }, | ||
3848 | .chained = true, | ||
3849 | .chain_id = ALC269_FIXUP_LIMIT_INT_MIC_BOOST | ||
3850 | }, | ||
3851 | [ALC290_FIXUP_MONO_SPEAKERS] = { | ||
3852 | .type = HDA_FIXUP_FUNC, | ||
3853 | .v.func = alc290_fixup_mono_speakers, | ||
3854 | .chained = true, | ||
3855 | .chain_id = ALC269_FIXUP_DELL3_MIC_NO_PRESENCE, | ||
3856 | }, | ||
3793 | }; | 3857 | }; |
3794 | 3858 | ||
3795 | static const struct snd_pci_quirk alc269_fixup_tbl[] = { | 3859 | static const struct snd_pci_quirk alc269_fixup_tbl[] = { |
@@ -3831,6 +3895,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = { | |||
3831 | SND_PCI_QUIRK(0x1028, 0x0608, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE), | 3895 | SND_PCI_QUIRK(0x1028, 0x0608, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE), |
3832 | SND_PCI_QUIRK(0x1028, 0x0609, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE), | 3896 | SND_PCI_QUIRK(0x1028, 0x0609, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE), |
3833 | SND_PCI_QUIRK(0x1028, 0x0613, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE), | 3897 | SND_PCI_QUIRK(0x1028, 0x0613, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE), |
3898 | SND_PCI_QUIRK(0x1028, 0x0616, "Dell Vostro 5470", ALC290_FIXUP_MONO_SPEAKERS), | ||
3834 | SND_PCI_QUIRK(0x1028, 0x15cc, "Dell X5 Precision", ALC269_FIXUP_DELL2_MIC_NO_PRESENCE), | 3899 | SND_PCI_QUIRK(0x1028, 0x15cc, "Dell X5 Precision", ALC269_FIXUP_DELL2_MIC_NO_PRESENCE), |
3835 | SND_PCI_QUIRK(0x1028, 0x15cd, "Dell X5 Precision", ALC269_FIXUP_DELL2_MIC_NO_PRESENCE), | 3900 | SND_PCI_QUIRK(0x1028, 0x15cd, "Dell X5 Precision", ALC269_FIXUP_DELL2_MIC_NO_PRESENCE), |
3836 | SND_PCI_QUIRK(0x103c, 0x1586, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC2), | 3901 | SND_PCI_QUIRK(0x103c, 0x1586, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC2), |
@@ -3853,6 +3918,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = { | |||
3853 | SND_PCI_QUIRK(0x1043, 0x8398, "ASUS P1005", ALC269_FIXUP_STEREO_DMIC), | 3918 | SND_PCI_QUIRK(0x1043, 0x8398, "ASUS P1005", ALC269_FIXUP_STEREO_DMIC), |
3854 | SND_PCI_QUIRK(0x1043, 0x83ce, "ASUS P1005", ALC269_FIXUP_STEREO_DMIC), | 3919 | SND_PCI_QUIRK(0x1043, 0x83ce, "ASUS P1005", ALC269_FIXUP_STEREO_DMIC), |
3855 | SND_PCI_QUIRK(0x1043, 0x8516, "ASUS X101CH", ALC269_FIXUP_ASUS_X101), | 3920 | SND_PCI_QUIRK(0x1043, 0x8516, "ASUS X101CH", ALC269_FIXUP_ASUS_X101), |
3921 | SND_PCI_QUIRK(0x104d, 0x90b6, "Sony VAIO Pro 13", ALC286_FIXUP_SONY_MIC_NO_PRESENCE), | ||
3856 | SND_PCI_QUIRK(0x104d, 0x9073, "Sony VAIO", ALC275_FIXUP_SONY_VAIO_GPIO2), | 3922 | SND_PCI_QUIRK(0x104d, 0x9073, "Sony VAIO", ALC275_FIXUP_SONY_VAIO_GPIO2), |
3857 | SND_PCI_QUIRK(0x104d, 0x907b, "Sony VAIO", ALC275_FIXUP_SONY_HWEQ), | 3923 | SND_PCI_QUIRK(0x104d, 0x907b, "Sony VAIO", ALC275_FIXUP_SONY_HWEQ), |
3858 | SND_PCI_QUIRK(0x104d, 0x9084, "Sony VAIO", ALC275_FIXUP_SONY_HWEQ), | 3924 | SND_PCI_QUIRK(0x104d, 0x9084, "Sony VAIO", ALC275_FIXUP_SONY_HWEQ), |
@@ -3874,7 +3940,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = { | |||
3874 | SND_PCI_QUIRK(0x17aa, 0x2214, "Thinkpad", ALC269_FIXUP_LIMIT_INT_MIC_BOOST), | 3940 | SND_PCI_QUIRK(0x17aa, 0x2214, "Thinkpad", ALC269_FIXUP_LIMIT_INT_MIC_BOOST), |
3875 | SND_PCI_QUIRK(0x17aa, 0x2215, "Thinkpad", ALC269_FIXUP_LIMIT_INT_MIC_BOOST), | 3941 | SND_PCI_QUIRK(0x17aa, 0x2215, "Thinkpad", ALC269_FIXUP_LIMIT_INT_MIC_BOOST), |
3876 | SND_PCI_QUIRK(0x17aa, 0x5013, "Thinkpad", ALC269_FIXUP_LIMIT_INT_MIC_BOOST), | 3942 | SND_PCI_QUIRK(0x17aa, 0x5013, "Thinkpad", ALC269_FIXUP_LIMIT_INT_MIC_BOOST), |
3877 | SND_PCI_QUIRK(0x17aa, 0x501a, "Thinkpad", ALC269_FIXUP_LIMIT_INT_MIC_BOOST), | 3943 | SND_PCI_QUIRK(0x17aa, 0x501a, "Thinkpad", ALC283_FIXUP_INT_MIC), |
3878 | SND_PCI_QUIRK(0x17aa, 0x5026, "Thinkpad", ALC269_FIXUP_LIMIT_INT_MIC_BOOST), | 3944 | SND_PCI_QUIRK(0x17aa, 0x5026, "Thinkpad", ALC269_FIXUP_LIMIT_INT_MIC_BOOST), |
3879 | SND_PCI_QUIRK(0x17aa, 0x5109, "Thinkpad", ALC269_FIXUP_LIMIT_INT_MIC_BOOST), | 3945 | SND_PCI_QUIRK(0x17aa, 0x5109, "Thinkpad", ALC269_FIXUP_LIMIT_INT_MIC_BOOST), |
3880 | SND_PCI_QUIRK(0x17aa, 0x3bf8, "Quanta FL1", ALC269_FIXUP_PCM_44K), | 3946 | SND_PCI_QUIRK(0x17aa, 0x3bf8, "Quanta FL1", ALC269_FIXUP_PCM_44K), |
@@ -3938,6 +4004,7 @@ static const struct hda_model_fixup alc269_fixup_models[] = { | |||
3938 | {.id = ALC269_FIXUP_STEREO_DMIC, .name = "alc269-dmic"}, | 4004 | {.id = ALC269_FIXUP_STEREO_DMIC, .name = "alc269-dmic"}, |
3939 | {.id = ALC271_FIXUP_DMIC, .name = "alc271-dmic"}, | 4005 | {.id = ALC271_FIXUP_DMIC, .name = "alc271-dmic"}, |
3940 | {.id = ALC269_FIXUP_INV_DMIC, .name = "inv-dmic"}, | 4006 | {.id = ALC269_FIXUP_INV_DMIC, .name = "inv-dmic"}, |
4007 | {.id = ALC269_FIXUP_HEADSET_MIC, .name = "headset-mic"}, | ||
3941 | {.id = ALC269_FIXUP_LENOVO_DOCK, .name = "lenovo-dock"}, | 4008 | {.id = ALC269_FIXUP_LENOVO_DOCK, .name = "lenovo-dock"}, |
3942 | {.id = ALC269_FIXUP_HP_GPIO_LED, .name = "hp-gpio-led"}, | 4009 | {.id = ALC269_FIXUP_HP_GPIO_LED, .name = "hp-gpio-led"}, |
3943 | {.id = ALC269_FIXUP_DELL1_MIC_NO_PRESENCE, .name = "dell-headset-multi"}, | 4010 | {.id = ALC269_FIXUP_DELL1_MIC_NO_PRESENCE, .name = "dell-headset-multi"}, |
@@ -4555,6 +4622,7 @@ static const struct snd_pci_quirk alc662_fixup_tbl[] = { | |||
4555 | SND_PCI_QUIRK(0x1028, 0x05d8, "Dell", ALC668_FIXUP_DELL_MIC_NO_PRESENCE), | 4622 | SND_PCI_QUIRK(0x1028, 0x05d8, "Dell", ALC668_FIXUP_DELL_MIC_NO_PRESENCE), |
4556 | SND_PCI_QUIRK(0x1028, 0x05db, "Dell", ALC668_FIXUP_DELL_MIC_NO_PRESENCE), | 4623 | SND_PCI_QUIRK(0x1028, 0x05db, "Dell", ALC668_FIXUP_DELL_MIC_NO_PRESENCE), |
4557 | SND_PCI_QUIRK(0x103c, 0x1632, "HP RP5800", ALC662_FIXUP_HP_RP5800), | 4624 | SND_PCI_QUIRK(0x103c, 0x1632, "HP RP5800", ALC662_FIXUP_HP_RP5800), |
4625 | SND_PCI_QUIRK(0x1043, 0x1477, "ASUS N56VZ", ALC662_FIXUP_ASUS_MODE4), | ||
4558 | SND_PCI_QUIRK(0x1043, 0x8469, "ASUS mobo", ALC662_FIXUP_NO_JACK_DETECT), | 4626 | SND_PCI_QUIRK(0x1043, 0x8469, "ASUS mobo", ALC662_FIXUP_NO_JACK_DETECT), |
4559 | SND_PCI_QUIRK(0x105b, 0x0cd6, "Foxconn", ALC662_FIXUP_ASUS_MODE2), | 4627 | SND_PCI_QUIRK(0x105b, 0x0cd6, "Foxconn", ALC662_FIXUP_ASUS_MODE2), |
4560 | SND_PCI_QUIRK(0x144d, 0xc051, "Samsung R720", ALC662_FIXUP_IDEAPAD), | 4628 | SND_PCI_QUIRK(0x144d, 0xc051, "Samsung R720", ALC662_FIXUP_IDEAPAD), |