diff options
Diffstat (limited to 'sound/pci')
-rw-r--r-- | sound/pci/hda/patch_analog.c | 26 |
1 files changed, 25 insertions, 1 deletions
diff --git a/sound/pci/hda/patch_analog.c b/sound/pci/hda/patch_analog.c index 2e18a716a095..38977bce70e2 100644 --- a/sound/pci/hda/patch_analog.c +++ b/sound/pci/hda/patch_analog.c | |||
@@ -782,16 +782,28 @@ static struct hda_channel_mode ad1986a_modes[3] = { | |||
782 | 782 | ||
783 | /* eapd initialization */ | 783 | /* eapd initialization */ |
784 | static struct hda_verb ad1986a_eapd_init_verbs[] = { | 784 | static struct hda_verb ad1986a_eapd_init_verbs[] = { |
785 | {0x1b, AC_VERB_SET_EAPD_BTLENABLE, 0x00}, | 785 | {0x1b, AC_VERB_SET_EAPD_BTLENABLE, 0x00 }, |
786 | {} | 786 | {} |
787 | }; | 787 | }; |
788 | 788 | ||
789 | /* Ultra initialization */ | ||
790 | static struct hda_verb ad1986a_ultra_init[] = { | ||
791 | /* eapd initialization */ | ||
792 | { 0x1b, AC_VERB_SET_EAPD_BTLENABLE, 0x00 }, | ||
793 | /* CLFE -> Mic in */ | ||
794 | { 0x0f, AC_VERB_SET_CONNECT_SEL, 0x2 }, | ||
795 | { 0x1d, AC_VERB_SET_PIN_WIDGET_CONTROL, 0x24 }, | ||
796 | { 0x1d, AC_VERB_SET_AMP_GAIN_MUTE, 0xb080 }, | ||
797 | { } /* end */ | ||
798 | }; | ||
799 | |||
789 | /* models */ | 800 | /* models */ |
790 | enum { | 801 | enum { |
791 | AD1986A_6STACK, | 802 | AD1986A_6STACK, |
792 | AD1986A_3STACK, | 803 | AD1986A_3STACK, |
793 | AD1986A_LAPTOP, | 804 | AD1986A_LAPTOP, |
794 | AD1986A_LAPTOP_EAPD, | 805 | AD1986A_LAPTOP_EAPD, |
806 | AD1986A_ULTRA, | ||
795 | AD1986A_MODELS | 807 | AD1986A_MODELS |
796 | }; | 808 | }; |
797 | 809 | ||
@@ -800,6 +812,7 @@ static const char *ad1986a_models[AD1986A_MODELS] = { | |||
800 | [AD1986A_3STACK] = "3stack", | 812 | [AD1986A_3STACK] = "3stack", |
801 | [AD1986A_LAPTOP] = "laptop", | 813 | [AD1986A_LAPTOP] = "laptop", |
802 | [AD1986A_LAPTOP_EAPD] = "laptop-eapd", | 814 | [AD1986A_LAPTOP_EAPD] = "laptop-eapd", |
815 | [AD1986A_ULTRA] = "ultra", | ||
803 | }; | 816 | }; |
804 | 817 | ||
805 | static struct snd_pci_quirk ad1986a_cfg_tbl[] = { | 818 | static struct snd_pci_quirk ad1986a_cfg_tbl[] = { |
@@ -821,6 +834,8 @@ static struct snd_pci_quirk ad1986a_cfg_tbl[] = { | |||
821 | SND_PCI_QUIRK(0x144d, 0xc023, "Samsung X60", AD1986A_LAPTOP_EAPD), | 834 | SND_PCI_QUIRK(0x144d, 0xc023, "Samsung X60", AD1986A_LAPTOP_EAPD), |
822 | SND_PCI_QUIRK(0x144d, 0xc024, "Samsung R65", AD1986A_LAPTOP_EAPD), | 835 | SND_PCI_QUIRK(0x144d, 0xc024, "Samsung R65", AD1986A_LAPTOP_EAPD), |
823 | SND_PCI_QUIRK(0x144d, 0xc026, "Samsung X11", AD1986A_LAPTOP_EAPD), | 836 | SND_PCI_QUIRK(0x144d, 0xc026, "Samsung X11", AD1986A_LAPTOP_EAPD), |
837 | SND_PCI_QUIRK(0x144d, 0xc504, "Samsung Q35", AD1986A_3STACK), | ||
838 | SND_PCI_QUIRK(0x144d, 0xc027, "Samsung Q1", AD1986A_ULTRA), | ||
824 | SND_PCI_QUIRK(0x17aa, 0x1017, "Lenovo A60", AD1986A_3STACK), | 839 | SND_PCI_QUIRK(0x17aa, 0x1017, "Lenovo A60", AD1986A_3STACK), |
825 | SND_PCI_QUIRK(0x17aa, 0x2066, "Lenovo N100", AD1986A_LAPTOP_EAPD), | 840 | SND_PCI_QUIRK(0x17aa, 0x2066, "Lenovo N100", AD1986A_LAPTOP_EAPD), |
826 | SND_PCI_QUIRK(0x17c0, 0x2017, "Samsung M50", AD1986A_LAPTOP), | 841 | SND_PCI_QUIRK(0x17c0, 0x2017, "Samsung M50", AD1986A_LAPTOP), |
@@ -887,6 +902,15 @@ static int patch_ad1986a(struct hda_codec *codec) | |||
887 | spec->multiout.dig_out_nid = 0; | 902 | spec->multiout.dig_out_nid = 0; |
888 | spec->input_mux = &ad1986a_laptop_eapd_capture_source; | 903 | spec->input_mux = &ad1986a_laptop_eapd_capture_source; |
889 | break; | 904 | break; |
905 | case AD1986A_ULTRA: | ||
906 | spec->mixers[0] = ad1986a_laptop_eapd_mixers; | ||
907 | spec->num_init_verbs = 2; | ||
908 | spec->init_verbs[1] = ad1986a_ultra_init; | ||
909 | spec->multiout.max_channels = 2; | ||
910 | spec->multiout.num_dacs = 1; | ||
911 | spec->multiout.dac_nids = ad1986a_laptop_dac_nids; | ||
912 | spec->multiout.dig_out_nid = 0; | ||
913 | break; | ||
890 | } | 914 | } |
891 | 915 | ||
892 | return 0; | 916 | return 0; |