diff options
| -rw-r--r-- | sound/pci/hda/patch_analog.c | 77 |
1 files changed, 21 insertions, 56 deletions
diff --git a/sound/pci/hda/patch_analog.c b/sound/pci/hda/patch_analog.c index 84cc49ca9148..592423c878f2 100644 --- a/sound/pci/hda/patch_analog.c +++ b/sound/pci/hda/patch_analog.c | |||
| @@ -669,39 +669,13 @@ static struct hda_input_mux ad1986a_automic_capture_source = { | |||
| 669 | }, | 669 | }, |
| 670 | }; | 670 | }; |
| 671 | 671 | ||
| 672 | static struct snd_kcontrol_new ad1986a_laptop_eapd_mixers[] = { | 672 | static struct snd_kcontrol_new ad1986a_laptop_master_mixers[] = { |
| 673 | HDA_BIND_VOL("Master Playback Volume", &ad1986a_laptop_master_vol), | 673 | HDA_BIND_VOL("Master Playback Volume", &ad1986a_laptop_master_vol), |
| 674 | HDA_BIND_SW("Master Playback Switch", &ad1986a_laptop_master_sw), | 674 | HDA_BIND_SW("Master Playback Switch", &ad1986a_laptop_master_sw), |
| 675 | HDA_CODEC_VOLUME("PCM Playback Volume", 0x03, 0x0, HDA_OUTPUT), | ||
| 676 | HDA_CODEC_MUTE("PCM Playback Switch", 0x03, 0x0, HDA_OUTPUT), | ||
| 677 | HDA_CODEC_VOLUME("Internal Mic Playback Volume", 0x17, 0, HDA_OUTPUT), | ||
| 678 | HDA_CODEC_MUTE("Internal Mic Playback Switch", 0x17, 0, HDA_OUTPUT), | ||
| 679 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x13, 0x0, HDA_OUTPUT), | ||
| 680 | HDA_CODEC_MUTE("Mic Playback Switch", 0x13, 0x0, HDA_OUTPUT), | ||
| 681 | HDA_CODEC_VOLUME("Mic Boost", 0x0f, 0x0, HDA_OUTPUT), | ||
| 682 | HDA_CODEC_VOLUME("Capture Volume", 0x12, 0x0, HDA_OUTPUT), | ||
| 683 | HDA_CODEC_MUTE("Capture Switch", 0x12, 0x0, HDA_OUTPUT), | ||
| 684 | { | ||
| 685 | .iface = SNDRV_CTL_ELEM_IFACE_MIXER, | ||
| 686 | .name = "Capture Source", | ||
| 687 | .info = ad198x_mux_enum_info, | ||
| 688 | .get = ad198x_mux_enum_get, | ||
| 689 | .put = ad198x_mux_enum_put, | ||
| 690 | }, | ||
| 691 | { | ||
| 692 | .iface = SNDRV_CTL_ELEM_IFACE_MIXER, | ||
| 693 | .name = "External Amplifier", | ||
| 694 | .info = ad198x_eapd_info, | ||
| 695 | .get = ad198x_eapd_get, | ||
| 696 | .put = ad198x_eapd_put, | ||
| 697 | .private_value = 0x1b | (1 << 8), /* port-D, inversed */ | ||
| 698 | }, | ||
| 699 | { } /* end */ | 675 | { } /* end */ |
| 700 | }; | 676 | }; |
| 701 | 677 | ||
| 702 | static struct snd_kcontrol_new ad1986a_samsung_mixers[] = { | 678 | static struct snd_kcontrol_new ad1986a_laptop_eapd_mixers[] = { |
| 703 | HDA_BIND_VOL("Master Playback Volume", &ad1986a_laptop_master_vol), | ||
| 704 | HDA_BIND_SW("Master Playback Switch", &ad1986a_laptop_master_sw), | ||
| 705 | HDA_CODEC_VOLUME("PCM Playback Volume", 0x03, 0x0, HDA_OUTPUT), | 679 | HDA_CODEC_VOLUME("PCM Playback Volume", 0x03, 0x0, HDA_OUTPUT), |
| 706 | HDA_CODEC_MUTE("PCM Playback Switch", 0x03, 0x0, HDA_OUTPUT), | 680 | HDA_CODEC_MUTE("PCM Playback Switch", 0x03, 0x0, HDA_OUTPUT), |
| 707 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x13, 0x0, HDA_OUTPUT), | 681 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x13, 0x0, HDA_OUTPUT), |
| @@ -727,6 +701,12 @@ static struct snd_kcontrol_new ad1986a_samsung_mixers[] = { | |||
| 727 | { } /* end */ | 701 | { } /* end */ |
| 728 | }; | 702 | }; |
| 729 | 703 | ||
| 704 | static struct snd_kcontrol_new ad1986a_laptop_intmic_mixers[] = { | ||
| 705 | HDA_CODEC_VOLUME("Internal Mic Playback Volume", 0x17, 0, HDA_OUTPUT), | ||
| 706 | HDA_CODEC_MUTE("Internal Mic Playback Switch", 0x17, 0, HDA_OUTPUT), | ||
| 707 | { } /* end */ | ||
| 708 | }; | ||
| 709 | |||
| 730 | /* re-connect the mic boost input according to the jack sensing */ | 710 | /* re-connect the mic boost input according to the jack sensing */ |
| 731 | static void ad1986a_automic(struct hda_codec *codec) | 711 | static void ad1986a_automic(struct hda_codec *codec) |
| 732 | { | 712 | { |
| @@ -816,7 +796,7 @@ static int ad1986a_hp_master_sw_put(struct snd_kcontrol *kcontrol, | |||
| 816 | return change; | 796 | return change; |
| 817 | } | 797 | } |
| 818 | 798 | ||
| 819 | static struct snd_kcontrol_new ad1986a_laptop_automute_mixers[] = { | 799 | static struct snd_kcontrol_new ad1986a_automute_master_mixers[] = { |
| 820 | HDA_BIND_VOL("Master Playback Volume", &ad1986a_laptop_master_vol), | 800 | HDA_BIND_VOL("Master Playback Volume", &ad1986a_laptop_master_vol), |
| 821 | { | 801 | { |
| 822 | .iface = SNDRV_CTL_ELEM_IFACE_MIXER, | 802 | .iface = SNDRV_CTL_ELEM_IFACE_MIXER, |
| @@ -826,33 +806,10 @@ static struct snd_kcontrol_new ad1986a_laptop_automute_mixers[] = { | |||
| 826 | .put = ad1986a_hp_master_sw_put, | 806 | .put = ad1986a_hp_master_sw_put, |
| 827 | .private_value = HDA_COMPOSE_AMP_VAL(0x1a, 3, 0, HDA_OUTPUT), | 807 | .private_value = HDA_COMPOSE_AMP_VAL(0x1a, 3, 0, HDA_OUTPUT), |
| 828 | }, | 808 | }, |
| 829 | HDA_CODEC_VOLUME("PCM Playback Volume", 0x03, 0x0, HDA_OUTPUT), | ||
| 830 | HDA_CODEC_MUTE("PCM Playback Switch", 0x03, 0x0, HDA_OUTPUT), | ||
| 831 | HDA_CODEC_VOLUME("Internal Mic Playback Volume", 0x17, 0x0, HDA_OUTPUT), | ||
| 832 | HDA_CODEC_MUTE("Internal Mic Playback Switch", 0x17, 0x0, HDA_OUTPUT), | ||
| 833 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x13, 0x0, HDA_OUTPUT), | ||
| 834 | HDA_CODEC_MUTE("Mic Playback Switch", 0x13, 0x0, HDA_OUTPUT), | ||
| 835 | HDA_CODEC_VOLUME("Mic Boost", 0x0f, 0x0, HDA_OUTPUT), | ||
| 836 | HDA_CODEC_VOLUME("Capture Volume", 0x12, 0x0, HDA_OUTPUT), | ||
| 837 | HDA_CODEC_MUTE("Capture Switch", 0x12, 0x0, HDA_OUTPUT), | ||
| 838 | { | ||
| 839 | .iface = SNDRV_CTL_ELEM_IFACE_MIXER, | ||
| 840 | .name = "Capture Source", | ||
| 841 | .info = ad198x_mux_enum_info, | ||
| 842 | .get = ad198x_mux_enum_get, | ||
| 843 | .put = ad198x_mux_enum_put, | ||
| 844 | }, | ||
| 845 | { | ||
| 846 | .iface = SNDRV_CTL_ELEM_IFACE_MIXER, | ||
| 847 | .name = "External Amplifier", | ||
| 848 | .info = ad198x_eapd_info, | ||
| 849 | .get = ad198x_eapd_get, | ||
| 850 | .put = ad198x_eapd_put, | ||
| 851 | .private_value = 0x1b | (1 << 8), /* port-D, inversed */ | ||
| 852 | }, | ||
| 853 | { } /* end */ | 809 | { } /* end */ |
| 854 | }; | 810 | }; |
| 855 | 811 | ||
| 812 | |||
| 856 | /* | 813 | /* |
| 857 | * initialization verbs | 814 | * initialization verbs |
| 858 | */ | 815 | */ |
| @@ -1111,7 +1068,10 @@ static int patch_ad1986a(struct hda_codec *codec) | |||
| 1111 | spec->multiout.dac_nids = ad1986a_laptop_dac_nids; | 1068 | spec->multiout.dac_nids = ad1986a_laptop_dac_nids; |
| 1112 | break; | 1069 | break; |
| 1113 | case AD1986A_LAPTOP_EAPD: | 1070 | case AD1986A_LAPTOP_EAPD: |
| 1114 | spec->mixers[0] = ad1986a_laptop_eapd_mixers; | 1071 | spec->num_mixers = 3; |
| 1072 | spec->mixers[0] = ad1986a_laptop_master_mixers; | ||
| 1073 | spec->mixers[1] = ad1986a_laptop_eapd_mixers; | ||
| 1074 | spec->mixers[2] = ad1986a_laptop_intmic_mixers; | ||
| 1115 | spec->num_init_verbs = 2; | 1075 | spec->num_init_verbs = 2; |
| 1116 | spec->init_verbs[1] = ad1986a_eapd_init_verbs; | 1076 | spec->init_verbs[1] = ad1986a_eapd_init_verbs; |
| 1117 | spec->multiout.max_channels = 2; | 1077 | spec->multiout.max_channels = 2; |
| @@ -1122,7 +1082,9 @@ static int patch_ad1986a(struct hda_codec *codec) | |||
| 1122 | spec->input_mux = &ad1986a_laptop_eapd_capture_source; | 1082 | spec->input_mux = &ad1986a_laptop_eapd_capture_source; |
| 1123 | break; | 1083 | break; |
| 1124 | case AD1986A_SAMSUNG: | 1084 | case AD1986A_SAMSUNG: |
| 1125 | spec->mixers[0] = ad1986a_samsung_mixers; | 1085 | spec->num_mixers = 2; |
| 1086 | spec->mixers[0] = ad1986a_laptop_master_mixers; | ||
| 1087 | spec->mixers[1] = ad1986a_laptop_eapd_mixers; | ||
| 1126 | spec->num_init_verbs = 3; | 1088 | spec->num_init_verbs = 3; |
| 1127 | spec->init_verbs[1] = ad1986a_eapd_init_verbs; | 1089 | spec->init_verbs[1] = ad1986a_eapd_init_verbs; |
| 1128 | spec->init_verbs[2] = ad1986a_automic_verbs; | 1090 | spec->init_verbs[2] = ad1986a_automic_verbs; |
| @@ -1136,7 +1098,10 @@ static int patch_ad1986a(struct hda_codec *codec) | |||
| 1136 | codec->patch_ops.init = ad1986a_automic_init; | 1098 | codec->patch_ops.init = ad1986a_automic_init; |
| 1137 | break; | 1099 | break; |
| 1138 | case AD1986A_LAPTOP_AUTOMUTE: | 1100 | case AD1986A_LAPTOP_AUTOMUTE: |
| 1139 | spec->mixers[0] = ad1986a_laptop_automute_mixers; | 1101 | spec->num_mixers = 3; |
| 1102 | spec->mixers[0] = ad1986a_automute_master_mixers; | ||
| 1103 | spec->mixers[1] = ad1986a_laptop_eapd_mixers; | ||
| 1104 | spec->mixers[2] = ad1986a_laptop_intmic_mixers; | ||
| 1140 | spec->num_init_verbs = 3; | 1105 | spec->num_init_verbs = 3; |
| 1141 | spec->init_verbs[1] = ad1986a_eapd_init_verbs; | 1106 | spec->init_verbs[1] = ad1986a_eapd_init_verbs; |
| 1142 | spec->init_verbs[2] = ad1986a_hp_init_verbs; | 1107 | spec->init_verbs[2] = ad1986a_hp_init_verbs; |
