diff options
Diffstat (limited to 'sound/pci/hda/patch_realtek.c')
-rw-r--r-- | sound/pci/hda/patch_realtek.c | 703 |
1 files changed, 371 insertions, 332 deletions
diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c index 552a09e9211..51c08edd756 100644 --- a/sound/pci/hda/patch_realtek.c +++ b/sound/pci/hda/patch_realtek.c | |||
@@ -231,7 +231,6 @@ enum { | |||
231 | ALC888_ACER_ASPIRE_8930G, | 231 | ALC888_ACER_ASPIRE_8930G, |
232 | ALC888_ACER_ASPIRE_7730G, | 232 | ALC888_ACER_ASPIRE_7730G, |
233 | ALC883_MEDION, | 233 | ALC883_MEDION, |
234 | ALC883_MEDION_MD2, | ||
235 | ALC883_MEDION_WIM2160, | 234 | ALC883_MEDION_WIM2160, |
236 | ALC883_LAPTOP_EAPD, | 235 | ALC883_LAPTOP_EAPD, |
237 | ALC883_LENOVO_101E_2ch, | 236 | ALC883_LENOVO_101E_2ch, |
@@ -1678,29 +1677,32 @@ struct alc_pincfg { | |||
1678 | u32 val; | 1677 | u32 val; |
1679 | }; | 1678 | }; |
1680 | 1679 | ||
1680 | struct alc_model_fixup { | ||
1681 | const int id; | ||
1682 | const char *name; | ||
1683 | }; | ||
1684 | |||
1681 | struct alc_fixup { | 1685 | struct alc_fixup { |
1682 | unsigned int sku; | 1686 | unsigned int sku; |
1683 | const struct alc_pincfg *pins; | 1687 | const struct alc_pincfg *pins; |
1684 | const struct hda_verb *verbs; | 1688 | const struct hda_verb *verbs; |
1689 | void (*func)(struct hda_codec *codec, const struct alc_fixup *fix, | ||
1690 | int pre_init); | ||
1685 | }; | 1691 | }; |
1686 | 1692 | ||
1687 | static void alc_pick_fixup(struct hda_codec *codec, | 1693 | static void __alc_pick_fixup(struct hda_codec *codec, |
1688 | const struct snd_pci_quirk *quirk, | 1694 | const struct alc_fixup *fix, |
1689 | const struct alc_fixup *fix, | 1695 | const char *modelname, |
1690 | int pre_init) | 1696 | int pre_init) |
1691 | { | 1697 | { |
1692 | const struct alc_pincfg *cfg; | 1698 | const struct alc_pincfg *cfg; |
1693 | struct alc_spec *spec; | 1699 | struct alc_spec *spec; |
1694 | 1700 | ||
1695 | quirk = snd_pci_quirk_lookup(codec->bus->pci, quirk); | ||
1696 | if (!quirk) | ||
1697 | return; | ||
1698 | fix += quirk->value; | ||
1699 | cfg = fix->pins; | 1701 | cfg = fix->pins; |
1700 | if (pre_init && fix->sku) { | 1702 | if (pre_init && fix->sku) { |
1701 | #ifdef CONFIG_SND_DEBUG_VERBOSE | 1703 | #ifdef CONFIG_SND_DEBUG_VERBOSE |
1702 | snd_printdd(KERN_INFO "hda_codec: %s: Apply sku override for %s\n", | 1704 | snd_printdd(KERN_INFO "hda_codec: %s: Apply sku override for %s\n", |
1703 | codec->chip_name, quirk->name); | 1705 | codec->chip_name, modelname); |
1704 | #endif | 1706 | #endif |
1705 | spec = codec->spec; | 1707 | spec = codec->spec; |
1706 | spec->cdefine.sku_cfg = fix->sku; | 1708 | spec->cdefine.sku_cfg = fix->sku; |
@@ -1709,7 +1711,7 @@ static void alc_pick_fixup(struct hda_codec *codec, | |||
1709 | if (pre_init && cfg) { | 1711 | if (pre_init && cfg) { |
1710 | #ifdef CONFIG_SND_DEBUG_VERBOSE | 1712 | #ifdef CONFIG_SND_DEBUG_VERBOSE |
1711 | snd_printdd(KERN_INFO "hda_codec: %s: Apply pincfg for %s\n", | 1713 | snd_printdd(KERN_INFO "hda_codec: %s: Apply pincfg for %s\n", |
1712 | codec->chip_name, quirk->name); | 1714 | codec->chip_name, modelname); |
1713 | #endif | 1715 | #endif |
1714 | for (; cfg->nid; cfg++) | 1716 | for (; cfg->nid; cfg++) |
1715 | snd_hda_codec_set_pincfg(codec, cfg->nid, cfg->val); | 1717 | snd_hda_codec_set_pincfg(codec, cfg->nid, cfg->val); |
@@ -1717,10 +1719,53 @@ static void alc_pick_fixup(struct hda_codec *codec, | |||
1717 | if (!pre_init && fix->verbs) { | 1719 | if (!pre_init && fix->verbs) { |
1718 | #ifdef CONFIG_SND_DEBUG_VERBOSE | 1720 | #ifdef CONFIG_SND_DEBUG_VERBOSE |
1719 | snd_printdd(KERN_INFO "hda_codec: %s: Apply fix-verbs for %s\n", | 1721 | snd_printdd(KERN_INFO "hda_codec: %s: Apply fix-verbs for %s\n", |
1720 | codec->chip_name, quirk->name); | 1722 | codec->chip_name, modelname); |
1721 | #endif | 1723 | #endif |
1722 | add_verb(codec->spec, fix->verbs); | 1724 | add_verb(codec->spec, fix->verbs); |
1723 | } | 1725 | } |
1726 | if (fix->func) { | ||
1727 | #ifdef CONFIG_SND_DEBUG_VERBOSE | ||
1728 | snd_printdd(KERN_INFO "hda_codec: %s: Apply fix-func for %s\n", | ||
1729 | codec->chip_name, modelname); | ||
1730 | #endif | ||
1731 | fix->func(codec, fix, pre_init); | ||
1732 | } | ||
1733 | } | ||
1734 | |||
1735 | static void alc_pick_fixup(struct hda_codec *codec, | ||
1736 | const struct snd_pci_quirk *quirk, | ||
1737 | const struct alc_fixup *fix, | ||
1738 | int pre_init) | ||
1739 | { | ||
1740 | quirk = snd_pci_quirk_lookup(codec->bus->pci, quirk); | ||
1741 | if (quirk) { | ||
1742 | fix += quirk->value; | ||
1743 | #ifdef CONFIG_SND_DEBUG_VERBOSE | ||
1744 | __alc_pick_fixup(codec, fix, quirk->name, pre_init); | ||
1745 | #else | ||
1746 | __alc_pick_fixup(codec, fix, NULL, pre_init); | ||
1747 | #endif | ||
1748 | } | ||
1749 | } | ||
1750 | |||
1751 | static void alc_pick_fixup_model(struct hda_codec *codec, | ||
1752 | const struct alc_model_fixup *models, | ||
1753 | const struct snd_pci_quirk *quirk, | ||
1754 | const struct alc_fixup *fix, | ||
1755 | int pre_init) | ||
1756 | { | ||
1757 | if (codec->modelname && models) { | ||
1758 | while (models->name) { | ||
1759 | if (!strcmp(codec->modelname, models->name)) { | ||
1760 | fix += models->id; | ||
1761 | break; | ||
1762 | } | ||
1763 | models++; | ||
1764 | } | ||
1765 | __alc_pick_fixup(codec, fix, codec->modelname, pre_init); | ||
1766 | } else { | ||
1767 | alc_pick_fixup(codec, quirk, fix, pre_init); | ||
1768 | } | ||
1724 | } | 1769 | } |
1725 | 1770 | ||
1726 | static int alc_read_coef_idx(struct hda_codec *codec, | 1771 | static int alc_read_coef_idx(struct hda_codec *codec, |
@@ -1981,6 +2026,7 @@ static struct hda_verb alc888_acer_aspire_4930g_verbs[] = { | |||
1981 | {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT}, | 2026 | {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT}, |
1982 | {0x15, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE}, | 2027 | {0x15, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE}, |
1983 | {0x15, AC_VERB_SET_CONNECT_SEL, 0x00}, | 2028 | {0x15, AC_VERB_SET_CONNECT_SEL, 0x00}, |
2029 | {0x15, AC_VERB_SET_EAPD_BTLENABLE, 2}, | ||
1984 | { } | 2030 | { } |
1985 | }; | 2031 | }; |
1986 | 2032 | ||
@@ -2120,17 +2166,17 @@ static struct hda_input_mux alc888_acer_aspire_6530_sources[2] = { | |||
2120 | { | 2166 | { |
2121 | .num_items = 5, | 2167 | .num_items = 5, |
2122 | .items = { | 2168 | .items = { |
2123 | { "Ext Mic", 0x0 }, | 2169 | { "Mic", 0x0 }, |
2124 | { "Line In", 0x2 }, | 2170 | { "Line In", 0x2 }, |
2125 | { "CD", 0x4 }, | 2171 | { "CD", 0x4 }, |
2126 | { "Input Mix", 0xa }, | 2172 | { "Input Mix", 0xa }, |
2127 | { "Int Mic", 0xb }, | 2173 | { "Internal Mic", 0xb }, |
2128 | }, | 2174 | }, |
2129 | }, | 2175 | }, |
2130 | { | 2176 | { |
2131 | .num_items = 4, | 2177 | .num_items = 4, |
2132 | .items = { | 2178 | .items = { |
2133 | { "Ext Mic", 0x0 }, | 2179 | { "Mic", 0x0 }, |
2134 | { "Line In", 0x2 }, | 2180 | { "Line In", 0x2 }, |
2135 | { "CD", 0x4 }, | 2181 | { "CD", 0x4 }, |
2136 | { "Input Mix", 0xa }, | 2182 | { "Input Mix", 0xa }, |
@@ -2187,7 +2233,7 @@ static struct snd_kcontrol_new alc888_base_mixer[] = { | |||
2187 | HDA_CODEC_VOLUME("Line Playback Volume", 0x0b, 0x02, HDA_INPUT), | 2233 | HDA_CODEC_VOLUME("Line Playback Volume", 0x0b, 0x02, HDA_INPUT), |
2188 | HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x02, HDA_INPUT), | 2234 | HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x02, HDA_INPUT), |
2189 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), | 2235 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), |
2190 | HDA_CODEC_VOLUME("Mic Boost", 0x18, 0, HDA_INPUT), | 2236 | HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), |
2191 | HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), | 2237 | HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), |
2192 | { } /* end */ | 2238 | { } /* end */ |
2193 | }; | 2239 | }; |
@@ -2205,7 +2251,7 @@ static struct snd_kcontrol_new alc889_acer_aspire_8930g_mixer[] = { | |||
2205 | HDA_CODEC_VOLUME("Line Playback Volume", 0x0b, 0x02, HDA_INPUT), | 2251 | HDA_CODEC_VOLUME("Line Playback Volume", 0x0b, 0x02, HDA_INPUT), |
2206 | HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x02, HDA_INPUT), | 2252 | HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x02, HDA_INPUT), |
2207 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), | 2253 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), |
2208 | HDA_CODEC_VOLUME("Mic Boost", 0x18, 0, HDA_INPUT), | 2254 | HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), |
2209 | HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), | 2255 | HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), |
2210 | { } /* end */ | 2256 | { } /* end */ |
2211 | }; | 2257 | }; |
@@ -2796,10 +2842,10 @@ static struct snd_kcontrol_new alc880_fujitsu_mixer[] = { | |||
2796 | HDA_BIND_MUTE("Speaker Playback Switch", 0x0d, 2, HDA_INPUT), | 2842 | HDA_BIND_MUTE("Speaker Playback Switch", 0x0d, 2, HDA_INPUT), |
2797 | HDA_CODEC_VOLUME("CD Playback Volume", 0x0b, 0x04, HDA_INPUT), | 2843 | HDA_CODEC_VOLUME("CD Playback Volume", 0x0b, 0x04, HDA_INPUT), |
2798 | HDA_CODEC_MUTE("CD Playback Switch", 0x0b, 0x04, HDA_INPUT), | 2844 | HDA_CODEC_MUTE("CD Playback Switch", 0x0b, 0x04, HDA_INPUT), |
2799 | HDA_CODEC_VOLUME("Ext Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), | 2845 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), |
2800 | HDA_CODEC_MUTE("Ext Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), | 2846 | HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), |
2801 | HDA_CODEC_VOLUME("Int Mic Playback Volume", 0x0b, 0x1, HDA_INPUT), | 2847 | HDA_CODEC_VOLUME("Internal Mic Playback Volume", 0x0b, 0x1, HDA_INPUT), |
2802 | HDA_CODEC_MUTE("Int Mic Playback Switch", 0x0b, 0x1, HDA_INPUT), | 2848 | HDA_CODEC_MUTE("Internal Mic Playback Switch", 0x0b, 0x1, HDA_INPUT), |
2803 | { } /* end */ | 2849 | { } /* end */ |
2804 | }; | 2850 | }; |
2805 | 2851 | ||
@@ -3307,7 +3353,7 @@ static struct hda_verb alc880_beep_init_verbs[] = { | |||
3307 | }; | 3353 | }; |
3308 | 3354 | ||
3309 | /* auto-toggle front mic */ | 3355 | /* auto-toggle front mic */ |
3310 | static void alc880_uniwill_mic_automute(struct hda_codec *codec) | 3356 | static void alc88x_simple_mic_automute(struct hda_codec *codec) |
3311 | { | 3357 | { |
3312 | unsigned int present; | 3358 | unsigned int present; |
3313 | unsigned char bits; | 3359 | unsigned char bits; |
@@ -3329,7 +3375,7 @@ static void alc880_uniwill_setup(struct hda_codec *codec) | |||
3329 | static void alc880_uniwill_init_hook(struct hda_codec *codec) | 3375 | static void alc880_uniwill_init_hook(struct hda_codec *codec) |
3330 | { | 3376 | { |
3331 | alc_automute_amp(codec); | 3377 | alc_automute_amp(codec); |
3332 | alc880_uniwill_mic_automute(codec); | 3378 | alc88x_simple_mic_automute(codec); |
3333 | } | 3379 | } |
3334 | 3380 | ||
3335 | static void alc880_uniwill_unsol_event(struct hda_codec *codec, | 3381 | static void alc880_uniwill_unsol_event(struct hda_codec *codec, |
@@ -3340,7 +3386,7 @@ static void alc880_uniwill_unsol_event(struct hda_codec *codec, | |||
3340 | */ | 3386 | */ |
3341 | switch (res >> 28) { | 3387 | switch (res >> 28) { |
3342 | case ALC880_MIC_EVENT: | 3388 | case ALC880_MIC_EVENT: |
3343 | alc880_uniwill_mic_automute(codec); | 3389 | alc88x_simple_mic_automute(codec); |
3344 | break; | 3390 | break; |
3345 | default: | 3391 | default: |
3346 | alc_automute_amp_unsol_event(codec, res); | 3392 | alc_automute_amp_unsol_event(codec, res); |
@@ -5023,6 +5069,25 @@ static int alc880_auto_fill_dac_nids(struct alc_spec *spec, | |||
5023 | return 0; | 5069 | return 0; |
5024 | } | 5070 | } |
5025 | 5071 | ||
5072 | static const char *alc_get_line_out_pfx(const struct auto_pin_cfg *cfg, | ||
5073 | bool can_be_master) | ||
5074 | { | ||
5075 | if (!cfg->hp_outs && !cfg->speaker_outs && can_be_master) | ||
5076 | return "Master"; | ||
5077 | |||
5078 | switch (cfg->line_out_type) { | ||
5079 | case AUTO_PIN_SPEAKER_OUT: | ||
5080 | return "Speaker"; | ||
5081 | case AUTO_PIN_HP_OUT: | ||
5082 | return "Headphone"; | ||
5083 | default: | ||
5084 | if (cfg->line_outs == 1) | ||
5085 | return "PCM"; | ||
5086 | break; | ||
5087 | } | ||
5088 | return NULL; | ||
5089 | } | ||
5090 | |||
5026 | /* add playback controls from the parsed DAC table */ | 5091 | /* add playback controls from the parsed DAC table */ |
5027 | static int alc880_auto_create_multi_out_ctls(struct alc_spec *spec, | 5092 | static int alc880_auto_create_multi_out_ctls(struct alc_spec *spec, |
5028 | const struct auto_pin_cfg *cfg) | 5093 | const struct auto_pin_cfg *cfg) |
@@ -5030,6 +5095,7 @@ static int alc880_auto_create_multi_out_ctls(struct alc_spec *spec, | |||
5030 | static const char *chname[4] = { | 5095 | static const char *chname[4] = { |
5031 | "Front", "Surround", NULL /*CLFE*/, "Side" | 5096 | "Front", "Surround", NULL /*CLFE*/, "Side" |
5032 | }; | 5097 | }; |
5098 | const char *pfx = alc_get_line_out_pfx(cfg, false); | ||
5033 | hda_nid_t nid; | 5099 | hda_nid_t nid; |
5034 | int i, err; | 5100 | int i, err; |
5035 | 5101 | ||
@@ -5037,7 +5103,7 @@ static int alc880_auto_create_multi_out_ctls(struct alc_spec *spec, | |||
5037 | if (!spec->multiout.dac_nids[i]) | 5103 | if (!spec->multiout.dac_nids[i]) |
5038 | continue; | 5104 | continue; |
5039 | nid = alc880_idx_to_mixer(alc880_dac_to_idx(spec->multiout.dac_nids[i])); | 5105 | nid = alc880_idx_to_mixer(alc880_dac_to_idx(spec->multiout.dac_nids[i])); |
5040 | if (i == 2) { | 5106 | if (!pfx && i == 2) { |
5041 | /* Center/LFE */ | 5107 | /* Center/LFE */ |
5042 | err = add_pb_vol_ctrl(spec, ALC_CTL_WIDGET_VOL, | 5108 | err = add_pb_vol_ctrl(spec, ALC_CTL_WIDGET_VOL, |
5043 | "Center", | 5109 | "Center", |
@@ -5064,18 +5130,17 @@ static int alc880_auto_create_multi_out_ctls(struct alc_spec *spec, | |||
5064 | if (err < 0) | 5130 | if (err < 0) |
5065 | return err; | 5131 | return err; |
5066 | } else { | 5132 | } else { |
5067 | const char *pfx; | 5133 | const char *name = pfx; |
5068 | if (cfg->line_outs == 1 && | 5134 | if (!name) |
5069 | cfg->line_out_type == AUTO_PIN_SPEAKER_OUT) | 5135 | name = chname[i]; |
5070 | pfx = "Speaker"; | 5136 | err = __add_pb_vol_ctrl(spec, ALC_CTL_WIDGET_VOL, |
5071 | else | 5137 | name, i, |
5072 | pfx = chname[i]; | ||
5073 | err = add_pb_vol_ctrl(spec, ALC_CTL_WIDGET_VOL, pfx, | ||
5074 | HDA_COMPOSE_AMP_VAL(nid, 3, 0, | 5138 | HDA_COMPOSE_AMP_VAL(nid, 3, 0, |
5075 | HDA_OUTPUT)); | 5139 | HDA_OUTPUT)); |
5076 | if (err < 0) | 5140 | if (err < 0) |
5077 | return err; | 5141 | return err; |
5078 | err = add_pb_sw_ctrl(spec, ALC_CTL_BIND_MUTE, pfx, | 5142 | err = __add_pb_sw_ctrl(spec, ALC_CTL_BIND_MUTE, |
5143 | name, i, | ||
5079 | HDA_COMPOSE_AMP_VAL(nid, 3, 2, | 5144 | HDA_COMPOSE_AMP_VAL(nid, 3, 2, |
5080 | HDA_INPUT)); | 5145 | HDA_INPUT)); |
5081 | if (err < 0) | 5146 | if (err < 0) |
@@ -5155,7 +5220,8 @@ static int alc_auto_create_input_ctls(struct hda_codec *codec, | |||
5155 | { | 5220 | { |
5156 | struct alc_spec *spec = codec->spec; | 5221 | struct alc_spec *spec = codec->spec; |
5157 | struct hda_input_mux *imux = &spec->private_imux[0]; | 5222 | struct hda_input_mux *imux = &spec->private_imux[0]; |
5158 | int i, err, idx, type, type_idx = 0; | 5223 | int i, err, idx, type_idx = 0; |
5224 | const char *prev_label = NULL; | ||
5159 | 5225 | ||
5160 | for (i = 0; i < cfg->num_inputs; i++) { | 5226 | for (i = 0; i < cfg->num_inputs; i++) { |
5161 | hda_nid_t pin; | 5227 | hda_nid_t pin; |
@@ -5165,12 +5231,13 @@ static int alc_auto_create_input_ctls(struct hda_codec *codec, | |||
5165 | if (!alc_is_input_pin(codec, pin)) | 5231 | if (!alc_is_input_pin(codec, pin)) |
5166 | continue; | 5232 | continue; |
5167 | 5233 | ||
5168 | type = cfg->inputs[i].type; | 5234 | label = hda_get_autocfg_input_label(codec, cfg, i); |
5169 | if (i > 0 && type == cfg->inputs[i - 1].type) | 5235 | if (prev_label && !strcmp(label, prev_label)) |
5170 | type_idx++; | 5236 | type_idx++; |
5171 | else | 5237 | else |
5172 | type_idx = 0; | 5238 | type_idx = 0; |
5173 | label = hda_get_autocfg_input_label(codec, cfg, i); | 5239 | prev_label = label; |
5240 | |||
5174 | if (mixer) { | 5241 | if (mixer) { |
5175 | idx = get_connection_index(codec, mixer, pin); | 5242 | idx = get_connection_index(codec, mixer, pin); |
5176 | if (idx >= 0) { | 5243 | if (idx >= 0) { |
@@ -7406,7 +7473,7 @@ static struct hda_input_mux alc883_lenovo_nb0763_capture_source = { | |||
7406 | .num_items = 4, | 7473 | .num_items = 4, |
7407 | .items = { | 7474 | .items = { |
7408 | { "Mic", 0x0 }, | 7475 | { "Mic", 0x0 }, |
7409 | { "Int Mic", 0x1 }, | 7476 | { "Internal Mic", 0x1 }, |
7410 | { "Line", 0x2 }, | 7477 | { "Line", 0x2 }, |
7411 | { "CD", 0x4 }, | 7478 | { "CD", 0x4 }, |
7412 | }, | 7479 | }, |
@@ -7416,7 +7483,7 @@ static struct hda_input_mux alc883_fujitsu_pi2515_capture_source = { | |||
7416 | .num_items = 2, | 7483 | .num_items = 2, |
7417 | .items = { | 7484 | .items = { |
7418 | { "Mic", 0x0 }, | 7485 | { "Mic", 0x0 }, |
7419 | { "Int Mic", 0x1 }, | 7486 | { "Internal Mic", 0x1 }, |
7420 | }, | 7487 | }, |
7421 | }; | 7488 | }; |
7422 | 7489 | ||
@@ -7851,10 +7918,10 @@ static struct snd_kcontrol_new alc882_base_mixer[] = { | |||
7851 | HDA_CODEC_VOLUME("Line Playback Volume", 0x0b, 0x02, HDA_INPUT), | 7918 | HDA_CODEC_VOLUME("Line Playback Volume", 0x0b, 0x02, HDA_INPUT), |
7852 | HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x02, HDA_INPUT), | 7919 | HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x02, HDA_INPUT), |
7853 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), | 7920 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), |
7854 | HDA_CODEC_VOLUME("Mic Boost", 0x18, 0, HDA_INPUT), | 7921 | HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), |
7855 | HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), | 7922 | HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), |
7856 | HDA_CODEC_VOLUME("Front Mic Playback Volume", 0x0b, 0x1, HDA_INPUT), | 7923 | HDA_CODEC_VOLUME("Front Mic Playback Volume", 0x0b, 0x1, HDA_INPUT), |
7857 | HDA_CODEC_VOLUME("Front Mic Boost", 0x19, 0, HDA_INPUT), | 7924 | HDA_CODEC_VOLUME("Front Mic Boost Volume", 0x19, 0, HDA_INPUT), |
7858 | HDA_CODEC_MUTE("Front Mic Playback Switch", 0x0b, 0x1, HDA_INPUT), | 7925 | HDA_CODEC_MUTE("Front Mic Playback Switch", 0x0b, 0x1, HDA_INPUT), |
7859 | { } /* end */ | 7926 | { } /* end */ |
7860 | }; | 7927 | }; |
@@ -7878,8 +7945,8 @@ static struct snd_kcontrol_new alc885_mbp3_mixer[] = { | |||
7878 | HDA_CODEC_MUTE ("Line Playback Switch", 0x0b, 0x02, HDA_INPUT), | 7945 | HDA_CODEC_MUTE ("Line Playback Switch", 0x0b, 0x02, HDA_INPUT), |
7879 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x00, HDA_INPUT), | 7946 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x00, HDA_INPUT), |
7880 | HDA_CODEC_MUTE ("Mic Playback Switch", 0x0b, 0x00, HDA_INPUT), | 7947 | HDA_CODEC_MUTE ("Mic Playback Switch", 0x0b, 0x00, HDA_INPUT), |
7881 | HDA_CODEC_VOLUME("Line Boost", 0x1a, 0x00, HDA_INPUT), | 7948 | HDA_CODEC_VOLUME("Line Boost Volume", 0x1a, 0x00, HDA_INPUT), |
7882 | HDA_CODEC_VOLUME("Mic Boost", 0x18, 0x00, HDA_INPUT), | 7949 | HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0x00, HDA_INPUT), |
7883 | { } /* end */ | 7950 | { } /* end */ |
7884 | }; | 7951 | }; |
7885 | 7952 | ||
@@ -7896,8 +7963,8 @@ static struct snd_kcontrol_new alc885_mb5_mixer[] = { | |||
7896 | HDA_CODEC_MUTE ("Line Playback Switch", 0x0b, 0x07, HDA_INPUT), | 7963 | HDA_CODEC_MUTE ("Line Playback Switch", 0x0b, 0x07, HDA_INPUT), |
7897 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x01, HDA_INPUT), | 7964 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x01, HDA_INPUT), |
7898 | HDA_CODEC_MUTE ("Mic Playback Switch", 0x0b, 0x01, HDA_INPUT), | 7965 | HDA_CODEC_MUTE ("Mic Playback Switch", 0x0b, 0x01, HDA_INPUT), |
7899 | HDA_CODEC_VOLUME("Line Boost", 0x15, 0x00, HDA_INPUT), | 7966 | HDA_CODEC_VOLUME("Line Boost Volume", 0x15, 0x00, HDA_INPUT), |
7900 | HDA_CODEC_VOLUME("Mic Boost", 0x19, 0x00, HDA_INPUT), | 7967 | HDA_CODEC_VOLUME("Mic Boost Volume", 0x19, 0x00, HDA_INPUT), |
7901 | { } /* end */ | 7968 | { } /* end */ |
7902 | }; | 7969 | }; |
7903 | 7970 | ||
@@ -7912,7 +7979,7 @@ static struct snd_kcontrol_new alc885_macmini3_mixer[] = { | |||
7912 | HDA_BIND_MUTE ("Headphone Playback Switch", 0x0f, 0x02, HDA_INPUT), | 7979 | HDA_BIND_MUTE ("Headphone Playback Switch", 0x0f, 0x02, HDA_INPUT), |
7913 | HDA_CODEC_VOLUME("Line Playback Volume", 0x0b, 0x07, HDA_INPUT), | 7980 | HDA_CODEC_VOLUME("Line Playback Volume", 0x0b, 0x07, HDA_INPUT), |
7914 | HDA_CODEC_MUTE ("Line Playback Switch", 0x0b, 0x07, HDA_INPUT), | 7981 | HDA_CODEC_MUTE ("Line Playback Switch", 0x0b, 0x07, HDA_INPUT), |
7915 | HDA_CODEC_VOLUME("Line Boost", 0x15, 0x00, HDA_INPUT), | 7982 | HDA_CODEC_VOLUME("Line Boost Volume", 0x15, 0x00, HDA_INPUT), |
7916 | { } /* end */ | 7983 | { } /* end */ |
7917 | }; | 7984 | }; |
7918 | 7985 | ||
@@ -7931,7 +7998,7 @@ static struct snd_kcontrol_new alc882_w2jc_mixer[] = { | |||
7931 | HDA_CODEC_VOLUME("Line Playback Volume", 0x0b, 0x02, HDA_INPUT), | 7998 | HDA_CODEC_VOLUME("Line Playback Volume", 0x0b, 0x02, HDA_INPUT), |
7932 | HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x02, HDA_INPUT), | 7999 | HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x02, HDA_INPUT), |
7933 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), | 8000 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), |
7934 | HDA_CODEC_VOLUME("Mic Boost", 0x18, 0, HDA_INPUT), | 8001 | HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), |
7935 | HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), | 8002 | HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), |
7936 | { } /* end */ | 8003 | { } /* end */ |
7937 | }; | 8004 | }; |
@@ -7946,10 +8013,10 @@ static struct snd_kcontrol_new alc882_targa_mixer[] = { | |||
7946 | HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x02, HDA_INPUT), | 8013 | HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x02, HDA_INPUT), |
7947 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), | 8014 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), |
7948 | HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), | 8015 | HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), |
7949 | HDA_CODEC_VOLUME("Mic Boost", 0x18, 0, HDA_INPUT), | 8016 | HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), |
7950 | HDA_CODEC_VOLUME("Front Mic Playback Volume", 0x0b, 0x1, HDA_INPUT), | 8017 | HDA_CODEC_VOLUME("Front Mic Playback Volume", 0x0b, 0x1, HDA_INPUT), |
7951 | HDA_CODEC_MUTE("Front Mic Playback Switch", 0x0b, 0x1, HDA_INPUT), | 8018 | HDA_CODEC_MUTE("Front Mic Playback Switch", 0x0b, 0x1, HDA_INPUT), |
7952 | HDA_CODEC_VOLUME("Front Mic Boost", 0x19, 0, HDA_INPUT), | 8019 | HDA_CODEC_VOLUME("Front Mic Boost Volume", 0x19, 0, HDA_INPUT), |
7953 | { } /* end */ | 8020 | { } /* end */ |
7954 | }; | 8021 | }; |
7955 | 8022 | ||
@@ -7969,7 +8036,7 @@ static struct snd_kcontrol_new alc882_asus_a7j_mixer[] = { | |||
7969 | HDA_CODEC_MUTE("Mobile Line Playback Switch", 0x0b, 0x03, HDA_INPUT), | 8036 | HDA_CODEC_MUTE("Mobile Line Playback Switch", 0x0b, 0x03, HDA_INPUT), |
7970 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), | 8037 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), |
7971 | HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), | 8038 | HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), |
7972 | HDA_CODEC_VOLUME("Mic Boost", 0x18, 0, HDA_INPUT), | 8039 | HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), |
7973 | { } /* end */ | 8040 | { } /* end */ |
7974 | }; | 8041 | }; |
7975 | 8042 | ||
@@ -7982,7 +8049,7 @@ static struct snd_kcontrol_new alc882_asus_a7m_mixer[] = { | |||
7982 | HDA_CODEC_VOLUME("Line Playback Volume", 0x0b, 0x02, HDA_INPUT), | 8049 | HDA_CODEC_VOLUME("Line Playback Volume", 0x0b, 0x02, HDA_INPUT), |
7983 | HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x02, HDA_INPUT), | 8050 | HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x02, HDA_INPUT), |
7984 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), | 8051 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), |
7985 | HDA_CODEC_VOLUME("Mic Boost", 0x18, 0, HDA_INPUT), | 8052 | HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), |
7986 | HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), | 8053 | HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), |
7987 | { } /* end */ | 8054 | { } /* end */ |
7988 | }; | 8055 | }; |
@@ -8763,10 +8830,10 @@ static struct snd_kcontrol_new alc883_mitac_mixer[] = { | |||
8763 | HDA_BIND_MUTE_MONO("LFE Playback Switch", 0x0e, 2, 2, HDA_INPUT), | 8830 | HDA_BIND_MUTE_MONO("LFE Playback Switch", 0x0e, 2, 2, HDA_INPUT), |
8764 | HDA_CODEC_MUTE("Headphone Playback Switch", 0x15, 0x0, HDA_OUTPUT), | 8831 | HDA_CODEC_MUTE("Headphone Playback Switch", 0x15, 0x0, HDA_OUTPUT), |
8765 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), | 8832 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), |
8766 | HDA_CODEC_VOLUME("Mic Boost", 0x18, 0, HDA_INPUT), | 8833 | HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), |
8767 | HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), | 8834 | HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), |
8768 | HDA_CODEC_VOLUME("Front Mic Playback Volume", 0x0b, 0x1, HDA_INPUT), | 8835 | HDA_CODEC_VOLUME("Front Mic Playback Volume", 0x0b, 0x1, HDA_INPUT), |
8769 | HDA_CODEC_VOLUME("Front Mic Boost", 0x19, 0, HDA_INPUT), | 8836 | HDA_CODEC_VOLUME("Front Mic Boost Volume", 0x19, 0, HDA_INPUT), |
8770 | HDA_CODEC_MUTE("Front Mic Playback Switch", 0x0b, 0x1, HDA_INPUT), | 8837 | HDA_CODEC_MUTE("Front Mic Playback Switch", 0x0b, 0x1, HDA_INPUT), |
8771 | { } /* end */ | 8838 | { } /* end */ |
8772 | }; | 8839 | }; |
@@ -8777,11 +8844,11 @@ static struct snd_kcontrol_new alc883_clevo_m720_mixer[] = { | |||
8777 | HDA_CODEC_VOLUME("Speaker Playback Volume", 0x0d, 0x0, HDA_OUTPUT), | 8844 | HDA_CODEC_VOLUME("Speaker Playback Volume", 0x0d, 0x0, HDA_OUTPUT), |
8778 | HDA_BIND_MUTE("Speaker Playback Switch", 0x0d, 2, HDA_INPUT), | 8845 | HDA_BIND_MUTE("Speaker Playback Switch", 0x0d, 2, HDA_INPUT), |
8779 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), | 8846 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), |
8780 | HDA_CODEC_VOLUME("Mic Boost", 0x18, 0, HDA_INPUT), | 8847 | HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), |
8781 | HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), | 8848 | HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), |
8782 | HDA_CODEC_VOLUME("Int Mic Playback Volume", 0x0b, 0x1, HDA_INPUT), | 8849 | HDA_CODEC_VOLUME("Internal Mic Playback Volume", 0x0b, 0x1, HDA_INPUT), |
8783 | HDA_CODEC_VOLUME("Int Mic Boost", 0x19, 0, HDA_INPUT), | 8850 | HDA_CODEC_VOLUME("Internal Mic Boost Volume", 0x19, 0, HDA_INPUT), |
8784 | HDA_CODEC_MUTE("Int Mic Playback Switch", 0x0b, 0x1, HDA_INPUT), | 8851 | HDA_CODEC_MUTE("Internal Mic Playback Switch", 0x0b, 0x1, HDA_INPUT), |
8785 | { } /* end */ | 8852 | { } /* end */ |
8786 | }; | 8853 | }; |
8787 | 8854 | ||
@@ -8791,11 +8858,11 @@ static struct snd_kcontrol_new alc883_2ch_fujitsu_pi2515_mixer[] = { | |||
8791 | HDA_CODEC_VOLUME("Speaker Playback Volume", 0x0d, 0x0, HDA_OUTPUT), | 8858 | HDA_CODEC_VOLUME("Speaker Playback Volume", 0x0d, 0x0, HDA_OUTPUT), |
8792 | HDA_BIND_MUTE("Speaker Playback Switch", 0x0d, 2, HDA_INPUT), | 8859 | HDA_BIND_MUTE("Speaker Playback Switch", 0x0d, 2, HDA_INPUT), |
8793 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), | 8860 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), |
8794 | HDA_CODEC_VOLUME("Mic Boost", 0x18, 0, HDA_INPUT), | 8861 | HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), |
8795 | HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), | 8862 | HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), |
8796 | HDA_CODEC_VOLUME("Int Mic Playback Volume", 0x0b, 0x1, HDA_INPUT), | 8863 | HDA_CODEC_VOLUME("Internal Mic Playback Volume", 0x0b, 0x1, HDA_INPUT), |
8797 | HDA_CODEC_VOLUME("Int Mic Boost", 0x19, 0, HDA_INPUT), | 8864 | HDA_CODEC_VOLUME("Internal Mic Boost Volume", 0x19, 0, HDA_INPUT), |
8798 | HDA_CODEC_MUTE("Int Mic Playback Switch", 0x0b, 0x1, HDA_INPUT), | 8865 | HDA_CODEC_MUTE("Internal Mic Playback Switch", 0x0b, 0x1, HDA_INPUT), |
8799 | { } /* end */ | 8866 | { } /* end */ |
8800 | }; | 8867 | }; |
8801 | 8868 | ||
@@ -8808,10 +8875,10 @@ static struct snd_kcontrol_new alc883_3ST_2ch_mixer[] = { | |||
8808 | HDA_CODEC_VOLUME("Line Playback Volume", 0x0b, 0x02, HDA_INPUT), | 8875 | HDA_CODEC_VOLUME("Line Playback Volume", 0x0b, 0x02, HDA_INPUT), |
8809 | HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x02, HDA_INPUT), | 8876 | HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x02, HDA_INPUT), |
8810 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), | 8877 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), |
8811 | HDA_CODEC_VOLUME("Mic Boost", 0x18, 0, HDA_INPUT), | 8878 | HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), |
8812 | HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), | 8879 | HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), |
8813 | HDA_CODEC_VOLUME("Front Mic Playback Volume", 0x0b, 0x1, HDA_INPUT), | 8880 | HDA_CODEC_VOLUME("Front Mic Playback Volume", 0x0b, 0x1, HDA_INPUT), |
8814 | HDA_CODEC_VOLUME("Front Mic Boost", 0x19, 0, HDA_INPUT), | 8881 | HDA_CODEC_VOLUME("Front Mic Boost Volume", 0x19, 0, HDA_INPUT), |
8815 | HDA_CODEC_MUTE("Front Mic Playback Switch", 0x0b, 0x1, HDA_INPUT), | 8882 | HDA_CODEC_MUTE("Front Mic Playback Switch", 0x0b, 0x1, HDA_INPUT), |
8816 | { } /* end */ | 8883 | { } /* end */ |
8817 | }; | 8884 | }; |
@@ -8831,10 +8898,10 @@ static struct snd_kcontrol_new alc883_3ST_6ch_mixer[] = { | |||
8831 | HDA_CODEC_VOLUME("Line Playback Volume", 0x0b, 0x02, HDA_INPUT), | 8898 | HDA_CODEC_VOLUME("Line Playback Volume", 0x0b, 0x02, HDA_INPUT), |
8832 | HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x02, HDA_INPUT), | 8899 | HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x02, HDA_INPUT), |
8833 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), | 8900 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), |
8834 | HDA_CODEC_VOLUME("Mic Boost", 0x18, 0, HDA_INPUT), | 8901 | HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), |
8835 | HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), | 8902 | HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), |
8836 | HDA_CODEC_VOLUME("Front Mic Playback Volume", 0x0b, 0x1, HDA_INPUT), | 8903 | HDA_CODEC_VOLUME("Front Mic Playback Volume", 0x0b, 0x1, HDA_INPUT), |
8837 | HDA_CODEC_VOLUME("Front Mic Boost", 0x19, 0, HDA_INPUT), | 8904 | HDA_CODEC_VOLUME("Front Mic Boost Volume", 0x19, 0, HDA_INPUT), |
8838 | HDA_CODEC_MUTE("Front Mic Playback Switch", 0x0b, 0x1, HDA_INPUT), | 8905 | HDA_CODEC_MUTE("Front Mic Playback Switch", 0x0b, 0x1, HDA_INPUT), |
8839 | { } /* end */ | 8906 | { } /* end */ |
8840 | }; | 8907 | }; |
@@ -8855,10 +8922,10 @@ static struct snd_kcontrol_new alc883_3ST_6ch_intel_mixer[] = { | |||
8855 | HDA_CODEC_VOLUME("Line Playback Volume", 0x0b, 0x02, HDA_INPUT), | 8922 | HDA_CODEC_VOLUME("Line Playback Volume", 0x0b, 0x02, HDA_INPUT), |
8856 | HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x02, HDA_INPUT), | 8923 | HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x02, HDA_INPUT), |
8857 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x1, HDA_INPUT), | 8924 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x1, HDA_INPUT), |
8858 | HDA_CODEC_VOLUME("Mic Boost", 0x19, 0, HDA_INPUT), | 8925 | HDA_CODEC_VOLUME("Mic Boost Volume", 0x19, 0, HDA_INPUT), |
8859 | HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x1, HDA_INPUT), | 8926 | HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x1, HDA_INPUT), |
8860 | HDA_CODEC_VOLUME("Front Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), | 8927 | HDA_CODEC_VOLUME("Front Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), |
8861 | HDA_CODEC_VOLUME("Front Mic Boost", 0x18, 0, HDA_INPUT), | 8928 | HDA_CODEC_VOLUME("Front Mic Boost Volume", 0x18, 0, HDA_INPUT), |
8862 | HDA_CODEC_MUTE("Front Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), | 8929 | HDA_CODEC_MUTE("Front Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), |
8863 | { } /* end */ | 8930 | { } /* end */ |
8864 | }; | 8931 | }; |
@@ -8879,10 +8946,10 @@ static struct snd_kcontrol_new alc885_8ch_intel_mixer[] = { | |||
8879 | HDA_CODEC_VOLUME("Line Playback Volume", 0x0b, 0x02, HDA_INPUT), | 8946 | HDA_CODEC_VOLUME("Line Playback Volume", 0x0b, 0x02, HDA_INPUT), |
8880 | HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x02, HDA_INPUT), | 8947 | HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x02, HDA_INPUT), |
8881 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x3, HDA_INPUT), | 8948 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x3, HDA_INPUT), |
8882 | HDA_CODEC_VOLUME("Mic Boost", 0x1b, 0, HDA_INPUT), | 8949 | HDA_CODEC_VOLUME("Mic Boost Volume", 0x1b, 0, HDA_INPUT), |
8883 | HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x3, HDA_INPUT), | 8950 | HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x3, HDA_INPUT), |
8884 | HDA_CODEC_VOLUME("Front Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), | 8951 | HDA_CODEC_VOLUME("Front Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), |
8885 | HDA_CODEC_VOLUME("Front Mic Boost", 0x18, 0, HDA_INPUT), | 8952 | HDA_CODEC_VOLUME("Front Mic Boost Volume", 0x18, 0, HDA_INPUT), |
8886 | HDA_CODEC_MUTE("Front Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), | 8953 | HDA_CODEC_MUTE("Front Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), |
8887 | { } /* end */ | 8954 | { } /* end */ |
8888 | }; | 8955 | }; |
@@ -8902,10 +8969,10 @@ static struct snd_kcontrol_new alc883_fivestack_mixer[] = { | |||
8902 | HDA_CODEC_VOLUME("Line Playback Volume", 0x0b, 0x02, HDA_INPUT), | 8969 | HDA_CODEC_VOLUME("Line Playback Volume", 0x0b, 0x02, HDA_INPUT), |
8903 | HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x02, HDA_INPUT), | 8970 | HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x02, HDA_INPUT), |
8904 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), | 8971 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), |
8905 | HDA_CODEC_VOLUME("Mic Boost", 0x18, 0, HDA_INPUT), | 8972 | HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), |
8906 | HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), | 8973 | HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), |
8907 | HDA_CODEC_VOLUME("Front Mic Playback Volume", 0x0b, 0x1, HDA_INPUT), | 8974 | HDA_CODEC_VOLUME("Front Mic Playback Volume", 0x0b, 0x1, HDA_INPUT), |
8908 | HDA_CODEC_VOLUME("Front Mic Boost", 0x19, 0, HDA_INPUT), | 8975 | HDA_CODEC_VOLUME("Front Mic Boost Volume", 0x19, 0, HDA_INPUT), |
8909 | HDA_CODEC_MUTE("Front Mic Playback Switch", 0x0b, 0x1, HDA_INPUT), | 8976 | HDA_CODEC_MUTE("Front Mic Playback Switch", 0x0b, 0x1, HDA_INPUT), |
8910 | { } /* end */ | 8977 | { } /* end */ |
8911 | }; | 8978 | }; |
@@ -8926,7 +8993,7 @@ static struct snd_kcontrol_new alc883_targa_mixer[] = { | |||
8926 | HDA_CODEC_VOLUME("Line Playback Volume", 0x0b, 0x02, HDA_INPUT), | 8993 | HDA_CODEC_VOLUME("Line Playback Volume", 0x0b, 0x02, HDA_INPUT), |
8927 | HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x02, HDA_INPUT), | 8994 | HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x02, HDA_INPUT), |
8928 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), | 8995 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), |
8929 | HDA_CODEC_VOLUME("Mic Boost", 0x18, 0, HDA_INPUT), | 8996 | HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), |
8930 | HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), | 8997 | HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), |
8931 | { } /* end */ | 8998 | { } /* end */ |
8932 | }; | 8999 | }; |
@@ -8939,20 +9006,20 @@ static struct snd_kcontrol_new alc883_targa_2ch_mixer[] = { | |||
8939 | HDA_CODEC_VOLUME("CD Playback Volume", 0x0b, 0x04, HDA_INPUT), | 9006 | HDA_CODEC_VOLUME("CD Playback Volume", 0x0b, 0x04, HDA_INPUT), |
8940 | HDA_CODEC_MUTE("CD Playback Switch", 0x0b, 0x04, HDA_INPUT), | 9007 | HDA_CODEC_MUTE("CD Playback Switch", 0x0b, 0x04, HDA_INPUT), |
8941 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), | 9008 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), |
8942 | HDA_CODEC_VOLUME("Mic Boost", 0x18, 0, HDA_INPUT), | 9009 | HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), |
8943 | HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), | 9010 | HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), |
8944 | HDA_CODEC_VOLUME("Int Mic Playback Volume", 0x0b, 0x1, HDA_INPUT), | 9011 | HDA_CODEC_VOLUME("Internal Mic Playback Volume", 0x0b, 0x1, HDA_INPUT), |
8945 | HDA_CODEC_VOLUME("Int Mic Boost", 0x19, 0, HDA_INPUT), | 9012 | HDA_CODEC_VOLUME("Internal Mic Boost Volume", 0x19, 0, HDA_INPUT), |
8946 | HDA_CODEC_MUTE("Int Mic Playback Switch", 0x0b, 0x1, HDA_INPUT), | 9013 | HDA_CODEC_MUTE("Internal Mic Playback Switch", 0x0b, 0x1, HDA_INPUT), |
8947 | { } /* end */ | 9014 | { } /* end */ |
8948 | }; | 9015 | }; |
8949 | 9016 | ||
8950 | static struct snd_kcontrol_new alc883_targa_8ch_mixer[] = { | 9017 | static struct snd_kcontrol_new alc883_targa_8ch_mixer[] = { |
8951 | HDA_CODEC_VOLUME("Side Playback Volume", 0x0f, 0x0, HDA_OUTPUT), | 9018 | HDA_CODEC_VOLUME("Side Playback Volume", 0x0f, 0x0, HDA_OUTPUT), |
8952 | HDA_BIND_MUTE("Side Playback Switch", 0x0f, 2, HDA_INPUT), | 9019 | HDA_BIND_MUTE("Side Playback Switch", 0x0f, 2, HDA_INPUT), |
8953 | HDA_CODEC_VOLUME("Int Mic Playback Volume", 0x0b, 0x1, HDA_INPUT), | 9020 | HDA_CODEC_VOLUME("Internal Mic Playback Volume", 0x0b, 0x1, HDA_INPUT), |
8954 | HDA_CODEC_VOLUME("Int Mic Boost", 0x19, 0, HDA_INPUT), | 9021 | HDA_CODEC_VOLUME("Internal Mic Boost Volume", 0x19, 0, HDA_INPUT), |
8955 | HDA_CODEC_MUTE("Int Mic Playback Switch", 0x0b, 0x1, HDA_INPUT), | 9022 | HDA_CODEC_MUTE("Internal Mic Playback Switch", 0x0b, 0x1, HDA_INPUT), |
8956 | { } /* end */ | 9023 | { } /* end */ |
8957 | }; | 9024 | }; |
8958 | 9025 | ||
@@ -8963,7 +9030,7 @@ static struct snd_kcontrol_new alc883_lenovo_101e_2ch_mixer[] = { | |||
8963 | HDA_BIND_MUTE("Speaker Playback Switch", 0x0d, 2, HDA_INPUT), | 9030 | HDA_BIND_MUTE("Speaker Playback Switch", 0x0d, 2, HDA_INPUT), |
8964 | HDA_CODEC_MUTE("Headphone Playback Switch", 0x1b, 0x0, HDA_OUTPUT), | 9031 | HDA_CODEC_MUTE("Headphone Playback Switch", 0x1b, 0x0, HDA_OUTPUT), |
8965 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x1, HDA_INPUT), | 9032 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x1, HDA_INPUT), |
8966 | HDA_CODEC_VOLUME("Mic Boost", 0x18, 0, HDA_INPUT), | 9033 | HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), |
8967 | HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x1, HDA_INPUT), | 9034 | HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x1, HDA_INPUT), |
8968 | { } /* end */ | 9035 | { } /* end */ |
8969 | }; | 9036 | }; |
@@ -8976,21 +9043,8 @@ static struct snd_kcontrol_new alc883_lenovo_nb0763_mixer[] = { | |||
8976 | HDA_CODEC_MUTE("CD Playback Switch", 0x0b, 0x04, HDA_INPUT), | 9043 | HDA_CODEC_MUTE("CD Playback Switch", 0x0b, 0x04, HDA_INPUT), |
8977 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), | 9044 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), |
8978 | HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), | 9045 | HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), |
8979 | HDA_CODEC_VOLUME("Int Mic Playback Volume", 0x0b, 0x1, HDA_INPUT), | 9046 | HDA_CODEC_VOLUME("Internal Mic Playback Volume", 0x0b, 0x1, HDA_INPUT), |
8980 | HDA_CODEC_MUTE("Int Mic Playback Switch", 0x0b, 0x1, HDA_INPUT), | 9047 | HDA_CODEC_MUTE("Internal Mic Playback Switch", 0x0b, 0x1, HDA_INPUT), |
8981 | { } /* end */ | ||
8982 | }; | ||
8983 | |||
8984 | static struct snd_kcontrol_new alc883_medion_md2_mixer[] = { | ||
8985 | HDA_CODEC_VOLUME("Front Playback Volume", 0x0c, 0x0, HDA_OUTPUT), | ||
8986 | HDA_CODEC_MUTE("Headphone Playback Switch", 0x14, 0x0, HDA_OUTPUT), | ||
8987 | HDA_CODEC_MUTE("Front Playback Switch", 0x15, 0x0, HDA_OUTPUT), | ||
8988 | HDA_CODEC_VOLUME("CD Playback Volume", 0x0b, 0x04, HDA_INPUT), | ||
8989 | HDA_CODEC_MUTE("CD Playback Switch", 0x0b, 0x04, HDA_INPUT), | ||
8990 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), | ||
8991 | HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), | ||
8992 | HDA_CODEC_VOLUME("Line Playback Volume", 0x0b, 0x02, HDA_INPUT), | ||
8993 | HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x02, HDA_INPUT), | ||
8994 | { } /* end */ | 9048 | { } /* end */ |
8995 | }; | 9049 | }; |
8996 | 9050 | ||
@@ -9037,7 +9091,7 @@ static struct snd_kcontrol_new alc883_acer_aspire_mixer[] = { | |||
9037 | HDA_CODEC_VOLUME("Line Playback Volume", 0x0b, 0x02, HDA_INPUT), | 9091 | HDA_CODEC_VOLUME("Line Playback Volume", 0x0b, 0x02, HDA_INPUT), |
9038 | HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x02, HDA_INPUT), | 9092 | HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x02, HDA_INPUT), |
9039 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), | 9093 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), |
9040 | HDA_CODEC_VOLUME("Mic Boost", 0x18, 0, HDA_INPUT), | 9094 | HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), |
9041 | HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), | 9095 | HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), |
9042 | { } /* end */ | 9096 | { } /* end */ |
9043 | }; | 9097 | }; |
@@ -9050,7 +9104,7 @@ static struct snd_kcontrol_new alc888_acer_aspire_6530_mixer[] = { | |||
9050 | HDA_CODEC_VOLUME("CD Playback Volume", 0x0b, 0x04, HDA_INPUT), | 9104 | HDA_CODEC_VOLUME("CD Playback Volume", 0x0b, 0x04, HDA_INPUT), |
9051 | HDA_CODEC_MUTE("CD Playback Switch", 0x0b, 0x04, HDA_INPUT), | 9105 | HDA_CODEC_MUTE("CD Playback Switch", 0x0b, 0x04, HDA_INPUT), |
9052 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), | 9106 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), |
9053 | HDA_CODEC_VOLUME("Mic Boost", 0x18, 0, HDA_INPUT), | 9107 | HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), |
9054 | HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), | 9108 | HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), |
9055 | { } /* end */ | 9109 | { } /* end */ |
9056 | }; | 9110 | }; |
@@ -9072,10 +9126,10 @@ static struct snd_kcontrol_new alc888_lenovo_sky_mixer[] = { | |||
9072 | HDA_CODEC_VOLUME("Line Playback Volume", 0x0b, 0x02, HDA_INPUT), | 9126 | HDA_CODEC_VOLUME("Line Playback Volume", 0x0b, 0x02, HDA_INPUT), |
9073 | HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x02, HDA_INPUT), | 9127 | HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x02, HDA_INPUT), |
9074 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), | 9128 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), |
9075 | HDA_CODEC_VOLUME("Mic Boost", 0x18, 0, HDA_INPUT), | 9129 | HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), |
9076 | HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), | 9130 | HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), |
9077 | HDA_CODEC_VOLUME("Front Mic Playback Volume", 0x0b, 0x1, HDA_INPUT), | 9131 | HDA_CODEC_VOLUME("Front Mic Playback Volume", 0x0b, 0x1, HDA_INPUT), |
9078 | HDA_CODEC_VOLUME("Front Mic Boost", 0x19, 0, HDA_INPUT), | 9132 | HDA_CODEC_VOLUME("Front Mic Boost Volume", 0x19, 0, HDA_INPUT), |
9079 | HDA_CODEC_MUTE("Front Mic Playback Switch", 0x0b, 0x1, HDA_INPUT), | 9133 | HDA_CODEC_MUTE("Front Mic Playback Switch", 0x0b, 0x1, HDA_INPUT), |
9080 | { } /* end */ | 9134 | { } /* end */ |
9081 | }; | 9135 | }; |
@@ -9096,8 +9150,8 @@ static struct snd_kcontrol_new alc889A_mb31_mixer[] = { | |||
9096 | HDA_CODEC_MUTE("Enable Headphones", 0x15, 0x00, HDA_OUTPUT), | 9150 | HDA_CODEC_MUTE("Enable Headphones", 0x15, 0x00, HDA_OUTPUT), |
9097 | HDA_CODEC_MUTE_MONO("Enable LFE", 0x16, 2, 0x00, HDA_OUTPUT), | 9151 | HDA_CODEC_MUTE_MONO("Enable LFE", 0x16, 2, 0x00, HDA_OUTPUT), |
9098 | /* Boost mixers */ | 9152 | /* Boost mixers */ |
9099 | HDA_CODEC_VOLUME("Mic Boost", 0x18, 0x00, HDA_INPUT), | 9153 | HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0x00, HDA_INPUT), |
9100 | HDA_CODEC_VOLUME("Line Boost", 0x1a, 0x00, HDA_INPUT), | 9154 | HDA_CODEC_VOLUME("Line Boost Volume", 0x1a, 0x00, HDA_INPUT), |
9101 | /* Input mixers */ | 9155 | /* Input mixers */ |
9102 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x00, HDA_INPUT), | 9156 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x00, HDA_INPUT), |
9103 | HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x00, HDA_INPUT), | 9157 | HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x00, HDA_INPUT), |
@@ -9111,7 +9165,7 @@ static struct snd_kcontrol_new alc883_vaiott_mixer[] = { | |||
9111 | HDA_BIND_MUTE("Front Playback Switch", 0x0c, 2, HDA_INPUT), | 9165 | HDA_BIND_MUTE("Front Playback Switch", 0x0c, 2, HDA_INPUT), |
9112 | HDA_CODEC_MUTE("Headphone Playback Switch", 0x15, 0x0, HDA_OUTPUT), | 9166 | HDA_CODEC_MUTE("Headphone Playback Switch", 0x15, 0x0, HDA_OUTPUT), |
9113 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x1, HDA_INPUT), | 9167 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x1, HDA_INPUT), |
9114 | HDA_CODEC_VOLUME("Mic Boost", 0x19, 0, HDA_INPUT), | 9168 | HDA_CODEC_VOLUME("Mic Boost Volume", 0x19, 0, HDA_INPUT), |
9115 | HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x1, HDA_INPUT), | 9169 | HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x1, HDA_INPUT), |
9116 | { } /* end */ | 9170 | { } /* end */ |
9117 | }; | 9171 | }; |
@@ -9141,7 +9195,7 @@ static struct snd_kcontrol_new alc883_asus_eee1601_mixer[] = { | |||
9141 | HDA_CODEC_VOLUME("Line Playback Volume", 0x0b, 0x02, HDA_INPUT), | 9195 | HDA_CODEC_VOLUME("Line Playback Volume", 0x0b, 0x02, HDA_INPUT), |
9142 | HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x02, HDA_INPUT), | 9196 | HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x02, HDA_INPUT), |
9143 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), | 9197 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), |
9144 | HDA_CODEC_VOLUME("Mic Boost", 0x18, 0, HDA_INPUT), | 9198 | HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), |
9145 | HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), | 9199 | HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), |
9146 | { } /* end */ | 9200 | { } /* end */ |
9147 | }; | 9201 | }; |
@@ -9182,16 +9236,6 @@ static void alc883_mitac_setup(struct hda_codec *codec) | |||
9182 | spec->autocfg.speaker_pins[1] = 0x17; | 9236 | spec->autocfg.speaker_pins[1] = 0x17; |
9183 | } | 9237 | } |
9184 | 9238 | ||
9185 | /* auto-toggle front mic */ | ||
9186 | /* | ||
9187 | static void alc883_mitac_mic_automute(struct hda_codec *codec) | ||
9188 | { | ||
9189 | unsigned char bits = snd_hda_jack_detect(codec, 0x18) ? HDA_AMP_MUTE : 0; | ||
9190 | |||
9191 | snd_hda_codec_amp_stereo(codec, 0x0b, HDA_INPUT, 1, HDA_AMP_MUTE, bits); | ||
9192 | } | ||
9193 | */ | ||
9194 | |||
9195 | static struct hda_verb alc883_mitac_verbs[] = { | 9239 | static struct hda_verb alc883_mitac_verbs[] = { |
9196 | /* HP */ | 9240 | /* HP */ |
9197 | {0x15, AC_VERB_SET_CONNECT_SEL, 0x00}, | 9241 | {0x15, AC_VERB_SET_CONNECT_SEL, 0x00}, |
@@ -9435,18 +9479,8 @@ static void alc883_lenovo_ms7195_unsol_event(struct hda_codec *codec, | |||
9435 | alc888_lenovo_ms7195_rca_automute(codec); | 9479 | alc888_lenovo_ms7195_rca_automute(codec); |
9436 | } | 9480 | } |
9437 | 9481 | ||
9438 | static struct hda_verb alc883_medion_md2_verbs[] = { | ||
9439 | {0x0c, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)}, | ||
9440 | {0x0c, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(1)}, | ||
9441 | |||
9442 | {0x14, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_HP}, | ||
9443 | |||
9444 | {0x14, AC_VERB_SET_UNSOLICITED_ENABLE, ALC880_HP_EVENT | AC_USRSP_EN}, | ||
9445 | { } /* end */ | ||
9446 | }; | ||
9447 | |||
9448 | /* toggle speaker-output according to the hp-jack state */ | 9482 | /* toggle speaker-output according to the hp-jack state */ |
9449 | static void alc883_medion_md2_setup(struct hda_codec *codec) | 9483 | static void alc883_lenovo_nb0763_setup(struct hda_codec *codec) |
9450 | { | 9484 | { |
9451 | struct alc_spec *spec = codec->spec; | 9485 | struct alc_spec *spec = codec->spec; |
9452 | 9486 | ||
@@ -9458,15 +9492,6 @@ static void alc883_medion_md2_setup(struct hda_codec *codec) | |||
9458 | #define alc883_targa_init_hook alc882_targa_init_hook | 9492 | #define alc883_targa_init_hook alc882_targa_init_hook |
9459 | #define alc883_targa_unsol_event alc882_targa_unsol_event | 9493 | #define alc883_targa_unsol_event alc882_targa_unsol_event |
9460 | 9494 | ||
9461 | static void alc883_clevo_m720_mic_automute(struct hda_codec *codec) | ||
9462 | { | ||
9463 | unsigned int present; | ||
9464 | |||
9465 | present = snd_hda_jack_detect(codec, 0x18); | ||
9466 | snd_hda_codec_amp_stereo(codec, 0x0b, HDA_INPUT, 1, | ||
9467 | HDA_AMP_MUTE, present ? HDA_AMP_MUTE : 0); | ||
9468 | } | ||
9469 | |||
9470 | static void alc883_clevo_m720_setup(struct hda_codec *codec) | 9495 | static void alc883_clevo_m720_setup(struct hda_codec *codec) |
9471 | { | 9496 | { |
9472 | struct alc_spec *spec = codec->spec; | 9497 | struct alc_spec *spec = codec->spec; |
@@ -9478,7 +9503,7 @@ static void alc883_clevo_m720_setup(struct hda_codec *codec) | |||
9478 | static void alc883_clevo_m720_init_hook(struct hda_codec *codec) | 9503 | static void alc883_clevo_m720_init_hook(struct hda_codec *codec) |
9479 | { | 9504 | { |
9480 | alc_automute_amp(codec); | 9505 | alc_automute_amp(codec); |
9481 | alc883_clevo_m720_mic_automute(codec); | 9506 | alc88x_simple_mic_automute(codec); |
9482 | } | 9507 | } |
9483 | 9508 | ||
9484 | static void alc883_clevo_m720_unsol_event(struct hda_codec *codec, | 9509 | static void alc883_clevo_m720_unsol_event(struct hda_codec *codec, |
@@ -9486,7 +9511,7 @@ static void alc883_clevo_m720_unsol_event(struct hda_codec *codec, | |||
9486 | { | 9511 | { |
9487 | switch (res >> 26) { | 9512 | switch (res >> 26) { |
9488 | case ALC880_MIC_EVENT: | 9513 | case ALC880_MIC_EVENT: |
9489 | alc883_clevo_m720_mic_automute(codec); | 9514 | alc88x_simple_mic_automute(codec); |
9490 | break; | 9515 | break; |
9491 | default: | 9516 | default: |
9492 | alc_automute_amp_unsol_event(codec, res); | 9517 | alc_automute_amp_unsol_event(codec, res); |
@@ -9731,7 +9756,6 @@ static const char *alc882_models[ALC882_MODEL_LAST] = { | |||
9731 | [ALC888_ACER_ASPIRE_8930G] = "acer-aspire-8930g", | 9756 | [ALC888_ACER_ASPIRE_8930G] = "acer-aspire-8930g", |
9732 | [ALC888_ACER_ASPIRE_7730G] = "acer-aspire-7730g", | 9757 | [ALC888_ACER_ASPIRE_7730G] = "acer-aspire-7730g", |
9733 | [ALC883_MEDION] = "medion", | 9758 | [ALC883_MEDION] = "medion", |
9734 | [ALC883_MEDION_MD2] = "medion-md2", | ||
9735 | [ALC883_MEDION_WIM2160] = "medion-wim2160", | 9759 | [ALC883_MEDION_WIM2160] = "medion-wim2160", |
9736 | [ALC883_LAPTOP_EAPD] = "laptop-eapd", | 9760 | [ALC883_LAPTOP_EAPD] = "laptop-eapd", |
9737 | [ALC883_LENOVO_101E_2ch] = "lenovo-101e", | 9761 | [ALC883_LENOVO_101E_2ch] = "lenovo-101e", |
@@ -10379,19 +10403,6 @@ static struct alc_config_preset alc882_presets[] = { | |||
10379 | .channel_mode = alc883_sixstack_modes, | 10403 | .channel_mode = alc883_sixstack_modes, |
10380 | .input_mux = &alc883_capture_source, | 10404 | .input_mux = &alc883_capture_source, |
10381 | }, | 10405 | }, |
10382 | [ALC883_MEDION_MD2] = { | ||
10383 | .mixers = { alc883_medion_md2_mixer}, | ||
10384 | .init_verbs = { alc883_init_verbs, alc883_medion_md2_verbs}, | ||
10385 | .num_dacs = ARRAY_SIZE(alc883_dac_nids), | ||
10386 | .dac_nids = alc883_dac_nids, | ||
10387 | .dig_out_nid = ALC883_DIGOUT_NID, | ||
10388 | .num_channel_mode = ARRAY_SIZE(alc883_3ST_2ch_modes), | ||
10389 | .channel_mode = alc883_3ST_2ch_modes, | ||
10390 | .input_mux = &alc883_capture_source, | ||
10391 | .unsol_event = alc_automute_amp_unsol_event, | ||
10392 | .setup = alc883_medion_md2_setup, | ||
10393 | .init_hook = alc_automute_amp, | ||
10394 | }, | ||
10395 | [ALC883_MEDION_WIM2160] = { | 10406 | [ALC883_MEDION_WIM2160] = { |
10396 | .mixers = { alc883_medion_wim2160_mixer }, | 10407 | .mixers = { alc883_medion_wim2160_mixer }, |
10397 | .init_verbs = { alc883_init_verbs, alc883_medion_wim2160_verbs }, | 10408 | .init_verbs = { alc883_init_verbs, alc883_medion_wim2160_verbs }, |
@@ -10468,7 +10479,7 @@ static struct alc_config_preset alc882_presets[] = { | |||
10468 | .need_dac_fix = 1, | 10479 | .need_dac_fix = 1, |
10469 | .input_mux = &alc883_lenovo_nb0763_capture_source, | 10480 | .input_mux = &alc883_lenovo_nb0763_capture_source, |
10470 | .unsol_event = alc_automute_amp_unsol_event, | 10481 | .unsol_event = alc_automute_amp_unsol_event, |
10471 | .setup = alc883_medion_md2_setup, | 10482 | .setup = alc883_lenovo_nb0763_setup, |
10472 | .init_hook = alc_automute_amp, | 10483 | .init_hook = alc_automute_amp, |
10473 | }, | 10484 | }, |
10474 | [ALC888_LENOVO_MS7195_DIG] = { | 10485 | [ALC888_LENOVO_MS7195_DIG] = { |
@@ -10830,25 +10841,30 @@ static int alc_auto_add_mic_boost(struct hda_codec *codec) | |||
10830 | { | 10841 | { |
10831 | struct alc_spec *spec = codec->spec; | 10842 | struct alc_spec *spec = codec->spec; |
10832 | struct auto_pin_cfg *cfg = &spec->autocfg; | 10843 | struct auto_pin_cfg *cfg = &spec->autocfg; |
10833 | int i, err, type; | 10844 | int i, err; |
10834 | int type_idx = 0; | 10845 | int type_idx = 0; |
10835 | hda_nid_t nid; | 10846 | hda_nid_t nid; |
10847 | const char *prev_label = NULL; | ||
10836 | 10848 | ||
10837 | for (i = 0; i < cfg->num_inputs; i++) { | 10849 | for (i = 0; i < cfg->num_inputs; i++) { |
10838 | if (cfg->inputs[i].type > AUTO_PIN_MIC) | 10850 | if (cfg->inputs[i].type > AUTO_PIN_MIC) |
10839 | break; | 10851 | break; |
10840 | nid = cfg->inputs[i].pin; | 10852 | nid = cfg->inputs[i].pin; |
10841 | if (get_wcaps(codec, nid) & AC_WCAP_IN_AMP) { | 10853 | if (get_wcaps(codec, nid) & AC_WCAP_IN_AMP) { |
10842 | char label[32]; | 10854 | const char *label; |
10843 | type = cfg->inputs[i].type; | 10855 | char boost_label[32]; |
10844 | if (i > 0 && type == cfg->inputs[i - 1].type) | 10856 | |
10857 | label = hda_get_autocfg_input_label(codec, cfg, i); | ||
10858 | if (prev_label && !strcmp(label, prev_label)) | ||
10845 | type_idx++; | 10859 | type_idx++; |
10846 | else | 10860 | else |
10847 | type_idx = 0; | 10861 | type_idx = 0; |
10848 | snprintf(label, sizeof(label), "%s Boost", | 10862 | prev_label = label; |
10849 | hda_get_autocfg_input_label(codec, cfg, i)); | 10863 | |
10850 | err = add_control(spec, ALC_CTL_WIDGET_VOL, label, | 10864 | snprintf(boost_label, sizeof(boost_label), |
10851 | type_idx, | 10865 | "%s Boost Volume", label); |
10866 | err = add_control(spec, ALC_CTL_WIDGET_VOL, | ||
10867 | boost_label, type_idx, | ||
10852 | HDA_COMPOSE_AMP_VAL(nid, 3, 0, HDA_INPUT)); | 10868 | HDA_COMPOSE_AMP_VAL(nid, 3, 0, HDA_INPUT)); |
10853 | if (err < 0) | 10869 | if (err < 0) |
10854 | return err; | 10870 | return err; |
@@ -10857,6 +10873,9 @@ static int alc_auto_add_mic_boost(struct hda_codec *codec) | |||
10857 | return 0; | 10873 | return 0; |
10858 | } | 10874 | } |
10859 | 10875 | ||
10876 | static int alc861vd_auto_create_multi_out_ctls(struct alc_spec *spec, | ||
10877 | const struct auto_pin_cfg *cfg); | ||
10878 | |||
10860 | /* almost identical with ALC880 parser... */ | 10879 | /* almost identical with ALC880 parser... */ |
10861 | static int alc882_parse_auto_config(struct hda_codec *codec) | 10880 | static int alc882_parse_auto_config(struct hda_codec *codec) |
10862 | { | 10881 | { |
@@ -10874,7 +10893,10 @@ static int alc882_parse_auto_config(struct hda_codec *codec) | |||
10874 | err = alc880_auto_fill_dac_nids(spec, &spec->autocfg); | 10893 | err = alc880_auto_fill_dac_nids(spec, &spec->autocfg); |
10875 | if (err < 0) | 10894 | if (err < 0) |
10876 | return err; | 10895 | return err; |
10877 | err = alc880_auto_create_multi_out_ctls(spec, &spec->autocfg); | 10896 | if (codec->vendor_id == 0x10ec0887) |
10897 | err = alc861vd_auto_create_multi_out_ctls(spec, &spec->autocfg); | ||
10898 | else | ||
10899 | err = alc880_auto_create_multi_out_ctls(spec, &spec->autocfg); | ||
10878 | if (err < 0) | 10900 | if (err < 0) |
10879 | return err; | 10901 | return err; |
10880 | err = alc880_auto_create_extra_out(spec, spec->autocfg.hp_pins[0], | 10902 | err = alc880_auto_create_extra_out(spec, spec->autocfg.hp_pins[0], |
@@ -11090,10 +11112,10 @@ static struct snd_kcontrol_new alc262_base_mixer[] = { | |||
11090 | HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x02, HDA_INPUT), | 11112 | HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x02, HDA_INPUT), |
11091 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), | 11113 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), |
11092 | HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), | 11114 | HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), |
11093 | HDA_CODEC_VOLUME("Mic Boost", 0x18, 0, HDA_INPUT), | 11115 | HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), |
11094 | HDA_CODEC_VOLUME("Front Mic Playback Volume", 0x0b, 0x01, HDA_INPUT), | 11116 | HDA_CODEC_VOLUME("Front Mic Playback Volume", 0x0b, 0x01, HDA_INPUT), |
11095 | HDA_CODEC_MUTE("Front Mic Playback Switch", 0x0b, 0x01, HDA_INPUT), | 11117 | HDA_CODEC_MUTE("Front Mic Playback Switch", 0x0b, 0x01, HDA_INPUT), |
11096 | HDA_CODEC_VOLUME("Front Mic Boost", 0x19, 0, HDA_INPUT), | 11118 | HDA_CODEC_VOLUME("Front Mic Boost Volume", 0x19, 0, HDA_INPUT), |
11097 | HDA_CODEC_VOLUME("Headphone Playback Volume", 0x0D, 0x0, HDA_OUTPUT), | 11119 | HDA_CODEC_VOLUME("Headphone Playback Volume", 0x0D, 0x0, HDA_OUTPUT), |
11098 | HDA_CODEC_MUTE("Headphone Playback Switch", 0x15, 0x0, HDA_OUTPUT), | 11120 | HDA_CODEC_MUTE("Headphone Playback Switch", 0x15, 0x0, HDA_OUTPUT), |
11099 | HDA_CODEC_VOLUME_MONO("Mono Playback Volume", 0x0e, 2, 0x0, HDA_OUTPUT), | 11121 | HDA_CODEC_VOLUME_MONO("Mono Playback Volume", 0x0e, 2, 0x0, HDA_OUTPUT), |
@@ -11194,10 +11216,10 @@ static struct snd_kcontrol_new alc262_HP_BPC_mixer[] = { | |||
11194 | HDA_OUTPUT), | 11216 | HDA_OUTPUT), |
11195 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), | 11217 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), |
11196 | HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), | 11218 | HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), |
11197 | HDA_CODEC_VOLUME("Mic Boost", 0x18, 0, HDA_INPUT), | 11219 | HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), |
11198 | HDA_CODEC_VOLUME("Front Mic Playback Volume", 0x0b, 0x01, HDA_INPUT), | 11220 | HDA_CODEC_VOLUME("Front Mic Playback Volume", 0x0b, 0x01, HDA_INPUT), |
11199 | HDA_CODEC_MUTE("Front Mic Playback Switch", 0x0b, 0x01, HDA_INPUT), | 11221 | HDA_CODEC_MUTE("Front Mic Playback Switch", 0x0b, 0x01, HDA_INPUT), |
11200 | HDA_CODEC_VOLUME("Front Mic Boost", 0x19, 0, HDA_INPUT), | 11222 | HDA_CODEC_VOLUME("Front Mic Boost Volume", 0x19, 0, HDA_INPUT), |
11201 | HDA_CODEC_VOLUME("Line Playback Volume", 0x0b, 0x02, HDA_INPUT), | 11223 | HDA_CODEC_VOLUME("Line Playback Volume", 0x0b, 0x02, HDA_INPUT), |
11202 | HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x02, HDA_INPUT), | 11224 | HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x02, HDA_INPUT), |
11203 | HDA_CODEC_VOLUME("CD Playback Volume", 0x0b, 0x04, HDA_INPUT), | 11225 | HDA_CODEC_VOLUME("CD Playback Volume", 0x0b, 0x04, HDA_INPUT), |
@@ -11219,7 +11241,7 @@ static struct snd_kcontrol_new alc262_HP_BPC_WildWest_mixer[] = { | |||
11219 | HDA_OUTPUT), | 11241 | HDA_OUTPUT), |
11220 | HDA_CODEC_VOLUME("Front Mic Playback Volume", 0x0b, 0x02, HDA_INPUT), | 11242 | HDA_CODEC_VOLUME("Front Mic Playback Volume", 0x0b, 0x02, HDA_INPUT), |
11221 | HDA_CODEC_MUTE("Front Mic Playback Switch", 0x0b, 0x02, HDA_INPUT), | 11243 | HDA_CODEC_MUTE("Front Mic Playback Switch", 0x0b, 0x02, HDA_INPUT), |
11222 | HDA_CODEC_VOLUME("Front Mic Boost", 0x1a, 0, HDA_INPUT), | 11244 | HDA_CODEC_VOLUME("Front Mic Boost Volume", 0x1a, 0, HDA_INPUT), |
11223 | HDA_CODEC_VOLUME("Line Playback Volume", 0x0b, 0x01, HDA_INPUT), | 11245 | HDA_CODEC_VOLUME("Line Playback Volume", 0x0b, 0x01, HDA_INPUT), |
11224 | HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x01, HDA_INPUT), | 11246 | HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x01, HDA_INPUT), |
11225 | HDA_CODEC_VOLUME("CD Playback Volume", 0x0b, 0x04, HDA_INPUT), | 11247 | HDA_CODEC_VOLUME("CD Playback Volume", 0x0b, 0x04, HDA_INPUT), |
@@ -11230,7 +11252,7 @@ static struct snd_kcontrol_new alc262_HP_BPC_WildWest_mixer[] = { | |||
11230 | static struct snd_kcontrol_new alc262_HP_BPC_WildWest_option_mixer[] = { | 11252 | static struct snd_kcontrol_new alc262_HP_BPC_WildWest_option_mixer[] = { |
11231 | HDA_CODEC_VOLUME("Rear Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), | 11253 | HDA_CODEC_VOLUME("Rear Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), |
11232 | HDA_CODEC_MUTE("Rear Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), | 11254 | HDA_CODEC_MUTE("Rear Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), |
11233 | HDA_CODEC_VOLUME("Rear Mic Boost", 0x18, 0, HDA_INPUT), | 11255 | HDA_CODEC_VOLUME("Rear Mic Boost Volume", 0x18, 0, HDA_INPUT), |
11234 | { } /* end */ | 11256 | { } /* end */ |
11235 | }; | 11257 | }; |
11236 | 11258 | ||
@@ -11250,7 +11272,7 @@ static struct snd_kcontrol_new alc262_hp_t5735_mixer[] = { | |||
11250 | HDA_CODEC_MUTE("Headphone Playback Switch", 0x15, 0x0, HDA_OUTPUT), | 11272 | HDA_CODEC_MUTE("Headphone Playback Switch", 0x15, 0x0, HDA_OUTPUT), |
11251 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), | 11273 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), |
11252 | HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), | 11274 | HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), |
11253 | HDA_CODEC_VOLUME("Mic Boost", 0x18, 0, HDA_INPUT), | 11275 | HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), |
11254 | { } /* end */ | 11276 | { } /* end */ |
11255 | }; | 11277 | }; |
11256 | 11278 | ||
@@ -11357,10 +11379,10 @@ static struct snd_kcontrol_new alc262_hippo_mixer[] = { | |||
11357 | HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x02, HDA_INPUT), | 11379 | HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x02, HDA_INPUT), |
11358 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), | 11380 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), |
11359 | HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), | 11381 | HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), |
11360 | HDA_CODEC_VOLUME("Mic Boost", 0x18, 0, HDA_INPUT), | 11382 | HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), |
11361 | HDA_CODEC_VOLUME("Front Mic Playback Volume", 0x0b, 0x01, HDA_INPUT), | 11383 | HDA_CODEC_VOLUME("Front Mic Playback Volume", 0x0b, 0x01, HDA_INPUT), |
11362 | HDA_CODEC_MUTE("Front Mic Playback Switch", 0x0b, 0x01, HDA_INPUT), | 11384 | HDA_CODEC_MUTE("Front Mic Playback Switch", 0x0b, 0x01, HDA_INPUT), |
11363 | HDA_CODEC_VOLUME("Front Mic Boost", 0x19, 0, HDA_INPUT), | 11385 | HDA_CODEC_VOLUME("Front Mic Boost Volume", 0x19, 0, HDA_INPUT), |
11364 | HDA_CODEC_VOLUME("Headphone Playback Volume", 0x0d, 0x0, HDA_OUTPUT), | 11386 | HDA_CODEC_VOLUME("Headphone Playback Volume", 0x0d, 0x0, HDA_OUTPUT), |
11365 | { } /* end */ | 11387 | { } /* end */ |
11366 | }; | 11388 | }; |
@@ -11374,10 +11396,10 @@ static struct snd_kcontrol_new alc262_hippo1_mixer[] = { | |||
11374 | HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x02, HDA_INPUT), | 11396 | HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x02, HDA_INPUT), |
11375 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), | 11397 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), |
11376 | HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), | 11398 | HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), |
11377 | HDA_CODEC_VOLUME("Mic Boost", 0x18, 0, HDA_INPUT), | 11399 | HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), |
11378 | HDA_CODEC_VOLUME("Front Mic Playback Volume", 0x0b, 0x01, HDA_INPUT), | 11400 | HDA_CODEC_VOLUME("Front Mic Playback Volume", 0x0b, 0x01, HDA_INPUT), |
11379 | HDA_CODEC_MUTE("Front Mic Playback Switch", 0x0b, 0x01, HDA_INPUT), | 11401 | HDA_CODEC_MUTE("Front Mic Playback Switch", 0x0b, 0x01, HDA_INPUT), |
11380 | HDA_CODEC_VOLUME("Front Mic Boost", 0x19, 0, HDA_INPUT), | 11402 | HDA_CODEC_VOLUME("Front Mic Boost Volume", 0x19, 0, HDA_INPUT), |
11381 | { } /* end */ | 11403 | { } /* end */ |
11382 | }; | 11404 | }; |
11383 | 11405 | ||
@@ -11445,10 +11467,10 @@ static struct snd_kcontrol_new alc262_tyan_mixer[] = { | |||
11445 | HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x02, HDA_INPUT), | 11467 | HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x02, HDA_INPUT), |
11446 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), | 11468 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), |
11447 | HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), | 11469 | HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), |
11448 | HDA_CODEC_VOLUME("Mic Boost", 0x18, 0, HDA_INPUT), | 11470 | HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), |
11449 | HDA_CODEC_VOLUME("Front Mic Playback Volume", 0x0b, 0x01, HDA_INPUT), | 11471 | HDA_CODEC_VOLUME("Front Mic Playback Volume", 0x0b, 0x01, HDA_INPUT), |
11450 | HDA_CODEC_MUTE("Front Mic Playback Switch", 0x0b, 0x01, HDA_INPUT), | 11472 | HDA_CODEC_MUTE("Front Mic Playback Switch", 0x0b, 0x01, HDA_INPUT), |
11451 | HDA_CODEC_VOLUME("Front Mic Boost", 0x19, 0, HDA_INPUT), | 11473 | HDA_CODEC_VOLUME("Front Mic Boost Volume", 0x19, 0, HDA_INPUT), |
11452 | { } /* end */ | 11474 | { } /* end */ |
11453 | }; | 11475 | }; |
11454 | 11476 | ||
@@ -11632,7 +11654,7 @@ static struct snd_kcontrol_new alc262_nec_mixer[] = { | |||
11632 | 11654 | ||
11633 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), | 11655 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), |
11634 | HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), | 11656 | HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), |
11635 | HDA_CODEC_VOLUME("Mic Boost", 0x18, 0, HDA_INPUT), | 11657 | HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), |
11636 | 11658 | ||
11637 | HDA_CODEC_VOLUME("Headphone Playback Volume", 0x0d, 0x0, HDA_OUTPUT), | 11659 | HDA_CODEC_VOLUME("Headphone Playback Volume", 0x0d, 0x0, HDA_OUTPUT), |
11638 | HDA_CODEC_MUTE("Headphone Playback Switch", 0x15, 0x0, HDA_OUTPUT), | 11660 | HDA_CODEC_MUTE("Headphone Playback Switch", 0x15, 0x0, HDA_OUTPUT), |
@@ -11687,7 +11709,7 @@ static struct hda_input_mux alc262_fujitsu_capture_source = { | |||
11687 | .num_items = 3, | 11709 | .num_items = 3, |
11688 | .items = { | 11710 | .items = { |
11689 | { "Mic", 0x0 }, | 11711 | { "Mic", 0x0 }, |
11690 | { "Int Mic", 0x1 }, | 11712 | { "Internal Mic", 0x1 }, |
11691 | { "CD", 0x4 }, | 11713 | { "CD", 0x4 }, |
11692 | }, | 11714 | }, |
11693 | }; | 11715 | }; |
@@ -11839,12 +11861,12 @@ static struct snd_kcontrol_new alc262_fujitsu_mixer[] = { | |||
11839 | }, | 11861 | }, |
11840 | HDA_CODEC_VOLUME("CD Playback Volume", 0x0b, 0x04, HDA_INPUT), | 11862 | HDA_CODEC_VOLUME("CD Playback Volume", 0x0b, 0x04, HDA_INPUT), |
11841 | HDA_CODEC_MUTE("CD Playback Switch", 0x0b, 0x04, HDA_INPUT), | 11863 | HDA_CODEC_MUTE("CD Playback Switch", 0x0b, 0x04, HDA_INPUT), |
11842 | HDA_CODEC_VOLUME("Mic Boost", 0x18, 0, HDA_INPUT), | 11864 | HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), |
11843 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), | 11865 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), |
11844 | HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), | 11866 | HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), |
11845 | HDA_CODEC_VOLUME("Int Mic Boost", 0x19, 0, HDA_INPUT), | 11867 | HDA_CODEC_VOLUME("Internal Mic Boost Volume", 0x19, 0, HDA_INPUT), |
11846 | HDA_CODEC_VOLUME("Int Mic Playback Volume", 0x0b, 0x1, HDA_INPUT), | 11868 | HDA_CODEC_VOLUME("Internal Mic Playback Volume", 0x0b, 0x1, HDA_INPUT), |
11847 | HDA_CODEC_MUTE("Int Mic Playback Switch", 0x0b, 0x1, HDA_INPUT), | 11869 | HDA_CODEC_MUTE("Internal Mic Playback Switch", 0x0b, 0x1, HDA_INPUT), |
11848 | { } /* end */ | 11870 | { } /* end */ |
11849 | }; | 11871 | }; |
11850 | 11872 | ||
@@ -11875,12 +11897,12 @@ static struct snd_kcontrol_new alc262_lenovo_3000_mixer[] = { | |||
11875 | }, | 11897 | }, |
11876 | HDA_CODEC_VOLUME("CD Playback Volume", 0x0b, 0x04, HDA_INPUT), | 11898 | HDA_CODEC_VOLUME("CD Playback Volume", 0x0b, 0x04, HDA_INPUT), |
11877 | HDA_CODEC_MUTE("CD Playback Switch", 0x0b, 0x04, HDA_INPUT), | 11899 | HDA_CODEC_MUTE("CD Playback Switch", 0x0b, 0x04, HDA_INPUT), |
11878 | HDA_CODEC_VOLUME("Mic Boost", 0x18, 0, HDA_INPUT), | 11900 | HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), |
11879 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), | 11901 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), |
11880 | HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), | 11902 | HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), |
11881 | HDA_CODEC_VOLUME("Int Mic Boost", 0x19, 0, HDA_INPUT), | 11903 | HDA_CODEC_VOLUME("Internal Mic Boost Volume", 0x19, 0, HDA_INPUT), |
11882 | HDA_CODEC_VOLUME("Int Mic Playback Volume", 0x0b, 0x1, HDA_INPUT), | 11904 | HDA_CODEC_VOLUME("Internal Mic Playback Volume", 0x0b, 0x1, HDA_INPUT), |
11883 | HDA_CODEC_MUTE("Int Mic Playback Switch", 0x0b, 0x1, HDA_INPUT), | 11905 | HDA_CODEC_MUTE("Internal Mic Playback Switch", 0x0b, 0x1, HDA_INPUT), |
11884 | { } /* end */ | 11906 | { } /* end */ |
11885 | }; | 11907 | }; |
11886 | 11908 | ||
@@ -11889,10 +11911,10 @@ static struct snd_kcontrol_new alc262_toshiba_rx1_mixer[] = { | |||
11889 | ALC262_HIPPO_MASTER_SWITCH, | 11911 | ALC262_HIPPO_MASTER_SWITCH, |
11890 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), | 11912 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), |
11891 | HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), | 11913 | HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), |
11892 | HDA_CODEC_VOLUME("Mic Boost", 0x18, 0, HDA_INPUT), | 11914 | HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), |
11893 | HDA_CODEC_VOLUME("Front Mic Playback Volume", 0x0b, 0x01, HDA_INPUT), | 11915 | HDA_CODEC_VOLUME("Front Mic Playback Volume", 0x0b, 0x01, HDA_INPUT), |
11894 | HDA_CODEC_MUTE("Front Mic Playback Switch", 0x0b, 0x01, HDA_INPUT), | 11916 | HDA_CODEC_MUTE("Front Mic Playback Switch", 0x0b, 0x01, HDA_INPUT), |
11895 | HDA_CODEC_VOLUME("Front Mic Boost", 0x19, 0, HDA_INPUT), | 11917 | HDA_CODEC_VOLUME("Front Mic Boost Volume", 0x19, 0, HDA_INPUT), |
11896 | { } /* end */ | 11918 | { } /* end */ |
11897 | }; | 11919 | }; |
11898 | 11920 | ||
@@ -11918,8 +11940,8 @@ static struct snd_kcontrol_new alc262_ultra_mixer[] = { | |||
11918 | HDA_BIND_MUTE("Master Playback Switch", 0x0c, 2, HDA_INPUT), | 11940 | HDA_BIND_MUTE("Master Playback Switch", 0x0c, 2, HDA_INPUT), |
11919 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x01, HDA_INPUT), | 11941 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x01, HDA_INPUT), |
11920 | HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x01, HDA_INPUT), | 11942 | HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x01, HDA_INPUT), |
11921 | HDA_CODEC_VOLUME("Mic Boost", 0x19, 0, HDA_INPUT), | 11943 | HDA_CODEC_VOLUME("Mic Boost Volume", 0x19, 0, HDA_INPUT), |
11922 | HDA_CODEC_VOLUME("Headphone Mic Boost", 0x15, 0, HDA_INPUT), | 11944 | HDA_CODEC_VOLUME("Headphone Mic Boost Volume", 0x15, 0, HDA_INPUT), |
11923 | { } /* end */ | 11945 | { } /* end */ |
11924 | }; | 11946 | }; |
11925 | 11947 | ||
@@ -12089,13 +12111,8 @@ static int alc262_auto_create_multi_out_ctls(struct alc_spec *spec, | |||
12089 | spec->multiout.dac_nids = spec->private_dac_nids; | 12111 | spec->multiout.dac_nids = spec->private_dac_nids; |
12090 | spec->multiout.dac_nids[0] = 2; | 12112 | spec->multiout.dac_nids[0] = 2; |
12091 | 12113 | ||
12092 | if (!cfg->speaker_pins[0] && !cfg->hp_pins[0]) | 12114 | pfx = alc_get_line_out_pfx(cfg, true); |
12093 | pfx = "Master"; | 12115 | if (!pfx) |
12094 | else if (cfg->line_out_type == AUTO_PIN_SPEAKER_OUT) | ||
12095 | pfx = "Speaker"; | ||
12096 | else if (cfg->line_out_type == AUTO_PIN_HP_OUT) | ||
12097 | pfx = "Headphone"; | ||
12098 | else | ||
12099 | pfx = "Front"; | 12116 | pfx = "Front"; |
12100 | for (i = 0; i < 2; i++) { | 12117 | for (i = 0; i < 2; i++) { |
12101 | err = alc262_add_out_sw_ctl(spec, cfg->line_out_pins[i], pfx, i); | 12118 | err = alc262_add_out_sw_ctl(spec, cfg->line_out_pins[i], pfx, i); |
@@ -12996,9 +13013,9 @@ static struct snd_kcontrol_new alc268_base_mixer[] = { | |||
12996 | HDA_CODEC_MUTE("Front Playback Switch", 0x14, 0x0, HDA_OUTPUT), | 13013 | HDA_CODEC_MUTE("Front Playback Switch", 0x14, 0x0, HDA_OUTPUT), |
12997 | HDA_CODEC_VOLUME("Headphone Playback Volume", 0x3, 0x0, HDA_OUTPUT), | 13014 | HDA_CODEC_VOLUME("Headphone Playback Volume", 0x3, 0x0, HDA_OUTPUT), |
12998 | HDA_CODEC_MUTE("Headphone Playback Switch", 0x15, 0x0, HDA_OUTPUT), | 13015 | HDA_CODEC_MUTE("Headphone Playback Switch", 0x15, 0x0, HDA_OUTPUT), |
12999 | HDA_CODEC_VOLUME("Mic Boost", 0x18, 0, HDA_INPUT), | 13016 | HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), |
13000 | HDA_CODEC_VOLUME("Front Mic Boost", 0x19, 0, HDA_INPUT), | 13017 | HDA_CODEC_VOLUME("Front Mic Boost Volume", 0x19, 0, HDA_INPUT), |
13001 | HDA_CODEC_VOLUME("Line In Boost", 0x1a, 0, HDA_INPUT), | 13018 | HDA_CODEC_VOLUME("Line In Boost Volume", 0x1a, 0, HDA_INPUT), |
13002 | { } | 13019 | { } |
13003 | }; | 13020 | }; |
13004 | 13021 | ||
@@ -13007,9 +13024,9 @@ static struct snd_kcontrol_new alc268_toshiba_mixer[] = { | |||
13007 | HDA_CODEC_VOLUME("Front Playback Volume", 0x2, 0x0, HDA_OUTPUT), | 13024 | HDA_CODEC_VOLUME("Front Playback Volume", 0x2, 0x0, HDA_OUTPUT), |
13008 | HDA_CODEC_VOLUME("Headphone Playback Volume", 0x3, 0x0, HDA_OUTPUT), | 13025 | HDA_CODEC_VOLUME("Headphone Playback Volume", 0x3, 0x0, HDA_OUTPUT), |
13009 | ALC262_HIPPO_MASTER_SWITCH, | 13026 | ALC262_HIPPO_MASTER_SWITCH, |
13010 | HDA_CODEC_VOLUME("Mic Boost", 0x18, 0, HDA_INPUT), | 13027 | HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), |
13011 | HDA_CODEC_VOLUME("Front Mic Boost", 0x19, 0, HDA_INPUT), | 13028 | HDA_CODEC_VOLUME("Front Mic Boost Volume", 0x19, 0, HDA_INPUT), |
13012 | HDA_CODEC_VOLUME("Line In Boost", 0x1a, 0, HDA_INPUT), | 13029 | HDA_CODEC_VOLUME("Line In Boost Volume", 0x1a, 0, HDA_INPUT), |
13013 | { } | 13030 | { } |
13014 | }; | 13031 | }; |
13015 | 13032 | ||
@@ -13113,9 +13130,9 @@ static struct snd_kcontrol_new alc268_acer_mixer[] = { | |||
13113 | .put = alc268_acer_master_sw_put, | 13130 | .put = alc268_acer_master_sw_put, |
13114 | .private_value = HDA_COMPOSE_AMP_VAL(0x14, 3, 0, HDA_OUTPUT), | 13131 | .private_value = HDA_COMPOSE_AMP_VAL(0x14, 3, 0, HDA_OUTPUT), |
13115 | }, | 13132 | }, |
13116 | HDA_CODEC_VOLUME("Mic Boost", 0x18, 0, HDA_INPUT), | 13133 | HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), |
13117 | HDA_CODEC_VOLUME("Internal Mic Boost", 0x19, 0, HDA_INPUT), | 13134 | HDA_CODEC_VOLUME("Internal Mic Boost Volume", 0x19, 0, HDA_INPUT), |
13118 | HDA_CODEC_VOLUME("Line In Boost", 0x1a, 0, HDA_INPUT), | 13135 | HDA_CODEC_VOLUME("Line In Boost Volume", 0x1a, 0, HDA_INPUT), |
13119 | { } | 13136 | { } |
13120 | }; | 13137 | }; |
13121 | 13138 | ||
@@ -13131,8 +13148,8 @@ static struct snd_kcontrol_new alc268_acer_dmic_mixer[] = { | |||
13131 | .put = alc268_acer_master_sw_put, | 13148 | .put = alc268_acer_master_sw_put, |
13132 | .private_value = HDA_COMPOSE_AMP_VAL(0x14, 3, 0, HDA_OUTPUT), | 13149 | .private_value = HDA_COMPOSE_AMP_VAL(0x14, 3, 0, HDA_OUTPUT), |
13133 | }, | 13150 | }, |
13134 | HDA_CODEC_VOLUME("Mic Boost", 0x18, 0, HDA_INPUT), | 13151 | HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), |
13135 | HDA_CODEC_VOLUME("Line In Boost", 0x1a, 0, HDA_INPUT), | 13152 | HDA_CODEC_VOLUME("Line In Boost Volume", 0x1a, 0, HDA_INPUT), |
13136 | { } | 13153 | { } |
13137 | }; | 13154 | }; |
13138 | 13155 | ||
@@ -13224,8 +13241,8 @@ static struct snd_kcontrol_new alc268_dell_mixer[] = { | |||
13224 | HDA_CODEC_MUTE("Speaker Playback Switch", 0x14, 0x0, HDA_OUTPUT), | 13241 | HDA_CODEC_MUTE("Speaker Playback Switch", 0x14, 0x0, HDA_OUTPUT), |
13225 | HDA_CODEC_VOLUME("Headphone Playback Volume", 0x03, 0x0, HDA_OUTPUT), | 13242 | HDA_CODEC_VOLUME("Headphone Playback Volume", 0x03, 0x0, HDA_OUTPUT), |
13226 | HDA_CODEC_MUTE("Headphone Playback Switch", 0x15, 0x0, HDA_OUTPUT), | 13243 | HDA_CODEC_MUTE("Headphone Playback Switch", 0x15, 0x0, HDA_OUTPUT), |
13227 | HDA_CODEC_VOLUME("Mic Boost", 0x18, 0, HDA_INPUT), | 13244 | HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), |
13228 | HDA_CODEC_VOLUME("Internal Mic Boost", 0x19, 0, HDA_INPUT), | 13245 | HDA_CODEC_VOLUME("Internal Mic Boost Volume", 0x19, 0, HDA_INPUT), |
13229 | { } | 13246 | { } |
13230 | }; | 13247 | }; |
13231 | 13248 | ||
@@ -13258,8 +13275,8 @@ static struct snd_kcontrol_new alc267_quanta_il1_mixer[] = { | |||
13258 | HDA_CODEC_MUTE("Headphone Playback Switch", 0x15, 0x0, HDA_OUTPUT), | 13275 | HDA_CODEC_MUTE("Headphone Playback Switch", 0x15, 0x0, HDA_OUTPUT), |
13259 | HDA_CODEC_VOLUME("Mic Capture Volume", 0x23, 0x0, HDA_OUTPUT), | 13276 | HDA_CODEC_VOLUME("Mic Capture Volume", 0x23, 0x0, HDA_OUTPUT), |
13260 | HDA_BIND_MUTE("Mic Capture Switch", 0x23, 2, HDA_OUTPUT), | 13277 | HDA_BIND_MUTE("Mic Capture Switch", 0x23, 2, HDA_OUTPUT), |
13261 | HDA_CODEC_VOLUME("Ext Mic Boost", 0x18, 0, HDA_INPUT), | 13278 | HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), |
13262 | HDA_CODEC_VOLUME("Int Mic Boost", 0x19, 0, HDA_INPUT), | 13279 | HDA_CODEC_VOLUME("Internal Mic Boost Volume", 0x19, 0, HDA_INPUT), |
13263 | { } | 13280 | { } |
13264 | }; | 13281 | }; |
13265 | 13282 | ||
@@ -14082,10 +14099,10 @@ static struct snd_kcontrol_new alc269_base_mixer[] = { | |||
14082 | HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x02, HDA_INPUT), | 14099 | HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x02, HDA_INPUT), |
14083 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), | 14100 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), |
14084 | HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), | 14101 | HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), |
14085 | HDA_CODEC_VOLUME("Mic Boost", 0x18, 0, HDA_INPUT), | 14102 | HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), |
14086 | HDA_CODEC_VOLUME("Front Mic Playback Volume", 0x0b, 0x01, HDA_INPUT), | 14103 | HDA_CODEC_VOLUME("Front Mic Playback Volume", 0x0b, 0x01, HDA_INPUT), |
14087 | HDA_CODEC_MUTE("Front Mic Playback Switch", 0x0b, 0x01, HDA_INPUT), | 14104 | HDA_CODEC_MUTE("Front Mic Playback Switch", 0x0b, 0x01, HDA_INPUT), |
14088 | HDA_CODEC_VOLUME("Front Mic Boost", 0x19, 0, HDA_INPUT), | 14105 | HDA_CODEC_VOLUME("Front Mic Boost Volume", 0x19, 0, HDA_INPUT), |
14089 | HDA_CODEC_MUTE("Headphone Playback Switch", 0x15, 0x0, HDA_OUTPUT), | 14106 | HDA_CODEC_MUTE("Headphone Playback Switch", 0x15, 0x0, HDA_OUTPUT), |
14090 | HDA_CODEC_MUTE_MONO("Mono Playback Switch", 0x16, 2, 0x0, HDA_OUTPUT), | 14107 | HDA_CODEC_MUTE_MONO("Mono Playback Switch", 0x16, 2, 0x0, HDA_OUTPUT), |
14091 | { } /* end */ | 14108 | { } /* end */ |
@@ -14105,10 +14122,10 @@ static struct snd_kcontrol_new alc269_quanta_fl1_mixer[] = { | |||
14105 | }, | 14122 | }, |
14106 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), | 14123 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), |
14107 | HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), | 14124 | HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), |
14108 | HDA_CODEC_VOLUME("Mic Boost", 0x18, 0, HDA_INPUT), | 14125 | HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), |
14109 | HDA_CODEC_VOLUME("Internal Mic Playback Volume", 0x0b, 0x01, HDA_INPUT), | 14126 | HDA_CODEC_VOLUME("Internal Mic Playback Volume", 0x0b, 0x01, HDA_INPUT), |
14110 | HDA_CODEC_MUTE("Internal Mic Playback Switch", 0x0b, 0x01, HDA_INPUT), | 14127 | HDA_CODEC_MUTE("Internal Mic Playback Switch", 0x0b, 0x01, HDA_INPUT), |
14111 | HDA_CODEC_VOLUME("Internal Mic Boost", 0x19, 0, HDA_INPUT), | 14128 | HDA_CODEC_VOLUME("Internal Mic Boost Volume", 0x19, 0, HDA_INPUT), |
14112 | { } | 14129 | { } |
14113 | }; | 14130 | }; |
14114 | 14131 | ||
@@ -14126,13 +14143,13 @@ static struct snd_kcontrol_new alc269_lifebook_mixer[] = { | |||
14126 | }, | 14143 | }, |
14127 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), | 14144 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), |
14128 | HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), | 14145 | HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), |
14129 | HDA_CODEC_VOLUME("Mic Boost", 0x18, 0, HDA_INPUT), | 14146 | HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), |
14130 | HDA_CODEC_VOLUME("Internal Mic Playback Volume", 0x0b, 0x01, HDA_INPUT), | 14147 | HDA_CODEC_VOLUME("Internal Mic Playback Volume", 0x0b, 0x01, HDA_INPUT), |
14131 | HDA_CODEC_MUTE("Internal Mic Playback Switch", 0x0b, 0x01, HDA_INPUT), | 14148 | HDA_CODEC_MUTE("Internal Mic Playback Switch", 0x0b, 0x01, HDA_INPUT), |
14132 | HDA_CODEC_VOLUME("Internal Mic Boost", 0x19, 0, HDA_INPUT), | 14149 | HDA_CODEC_VOLUME("Internal Mic Boost Volume", 0x19, 0, HDA_INPUT), |
14133 | HDA_CODEC_VOLUME("Dock Mic Playback Volume", 0x0b, 0x03, HDA_INPUT), | 14150 | HDA_CODEC_VOLUME("Dock Mic Playback Volume", 0x0b, 0x03, HDA_INPUT), |
14134 | HDA_CODEC_MUTE("Dock Mic Playback Switch", 0x0b, 0x03, HDA_INPUT), | 14151 | HDA_CODEC_MUTE("Dock Mic Playback Switch", 0x0b, 0x03, HDA_INPUT), |
14135 | HDA_CODEC_VOLUME("Dock Mic Boost", 0x1b, 0, HDA_INPUT), | 14152 | HDA_CODEC_VOLUME("Dock Mic Boost Volume", 0x1b, 0, HDA_INPUT), |
14136 | { } | 14153 | { } |
14137 | }; | 14154 | }; |
14138 | 14155 | ||
@@ -14162,30 +14179,30 @@ static struct snd_kcontrol_new alc269_asus_mixer[] = { | |||
14162 | static struct snd_kcontrol_new alc269_laptop_analog_capture_mixer[] = { | 14179 | static struct snd_kcontrol_new alc269_laptop_analog_capture_mixer[] = { |
14163 | HDA_CODEC_VOLUME("Capture Volume", 0x08, 0x0, HDA_INPUT), | 14180 | HDA_CODEC_VOLUME("Capture Volume", 0x08, 0x0, HDA_INPUT), |
14164 | HDA_CODEC_MUTE("Capture Switch", 0x08, 0x0, HDA_INPUT), | 14181 | HDA_CODEC_MUTE("Capture Switch", 0x08, 0x0, HDA_INPUT), |
14165 | HDA_CODEC_VOLUME("Mic Boost", 0x18, 0, HDA_INPUT), | 14182 | HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), |
14166 | HDA_CODEC_VOLUME("IntMic Boost", 0x19, 0, HDA_INPUT), | 14183 | HDA_CODEC_VOLUME("Internal Mic Boost Volume", 0x19, 0, HDA_INPUT), |
14167 | { } /* end */ | 14184 | { } /* end */ |
14168 | }; | 14185 | }; |
14169 | 14186 | ||
14170 | static struct snd_kcontrol_new alc269_laptop_digital_capture_mixer[] = { | 14187 | static struct snd_kcontrol_new alc269_laptop_digital_capture_mixer[] = { |
14171 | HDA_CODEC_VOLUME("Capture Volume", 0x08, 0x0, HDA_INPUT), | 14188 | HDA_CODEC_VOLUME("Capture Volume", 0x08, 0x0, HDA_INPUT), |
14172 | HDA_CODEC_MUTE("Capture Switch", 0x08, 0x0, HDA_INPUT), | 14189 | HDA_CODEC_MUTE("Capture Switch", 0x08, 0x0, HDA_INPUT), |
14173 | HDA_CODEC_VOLUME("Mic Boost", 0x18, 0, HDA_INPUT), | 14190 | HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), |
14174 | { } /* end */ | 14191 | { } /* end */ |
14175 | }; | 14192 | }; |
14176 | 14193 | ||
14177 | static struct snd_kcontrol_new alc269vb_laptop_analog_capture_mixer[] = { | 14194 | static struct snd_kcontrol_new alc269vb_laptop_analog_capture_mixer[] = { |
14178 | HDA_CODEC_VOLUME("Capture Volume", 0x09, 0x0, HDA_INPUT), | 14195 | HDA_CODEC_VOLUME("Capture Volume", 0x09, 0x0, HDA_INPUT), |
14179 | HDA_CODEC_MUTE("Capture Switch", 0x09, 0x0, HDA_INPUT), | 14196 | HDA_CODEC_MUTE("Capture Switch", 0x09, 0x0, HDA_INPUT), |
14180 | HDA_CODEC_VOLUME("Mic Boost", 0x18, 0, HDA_INPUT), | 14197 | HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), |
14181 | HDA_CODEC_VOLUME("IntMic Boost", 0x19, 0, HDA_INPUT), | 14198 | HDA_CODEC_VOLUME("Internal Mic Boost Volume", 0x19, 0, HDA_INPUT), |
14182 | { } /* end */ | 14199 | { } /* end */ |
14183 | }; | 14200 | }; |
14184 | 14201 | ||
14185 | static struct snd_kcontrol_new alc269vb_laptop_digital_capture_mixer[] = { | 14202 | static struct snd_kcontrol_new alc269vb_laptop_digital_capture_mixer[] = { |
14186 | HDA_CODEC_VOLUME("Capture Volume", 0x09, 0x0, HDA_INPUT), | 14203 | HDA_CODEC_VOLUME("Capture Volume", 0x09, 0x0, HDA_INPUT), |
14187 | HDA_CODEC_MUTE("Capture Switch", 0x09, 0x0, HDA_INPUT), | 14204 | HDA_CODEC_MUTE("Capture Switch", 0x09, 0x0, HDA_INPUT), |
14188 | HDA_CODEC_VOLUME("Mic Boost", 0x18, 0, HDA_INPUT), | 14205 | HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), |
14189 | { } /* end */ | 14206 | { } /* end */ |
14190 | }; | 14207 | }; |
14191 | 14208 | ||
@@ -14804,12 +14821,23 @@ static int alc269_resume(struct hda_codec *codec) | |||
14804 | } | 14821 | } |
14805 | #endif /* SND_HDA_NEEDS_RESUME */ | 14822 | #endif /* SND_HDA_NEEDS_RESUME */ |
14806 | 14823 | ||
14824 | static void alc269_fixup_hweq(struct hda_codec *codec, | ||
14825 | const struct alc_fixup *fix, int pre_init) | ||
14826 | { | ||
14827 | int coef; | ||
14828 | |||
14829 | coef = alc_read_coef_idx(codec, 0x1e); | ||
14830 | alc_write_coef_idx(codec, 0x1e, coef | 0x80); | ||
14831 | } | ||
14832 | |||
14807 | enum { | 14833 | enum { |
14808 | ALC269_FIXUP_SONY_VAIO, | 14834 | ALC269_FIXUP_SONY_VAIO, |
14809 | ALC275_FIX_SONY_VAIO_GPIO2, | 14835 | ALC275_FIX_SONY_VAIO_GPIO2, |
14810 | ALC269_FIXUP_DELL_M101Z, | 14836 | ALC269_FIXUP_DELL_M101Z, |
14811 | ALC269_FIXUP_SKU_IGNORE, | 14837 | ALC269_FIXUP_SKU_IGNORE, |
14812 | ALC269_FIXUP_ASUS_G73JW, | 14838 | ALC269_FIXUP_ASUS_G73JW, |
14839 | ALC269_FIXUP_LENOVO_EAPD, | ||
14840 | ALC275_FIXUP_SONY_HWEQ, | ||
14813 | }; | 14841 | }; |
14814 | 14842 | ||
14815 | static const struct alc_fixup alc269_fixups[] = { | 14843 | static const struct alc_fixup alc269_fixups[] = { |
@@ -14824,6 +14852,7 @@ static const struct alc_fixup alc269_fixups[] = { | |||
14824 | {0x01, AC_VERB_SET_GPIO_MASK, 0x04}, | 14852 | {0x01, AC_VERB_SET_GPIO_MASK, 0x04}, |
14825 | {0x01, AC_VERB_SET_GPIO_DIRECTION, 0x04}, | 14853 | {0x01, AC_VERB_SET_GPIO_DIRECTION, 0x04}, |
14826 | {0x01, AC_VERB_SET_GPIO_DATA, 0x00}, | 14854 | {0x01, AC_VERB_SET_GPIO_DATA, 0x00}, |
14855 | {0x19, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_VREFGRD}, | ||
14827 | { } | 14856 | { } |
14828 | } | 14857 | } |
14829 | }, | 14858 | }, |
@@ -14844,17 +14873,34 @@ static const struct alc_fixup alc269_fixups[] = { | |||
14844 | { } | 14873 | { } |
14845 | } | 14874 | } |
14846 | }, | 14875 | }, |
14876 | [ALC269_FIXUP_LENOVO_EAPD] = { | ||
14877 | .verbs = (const struct hda_verb[]) { | ||
14878 | {0x14, AC_VERB_SET_EAPD_BTLENABLE, 0}, | ||
14879 | {} | ||
14880 | } | ||
14881 | }, | ||
14882 | [ALC275_FIXUP_SONY_HWEQ] = { | ||
14883 | .func = alc269_fixup_hweq, | ||
14884 | .verbs = (const struct hda_verb[]) { | ||
14885 | {0x01, AC_VERB_SET_GPIO_MASK, 0x04}, | ||
14886 | {0x01, AC_VERB_SET_GPIO_DIRECTION, 0x04}, | ||
14887 | {0x01, AC_VERB_SET_GPIO_DATA, 0x00}, | ||
14888 | {0x19, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_VREFGRD}, | ||
14889 | { } | ||
14890 | } | ||
14891 | } | ||
14847 | }; | 14892 | }; |
14848 | 14893 | ||
14849 | static struct snd_pci_quirk alc269_fixup_tbl[] = { | 14894 | static struct snd_pci_quirk alc269_fixup_tbl[] = { |
14850 | SND_PCI_QUIRK(0x104d, 0x9073, "Sony VAIO", ALC275_FIX_SONY_VAIO_GPIO2), | 14895 | SND_PCI_QUIRK(0x104d, 0x9073, "Sony VAIO", ALC275_FIX_SONY_VAIO_GPIO2), |
14851 | SND_PCI_QUIRK(0x104d, 0x907b, "Sony VAIO", ALC275_FIX_SONY_VAIO_GPIO2), | 14896 | SND_PCI_QUIRK(0x104d, 0x907b, "Sony VAIO", ALC275_FIXUP_SONY_HWEQ), |
14852 | SND_PCI_QUIRK(0x104d, 0x9084, "Sony VAIO", ALC275_FIX_SONY_VAIO_GPIO2), | 14897 | SND_PCI_QUIRK(0x104d, 0x9084, "Sony VAIO", ALC275_FIXUP_SONY_HWEQ), |
14853 | SND_PCI_QUIRK_VENDOR(0x104d, "Sony VAIO", ALC269_FIXUP_SONY_VAIO), | 14898 | SND_PCI_QUIRK_VENDOR(0x104d, "Sony VAIO", ALC269_FIXUP_SONY_VAIO), |
14854 | SND_PCI_QUIRK(0x1028, 0x0470, "Dell M101z", ALC269_FIXUP_DELL_M101Z), | 14899 | SND_PCI_QUIRK(0x1028, 0x0470, "Dell M101z", ALC269_FIXUP_DELL_M101Z), |
14855 | SND_PCI_QUIRK(0x17aa, 0x21b8, "Thinkpad Edge 14", ALC269_FIXUP_SKU_IGNORE), | 14900 | SND_PCI_QUIRK(0x17aa, 0x21b8, "Thinkpad Edge 14", ALC269_FIXUP_SKU_IGNORE), |
14856 | SND_PCI_QUIRK(0x17aa, 0x20f2, "Thinkpad SL410/510", ALC269_FIXUP_SKU_IGNORE), | 14901 | SND_PCI_QUIRK(0x17aa, 0x20f2, "Thinkpad SL410/510", ALC269_FIXUP_SKU_IGNORE), |
14857 | SND_PCI_QUIRK(0x1043, 0x1a13, "Asus G73Jw", ALC269_FIXUP_ASUS_G73JW), | 14902 | SND_PCI_QUIRK(0x1043, 0x1a13, "Asus G73Jw", ALC269_FIXUP_ASUS_G73JW), |
14903 | SND_PCI_QUIRK(0x17aa, 0x9e54, "LENOVO NB", ALC269_FIXUP_LENOVO_EAPD), | ||
14858 | {} | 14904 | {} |
14859 | }; | 14905 | }; |
14860 | 14906 | ||
@@ -15889,13 +15935,16 @@ static int alc861_auto_fill_dac_nids(struct hda_codec *codec, | |||
15889 | return 0; | 15935 | return 0; |
15890 | } | 15936 | } |
15891 | 15937 | ||
15892 | static int alc861_create_out_sw(struct hda_codec *codec, const char *pfx, | 15938 | static int __alc861_create_out_sw(struct hda_codec *codec, const char *pfx, |
15893 | hda_nid_t nid, unsigned int chs) | 15939 | hda_nid_t nid, int idx, unsigned int chs) |
15894 | { | 15940 | { |
15895 | return add_pb_sw_ctrl(codec->spec, ALC_CTL_WIDGET_MUTE, pfx, | 15941 | return __add_pb_sw_ctrl(codec->spec, ALC_CTL_WIDGET_MUTE, pfx, idx, |
15896 | HDA_COMPOSE_AMP_VAL(nid, chs, 0, HDA_OUTPUT)); | 15942 | HDA_COMPOSE_AMP_VAL(nid, chs, 0, HDA_OUTPUT)); |
15897 | } | 15943 | } |
15898 | 15944 | ||
15945 | #define alc861_create_out_sw(codec, pfx, nid, chs) \ | ||
15946 | __alc861_create_out_sw(codec, pfx, nid, 0, chs) | ||
15947 | |||
15899 | /* add playback controls from the parsed DAC table */ | 15948 | /* add playback controls from the parsed DAC table */ |
15900 | static int alc861_auto_create_multi_out_ctls(struct hda_codec *codec, | 15949 | static int alc861_auto_create_multi_out_ctls(struct hda_codec *codec, |
15901 | const struct auto_pin_cfg *cfg) | 15950 | const struct auto_pin_cfg *cfg) |
@@ -15904,26 +15953,15 @@ static int alc861_auto_create_multi_out_ctls(struct hda_codec *codec, | |||
15904 | static const char *chname[4] = { | 15953 | static const char *chname[4] = { |
15905 | "Front", "Surround", NULL /*CLFE*/, "Side" | 15954 | "Front", "Surround", NULL /*CLFE*/, "Side" |
15906 | }; | 15955 | }; |
15956 | const char *pfx = alc_get_line_out_pfx(cfg, true); | ||
15907 | hda_nid_t nid; | 15957 | hda_nid_t nid; |
15908 | int i, err; | 15958 | int i, err; |
15909 | 15959 | ||
15910 | if (cfg->line_outs == 1) { | ||
15911 | const char *pfx = NULL; | ||
15912 | if (!cfg->hp_outs) | ||
15913 | pfx = "Master"; | ||
15914 | else if (cfg->line_out_type == AUTO_PIN_SPEAKER_OUT) | ||
15915 | pfx = "Speaker"; | ||
15916 | if (pfx) { | ||
15917 | nid = spec->multiout.dac_nids[0]; | ||
15918 | return alc861_create_out_sw(codec, pfx, nid, 3); | ||
15919 | } | ||
15920 | } | ||
15921 | |||
15922 | for (i = 0; i < cfg->line_outs; i++) { | 15960 | for (i = 0; i < cfg->line_outs; i++) { |
15923 | nid = spec->multiout.dac_nids[i]; | 15961 | nid = spec->multiout.dac_nids[i]; |
15924 | if (!nid) | 15962 | if (!nid) |
15925 | continue; | 15963 | continue; |
15926 | if (i == 2) { | 15964 | if (!pfx && i == 2) { |
15927 | /* Center/LFE */ | 15965 | /* Center/LFE */ |
15928 | err = alc861_create_out_sw(codec, "Center", nid, 1); | 15966 | err = alc861_create_out_sw(codec, "Center", nid, 1); |
15929 | if (err < 0) | 15967 | if (err < 0) |
@@ -15932,7 +15970,10 @@ static int alc861_auto_create_multi_out_ctls(struct hda_codec *codec, | |||
15932 | if (err < 0) | 15970 | if (err < 0) |
15933 | return err; | 15971 | return err; |
15934 | } else { | 15972 | } else { |
15935 | err = alc861_create_out_sw(codec, chname[i], nid, 3); | 15973 | const char *name = pfx; |
15974 | if (!name) | ||
15975 | name = chname[i]; | ||
15976 | err = __alc861_create_out_sw(codec, name, nid, i, 3); | ||
15936 | if (err < 0) | 15977 | if (err < 0) |
15937 | return err; | 15978 | return err; |
15938 | } | 15979 | } |
@@ -16404,8 +16445,8 @@ static struct hda_input_mux alc861vd_capture_source = { | |||
16404 | static struct hda_input_mux alc861vd_dallas_capture_source = { | 16445 | static struct hda_input_mux alc861vd_dallas_capture_source = { |
16405 | .num_items = 2, | 16446 | .num_items = 2, |
16406 | .items = { | 16447 | .items = { |
16407 | { "Ext Mic", 0x0 }, | 16448 | { "Mic", 0x0 }, |
16408 | { "Int Mic", 0x1 }, | 16449 | { "Internal Mic", 0x1 }, |
16409 | }, | 16450 | }, |
16410 | }; | 16451 | }; |
16411 | 16452 | ||
@@ -16484,11 +16525,11 @@ static struct snd_kcontrol_new alc861vd_6st_mixer[] = { | |||
16484 | 16525 | ||
16485 | HDA_CODEC_MUTE("Headphone Playback Switch", 0x1b, 0x0, HDA_OUTPUT), | 16526 | HDA_CODEC_MUTE("Headphone Playback Switch", 0x1b, 0x0, HDA_OUTPUT), |
16486 | 16527 | ||
16487 | HDA_CODEC_VOLUME("Mic Boost", 0x18, 0, HDA_INPUT), | 16528 | HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), |
16488 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), | 16529 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), |
16489 | HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), | 16530 | HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), |
16490 | 16531 | ||
16491 | HDA_CODEC_VOLUME("Front Mic Boost", 0x19, 0, HDA_INPUT), | 16532 | HDA_CODEC_VOLUME("Front Mic Boost Volume", 0x19, 0, HDA_INPUT), |
16492 | HDA_CODEC_VOLUME("Front Mic Playback Volume", 0x0b, 0x1, HDA_INPUT), | 16533 | HDA_CODEC_VOLUME("Front Mic Playback Volume", 0x0b, 0x1, HDA_INPUT), |
16493 | HDA_CODEC_MUTE("Front Mic Playback Switch", 0x0b, 0x1, HDA_INPUT), | 16534 | HDA_CODEC_MUTE("Front Mic Playback Switch", 0x0b, 0x1, HDA_INPUT), |
16494 | 16535 | ||
@@ -16507,11 +16548,11 @@ static struct snd_kcontrol_new alc861vd_3st_mixer[] = { | |||
16507 | 16548 | ||
16508 | HDA_CODEC_MUTE("Headphone Playback Switch", 0x1b, 0x0, HDA_OUTPUT), | 16549 | HDA_CODEC_MUTE("Headphone Playback Switch", 0x1b, 0x0, HDA_OUTPUT), |
16509 | 16550 | ||
16510 | HDA_CODEC_VOLUME("Mic Boost", 0x18, 0, HDA_INPUT), | 16551 | HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), |
16511 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), | 16552 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), |
16512 | HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), | 16553 | HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), |
16513 | 16554 | ||
16514 | HDA_CODEC_VOLUME("Front Mic Boost", 0x19, 0, HDA_INPUT), | 16555 | HDA_CODEC_VOLUME("Front Mic Boost Volume", 0x19, 0, HDA_INPUT), |
16515 | HDA_CODEC_VOLUME("Front Mic Playback Volume", 0x0b, 0x1, HDA_INPUT), | 16556 | HDA_CODEC_VOLUME("Front Mic Playback Volume", 0x0b, 0x1, HDA_INPUT), |
16516 | HDA_CODEC_MUTE("Front Mic Playback Switch", 0x0b, 0x1, HDA_INPUT), | 16557 | HDA_CODEC_MUTE("Front Mic Playback Switch", 0x0b, 0x1, HDA_INPUT), |
16517 | 16558 | ||
@@ -16531,11 +16572,11 @@ static struct snd_kcontrol_new alc861vd_lenovo_mixer[] = { | |||
16531 | 16572 | ||
16532 | HDA_CODEC_MUTE("Headphone Playback Switch", 0x1b, 0x0, HDA_OUTPUT), | 16573 | HDA_CODEC_MUTE("Headphone Playback Switch", 0x1b, 0x0, HDA_OUTPUT), |
16533 | 16574 | ||
16534 | HDA_CODEC_VOLUME("Mic Boost", 0x18, 0, HDA_INPUT), | 16575 | HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), |
16535 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), | 16576 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), |
16536 | HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), | 16577 | HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), |
16537 | 16578 | ||
16538 | HDA_CODEC_VOLUME("Front Mic Boost", 0x19, 0, HDA_INPUT), | 16579 | HDA_CODEC_VOLUME("Front Mic Boost Volume", 0x19, 0, HDA_INPUT), |
16539 | HDA_CODEC_VOLUME("Front Mic Playback Volume", 0x0b, 0x1, HDA_INPUT), | 16580 | HDA_CODEC_VOLUME("Front Mic Playback Volume", 0x0b, 0x1, HDA_INPUT), |
16540 | HDA_CODEC_MUTE("Front Mic Playback Switch", 0x0b, 0x1, HDA_INPUT), | 16581 | HDA_CODEC_MUTE("Front Mic Playback Switch", 0x0b, 0x1, HDA_INPUT), |
16541 | 16582 | ||
@@ -16546,19 +16587,19 @@ static struct snd_kcontrol_new alc861vd_lenovo_mixer[] = { | |||
16546 | }; | 16587 | }; |
16547 | 16588 | ||
16548 | /* Pin assignment: Speaker=0x14, HP = 0x15, | 16589 | /* Pin assignment: Speaker=0x14, HP = 0x15, |
16549 | * Ext Mic=0x18, Int Mic = 0x19, CD = 0x1c, PC Beep = 0x1d | 16590 | * Mic=0x18, Internal Mic = 0x19, CD = 0x1c, PC Beep = 0x1d |
16550 | */ | 16591 | */ |
16551 | static struct snd_kcontrol_new alc861vd_dallas_mixer[] = { | 16592 | static struct snd_kcontrol_new alc861vd_dallas_mixer[] = { |
16552 | HDA_CODEC_VOLUME("Speaker Playback Volume", 0x02, 0x0, HDA_OUTPUT), | 16593 | HDA_CODEC_VOLUME("Speaker Playback Volume", 0x02, 0x0, HDA_OUTPUT), |
16553 | HDA_BIND_MUTE("Speaker Playback Switch", 0x0c, 2, HDA_INPUT), | 16594 | HDA_BIND_MUTE("Speaker Playback Switch", 0x0c, 2, HDA_INPUT), |
16554 | HDA_CODEC_VOLUME("Headphone Playback Volume", 0x03, 0x0, HDA_OUTPUT), | 16595 | HDA_CODEC_VOLUME("Headphone Playback Volume", 0x03, 0x0, HDA_OUTPUT), |
16555 | HDA_BIND_MUTE("Headphone Playback Switch", 0x0d, 2, HDA_INPUT), | 16596 | HDA_BIND_MUTE("Headphone Playback Switch", 0x0d, 2, HDA_INPUT), |
16556 | HDA_CODEC_VOLUME("Ext Mic Boost", 0x18, 0, HDA_INPUT), | 16597 | HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), |
16557 | HDA_CODEC_VOLUME("Ext Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), | 16598 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), |
16558 | HDA_CODEC_MUTE("Ext Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), | 16599 | HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), |
16559 | HDA_CODEC_VOLUME("Int Mic Boost", 0x19, 0, HDA_INPUT), | 16600 | HDA_CODEC_VOLUME("Internal Mic Boost Volume", 0x19, 0, HDA_INPUT), |
16560 | HDA_CODEC_VOLUME("Int Mic Playback Volume", 0x0b, 0x1, HDA_INPUT), | 16601 | HDA_CODEC_VOLUME("Internal Mic Playback Volume", 0x0b, 0x1, HDA_INPUT), |
16561 | HDA_CODEC_MUTE("Int Mic Playback Switch", 0x0b, 0x1, HDA_INPUT), | 16602 | HDA_CODEC_MUTE("Internal Mic Playback Switch", 0x0b, 0x1, HDA_INPUT), |
16562 | { } /* end */ | 16603 | { } /* end */ |
16563 | }; | 16604 | }; |
16564 | 16605 | ||
@@ -16723,18 +16764,6 @@ static struct hda_verb alc861vd_lenovo_unsol_verbs[] = { | |||
16723 | {} | 16764 | {} |
16724 | }; | 16765 | }; |
16725 | 16766 | ||
16726 | static void alc861vd_lenovo_mic_automute(struct hda_codec *codec) | ||
16727 | { | ||
16728 | unsigned int present; | ||
16729 | unsigned char bits; | ||
16730 | |||
16731 | present = snd_hda_jack_detect(codec, 0x18); | ||
16732 | bits = present ? HDA_AMP_MUTE : 0; | ||
16733 | |||
16734 | snd_hda_codec_amp_stereo(codec, 0x0b, HDA_INPUT, 1, | ||
16735 | HDA_AMP_MUTE, bits); | ||
16736 | } | ||
16737 | |||
16738 | static void alc861vd_lenovo_setup(struct hda_codec *codec) | 16767 | static void alc861vd_lenovo_setup(struct hda_codec *codec) |
16739 | { | 16768 | { |
16740 | struct alc_spec *spec = codec->spec; | 16769 | struct alc_spec *spec = codec->spec; |
@@ -16745,7 +16774,7 @@ static void alc861vd_lenovo_setup(struct hda_codec *codec) | |||
16745 | static void alc861vd_lenovo_init_hook(struct hda_codec *codec) | 16774 | static void alc861vd_lenovo_init_hook(struct hda_codec *codec) |
16746 | { | 16775 | { |
16747 | alc_automute_amp(codec); | 16776 | alc_automute_amp(codec); |
16748 | alc861vd_lenovo_mic_automute(codec); | 16777 | alc88x_simple_mic_automute(codec); |
16749 | } | 16778 | } |
16750 | 16779 | ||
16751 | static void alc861vd_lenovo_unsol_event(struct hda_codec *codec, | 16780 | static void alc861vd_lenovo_unsol_event(struct hda_codec *codec, |
@@ -16753,7 +16782,7 @@ static void alc861vd_lenovo_unsol_event(struct hda_codec *codec, | |||
16753 | { | 16782 | { |
16754 | switch (res >> 26) { | 16783 | switch (res >> 26) { |
16755 | case ALC880_MIC_EVENT: | 16784 | case ALC880_MIC_EVENT: |
16756 | alc861vd_lenovo_mic_automute(codec); | 16785 | alc88x_simple_mic_automute(codec); |
16757 | break; | 16786 | break; |
16758 | default: | 16787 | default: |
16759 | alc_automute_amp_unsol_event(codec, res); | 16788 | alc_automute_amp_unsol_event(codec, res); |
@@ -17043,12 +17072,13 @@ static void alc861vd_auto_init_analog_input(struct hda_codec *codec) | |||
17043 | #define alc861vd_idx_to_mixer_switch(nid) ((nid) + 0x0c) | 17072 | #define alc861vd_idx_to_mixer_switch(nid) ((nid) + 0x0c) |
17044 | 17073 | ||
17045 | /* add playback controls from the parsed DAC table */ | 17074 | /* add playback controls from the parsed DAC table */ |
17046 | /* Based on ALC880 version. But ALC861VD has separate, | 17075 | /* Based on ALC880 version. But ALC861VD and ALC887 have separate, |
17047 | * different NIDs for mute/unmute switch and volume control */ | 17076 | * different NIDs for mute/unmute switch and volume control */ |
17048 | static int alc861vd_auto_create_multi_out_ctls(struct alc_spec *spec, | 17077 | static int alc861vd_auto_create_multi_out_ctls(struct alc_spec *spec, |
17049 | const struct auto_pin_cfg *cfg) | 17078 | const struct auto_pin_cfg *cfg) |
17050 | { | 17079 | { |
17051 | static const char *chname[4] = {"Front", "Surround", "CLFE", "Side"}; | 17080 | static const char *chname[4] = {"Front", "Surround", "CLFE", "Side"}; |
17081 | const char *pfx = alc_get_line_out_pfx(cfg, true); | ||
17052 | hda_nid_t nid_v, nid_s; | 17082 | hda_nid_t nid_v, nid_s; |
17053 | int i, err; | 17083 | int i, err; |
17054 | 17084 | ||
@@ -17062,7 +17092,7 @@ static int alc861vd_auto_create_multi_out_ctls(struct alc_spec *spec, | |||
17062 | alc880_dac_to_idx( | 17092 | alc880_dac_to_idx( |
17063 | spec->multiout.dac_nids[i])); | 17093 | spec->multiout.dac_nids[i])); |
17064 | 17094 | ||
17065 | if (i == 2) { | 17095 | if (!pfx && i == 2) { |
17066 | /* Center/LFE */ | 17096 | /* Center/LFE */ |
17067 | err = add_pb_vol_ctrl(spec, ALC_CTL_WIDGET_VOL, | 17097 | err = add_pb_vol_ctrl(spec, ALC_CTL_WIDGET_VOL, |
17068 | "Center", | 17098 | "Center", |
@@ -17089,24 +17119,17 @@ static int alc861vd_auto_create_multi_out_ctls(struct alc_spec *spec, | |||
17089 | if (err < 0) | 17119 | if (err < 0) |
17090 | return err; | 17120 | return err; |
17091 | } else { | 17121 | } else { |
17092 | const char *pfx; | 17122 | const char *name = pfx; |
17093 | if (cfg->line_outs == 1 && | 17123 | if (!name) |
17094 | cfg->line_out_type == AUTO_PIN_SPEAKER_OUT) { | 17124 | name = chname[i]; |
17095 | if (!cfg->hp_pins) | 17125 | err = __add_pb_vol_ctrl(spec, ALC_CTL_WIDGET_VOL, |
17096 | pfx = "Speaker"; | 17126 | name, i, |
17097 | else | ||
17098 | pfx = "PCM"; | ||
17099 | } else | ||
17100 | pfx = chname[i]; | ||
17101 | err = add_pb_vol_ctrl(spec, ALC_CTL_WIDGET_VOL, pfx, | ||
17102 | HDA_COMPOSE_AMP_VAL(nid_v, 3, 0, | 17127 | HDA_COMPOSE_AMP_VAL(nid_v, 3, 0, |
17103 | HDA_OUTPUT)); | 17128 | HDA_OUTPUT)); |
17104 | if (err < 0) | 17129 | if (err < 0) |
17105 | return err; | 17130 | return err; |
17106 | if (cfg->line_outs == 1 && | 17131 | err = __add_pb_sw_ctrl(spec, ALC_CTL_BIND_MUTE, |
17107 | cfg->line_out_type == AUTO_PIN_SPEAKER_OUT) | 17132 | name, i, |
17108 | pfx = "Speaker"; | ||
17109 | err = add_pb_sw_ctrl(spec, ALC_CTL_BIND_MUTE, pfx, | ||
17110 | HDA_COMPOSE_AMP_VAL(nid_s, 3, 2, | 17133 | HDA_COMPOSE_AMP_VAL(nid_s, 3, 2, |
17111 | HDA_INPUT)); | 17134 | HDA_INPUT)); |
17112 | if (err < 0) | 17135 | if (err < 0) |
@@ -17570,13 +17593,13 @@ static struct snd_kcontrol_new alc662_eeepc_p701_mixer[] = { | |||
17570 | HDA_CODEC_VOLUME("Master Playback Volume", 0x02, 0x0, HDA_OUTPUT), | 17593 | HDA_CODEC_VOLUME("Master Playback Volume", 0x02, 0x0, HDA_OUTPUT), |
17571 | ALC262_HIPPO_MASTER_SWITCH, | 17594 | ALC262_HIPPO_MASTER_SWITCH, |
17572 | 17595 | ||
17573 | HDA_CODEC_VOLUME("e-Mic Boost", 0x18, 0, HDA_INPUT), | 17596 | HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), |
17574 | HDA_CODEC_VOLUME("e-Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), | 17597 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), |
17575 | HDA_CODEC_MUTE("e-Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), | 17598 | HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), |
17576 | 17599 | ||
17577 | HDA_CODEC_VOLUME("i-Mic Boost", 0x19, 0, HDA_INPUT), | 17600 | HDA_CODEC_VOLUME("Internal Mic Boost Volume", 0x19, 0, HDA_INPUT), |
17578 | HDA_CODEC_VOLUME("i-Mic Playback Volume", 0x0b, 0x1, HDA_INPUT), | 17601 | HDA_CODEC_VOLUME("Internal Mic Playback Volume", 0x0b, 0x1, HDA_INPUT), |
17579 | HDA_CODEC_MUTE("i-Mic Playback Switch", 0x0b, 0x1, HDA_INPUT), | 17602 | HDA_CODEC_MUTE("Internal Mic Playback Switch", 0x0b, 0x1, HDA_INPUT), |
17580 | { } /* end */ | 17603 | { } /* end */ |
17581 | }; | 17604 | }; |
17582 | 17605 | ||
@@ -17720,8 +17743,8 @@ static struct snd_kcontrol_new alc663_g71v_mixer[] = { | |||
17720 | 17743 | ||
17721 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), | 17744 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), |
17722 | HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), | 17745 | HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), |
17723 | HDA_CODEC_VOLUME("i-Mic Playback Volume", 0x0b, 0x1, HDA_INPUT), | 17746 | HDA_CODEC_VOLUME("Internal Mic Playback Volume", 0x0b, 0x1, HDA_INPUT), |
17724 | HDA_CODEC_MUTE("i-Mic Playback Switch", 0x0b, 0x1, HDA_INPUT), | 17747 | HDA_CODEC_MUTE("Internal Mic Playback Switch", 0x0b, 0x1, HDA_INPUT), |
17725 | { } /* end */ | 17748 | { } /* end */ |
17726 | }; | 17749 | }; |
17727 | 17750 | ||
@@ -17732,8 +17755,8 @@ static struct snd_kcontrol_new alc663_g50v_mixer[] = { | |||
17732 | 17755 | ||
17733 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), | 17756 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), |
17734 | HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), | 17757 | HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), |
17735 | HDA_CODEC_VOLUME("i-Mic Playback Volume", 0x0b, 0x1, HDA_INPUT), | 17758 | HDA_CODEC_VOLUME("Internal Mic Playback Volume", 0x0b, 0x1, HDA_INPUT), |
17736 | HDA_CODEC_MUTE("i-Mic Playback Switch", 0x0b, 0x1, HDA_INPUT), | 17759 | HDA_CODEC_MUTE("Internal Mic Playback Switch", 0x0b, 0x1, HDA_INPUT), |
17737 | HDA_CODEC_VOLUME("Line Playback Volume", 0x0b, 0x02, HDA_INPUT), | 17760 | HDA_CODEC_VOLUME("Line Playback Volume", 0x0b, 0x02, HDA_INPUT), |
17738 | HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x02, HDA_INPUT), | 17761 | HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x02, HDA_INPUT), |
17739 | { } /* end */ | 17762 | { } /* end */ |
@@ -18566,13 +18589,13 @@ static struct snd_kcontrol_new alc662_ecs_mixer[] = { | |||
18566 | HDA_CODEC_VOLUME("Master Playback Volume", 0x02, 0x0, HDA_OUTPUT), | 18589 | HDA_CODEC_VOLUME("Master Playback Volume", 0x02, 0x0, HDA_OUTPUT), |
18567 | ALC262_HIPPO_MASTER_SWITCH, | 18590 | ALC262_HIPPO_MASTER_SWITCH, |
18568 | 18591 | ||
18569 | HDA_CODEC_VOLUME("e-Mic/LineIn Boost", 0x18, 0, HDA_INPUT), | 18592 | HDA_CODEC_VOLUME("Mic/LineIn Boost Volume", 0x18, 0, HDA_INPUT), |
18570 | HDA_CODEC_VOLUME("e-Mic/LineIn Playback Volume", 0x0b, 0x0, HDA_INPUT), | 18593 | HDA_CODEC_VOLUME("Mic/LineIn Playback Volume", 0x0b, 0x0, HDA_INPUT), |
18571 | HDA_CODEC_MUTE("e-Mic/LineIn Playback Switch", 0x0b, 0x0, HDA_INPUT), | 18594 | HDA_CODEC_MUTE("Mic/LineIn Playback Switch", 0x0b, 0x0, HDA_INPUT), |
18572 | 18595 | ||
18573 | HDA_CODEC_VOLUME("i-Mic Boost", 0x19, 0, HDA_INPUT), | 18596 | HDA_CODEC_VOLUME("Internal Mic Boost Volume", 0x19, 0, HDA_INPUT), |
18574 | HDA_CODEC_VOLUME("i-Mic Playback Volume", 0x0b, 0x1, HDA_INPUT), | 18597 | HDA_CODEC_VOLUME("Internal Mic Playback Volume", 0x0b, 0x1, HDA_INPUT), |
18575 | HDA_CODEC_MUTE("i-Mic Playback Switch", 0x0b, 0x1, HDA_INPUT), | 18598 | HDA_CODEC_MUTE("Internal Mic Playback Switch", 0x0b, 0x1, HDA_INPUT), |
18576 | { } /* end */ | 18599 | { } /* end */ |
18577 | }; | 18600 | }; |
18578 | 18601 | ||
@@ -18583,13 +18606,13 @@ static struct snd_kcontrol_new alc272_nc10_mixer[] = { | |||
18583 | HDA_CODEC_VOLUME("Headphone Playback Volume", 0x03, 0x0, HDA_OUTPUT), | 18606 | HDA_CODEC_VOLUME("Headphone Playback Volume", 0x03, 0x0, HDA_OUTPUT), |
18584 | HDA_CODEC_MUTE("Headphone Playback Switch", 0x21, 0x0, HDA_OUTPUT), | 18607 | HDA_CODEC_MUTE("Headphone Playback Switch", 0x21, 0x0, HDA_OUTPUT), |
18585 | 18608 | ||
18586 | HDA_CODEC_VOLUME("Ext Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), | 18609 | HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), |
18587 | HDA_CODEC_MUTE("Ext Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), | 18610 | HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), |
18588 | HDA_CODEC_VOLUME("Ext Mic Boost", 0x18, 0, HDA_INPUT), | 18611 | HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), |
18589 | 18612 | ||
18590 | HDA_CODEC_VOLUME("Int Mic Playback Volume", 0x0b, 0x1, HDA_INPUT), | 18613 | HDA_CODEC_VOLUME("Internal Mic Playback Volume", 0x0b, 0x1, HDA_INPUT), |
18591 | HDA_CODEC_MUTE("Int Mic Playback Switch", 0x0b, 0x1, HDA_INPUT), | 18614 | HDA_CODEC_MUTE("Internal Mic Playback Switch", 0x0b, 0x1, HDA_INPUT), |
18592 | HDA_CODEC_VOLUME("Int Mic Boost", 0x19, 0, HDA_INPUT), | 18615 | HDA_CODEC_VOLUME("Internal Mic Boost Volume", 0x19, 0, HDA_INPUT), |
18593 | { } /* end */ | 18616 | { } /* end */ |
18594 | }; | 18617 | }; |
18595 | 18618 | ||
@@ -19094,20 +19117,24 @@ static int alc662_auto_fill_dac_nids(struct hda_codec *codec, | |||
19094 | return 0; | 19117 | return 0; |
19095 | } | 19118 | } |
19096 | 19119 | ||
19097 | static inline int alc662_add_vol_ctl(struct alc_spec *spec, const char *pfx, | 19120 | static inline int __alc662_add_vol_ctl(struct alc_spec *spec, const char *pfx, |
19098 | hda_nid_t nid, unsigned int chs) | 19121 | hda_nid_t nid, int idx, unsigned int chs) |
19099 | { | 19122 | { |
19100 | return add_pb_vol_ctrl(spec, ALC_CTL_WIDGET_VOL, pfx, | 19123 | return __add_pb_vol_ctrl(spec, ALC_CTL_WIDGET_VOL, pfx, idx, |
19101 | HDA_COMPOSE_AMP_VAL(nid, chs, 0, HDA_OUTPUT)); | 19124 | HDA_COMPOSE_AMP_VAL(nid, chs, 0, HDA_OUTPUT)); |
19102 | } | 19125 | } |
19103 | 19126 | ||
19104 | static inline int alc662_add_sw_ctl(struct alc_spec *spec, const char *pfx, | 19127 | static inline int __alc662_add_sw_ctl(struct alc_spec *spec, const char *pfx, |
19105 | hda_nid_t nid, unsigned int chs) | 19128 | hda_nid_t nid, int idx, unsigned int chs) |
19106 | { | 19129 | { |
19107 | return add_pb_sw_ctrl(spec, ALC_CTL_WIDGET_MUTE, pfx, | 19130 | return __add_pb_sw_ctrl(spec, ALC_CTL_WIDGET_MUTE, pfx, idx, |
19108 | HDA_COMPOSE_AMP_VAL(nid, chs, 0, HDA_INPUT)); | 19131 | HDA_COMPOSE_AMP_VAL(nid, chs, 0, HDA_INPUT)); |
19109 | } | 19132 | } |
19110 | 19133 | ||
19134 | #define alc662_add_vol_ctl(spec, pfx, nid, chs) \ | ||
19135 | __alc662_add_vol_ctl(spec, pfx, nid, 0, chs) | ||
19136 | #define alc662_add_sw_ctl(spec, pfx, nid, chs) \ | ||
19137 | __alc662_add_sw_ctl(spec, pfx, nid, 0, chs) | ||
19111 | #define alc662_add_stereo_vol(spec, pfx, nid) \ | 19138 | #define alc662_add_stereo_vol(spec, pfx, nid) \ |
19112 | alc662_add_vol_ctl(spec, pfx, nid, 3) | 19139 | alc662_add_vol_ctl(spec, pfx, nid, 3) |
19113 | #define alc662_add_stereo_sw(spec, pfx, nid) \ | 19140 | #define alc662_add_stereo_sw(spec, pfx, nid) \ |
@@ -19121,6 +19148,7 @@ static int alc662_auto_create_multi_out_ctls(struct hda_codec *codec, | |||
19121 | static const char *chname[4] = { | 19148 | static const char *chname[4] = { |
19122 | "Front", "Surround", NULL /*CLFE*/, "Side" | 19149 | "Front", "Surround", NULL /*CLFE*/, "Side" |
19123 | }; | 19150 | }; |
19151 | const char *pfx = alc_get_line_out_pfx(cfg, true); | ||
19124 | hda_nid_t nid, mix; | 19152 | hda_nid_t nid, mix; |
19125 | int i, err; | 19153 | int i, err; |
19126 | 19154 | ||
@@ -19131,7 +19159,7 @@ static int alc662_auto_create_multi_out_ctls(struct hda_codec *codec, | |||
19131 | mix = alc662_dac_to_mix(codec, cfg->line_out_pins[i], nid); | 19159 | mix = alc662_dac_to_mix(codec, cfg->line_out_pins[i], nid); |
19132 | if (!mix) | 19160 | if (!mix) |
19133 | continue; | 19161 | continue; |
19134 | if (i == 2) { | 19162 | if (!pfx && i == 2) { |
19135 | /* Center/LFE */ | 19163 | /* Center/LFE */ |
19136 | err = alc662_add_vol_ctl(spec, "Center", nid, 1); | 19164 | err = alc662_add_vol_ctl(spec, "Center", nid, 1); |
19137 | if (err < 0) | 19165 | if (err < 0) |
@@ -19146,22 +19174,13 @@ static int alc662_auto_create_multi_out_ctls(struct hda_codec *codec, | |||
19146 | if (err < 0) | 19174 | if (err < 0) |
19147 | return err; | 19175 | return err; |
19148 | } else { | 19176 | } else { |
19149 | const char *pfx; | 19177 | const char *name = pfx; |
19150 | if (cfg->line_outs == 1 && | 19178 | if (!name) |
19151 | cfg->line_out_type == AUTO_PIN_SPEAKER_OUT) { | 19179 | name = chname[i]; |
19152 | if (cfg->hp_outs) | 19180 | err = __alc662_add_vol_ctl(spec, name, nid, i, 3); |
19153 | pfx = "Speaker"; | ||
19154 | else | ||
19155 | pfx = "PCM"; | ||
19156 | } else | ||
19157 | pfx = chname[i]; | ||
19158 | err = alc662_add_vol_ctl(spec, pfx, nid, 3); | ||
19159 | if (err < 0) | 19181 | if (err < 0) |
19160 | return err; | 19182 | return err; |
19161 | if (cfg->line_outs == 1 && | 19183 | err = __alc662_add_sw_ctl(spec, name, mix, i, 3); |
19162 | cfg->line_out_type == AUTO_PIN_SPEAKER_OUT) | ||
19163 | pfx = "Speaker"; | ||
19164 | err = alc662_add_sw_ctl(spec, pfx, mix, 3); | ||
19165 | if (err < 0) | 19184 | if (err < 0) |
19166 | return err; | 19185 | return err; |
19167 | } | 19186 | } |
@@ -19358,9 +19377,21 @@ static void alc662_auto_init(struct hda_codec *codec) | |||
19358 | alc_inithook(codec); | 19377 | alc_inithook(codec); |
19359 | } | 19378 | } |
19360 | 19379 | ||
19380 | static void alc272_fixup_mario(struct hda_codec *codec, | ||
19381 | const struct alc_fixup *fix, int pre_init) { | ||
19382 | if (snd_hda_override_amp_caps(codec, 0x2, HDA_OUTPUT, | ||
19383 | (0x3b << AC_AMPCAP_OFFSET_SHIFT) | | ||
19384 | (0x3b << AC_AMPCAP_NUM_STEPS_SHIFT) | | ||
19385 | (0x03 << AC_AMPCAP_STEP_SIZE_SHIFT) | | ||
19386 | (0 << AC_AMPCAP_MUTE_SHIFT))) | ||
19387 | printk(KERN_WARNING | ||
19388 | "hda_codec: failed to override amp caps for NID 0x2\n"); | ||
19389 | } | ||
19390 | |||
19361 | enum { | 19391 | enum { |
19362 | ALC662_FIXUP_ASPIRE, | 19392 | ALC662_FIXUP_ASPIRE, |
19363 | ALC662_FIXUP_IDEAPAD, | 19393 | ALC662_FIXUP_IDEAPAD, |
19394 | ALC272_FIXUP_MARIO, | ||
19364 | }; | 19395 | }; |
19365 | 19396 | ||
19366 | static const struct alc_fixup alc662_fixups[] = { | 19397 | static const struct alc_fixup alc662_fixups[] = { |
@@ -19376,6 +19407,9 @@ static const struct alc_fixup alc662_fixups[] = { | |||
19376 | { } | 19407 | { } |
19377 | } | 19408 | } |
19378 | }, | 19409 | }, |
19410 | [ALC272_FIXUP_MARIO] = { | ||
19411 | .func = alc272_fixup_mario, | ||
19412 | } | ||
19379 | }; | 19413 | }; |
19380 | 19414 | ||
19381 | static struct snd_pci_quirk alc662_fixup_tbl[] = { | 19415 | static struct snd_pci_quirk alc662_fixup_tbl[] = { |
@@ -19386,6 +19420,10 @@ static struct snd_pci_quirk alc662_fixup_tbl[] = { | |||
19386 | {} | 19420 | {} |
19387 | }; | 19421 | }; |
19388 | 19422 | ||
19423 | static const struct alc_model_fixup alc662_fixup_models[] = { | ||
19424 | {.id = ALC272_FIXUP_MARIO, .name = "mario"}, | ||
19425 | {} | ||
19426 | }; | ||
19389 | 19427 | ||
19390 | 19428 | ||
19391 | static int patch_alc662(struct hda_codec *codec) | 19429 | static int patch_alc662(struct hda_codec *codec) |
@@ -19485,7 +19523,8 @@ static int patch_alc662(struct hda_codec *codec) | |||
19485 | codec->patch_ops = alc_patch_ops; | 19523 | codec->patch_ops = alc_patch_ops; |
19486 | if (board_config == ALC662_AUTO) { | 19524 | if (board_config == ALC662_AUTO) { |
19487 | spec->init_hook = alc662_auto_init; | 19525 | spec->init_hook = alc662_auto_init; |
19488 | alc_pick_fixup(codec, alc662_fixup_tbl, alc662_fixups, 0); | 19526 | alc_pick_fixup_model(codec, alc662_fixup_models, |
19527 | alc662_fixup_tbl, alc662_fixups, 0); | ||
19489 | } | 19528 | } |
19490 | 19529 | ||
19491 | alc_init_jacks(codec); | 19530 | alc_init_jacks(codec); |
@@ -19612,9 +19651,9 @@ static struct snd_kcontrol_new alc680_base_mixer[] = { | |||
19612 | HDA_CODEC_MUTE("Front Playback Switch", 0x14, 0x0, HDA_OUTPUT), | 19651 | HDA_CODEC_MUTE("Front Playback Switch", 0x14, 0x0, HDA_OUTPUT), |
19613 | HDA_CODEC_VOLUME("Headphone Playback Volume", 0x4, 0x0, HDA_OUTPUT), | 19652 | HDA_CODEC_VOLUME("Headphone Playback Volume", 0x4, 0x0, HDA_OUTPUT), |
19614 | HDA_CODEC_MUTE("Headphone Playback Switch", 0x16, 0x0, HDA_OUTPUT), | 19653 | HDA_CODEC_MUTE("Headphone Playback Switch", 0x16, 0x0, HDA_OUTPUT), |
19615 | HDA_CODEC_VOLUME("Int Mic Boost", 0x12, 0, HDA_INPUT), | 19654 | HDA_CODEC_VOLUME("Internal Mic Boost Volume", 0x12, 0, HDA_INPUT), |
19616 | HDA_CODEC_VOLUME("Mic Boost", 0x18, 0, HDA_INPUT), | 19655 | HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), |
19617 | HDA_CODEC_VOLUME("Line In Boost", 0x19, 0, HDA_INPUT), | 19656 | HDA_CODEC_VOLUME("Line In Boost Volume", 0x19, 0, HDA_INPUT), |
19618 | { } | 19657 | { } |
19619 | }; | 19658 | }; |
19620 | 19659 | ||