aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Documentation/sound/alsa/ALSA-Configuration.txt1
-rw-r--r--sound/pci/hda/patch_analog.c26
2 files changed, 26 insertions, 1 deletions
diff --git a/Documentation/sound/alsa/ALSA-Configuration.txt b/Documentation/sound/alsa/ALSA-Configuration.txt
index ce2f5faa930f..3a1bd3aefbc7 100644
--- a/Documentation/sound/alsa/ALSA-Configuration.txt
+++ b/Documentation/sound/alsa/ALSA-Configuration.txt
@@ -861,6 +861,7 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed.
861 3stack 3-stack, shared surrounds 861 3stack 3-stack, shared surrounds
862 laptop 2-channel only (FSC V2060, Samsung M50) 862 laptop 2-channel only (FSC V2060, Samsung M50)
863 laptop-eapd 2-channel with EAPD (Samsung R65, ASUS A6J) 863 laptop-eapd 2-channel with EAPD (Samsung R65, ASUS A6J)
864 ultra 2-channel with EAPD (Samsung Ultra tablet PC)
864 865
865 AD1988 866 AD1988
866 6stack 6-jack 867 6stack 6-jack
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 */
784static struct hda_verb ad1986a_eapd_init_verbs[] = { 784static 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 */
790static 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 */
790enum { 801enum {
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
805static struct snd_pci_quirk ad1986a_cfg_tbl[] = { 818static 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;