diff options
author | Takashi Iwai <tiwai@suse.de> | 2010-11-29 01:44:01 -0500 |
---|---|---|
committer | Takashi Iwai <tiwai@suse.de> | 2010-11-29 01:44:01 -0500 |
commit | ca19e77e44985b5500f5461f7d2f4ce799cb60ce (patch) | |
tree | 3ba3635ac2f212b332198b14cc3239195c153e67 /sound/pci | |
parent | 9d57883f08d3c0c111b50bf185dfee9731a12c76 (diff) | |
parent | ac70eb1305d5a81efd1e32327d7e79be15a63a5a (diff) |
Merge branch 'fix/hda' into topic/hda
Diffstat (limited to 'sound/pci')
-rw-r--r-- | sound/pci/hda/patch_conexant.c | 1 | ||||
-rw-r--r-- | sound/pci/hda/patch_realtek.c | 77 | ||||
-rw-r--r-- | sound/pci/hda/patch_sigmatel.c | 4 |
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 | |||
2030 | static 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 | ||
2243 | static 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 | |||
2212 | static void alc889_acer_aspire_8930g_setup(struct hda_codec *codec) | 2253 | static 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 | ||
9536 | static 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 | |||
9543 | static void alc888_6st_dell_setup(struct hda_codec *codec) | 9577 | static 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 */ |
14633 | enum { | 14666 | enum { |
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) | |||
15032 | static int patch_alc269(struct hda_codec *codec) | 15068 | static 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[] = { | |||
16907 | static int alc861vd_auto_create_input_ctls(struct hda_codec *codec, | 16952 | static 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) | |||
18969 | static hda_nid_t alc662_dac_to_mix(struct hda_codec *codec, hda_nid_t pin, | 19016 | static 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; |