aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJiang zhe <zhe.jiang@intel.com>2008-06-04 06:11:07 -0400
committerTakashi Iwai <tiwai@suse.de>2008-06-06 05:53:59 -0400
commit17bba1b72d190742c99a140154f0abac9c1996c3 (patch)
tree8748c17db4ed0760dcb710aaf0629a1a6ddd0ef4
parent5a85bb02ba473aacd29f4039a74744f729443b31 (diff)
[ALSA] hda - support intel DG33 motherboards
These two motherboards's pin configuration are not covered by driver. I wrote a new model to support them. Signed-off-by: Jiang zhe <zhe.jiang@intel.com> Signed-off-by: Takashi Iwai <tiwai@suse.de>
-rw-r--r--sound/pci/hda/patch_realtek.c107
1 files changed, 107 insertions, 0 deletions
diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
index cb3e0283f0ce..048cb84721fa 100644
--- a/sound/pci/hda/patch_realtek.c
+++ b/sound/pci/hda/patch_realtek.c
@@ -209,6 +209,7 @@ enum {
209 ALC883_MITAC, 209 ALC883_MITAC,
210 ALC883_CLEVO_M720, 210 ALC883_CLEVO_M720,
211 ALC883_FUJITSU_PI2515, 211 ALC883_FUJITSU_PI2515,
212 ALC883_3ST_6ch_INTEL,
212 ALC883_AUTO, 213 ALC883_AUTO,
213 ALC883_MODEL_LAST, 214 ALC883_MODEL_LAST,
214}; 215};
@@ -6603,6 +6604,16 @@ static struct hda_input_mux alc883_capture_source = {
6603 }, 6604 },
6604}; 6605};
6605 6606
6607static struct hda_input_mux alc883_3stack_6ch_intel = {
6608 .num_items = 4,
6609 .items = {
6610 { "Mic", 0x1 },
6611 { "Front Mic", 0x0 },
6612 { "Line", 0x2 },
6613 { "CD", 0x4 },
6614 },
6615};
6616
6606static struct hda_input_mux alc883_lenovo_101e_capture_source = { 6617static struct hda_input_mux alc883_lenovo_101e_capture_source = {
6607 .num_items = 2, 6618 .num_items = 2,
6608 .items = { 6619 .items = {
@@ -6684,6 +6695,48 @@ static struct hda_channel_mode alc883_3ST_6ch_modes[3] = {
6684}; 6695};
6685 6696
6686/* 6697/*
6698 * 2ch mode
6699 */
6700static struct hda_verb alc883_3ST_ch2_intel_init[] = {
6701 { 0x19, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_VREF80 },
6702 { 0x19, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE },
6703 { 0x1a, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN },
6704 { 0x1a, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE },
6705 { } /* end */
6706};
6707
6708/*
6709 * 4ch mode
6710 */
6711static struct hda_verb alc883_3ST_ch4_intel_init[] = {
6712 { 0x19, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_VREF80 },
6713 { 0x19, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_MUTE },
6714 { 0x1a, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT },
6715 { 0x1a, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE },
6716 { 0x1a, AC_VERB_SET_CONNECT_SEL, 0x01 },
6717 { } /* end */
6718};
6719
6720/*
6721 * 6ch mode
6722 */
6723static struct hda_verb alc883_3ST_ch6_intel_init[] = {
6724 { 0x19, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT },
6725 { 0x19, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE },
6726 { 0x19, AC_VERB_SET_CONNECT_SEL, 0x02 },
6727 { 0x1a, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT },
6728 { 0x1a, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE },
6729 { 0x1a, AC_VERB_SET_CONNECT_SEL, 0x01 },
6730 { } /* end */
6731};
6732
6733static struct hda_channel_mode alc883_3ST_6ch_intel_modes[3] = {
6734 { 2, alc883_3ST_ch2_intel_init },
6735 { 4, alc883_3ST_ch4_intel_init },
6736 { 6, alc883_3ST_ch6_intel_init },
6737};
6738
6739/*
6687 * 6ch mode 6740 * 6ch mode
6688 */ 6741 */
6689static struct hda_verb alc883_sixstack_ch6_init[] = { 6742static struct hda_verb alc883_sixstack_ch6_init[] = {
@@ -6915,6 +6968,45 @@ static struct snd_kcontrol_new alc883_3ST_6ch_mixer[] = {
6915 { } /* end */ 6968 { } /* end */
6916}; 6969};
6917 6970
6971static struct snd_kcontrol_new alc883_3ST_6ch_intel_mixer[] = {
6972 HDA_CODEC_VOLUME("Front Playback Volume", 0x0c, 0x0, HDA_OUTPUT),
6973 HDA_BIND_MUTE("Front Playback Switch", 0x0c, 2, HDA_INPUT),
6974 HDA_CODEC_VOLUME("Surround Playback Volume", 0x0d, 0x0, HDA_OUTPUT),
6975 HDA_BIND_MUTE("Surround Playback Switch", 0x0d, 2, HDA_INPUT),
6976 HDA_CODEC_VOLUME_MONO("Center Playback Volume", 0x0e, 1, 0x0,
6977 HDA_OUTPUT),
6978 HDA_CODEC_VOLUME_MONO("LFE Playback Volume", 0x0e, 2, 0x0, HDA_OUTPUT),
6979 HDA_BIND_MUTE_MONO("Center Playback Switch", 0x0e, 1, 2, HDA_INPUT),
6980 HDA_BIND_MUTE_MONO("LFE Playback Switch", 0x0e, 2, 2, HDA_INPUT),
6981 HDA_CODEC_MUTE("Headphone Playback Switch", 0x15, 0x0, HDA_OUTPUT),
6982 HDA_CODEC_VOLUME("CD Playback Volume", 0x0b, 0x04, HDA_INPUT),
6983 HDA_CODEC_MUTE("CD Playback Switch", 0x0b, 0x04, HDA_INPUT),
6984 HDA_CODEC_VOLUME("Line Playback Volume", 0x0b, 0x02, HDA_INPUT),
6985 HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x02, HDA_INPUT),
6986 HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x1, HDA_INPUT),
6987 HDA_CODEC_VOLUME("Mic Boost", 0x19, 0, HDA_INPUT),
6988 HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x1, HDA_INPUT),
6989 HDA_CODEC_VOLUME("Front Mic Playback Volume", 0x0b, 0x0, HDA_INPUT),
6990 HDA_CODEC_VOLUME("Front Mic Boost", 0x18, 0, HDA_INPUT),
6991 HDA_CODEC_MUTE("Front Mic Playback Switch", 0x0b, 0x0, HDA_INPUT),
6992 HDA_CODEC_VOLUME("PC Speaker Playback Volume", 0x0b, 0x05, HDA_INPUT),
6993 HDA_CODEC_MUTE("PC Speaker Playback Switch", 0x0b, 0x05, HDA_INPUT),
6994 HDA_CODEC_VOLUME("Capture Volume", 0x08, 0x0, HDA_INPUT),
6995 HDA_CODEC_MUTE("Capture Switch", 0x08, 0x0, HDA_INPUT),
6996 HDA_CODEC_VOLUME_IDX("Capture Volume", 1, 0x09, 0x0, HDA_INPUT),
6997 HDA_CODEC_MUTE_IDX("Capture Switch", 1, 0x09, 0x0, HDA_INPUT),
6998 {
6999 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
7000 /* .name = "Capture Source", */
7001 .name = "Input Source",
7002 .count = 2,
7003 .info = alc883_mux_enum_info,
7004 .get = alc883_mux_enum_get,
7005 .put = alc883_mux_enum_put,
7006 },
7007 { } /* end */
7008};
7009
6918static struct snd_kcontrol_new alc883_fivestack_mixer[] = { 7010static struct snd_kcontrol_new alc883_fivestack_mixer[] = {
6919 HDA_CODEC_VOLUME("Front Playback Volume", 0x0c, 0x0, HDA_OUTPUT), 7011 HDA_CODEC_VOLUME("Front Playback Volume", 0x0c, 0x0, HDA_OUTPUT),
6920 HDA_CODEC_MUTE("Front Playback Switch", 0x14, 0x0, HDA_OUTPUT), 7012 HDA_CODEC_MUTE("Front Playback Switch", 0x14, 0x0, HDA_OUTPUT),
@@ -7763,6 +7855,7 @@ static const char *alc883_models[ALC883_MODEL_LAST] = {
7763 [ALC883_MITAC] = "mitac", 7855 [ALC883_MITAC] = "mitac",
7764 [ALC883_CLEVO_M720] = "clevo-m720", 7856 [ALC883_CLEVO_M720] = "clevo-m720",
7765 [ALC883_FUJITSU_PI2515] = "fujitsu-pi2515", 7857 [ALC883_FUJITSU_PI2515] = "fujitsu-pi2515",
7858 [ALC883_3ST_6ch_INTEL] = "3stack-6ch-intel",
7766 [ALC883_AUTO] = "auto", 7859 [ALC883_AUTO] = "auto",
7767}; 7860};
7768 7861
@@ -7820,6 +7913,8 @@ static struct snd_pci_quirk alc883_cfg_tbl[] = {
7820 SND_PCI_QUIRK(0x17c0, 0x4071, "MEDION MD2", ALC883_MEDION_MD2), 7913 SND_PCI_QUIRK(0x17c0, 0x4071, "MEDION MD2", ALC883_MEDION_MD2),
7821 SND_PCI_QUIRK(0x17f2, 0x5000, "Albatron KI690-AM2", ALC883_6ST_DIG), 7914 SND_PCI_QUIRK(0x17f2, 0x5000, "Albatron KI690-AM2", ALC883_6ST_DIG),
7822 SND_PCI_QUIRK(0x1991, 0x5625, "Haier W66", ALC883_HAIER_W66), 7915 SND_PCI_QUIRK(0x1991, 0x5625, "Haier W66", ALC883_HAIER_W66),
7916 SND_PCI_QUIRK(0x8086, 0x0001, "DG33BUC", ALC883_3ST_6ch_INTEL),
7917 SND_PCI_QUIRK(0x8086, 0x0002, "DG33FBC", ALC883_3ST_6ch_INTEL),
7823 SND_PCI_QUIRK(0x8086, 0xd601, "D102GGC", ALC883_3ST_6ch), 7918 SND_PCI_QUIRK(0x8086, 0xd601, "D102GGC", ALC883_3ST_6ch),
7824 {} 7919 {}
7825}; 7920};
@@ -7858,6 +7953,18 @@ static struct alc_config_preset alc883_presets[] = {
7858 .need_dac_fix = 1, 7953 .need_dac_fix = 1,
7859 .input_mux = &alc883_capture_source, 7954 .input_mux = &alc883_capture_source,
7860 }, 7955 },
7956 [ALC883_3ST_6ch_INTEL] = {
7957 .mixers = { alc883_3ST_6ch_intel_mixer, alc883_chmode_mixer },
7958 .init_verbs = { alc883_init_verbs },
7959 .num_dacs = ARRAY_SIZE(alc883_dac_nids),
7960 .dac_nids = alc883_dac_nids,
7961 .dig_out_nid = ALC883_DIGOUT_NID,
7962 .dig_in_nid = ALC883_DIGIN_NID,
7963 .num_channel_mode = ARRAY_SIZE(alc883_3ST_6ch_intel_modes),
7964 .channel_mode = alc883_3ST_6ch_intel_modes,
7965 .need_dac_fix = 1,
7966 .input_mux = &alc883_3stack_6ch_intel,
7967 },
7861 [ALC883_6ST_DIG] = { 7968 [ALC883_6ST_DIG] = {
7862 .mixers = { alc883_base_mixer, alc883_chmode_mixer }, 7969 .mixers = { alc883_base_mixer, alc883_chmode_mixer },
7863 .init_verbs = { alc883_init_verbs }, 7970 .init_verbs = { alc883_init_verbs },