aboutsummaryrefslogtreecommitdiffstats
path: root/sound/pci
diff options
context:
space:
mode:
authorTakashi Iwai <tiwai@suse.de>2010-11-29 01:44:01 -0500
committerTakashi Iwai <tiwai@suse.de>2010-11-29 01:44:01 -0500
commitca19e77e44985b5500f5461f7d2f4ce799cb60ce (patch)
tree3ba3635ac2f212b332198b14cc3239195c153e67 /sound/pci
parent9d57883f08d3c0c111b50bf185dfee9731a12c76 (diff)
parentac70eb1305d5a81efd1e32327d7e79be15a63a5a (diff)
Merge branch 'fix/hda' into topic/hda
Diffstat (limited to 'sound/pci')
-rw-r--r--sound/pci/hda/patch_conexant.c1
-rw-r--r--sound/pci/hda/patch_realtek.c77
-rw-r--r--sound/pci/hda/patch_sigmatel.c4
3 files changed, 64 insertions, 18 deletions
diff --git a/sound/pci/hda/patch_conexant.c b/sound/pci/hda/patch_conexant.c
index 3cfb31e77b16..846d1ead47fd 100644
--- a/sound/pci/hda/patch_conexant.c
+++ b/sound/pci/hda/patch_conexant.c
@@ -3111,6 +3111,7 @@ static struct snd_pci_quirk cxt5066_cfg_tbl[] = {
3111 SND_PCI_QUIRK(0x17aa, 0x21b2, "Thinkpad X100e", CXT5066_IDEAPAD), 3111 SND_PCI_QUIRK(0x17aa, 0x21b2, "Thinkpad X100e", CXT5066_IDEAPAD),
3112 SND_PCI_QUIRK(0x17aa, 0x21b3, "Thinkpad Edge 13 (197)", CXT5066_IDEAPAD), 3112 SND_PCI_QUIRK(0x17aa, 0x21b3, "Thinkpad Edge 13 (197)", CXT5066_IDEAPAD),
3113 SND_PCI_QUIRK(0x17aa, 0x21b4, "Thinkpad Edge", CXT5066_IDEAPAD), 3113 SND_PCI_QUIRK(0x17aa, 0x21b4, "Thinkpad Edge", CXT5066_IDEAPAD),
3114 SND_PCI_QUIRK(0x17aa, 0x21c8, "Thinkpad Edge 11", CXT5066_IDEAPAD),
3114 SND_PCI_QUIRK(0x17aa, 0x215e, "Lenovo Thinkpad", CXT5066_THINKPAD), 3115 SND_PCI_QUIRK(0x17aa, 0x215e, "Lenovo Thinkpad", CXT5066_THINKPAD),
3115 SND_PCI_QUIRK(0x17aa, 0x38af, "Lenovo G series", CXT5066_IDEAPAD), 3116 SND_PCI_QUIRK(0x17aa, 0x38af, "Lenovo G series", CXT5066_IDEAPAD),
3116 SND_PCI_QUIRK(0x17aa, 0x390a, "Lenovo S10-3t", CXT5066_IDEAPAD), 3117 SND_PCI_QUIRK(0x17aa, 0x390a, "Lenovo S10-3t", CXT5066_IDEAPAD),
diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
index f10c613c530f..f0af8cfab410 100644
--- a/sound/pci/hda/patch_realtek.c
+++ b/sound/pci/hda/patch_realtek.c
@@ -1614,6 +1614,7 @@ do_sku:
1614 spec->init_amp = ALC_INIT_GPIO3; 1614 spec->init_amp = ALC_INIT_GPIO3;
1615 break; 1615 break;
1616 case 5: 1616 case 5:
1617 default:
1617 spec->init_amp = ALC_INIT_DEFAULT; 1618 spec->init_amp = ALC_INIT_DEFAULT;
1618 break; 1619 break;
1619 } 1620 }
@@ -2023,6 +2024,36 @@ static struct hda_verb alc888_acer_aspire_6530g_verbs[] = {
2023}; 2024};
2024 2025
2025/* 2026/*
2027 *ALC888 Acer Aspire 7730G model
2028 */
2029
2030static struct hda_verb alc888_acer_aspire_7730G_verbs[] = {
2031/* Bias voltage on for external mic port */
2032 {0x18, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN | PIN_VREF80},
2033/* Front Mic: set to PIN_IN (empty by default) */
2034 {0x12, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN},
2035/* Unselect Front Mic by default in input mixer 3 */
2036 {0x22, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(0xb)},
2037/* Enable unsolicited event for HP jack */
2038 {0x15, AC_VERB_SET_UNSOLICITED_ENABLE, ALC880_HP_EVENT | AC_USRSP_EN},
2039/* Enable speaker output */
2040 {0x14, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT},
2041 {0x14, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE},
2042 {0x14, AC_VERB_SET_EAPD_BTLENABLE, 2},
2043/* Enable headphone output */
2044 {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT | PIN_HP},
2045 {0x15, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE},
2046 {0x15, AC_VERB_SET_CONNECT_SEL, 0x00},
2047 {0x15, AC_VERB_SET_EAPD_BTLENABLE, 2},
2048/*Enable internal subwoofer */
2049 {0x17, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT},
2050 {0x17, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE},
2051 {0x17, AC_VERB_SET_CONNECT_SEL, 0x02},
2052 {0x17, AC_VERB_SET_EAPD_BTLENABLE, 2},
2053 { }
2054};
2055
2056/*
2026 * ALC889 Acer Aspire 8930G model 2057 * ALC889 Acer Aspire 8930G model
2027 */ 2058 */
2028 2059
@@ -2209,6 +2240,16 @@ static void alc888_acer_aspire_6530g_setup(struct hda_codec *codec)
2209 spec->autocfg.speaker_pins[2] = 0x17; 2240 spec->autocfg.speaker_pins[2] = 0x17;
2210} 2241}
2211 2242
2243static void alc888_acer_aspire_7730g_setup(struct hda_codec *codec)
2244{
2245 struct alc_spec *spec = codec->spec;
2246
2247 spec->autocfg.hp_pins[0] = 0x15;
2248 spec->autocfg.speaker_pins[0] = 0x14;
2249 spec->autocfg.speaker_pins[1] = 0x16;
2250 spec->autocfg.speaker_pins[2] = 0x17;
2251}
2252
2212static void alc889_acer_aspire_8930g_setup(struct hda_codec *codec) 2253static void alc889_acer_aspire_8930g_setup(struct hda_codec *codec)
2213{ 2254{
2214 struct alc_spec *spec = codec->spec; 2255 struct alc_spec *spec = codec->spec;
@@ -9533,13 +9574,6 @@ static struct hda_verb alc883_acer_eapd_verbs[] = {
9533 { } 9574 { }
9534}; 9575};
9535 9576
9536static struct hda_verb alc888_acer_aspire_7730G_verbs[] = {
9537 {0x15, AC_VERB_SET_CONNECT_SEL, 0x00},
9538 {0x17, AC_VERB_SET_CONNECT_SEL, 0x02},
9539 {0x15, AC_VERB_SET_UNSOLICITED_ENABLE, ALC880_HP_EVENT | AC_USRSP_EN},
9540 { } /* end */
9541};
9542
9543static void alc888_6st_dell_setup(struct hda_codec *codec) 9577static void alc888_6st_dell_setup(struct hda_codec *codec)
9544{ 9578{
9545 struct alc_spec *spec = codec->spec; 9579 struct alc_spec *spec = codec->spec;
@@ -9840,7 +9874,6 @@ static struct snd_pci_quirk alc882_cfg_tbl[] = {
9840 SND_PCI_QUIRK(0x17aa, 0x3bfc, "Lenovo NB0763", ALC883_LENOVO_NB0763), 9874 SND_PCI_QUIRK(0x17aa, 0x3bfc, "Lenovo NB0763", ALC883_LENOVO_NB0763),
9841 SND_PCI_QUIRK(0x17aa, 0x3bfd, "Lenovo NB0763", ALC883_LENOVO_NB0763), 9875 SND_PCI_QUIRK(0x17aa, 0x3bfd, "Lenovo NB0763", ALC883_LENOVO_NB0763),
9842 SND_PCI_QUIRK(0x17aa, 0x101d, "Lenovo Sky", ALC888_LENOVO_SKY), 9876 SND_PCI_QUIRK(0x17aa, 0x101d, "Lenovo Sky", ALC888_LENOVO_SKY),
9843 SND_PCI_QUIRK(0x17c0, 0x4071, "MEDION MD2", ALC883_MEDION_MD2),
9844 SND_PCI_QUIRK(0x17c0, 0x4085, "MEDION MD96630", ALC888_LENOVO_MS7195_DIG), 9877 SND_PCI_QUIRK(0x17c0, 0x4085, "MEDION MD96630", ALC888_LENOVO_MS7195_DIG),
9845 SND_PCI_QUIRK(0x17f2, 0x5000, "Albatron KI690-AM2", ALC883_6ST_DIG), 9878 SND_PCI_QUIRK(0x17f2, 0x5000, "Albatron KI690-AM2", ALC883_6ST_DIG),
9846 SND_PCI_QUIRK(0x1991, 0x5625, "Haier W66", ALC883_HAIER_W66), 9879 SND_PCI_QUIRK(0x1991, 0x5625, "Haier W66", ALC883_HAIER_W66),
@@ -10337,7 +10370,7 @@ static struct alc_config_preset alc882_presets[] = {
10337 .const_channel_count = 6, 10370 .const_channel_count = 6,
10338 .input_mux = &alc883_capture_source, 10371 .input_mux = &alc883_capture_source,
10339 .unsol_event = alc_automute_amp_unsol_event, 10372 .unsol_event = alc_automute_amp_unsol_event,
10340 .setup = alc888_acer_aspire_6530g_setup, 10373 .setup = alc888_acer_aspire_7730g_setup,
10341 .init_hook = alc_automute_amp, 10374 .init_hook = alc_automute_amp,
10342 }, 10375 },
10343 [ALC883_MEDION] = { 10376 [ALC883_MEDION] = {
@@ -14632,7 +14665,10 @@ static int alc275_setup_dual_adc(struct hda_codec *codec)
14632/* different alc269-variants */ 14665/* different alc269-variants */
14633enum { 14666enum {
14634 ALC269_TYPE_NORMAL, 14667 ALC269_TYPE_NORMAL,
14668 ALC269_TYPE_ALC258,
14635 ALC269_TYPE_ALC259, 14669 ALC269_TYPE_ALC259,
14670 ALC269_TYPE_ALC269VB,
14671 ALC269_TYPE_ALC270,
14636 ALC269_TYPE_ALC271X, 14672 ALC269_TYPE_ALC271X,
14637}; 14673};
14638 14674
@@ -15032,7 +15068,7 @@ static int alc269_fill_coef(struct hda_codec *codec)
15032static int patch_alc269(struct hda_codec *codec) 15068static int patch_alc269(struct hda_codec *codec)
15033{ 15069{
15034 struct alc_spec *spec; 15070 struct alc_spec *spec;
15035 int board_config; 15071 int board_config, coef;
15036 int err; 15072 int err;
15037 15073
15038 spec = kzalloc(sizeof(*spec), GFP_KERNEL); 15074 spec = kzalloc(sizeof(*spec), GFP_KERNEL);
@@ -15043,14 +15079,23 @@ static int patch_alc269(struct hda_codec *codec)
15043 15079
15044 alc_auto_parse_customize_define(codec); 15080 alc_auto_parse_customize_define(codec);
15045 15081
15046 if ((alc_read_coef_idx(codec, 0) & 0x00f0) == 0x0010){ 15082 coef = alc_read_coef_idx(codec, 0);
15083 if ((coef & 0x00f0) == 0x0010) {
15047 if (codec->bus->pci->subsystem_vendor == 0x1025 && 15084 if (codec->bus->pci->subsystem_vendor == 0x1025 &&
15048 spec->cdefine.platform_type == 1) { 15085 spec->cdefine.platform_type == 1) {
15049 alc_codec_rename(codec, "ALC271X"); 15086 alc_codec_rename(codec, "ALC271X");
15050 spec->codec_variant = ALC269_TYPE_ALC271X; 15087 spec->codec_variant = ALC269_TYPE_ALC271X;
15051 } else { 15088 } else if ((coef & 0xf000) == 0x1000) {
15089 spec->codec_variant = ALC269_TYPE_ALC270;
15090 } else if ((coef & 0xf000) == 0x2000) {
15052 alc_codec_rename(codec, "ALC259"); 15091 alc_codec_rename(codec, "ALC259");
15053 spec->codec_variant = ALC269_TYPE_ALC259; 15092 spec->codec_variant = ALC269_TYPE_ALC259;
15093 } else if ((coef & 0xf000) == 0x3000) {
15094 alc_codec_rename(codec, "ALC258");
15095 spec->codec_variant = ALC269_TYPE_ALC258;
15096 } else {
15097 alc_codec_rename(codec, "ALC269VB");
15098 spec->codec_variant = ALC269_TYPE_ALC269VB;
15054 } 15099 }
15055 } else 15100 } else
15056 alc_fix_pll_init(codec, 0x20, 0x04, 15); 15101 alc_fix_pll_init(codec, 0x20, 0x04, 15);
@@ -15113,7 +15158,7 @@ static int patch_alc269(struct hda_codec *codec)
15113 spec->stream_digital_capture = &alc269_pcm_digital_capture; 15158 spec->stream_digital_capture = &alc269_pcm_digital_capture;
15114 15159
15115 if (!spec->adc_nids) { /* wasn't filled automatically? use default */ 15160 if (!spec->adc_nids) { /* wasn't filled automatically? use default */
15116 if (spec->codec_variant != ALC269_TYPE_NORMAL) { 15161 if (spec->codec_variant == ALC269_TYPE_NORMAL) {
15117 spec->adc_nids = alc269_adc_nids; 15162 spec->adc_nids = alc269_adc_nids;
15118 spec->num_adc_nids = ARRAY_SIZE(alc269_adc_nids); 15163 spec->num_adc_nids = ARRAY_SIZE(alc269_adc_nids);
15119 spec->capsrc_nids = alc269_capsrc_nids; 15164 spec->capsrc_nids = alc269_capsrc_nids;
@@ -16907,7 +16952,7 @@ static struct alc_config_preset alc861vd_presets[] = {
16907static int alc861vd_auto_create_input_ctls(struct hda_codec *codec, 16952static int alc861vd_auto_create_input_ctls(struct hda_codec *codec,
16908 const struct auto_pin_cfg *cfg) 16953 const struct auto_pin_cfg *cfg)
16909{ 16954{
16910 return alc_auto_create_input_ctls(codec, cfg, 0x15, 0x09, 0); 16955 return alc_auto_create_input_ctls(codec, cfg, 0x0b, 0x22, 0);
16911} 16956}
16912 16957
16913 16958
@@ -18961,6 +19006,8 @@ static inline hda_nid_t alc662_mix_to_dac(hda_nid_t nid)
18961 return 0x02; 19006 return 0x02;
18962 else if (nid >= 0x0c && nid <= 0x0e) 19007 else if (nid >= 0x0c && nid <= 0x0e)
18963 return nid - 0x0c + 0x02; 19008 return nid - 0x0c + 0x02;
19009 else if (nid == 0x26) /* ALC887-VD has this DAC too */
19010 return 0x25;
18964 else 19011 else
18965 return 0; 19012 return 0;
18966} 19013}
@@ -18969,7 +19016,7 @@ static inline hda_nid_t alc662_mix_to_dac(hda_nid_t nid)
18969static hda_nid_t alc662_dac_to_mix(struct hda_codec *codec, hda_nid_t pin, 19016static hda_nid_t alc662_dac_to_mix(struct hda_codec *codec, hda_nid_t pin,
18970 hda_nid_t dac) 19017 hda_nid_t dac)
18971{ 19018{
18972 hda_nid_t mix[4]; 19019 hda_nid_t mix[5];
18973 int i, num; 19020 int i, num;
18974 19021
18975 num = snd_hda_get_connections(codec, pin, mix, ARRAY_SIZE(mix)); 19022 num = snd_hda_get_connections(codec, pin, mix, ARRAY_SIZE(mix));
diff --git a/sound/pci/hda/patch_sigmatel.c b/sound/pci/hda/patch_sigmatel.c
index cfd73afad882..5c710807dfe5 100644
--- a/sound/pci/hda/patch_sigmatel.c
+++ b/sound/pci/hda/patch_sigmatel.c
@@ -3491,10 +3491,8 @@ static int stac92xx_auto_create_dmic_input_ctls(struct hda_codec *codec,
3491 return err; 3491 return err;
3492 } 3492 }
3493 3493
3494 if (snd_hda_get_bool_hint(codec, "separate_dmux") != 1) { 3494 if (snd_hda_get_bool_hint(codec, "separate_dmux") != 1)
3495 snd_hda_add_imux_item(imux, label, index, NULL); 3495 snd_hda_add_imux_item(imux, label, index, NULL);
3496 spec->num_analog_muxes++;
3497 }
3498 } 3496 }
3499 3497
3500 return 0; 3498 return 0;