Merge branch 'topic/hda' into for-linus

+549 -437
-1
Documentation/sound/alsa/HD-Audio-Models.txt
··· 149 149 acer-aspire-7730g Acer Aspire 7730G 150 150 acer-aspire-8930g Acer Aspire 8930G 151 151 medion Medion Laptops 152 - medion-md2 Medion MD2 153 152 targa-dig Targa/MSI 154 153 targa-2ch-dig Targa/MSI with 2-channel 155 154 targa-8ch-dig Targa/MSI with 8-channel (MSI GX620)
+3
sound/pci/hda/hda_codec.c
··· 4571 4571 } 4572 4572 memset(cfg->hp_pins + cfg->hp_outs, 0, 4573 4573 sizeof(hda_nid_t) * (AUTO_CFG_MAX_OUTS - cfg->hp_outs)); 4574 + if (!cfg->hp_outs) 4575 + cfg->line_out_type = AUTO_PIN_HP_OUT; 4576 + 4574 4577 } 4575 4578 4576 4579 /* sort by sequence */
+36 -36
sound/pci/hda/patch_analog.c
··· 666 666 HDA_CODEC_MUTE("Aux Playback Switch", 0x16, 0x0, HDA_OUTPUT), 667 667 HDA_CODEC_VOLUME("Mic Playback Volume", 0x13, 0x0, HDA_OUTPUT), 668 668 HDA_CODEC_MUTE("Mic Playback Switch", 0x13, 0x0, HDA_OUTPUT), 669 - HDA_CODEC_VOLUME("Mic Boost", 0x0f, 0x0, HDA_OUTPUT), 669 + HDA_CODEC_VOLUME("Mic Boost Volume", 0x0f, 0x0, HDA_OUTPUT), 670 670 HDA_CODEC_VOLUME("Mono Playback Volume", 0x1e, 0x0, HDA_OUTPUT), 671 671 HDA_CODEC_MUTE("Mono Playback Switch", 0x1e, 0x0, HDA_OUTPUT), 672 672 HDA_CODEC_VOLUME("Capture Volume", 0x12, 0x0, HDA_OUTPUT), ··· 729 729 HDA_CODEC_MUTE("Aux Playback Switch", 0x16, 0x0, HDA_OUTPUT), 730 730 HDA_CODEC_VOLUME("Mic Playback Volume", 0x13, 0x0, HDA_OUTPUT), 731 731 HDA_CODEC_MUTE("Mic Playback Switch", 0x13, 0x0, HDA_OUTPUT), 732 - HDA_CODEC_VOLUME("Mic Boost", 0x0f, 0x0, HDA_OUTPUT), 732 + HDA_CODEC_VOLUME("Mic Boost Volume", 0x0f, 0x0, HDA_OUTPUT), 733 733 /* 734 734 HDA_CODEC_VOLUME("Mono Playback Volume", 0x1e, 0x0, HDA_OUTPUT), 735 735 HDA_CODEC_MUTE("Mono Playback Switch", 0x1e, 0x0, HDA_OUTPUT), */ ··· 775 775 HDA_CODEC_MUTE("PCM Playback Switch", 0x03, 0x0, HDA_OUTPUT), 776 776 HDA_CODEC_VOLUME("Mic Playback Volume", 0x13, 0x0, HDA_OUTPUT), 777 777 HDA_CODEC_MUTE("Mic Playback Switch", 0x13, 0x0, HDA_OUTPUT), 778 - HDA_CODEC_VOLUME("Mic Boost", 0x0f, 0x0, HDA_OUTPUT), 778 + HDA_CODEC_VOLUME("Mic Boost Volume", 0x0f, 0x0, HDA_OUTPUT), 779 779 HDA_CODEC_VOLUME("Capture Volume", 0x12, 0x0, HDA_OUTPUT), 780 780 HDA_CODEC_MUTE("Capture Switch", 0x12, 0x0, HDA_OUTPUT), 781 781 { ··· 1358 1358 HDA_CODEC_MUTE("Mic Playback Switch", 0x12, 0x0, HDA_OUTPUT), 1359 1359 HDA_CODEC_VOLUME("Line Playback Volume", 0x13, 0x0, HDA_OUTPUT), 1360 1360 HDA_CODEC_MUTE("Line Playback Switch", 0x13, 0x0, HDA_OUTPUT), 1361 - HDA_CODEC_VOLUME("Mic Boost", 0x0c, 0x0, HDA_OUTPUT), 1361 + HDA_CODEC_VOLUME("Mic Boost Volume", 0x0c, 0x0, HDA_OUTPUT), 1362 1362 HDA_CODEC_VOLUME("Capture Volume", 0x15, 0x0, HDA_OUTPUT), 1363 1363 HDA_CODEC_MUTE("Capture Switch", 0x15, 0x0, HDA_OUTPUT), 1364 1364 { ··· 1515 1515 HDA_CODEC_MUTE("Mic Playback Switch", 0x1c, 0x0, HDA_OUTPUT), 1516 1516 HDA_CODEC_VOLUME("CD Playback Volume", 0x1d, 0x0, HDA_OUTPUT), 1517 1517 HDA_CODEC_MUTE("CD Playback Switch", 0x1d, 0x0, HDA_OUTPUT), 1518 - HDA_CODEC_VOLUME("Front Mic Boost", 0x08, 0x0, HDA_INPUT), 1519 - HDA_CODEC_VOLUME("Mic Boost", 0x18, 0x0, HDA_INPUT), 1518 + HDA_CODEC_VOLUME("Front Mic Boost Volume", 0x08, 0x0, HDA_INPUT), 1519 + HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0x0, HDA_INPUT), 1520 1520 HDA_CODEC_VOLUME("Capture Volume", 0x15, 0x0, HDA_OUTPUT), 1521 1521 HDA_CODEC_MUTE("Capture Switch", 0x15, 0x0, HDA_OUTPUT), 1522 1522 { ··· 1726 1726 HDA_CODEC_VOLUME("CD Playback Volume", 0x1d, 0x0, HDA_OUTPUT), 1727 1727 HDA_CODEC_MUTE("CD Playback Switch", 0x1d, 0x0, HDA_OUTPUT), 1728 1728 #endif 1729 - HDA_CODEC_VOLUME("Mic Boost", 0x08, 0x0, HDA_INPUT), 1730 - HDA_CODEC_VOLUME("Internal Mic Boost", 0x18, 0x0, HDA_INPUT), 1729 + HDA_CODEC_VOLUME("Mic Boost Volume", 0x08, 0x0, HDA_INPUT), 1730 + HDA_CODEC_VOLUME("Internal Mic Boost Volume", 0x18, 0x0, HDA_INPUT), 1731 1731 HDA_CODEC_VOLUME("Capture Volume", 0x15, 0x0, HDA_OUTPUT), 1732 1732 HDA_CODEC_MUTE("Capture Switch", 0x15, 0x0, HDA_OUTPUT), 1733 1733 { ··· 1774 1774 HDA_CODEC_MUTE("Mic Playback Switch", 0x12, 0x0, HDA_OUTPUT), 1775 1775 HDA_CODEC_VOLUME("CD Playback Volume", 0x1d, 0x0, HDA_OUTPUT), 1776 1776 HDA_CODEC_MUTE("CD Playback Switch", 0x1d, 0x0, HDA_OUTPUT), 1777 - HDA_CODEC_VOLUME("Mic Boost", 0x08, 0x0, HDA_INPUT), 1777 + HDA_CODEC_VOLUME("Mic Boost Volume", 0x08, 0x0, HDA_INPUT), 1778 1778 HDA_CODEC_VOLUME("Capture Volume", 0x15, 0x0, HDA_OUTPUT), 1779 1779 HDA_CODEC_MUTE("Capture Switch", 0x15, 0x0, HDA_OUTPUT), 1780 1780 { ··· 2160 2160 HDA_CODEC_VOLUME("Analog Mix Playback Volume", 0x21, 0x0, HDA_OUTPUT), 2161 2161 HDA_CODEC_MUTE("Analog Mix Playback Switch", 0x21, 0x0, HDA_OUTPUT), 2162 2162 2163 - HDA_CODEC_VOLUME("Front Mic Boost", 0x39, 0x0, HDA_OUTPUT), 2164 - HDA_CODEC_VOLUME("Mic Boost", 0x3c, 0x0, HDA_OUTPUT), 2163 + HDA_CODEC_VOLUME("Front Mic Boost Volume", 0x39, 0x0, HDA_OUTPUT), 2164 + HDA_CODEC_VOLUME("Mic Boost Volume", 0x3c, 0x0, HDA_OUTPUT), 2165 2165 2166 2166 { } /* end */ 2167 2167 }; ··· 2203 2203 HDA_CODEC_VOLUME("Analog Mix Playback Volume", 0x21, 0x0, HDA_OUTPUT), 2204 2204 HDA_CODEC_MUTE("Analog Mix Playback Switch", 0x21, 0x0, HDA_OUTPUT), 2205 2205 2206 - HDA_CODEC_VOLUME("Front Mic Boost", 0x39, 0x0, HDA_OUTPUT), 2207 - HDA_CODEC_VOLUME("Mic Boost", 0x3c, 0x0, HDA_OUTPUT), 2206 + HDA_CODEC_VOLUME("Front Mic Boost Volume", 0x39, 0x0, HDA_OUTPUT), 2207 + HDA_CODEC_VOLUME("Mic Boost Volume", 0x3c, 0x0, HDA_OUTPUT), 2208 2208 { 2209 2209 .iface = SNDRV_CTL_ELEM_IFACE_MIXER, 2210 2210 .name = "Channel Mode", ··· 2232 2232 HDA_CODEC_VOLUME("Analog Mix Playback Volume", 0x21, 0x0, HDA_OUTPUT), 2233 2233 HDA_CODEC_MUTE("Analog Mix Playback Switch", 0x21, 0x0, HDA_OUTPUT), 2234 2234 2235 - HDA_CODEC_VOLUME("Mic Boost", 0x39, 0x0, HDA_OUTPUT), 2235 + HDA_CODEC_VOLUME("Mic Boost Volume", 0x39, 0x0, HDA_OUTPUT), 2236 2236 2237 2237 { 2238 2238 .iface = SNDRV_CTL_ELEM_IFACE_MIXER, ··· 2902 2902 idx = ad1988_pin_idx(pin); 2903 2903 bnid = ad1988_boost_nids[idx]; 2904 2904 if (bnid) { 2905 - sprintf(name, "%s Boost", ctlname); 2905 + sprintf(name, "%s Boost Volume", ctlname); 2906 2906 return add_control(spec, AD_CTL_WIDGET_VOL, name, 2907 2907 HDA_COMPOSE_AMP_VAL(bnid, 3, idx, HDA_OUTPUT)); 2908 2908 ··· 3300 3300 HDA_CODEC_MUTE("Mic Playback Switch", 0x20, 0x01, HDA_INPUT), 3301 3301 HDA_CODEC_VOLUME("CD Playback Volume", 0x20, 0x02, HDA_INPUT), 3302 3302 HDA_CODEC_MUTE("CD Playback Switch", 0x20, 0x02, HDA_INPUT), 3303 - HDA_CODEC_VOLUME("Mic Boost", 0x15, 0x0, HDA_INPUT), 3304 - HDA_CODEC_VOLUME("Front Mic Boost", 0x14, 0x0, HDA_INPUT), 3303 + HDA_CODEC_VOLUME("Mic Boost Volume", 0x15, 0x0, HDA_INPUT), 3304 + HDA_CODEC_VOLUME("Front Mic Boost Volume", 0x14, 0x0, HDA_INPUT), 3305 3305 HDA_CODEC_VOLUME("Capture Volume", 0x0c, 0x0, HDA_OUTPUT), 3306 3306 HDA_CODEC_MUTE("Capture Switch", 0x0c, 0x0, HDA_OUTPUT), 3307 3307 HDA_CODEC_VOLUME_IDX("Capture Volume", 1, 0x0d, 0x0, HDA_OUTPUT), ··· 3499 3499 HDA_CODEC_MUTE("Beep Playback Switch", 0x20, 0x03, HDA_INPUT), 3500 3500 HDA_CODEC_VOLUME("Docking Mic Playback Volume", 0x20, 0x04, HDA_INPUT), 3501 3501 HDA_CODEC_MUTE("Docking Mic Playback Switch", 0x20, 0x04, HDA_INPUT), 3502 - HDA_CODEC_VOLUME("Mic Boost", 0x14, 0x0, HDA_INPUT), 3503 - HDA_CODEC_VOLUME("Internal Mic Boost", 0x15, 0x0, HDA_INPUT), 3504 - HDA_CODEC_VOLUME("Docking Mic Boost", 0x25, 0x0, HDA_OUTPUT), 3502 + HDA_CODEC_VOLUME("Mic Boost Volume", 0x14, 0x0, HDA_INPUT), 3503 + HDA_CODEC_VOLUME("Internal Mic Boost Volume", 0x15, 0x0, HDA_INPUT), 3504 + HDA_CODEC_VOLUME("Dock Mic Boost Volume", 0x25, 0x0, HDA_OUTPUT), 3505 3505 HDA_CODEC_VOLUME("Capture Volume", 0x0c, 0x0, HDA_OUTPUT), 3506 3506 HDA_CODEC_MUTE("Capture Switch", 0x0c, 0x0, HDA_OUTPUT), 3507 3507 HDA_CODEC_VOLUME_IDX("Capture Volume", 1, 0x0d, 0x0, HDA_OUTPUT), ··· 3560 3560 HDA_CODEC_MUTE("Front Mic Playback Switch", 0x20, 0x00, HDA_INPUT), 3561 3561 HDA_CODEC_VOLUME("Line-In Playback Volume", 0x20, 0x01, HDA_INPUT), 3562 3562 HDA_CODEC_MUTE("Line-In Playback Switch", 0x20, 0x01, HDA_INPUT), 3563 - HDA_CODEC_VOLUME("Line-In Boost", 0x15, 0x0, HDA_INPUT), 3564 - HDA_CODEC_VOLUME("Front Mic Boost", 0x14, 0x0, HDA_INPUT), 3563 + HDA_CODEC_VOLUME("Line-In Boost Volume", 0x15, 0x0, HDA_INPUT), 3564 + HDA_CODEC_VOLUME("Front Mic Boost Volume", 0x14, 0x0, HDA_INPUT), 3565 3565 HDA_CODEC_VOLUME("Capture Volume", 0x0c, 0x0, HDA_OUTPUT), 3566 3566 HDA_CODEC_MUTE("Capture Switch", 0x0c, 0x0, HDA_OUTPUT), 3567 3567 HDA_CODEC_VOLUME_IDX("Capture Volume", 1, 0x0d, 0x0, HDA_OUTPUT), ··· 3745 3745 HDA_CODEC_MUTE("Mic Playback Switch", 0x20, 0x04, HDA_INPUT), 3746 3746 HDA_CODEC_VOLUME("CD Playback Volume", 0x20, 0x02, HDA_INPUT), 3747 3747 HDA_CODEC_MUTE("CD Playback Switch", 0x20, 0x02, HDA_INPUT), 3748 - HDA_CODEC_VOLUME("Front Mic Boost", 0x14, 0x0, HDA_INPUT), 3749 - HDA_CODEC_VOLUME("Line Boost", 0x15, 0x0, HDA_INPUT), 3750 - HDA_CODEC_VOLUME("Mic Boost", 0x25, 0x0, HDA_OUTPUT), 3748 + HDA_CODEC_VOLUME("Front Mic Boost Volume", 0x14, 0x0, HDA_INPUT), 3749 + HDA_CODEC_VOLUME("Line Boost Volume", 0x15, 0x0, HDA_INPUT), 3750 + HDA_CODEC_VOLUME("Mic Boost Volume", 0x25, 0x0, HDA_OUTPUT), 3751 3751 HDA_CODEC_VOLUME("Capture Volume", 0x0c, 0x0, HDA_OUTPUT), 3752 3752 HDA_CODEC_MUTE("Capture Switch", 0x0c, 0x0, HDA_OUTPUT), 3753 3753 HDA_CODEC_VOLUME_IDX("Capture Volume", 1, 0x0d, 0x0, HDA_OUTPUT), ··· 3888 3888 HDA_CODEC_MUTE("Internal Mic Playback Switch", 0x20, 0x01, HDA_INPUT), 3889 3889 HDA_CODEC_VOLUME("Dock Mic Playback Volume", 0x20, 0x04, HDA_INPUT), 3890 3890 HDA_CODEC_MUTE("Dock Mic Playback Switch", 0x20, 0x04, HDA_INPUT), 3891 - HDA_CODEC_VOLUME("Mic Boost", 0x14, 0x0, HDA_INPUT), 3892 - HDA_CODEC_VOLUME("Internal Mic Boost", 0x15, 0x0, HDA_INPUT), 3893 - HDA_CODEC_VOLUME("Dock Mic Boost", 0x25, 0x0, HDA_OUTPUT), 3891 + HDA_CODEC_VOLUME("Mic Boost Volume", 0x14, 0x0, HDA_INPUT), 3892 + HDA_CODEC_VOLUME("Internal Mic Boost Volume", 0x15, 0x0, HDA_INPUT), 3893 + HDA_CODEC_VOLUME("Dock Mic Boost Volume", 0x25, 0x0, HDA_OUTPUT), 3894 3894 HDA_CODEC_VOLUME("Capture Volume", 0x0c, 0x0, HDA_OUTPUT), 3895 3895 HDA_CODEC_MUTE("Capture Switch", 0x0c, 0x0, HDA_OUTPUT), 3896 3896 { } /* end */ ··· 4126 4126 HDA_CODEC_MUTE("PCM Playback Switch", 0x20, 0x5, HDA_INPUT), 4127 4127 HDA_CODEC_VOLUME("Mic Playback Volume", 0x20, 0x00, HDA_INPUT), 4128 4128 HDA_CODEC_MUTE("Mic Playback Switch", 0x20, 0x00, HDA_INPUT), 4129 - HDA_CODEC_VOLUME("Mic Boost", 0x14, 0x0, HDA_INPUT), 4130 - HDA_CODEC_VOLUME("Internal Mic Boost", 0x17, 0x0, HDA_INPUT), 4129 + HDA_CODEC_VOLUME("Mic Boost Volume", 0x14, 0x0, HDA_INPUT), 4130 + HDA_CODEC_VOLUME("Internal Mic Boost Volume", 0x17, 0x0, HDA_INPUT), 4131 4131 HDA_CODEC_VOLUME("Capture Volume", 0x0c, 0x0, HDA_OUTPUT), 4132 4132 HDA_CODEC_MUTE("Capture Switch", 0x0c, 0x0, HDA_OUTPUT), 4133 4133 { ··· 4255 4255 HDA_CODEC_MUTE("PCM Playback Switch", 0x20, 0x5, HDA_INPUT), 4256 4256 HDA_CODEC_VOLUME("Capture Volume", 0x0c, 0x0, HDA_OUTPUT), 4257 4257 HDA_CODEC_MUTE("Capture Switch", 0x0c, 0x0, HDA_OUTPUT), 4258 - HDA_CODEC_VOLUME("Mic Boost", 0x25, 0x0, HDA_OUTPUT), 4259 - HDA_CODEC_VOLUME("Internal Mic Boost", 0x17, 0x0, HDA_INPUT), 4258 + HDA_CODEC_VOLUME("Mic Boost Volume", 0x25, 0x0, HDA_OUTPUT), 4259 + HDA_CODEC_VOLUME("Internal Mic Boost Volume", 0x17, 0x0, HDA_INPUT), 4260 4260 { } /* end */ 4261 4261 }; 4262 4262 ··· 4494 4494 HDA_CODEC_VOLUME_MONO("Mono Playback Volume", 0x13, 1, 0x0, HDA_OUTPUT), 4495 4495 HDA_CODEC_MUTE_MONO("Mono Playback Switch", 0x13, 1, 0x0, HDA_OUTPUT), 4496 4496 4497 - HDA_CODEC_VOLUME("Mic Boost", 0x3c, 0x0, HDA_OUTPUT), 4498 - HDA_CODEC_VOLUME("Front Mic Boost", 0x39, 0x0, HDA_OUTPUT), 4499 - HDA_CODEC_VOLUME("Line-In Boost", 0x3a, 0x0, HDA_OUTPUT), 4497 + HDA_CODEC_VOLUME("Mic Boost Volume", 0x3c, 0x0, HDA_OUTPUT), 4498 + HDA_CODEC_VOLUME("Front Mic Boost Volume", 0x39, 0x0, HDA_OUTPUT), 4499 + HDA_CODEC_VOLUME("Line-In Boost Volume", 0x3a, 0x0, HDA_OUTPUT), 4500 4500 HDA_CODEC_VOLUME("Capture Volume", 0x0c, 0x0, HDA_OUTPUT), 4501 4501 HDA_CODEC_MUTE("Capture Switch", 0x0c, 0x0, HDA_OUTPUT), 4502 4502 HDA_CODEC_VOLUME_IDX("Capture Volume", 1, 0x0d, 0x0, HDA_OUTPUT), ··· 4547 4547 HDA_CODEC_MUTE("Line Playback Switch", 0x20, 0x01, HDA_INPUT), 4548 4548 HDA_CODEC_VOLUME("CD Playback Volume", 0x20, 0x06, HDA_INPUT), 4549 4549 HDA_CODEC_MUTE("CD Playback Switch", 0x20, 0x06, HDA_INPUT), 4550 - HDA_CODEC_VOLUME("Digital Mic Boost", 0x1f, 0x0, HDA_INPUT), 4550 + HDA_CODEC_VOLUME("Digital Mic Boost Volume", 0x1f, 0x0, HDA_INPUT), 4551 4551 { } /* end */ 4552 4552 }; 4553 4553
+53 -55
sound/pci/hda/patch_conexant.c
··· 869 869 } 870 870 871 871 static struct snd_kcontrol_new cxt5045_mixers[] = { 872 - HDA_CODEC_VOLUME("Int Mic Capture Volume", 0x1a, 0x01, HDA_INPUT), 873 - HDA_CODEC_MUTE("Int Mic Capture Switch", 0x1a, 0x01, HDA_INPUT), 874 - HDA_CODEC_VOLUME("Ext Mic Capture Volume", 0x1a, 0x02, HDA_INPUT), 875 - HDA_CODEC_MUTE("Ext Mic Capture Switch", 0x1a, 0x02, HDA_INPUT), 872 + HDA_CODEC_VOLUME("Internal Mic Capture Volume", 0x1a, 0x01, HDA_INPUT), 873 + HDA_CODEC_MUTE("Internal Mic Capture Switch", 0x1a, 0x01, HDA_INPUT), 874 + HDA_CODEC_VOLUME("Mic Capture Volume", 0x1a, 0x02, HDA_INPUT), 875 + HDA_CODEC_MUTE("Mic Capture Switch", 0x1a, 0x02, HDA_INPUT), 876 876 HDA_CODEC_VOLUME("PCM Playback Volume", 0x17, 0x0, HDA_INPUT), 877 877 HDA_CODEC_MUTE("PCM Playback Switch", 0x17, 0x0, HDA_INPUT), 878 - HDA_CODEC_VOLUME("Int Mic Playback Volume", 0x17, 0x1, HDA_INPUT), 879 - HDA_CODEC_MUTE("Int Mic Playback Switch", 0x17, 0x1, HDA_INPUT), 880 - HDA_CODEC_VOLUME("Ext Mic Playback Volume", 0x17, 0x2, HDA_INPUT), 881 - HDA_CODEC_MUTE("Ext Mic Playback Switch", 0x17, 0x2, HDA_INPUT), 878 + HDA_CODEC_VOLUME("Internal Mic Playback Volume", 0x17, 0x1, HDA_INPUT), 879 + HDA_CODEC_MUTE("Internal Mic Playback Switch", 0x17, 0x1, HDA_INPUT), 880 + HDA_CODEC_VOLUME("Mic Playback Volume", 0x17, 0x2, HDA_INPUT), 881 + HDA_CODEC_MUTE("Mic Playback Switch", 0x17, 0x2, HDA_INPUT), 882 882 HDA_BIND_VOL("Master Playback Volume", &cxt5045_hp_bind_master_vol), 883 883 { 884 884 .iface = SNDRV_CTL_ELEM_IFACE_MIXER, ··· 910 910 }; 911 911 912 912 static struct snd_kcontrol_new cxt5045_mixers_hp530[] = { 913 - HDA_CODEC_VOLUME("Int Mic Capture Volume", 0x1a, 0x02, HDA_INPUT), 914 - HDA_CODEC_MUTE("Int Mic Capture Switch", 0x1a, 0x02, HDA_INPUT), 915 - HDA_CODEC_VOLUME("Ext Mic Capture Volume", 0x1a, 0x01, HDA_INPUT), 916 - HDA_CODEC_MUTE("Ext Mic Capture Switch", 0x1a, 0x01, HDA_INPUT), 913 + HDA_CODEC_VOLUME("Internal Mic Capture Volume", 0x1a, 0x02, HDA_INPUT), 914 + HDA_CODEC_MUTE("Internal Mic Capture Switch", 0x1a, 0x02, HDA_INPUT), 915 + HDA_CODEC_VOLUME("Mic Capture Volume", 0x1a, 0x01, HDA_INPUT), 916 + HDA_CODEC_MUTE("Mic Capture Switch", 0x1a, 0x01, HDA_INPUT), 917 917 HDA_CODEC_VOLUME("PCM Playback Volume", 0x17, 0x0, HDA_INPUT), 918 918 HDA_CODEC_MUTE("PCM Playback Switch", 0x17, 0x0, HDA_INPUT), 919 - HDA_CODEC_VOLUME("Int Mic Playback Volume", 0x17, 0x2, HDA_INPUT), 920 - HDA_CODEC_MUTE("Int Mic Playback Switch", 0x17, 0x2, HDA_INPUT), 921 - HDA_CODEC_VOLUME("Ext Mic Playback Volume", 0x17, 0x1, HDA_INPUT), 922 - HDA_CODEC_MUTE("Ext Mic Playback Switch", 0x17, 0x1, HDA_INPUT), 919 + HDA_CODEC_VOLUME("Internal Mic Playback Volume", 0x17, 0x2, HDA_INPUT), 920 + HDA_CODEC_MUTE("Internal Mic Playback Switch", 0x17, 0x2, HDA_INPUT), 921 + HDA_CODEC_VOLUME("Mic Playback Volume", 0x17, 0x1, HDA_INPUT), 922 + HDA_CODEC_MUTE("Mic Playback Switch", 0x17, 0x1, HDA_INPUT), 923 923 HDA_BIND_VOL("Master Playback Volume", &cxt5045_hp_bind_master_vol), 924 924 { 925 925 .iface = SNDRV_CTL_ELEM_IFACE_MIXER, ··· 947 947 {0x17, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(2)}, 948 948 {0x17, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(3)}, 949 949 {0x17, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(4)}, 950 - /* Record selector: Int mic */ 950 + /* Record selector: Internal mic */ 951 951 {0x1a, AC_VERB_SET_CONNECT_SEL,0x1}, 952 952 {0x1a, AC_VERB_SET_AMP_GAIN_MUTE, 953 953 AC_AMP_SET_INPUT|AC_AMP_SET_RIGHT|AC_AMP_SET_LEFT|0x17}, ··· 960 960 }; 961 961 962 962 static struct hda_verb cxt5045_benq_init_verbs[] = { 963 - /* Int Mic, Mic */ 963 + /* Internal Mic, Mic */ 964 964 {0x12, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN|AC_PINCTL_VREF_80 }, 965 965 {0x14, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN|AC_PINCTL_VREF_80 }, 966 966 /* Line In,HP, Amp */ ··· 973 973 {0x17, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(2)}, 974 974 {0x17, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(3)}, 975 975 {0x17, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_MUTE(4)}, 976 - /* Record selector: Int mic */ 976 + /* Record selector: Internal mic */ 977 977 {0x1a, AC_VERB_SET_CONNECT_SEL, 0x1}, 978 978 {0x1a, AC_VERB_SET_AMP_GAIN_MUTE, 979 979 AC_AMP_SET_INPUT|AC_AMP_SET_RIGHT|AC_AMP_SET_LEFT|0x17}, ··· 1376 1376 static struct snd_kcontrol_new cxt5047_base_mixers[] = { 1377 1377 HDA_CODEC_VOLUME("Mic Playback Volume", 0x19, 0x02, HDA_INPUT), 1378 1378 HDA_CODEC_MUTE("Mic Playback Switch", 0x19, 0x02, HDA_INPUT), 1379 - HDA_CODEC_VOLUME("Mic Boost", 0x1a, 0x0, HDA_OUTPUT), 1379 + HDA_CODEC_VOLUME("Mic Boost Volume", 0x1a, 0x0, HDA_OUTPUT), 1380 1380 HDA_CODEC_VOLUME("Capture Volume", 0x12, 0x03, HDA_INPUT), 1381 1381 HDA_CODEC_MUTE("Capture Switch", 0x12, 0x03, HDA_INPUT), 1382 1382 HDA_CODEC_VOLUME("PCM Volume", 0x10, 0x00, HDA_OUTPUT), ··· 1796 1796 static struct snd_kcontrol_new cxt5051_capture_mixers[] = { 1797 1797 HDA_CODEC_VOLUME("Internal Mic Volume", 0x14, 0x00, HDA_INPUT), 1798 1798 HDA_CODEC_MUTE("Internal Mic Switch", 0x14, 0x00, HDA_INPUT), 1799 - HDA_CODEC_VOLUME("External Mic Volume", 0x14, 0x01, HDA_INPUT), 1800 - HDA_CODEC_MUTE("External Mic Switch", 0x14, 0x01, HDA_INPUT), 1799 + HDA_CODEC_VOLUME("Mic Volume", 0x14, 0x01, HDA_INPUT), 1800 + HDA_CODEC_MUTE("Mic Switch", 0x14, 0x01, HDA_INPUT), 1801 1801 HDA_CODEC_VOLUME("Docking Mic Volume", 0x15, 0x00, HDA_INPUT), 1802 1802 HDA_CODEC_MUTE("Docking Mic Switch", 0x15, 0x00, HDA_INPUT), 1803 1803 {} ··· 1806 1806 static struct snd_kcontrol_new cxt5051_hp_mixers[] = { 1807 1807 HDA_CODEC_VOLUME("Internal Mic Volume", 0x14, 0x00, HDA_INPUT), 1808 1808 HDA_CODEC_MUTE("Internal Mic Switch", 0x14, 0x00, HDA_INPUT), 1809 - HDA_CODEC_VOLUME("External Mic Volume", 0x15, 0x00, HDA_INPUT), 1810 - HDA_CODEC_MUTE("External Mic Switch", 0x15, 0x00, HDA_INPUT), 1809 + HDA_CODEC_VOLUME("Mic Volume", 0x15, 0x00, HDA_INPUT), 1810 + HDA_CODEC_MUTE("Mic Switch", 0x15, 0x00, HDA_INPUT), 1811 1811 {} 1812 1812 }; 1813 1813 ··· 1826 1826 static struct snd_kcontrol_new cxt5051_toshiba_mixers[] = { 1827 1827 HDA_CODEC_VOLUME("Internal Mic Volume", 0x14, 0x00, HDA_INPUT), 1828 1828 HDA_CODEC_MUTE("Internal Mic Switch", 0x14, 0x00, HDA_INPUT), 1829 - HDA_CODEC_VOLUME("External Mic Volume", 0x14, 0x01, HDA_INPUT), 1830 - HDA_CODEC_MUTE("External Mic Switch", 0x14, 0x01, HDA_INPUT), 1829 + HDA_CODEC_VOLUME("Mic Volume", 0x14, 0x01, HDA_INPUT), 1830 + HDA_CODEC_MUTE("Mic Switch", 0x14, 0x01, HDA_INPUT), 1831 1831 {} 1832 1832 }; 1833 1833 ··· 1847 1847 {0x16, AC_VERB_SET_CONNECT_SEL, 0x00}, 1848 1848 /* DAC1 */ 1849 1849 {0x10, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE}, 1850 - /* Record selector: Int mic */ 1850 + /* Record selector: Internal mic */ 1851 1851 {0x14, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0) | 0x44}, 1852 1852 {0x14, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(1) | 0x44}, 1853 1853 {0x15, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0) | 0x44}, ··· 1874 1874 {0x16, AC_VERB_SET_CONNECT_SEL, 0x00}, 1875 1875 /* DAC1 */ 1876 1876 {0x10, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE}, 1877 - /* Record selector: Int mic */ 1877 + /* Record selector: Internal mic */ 1878 1878 {0x14, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(1) | 0x44}, 1879 1879 {0x14, AC_VERB_SET_CONNECT_SEL, 0x1}, 1880 1880 /* SPDIF route: PCM */ ··· 1904 1904 {0x19, AC_VERB_SET_CONNECT_SEL, 0x00}, 1905 1905 /* DAC1 */ 1906 1906 {0x10, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE}, 1907 - /* Record selector: Int mic */ 1907 + /* Record selector: Internal mic */ 1908 1908 {0x14, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0) | 0x44}, 1909 1909 {0x14, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(1) | 0x44}, 1910 1910 {0x15, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0) | 0x44}, ··· 1932 1932 {0x16, AC_VERB_SET_CONNECT_SEL, 0x00}, 1933 1933 /* DAC1 */ 1934 1934 {0x10, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE}, 1935 - /* Record selector: Int mic */ 1935 + /* Record selector: Internal mic */ 1936 1936 {0x14, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(1) | 0x44}, 1937 1937 {0x14, AC_VERB_SET_CONNECT_SEL, 0x1}, 1938 1938 /* SPDIF route: PCM */ ··· 2111 2111 { 2, NULL }, 2112 2112 }; 2113 2113 2114 + #define HP_PRESENT_PORT_A (1 << 0) 2115 + #define HP_PRESENT_PORT_D (1 << 1) 2116 + #define hp_port_a_present(spec) ((spec)->hp_present & HP_PRESENT_PORT_A) 2117 + #define hp_port_d_present(spec) ((spec)->hp_present & HP_PRESENT_PORT_D) 2118 + 2114 2119 static void cxt5066_update_speaker(struct hda_codec *codec) 2115 2120 { 2116 2121 struct conexant_spec *spec = codec->spec; ··· 2125 2120 spec->hp_present, spec->cur_eapd); 2126 2121 2127 2122 /* Port A (HP) */ 2128 - pinctl = ((spec->hp_present & 1) && spec->cur_eapd) ? PIN_HP : 0; 2123 + pinctl = (hp_port_a_present(spec) && spec->cur_eapd) ? PIN_HP : 0; 2129 2124 snd_hda_codec_write(codec, 0x19, 0, AC_VERB_SET_PIN_WIDGET_CONTROL, 2130 2125 pinctl); 2131 2126 2132 2127 /* Port D (HP/LO) */ 2133 - if (spec->dell_automute) { 2134 - /* DELL AIO Port Rule: PortA> PortD> IntSpk */ 2135 - pinctl = (!(spec->hp_present & 1) && spec->cur_eapd) 2136 - ? PIN_OUT : 0; 2137 - } else if (spec->thinkpad) { 2138 - if (spec->cur_eapd) 2139 - pinctl = spec->port_d_mode; 2140 - /* Mute dock line-out if Port A (laptop HP) is present */ 2141 - if (spec->hp_present& 1) 2128 + pinctl = spec->cur_eapd ? spec->port_d_mode : 0; 2129 + if (spec->dell_automute || spec->thinkpad) { 2130 + /* Mute if Port A is connected */ 2131 + if (hp_port_a_present(spec)) 2142 2132 pinctl = 0; 2143 2133 } else { 2144 - pinctl = ((spec->hp_present & 2) && spec->cur_eapd) 2145 - ? spec->port_d_mode : 0; 2134 + /* Thinkpad/Dell doesn't give pin-D status */ 2135 + if (!hp_port_d_present(spec)) 2136 + pinctl = 0; 2146 2137 } 2147 2138 snd_hda_codec_write(codec, 0x1c, 0, AC_VERB_SET_PIN_WIDGET_CONTROL, 2148 2139 pinctl); ··· 2380 2379 /* Port D */ 2381 2380 portD = snd_hda_jack_detect(codec, 0x1c); 2382 2381 2383 - spec->hp_present = !!(portA); 2384 - spec->hp_present |= portD ? 2 : 0; 2382 + spec->hp_present = portA ? HP_PRESENT_PORT_A : 0; 2383 + spec->hp_present |= portD ? HP_PRESENT_PORT_D : 0; 2385 2384 snd_printdd("CXT5066: hp automute portA=%x portD=%x present=%d\n", 2386 2385 portA, portD, spec->hp_present); 2387 2386 cxt5066_update_speaker(codec); ··· 2729 2728 static struct snd_kcontrol_new cxt5066_vostro_mixers[] = { 2730 2729 { 2731 2730 .iface = SNDRV_CTL_ELEM_IFACE_MIXER, 2732 - .name = "Int Mic Boost Capture Enum", 2731 + .name = "Internal Mic Boost Capture Enum", 2733 2732 .info = cxt5066_mic_boost_mux_enum_info, 2734 2733 .get = cxt5066_mic_boost_mux_enum_get, 2735 2734 .put = cxt5066_mic_boost_mux_enum_put, ··· 2955 2954 {0x22, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT}, 2956 2955 2957 2956 /* internal microphone */ 2958 - {0x23, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN}, /* enable int mic */ 2957 + {0x23, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN}, /* enable internal mic */ 2959 2958 2960 2959 /* EAPD */ 2961 2960 {0x1d, AC_VERB_SET_EAPD_BTLENABLE, 0x2}, /* default on */ ··· 3010 3009 {0x22, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT}, 3011 3010 3012 3011 /* internal microphone */ 3013 - {0x23, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN}, /* enable int mic */ 3012 + {0x23, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_IN}, /* enable internal mic */ 3014 3013 3015 3014 /* EAPD */ 3016 3015 {0x1d, AC_VERB_SET_EAPD_BTLENABLE, 0x2}, /* default on */ ··· 3098 3097 SND_PCI_QUIRK_MASK(0x1025, 0xff00, 0x0400, "Acer", CXT5066_IDEAPAD), 3099 3098 SND_PCI_QUIRK(0x1028, 0x02d8, "Dell Vostro", CXT5066_DELL_VOSTRO), 3100 3099 SND_PCI_QUIRK(0x1028, 0x02f5, "Dell Vostro 320", CXT5066_IDEAPAD), 3100 + SND_PCI_QUIRK(0x1028, 0x0401, "Dell Vostro 1014", CXT5066_DELL_VOSTRO), 3101 3101 SND_PCI_QUIRK(0x1028, 0x0402, "Dell Vostro", CXT5066_DELL_VOSTRO), 3102 3102 SND_PCI_QUIRK(0x1028, 0x0408, "Dell Inspiron One 19T", CXT5066_IDEAPAD), 3103 3103 SND_PCI_QUIRK(0x103c, 0x360b, "HP G60", CXT5066_HP_LAPTOP), ··· 3110 3108 CXT5066_LAPTOP), 3111 3109 SND_PCI_QUIRK(0x152d, 0x0833, "OLPC XO-1.5", CXT5066_OLPC_XO_1_5), 3112 3110 SND_PCI_QUIRK(0x17aa, 0x20f2, "Lenovo T400s", CXT5066_THINKPAD), 3113 - SND_PCI_QUIRK(0x17aa, 0x21b2, "Thinkpad X100e", CXT5066_IDEAPAD), 3114 3111 SND_PCI_QUIRK(0x17aa, 0x21c5, "Thinkpad Edge 13", CXT5066_THINKPAD), 3115 - SND_PCI_QUIRK(0x17aa, 0x21b3, "Thinkpad Edge 13 (197)", CXT5066_IDEAPAD), 3116 - SND_PCI_QUIRK(0x17aa, 0x21b4, "Thinkpad Edge", CXT5066_IDEAPAD), 3117 - SND_PCI_QUIRK(0x17aa, 0x21c8, "Thinkpad Edge 11", CXT5066_IDEAPAD), 3118 3112 SND_PCI_QUIRK(0x17aa, 0x215e, "Lenovo Thinkpad", CXT5066_THINKPAD), 3119 - SND_PCI_QUIRK(0x17aa, 0x38af, "Lenovo G series", CXT5066_IDEAPAD), 3120 - SND_PCI_QUIRK(0x17aa, 0x390a, "Lenovo S10-3t", CXT5066_IDEAPAD), 3121 - SND_PCI_QUIRK(0x17aa, 0x3938, "Lenovo G series (AMD)", CXT5066_IDEAPAD), 3122 - SND_PCI_QUIRK(0x17aa, 0x3a0d, "ideapad", CXT5066_IDEAPAD), 3113 + SND_PCI_QUIRK_VENDOR(0x17aa, "Lenovo", CXT5066_IDEAPAD), /* Fallback for Lenovos without dock mic */ 3123 3114 {} 3124 3115 }; 3125 3116 ··· 3417 3422 AC_VERB_SET_PIN_WIDGET_CONTROL, 3418 3423 present ? 0 : PIN_OUT); 3419 3424 } 3425 + for (i = 0; !present && i < cfg->line_outs; i++) 3426 + if (snd_hda_jack_detect(codec, cfg->line_out_pins[i])) 3427 + present = 1; 3420 3428 for (i = 0; i < cfg->speaker_outs; i++) { 3421 3429 snd_hda_codec_write(codec, cfg->speaker_pins[i], 0, 3422 3430 AC_VERB_SET_PIN_WIDGET_CONTROL,
+81 -11
sound/pci/hda/patch_hdmi.c
··· 31 31 #include <linux/init.h> 32 32 #include <linux/delay.h> 33 33 #include <linux/slab.h> 34 + #include <linux/moduleparam.h> 34 35 #include <sound/core.h> 35 36 #include "hda_codec.h" 36 37 #include "hda_local.h" 38 + 39 + static bool static_hdmi_pcm; 40 + module_param(static_hdmi_pcm, bool, 0644); 41 + MODULE_PARM_DESC(static_hdmi_pcm, "Don't restrict PCM parameters per ELD info"); 37 42 38 43 /* 39 44 * The HDMI/DisplayPort configuration can be highly dynamic. A graphics device ··· 832 827 *codec_pars = *hinfo; 833 828 834 829 eld = &spec->sink_eld[idx]; 835 - if (eld->sad_count > 0) { 830 + if (!static_hdmi_pcm && eld->eld_valid && eld->sad_count > 0) { 836 831 hdmi_eld_update_pcm_info(eld, hinfo, codec_pars); 837 832 if (hinfo->channels_min > hinfo->channels_max || 838 833 !hinfo->rates || !hinfo->formats) ··· 909 904 spec->pin[spec->num_pins] = pin_nid; 910 905 spec->num_pins++; 911 906 912 - /* 913 - * It is assumed that converter nodes come first in the node list and 914 - * hence have been registered and usable now. 915 - */ 916 907 return hdmi_read_pin_conn(codec, pin_nid); 917 908 } 918 909 919 910 static int hdmi_add_cvt(struct hda_codec *codec, hda_nid_t nid) 920 911 { 912 + int i, found_pin = 0; 921 913 struct hdmi_spec *spec = codec->spec; 922 914 923 - if (spec->num_cvts >= MAX_HDMI_CVTS) { 924 - snd_printk(KERN_WARNING 925 - "HDMI: no space for converter %d\n", nid); 926 - return -E2BIG; 915 + for (i = 0; i < spec->num_pins; i++) 916 + if (nid == spec->pin_cvt[i]) { 917 + found_pin = 1; 918 + break; 919 + } 920 + 921 + if (!found_pin) { 922 + snd_printdd("HDMI: Skipping node %d (no connection)\n", nid); 923 + return -EINVAL; 927 924 } 925 + 926 + if (snd_BUG_ON(spec->num_cvts >= MAX_HDMI_CVTS)) 927 + return -E2BIG; 928 928 929 929 spec->cvt[spec->num_cvts] = nid; 930 930 spec->num_cvts++; ··· 941 931 { 942 932 hda_nid_t nid; 943 933 int i, nodes; 934 + int num_tmp_cvts = 0; 935 + hda_nid_t tmp_cvt[MAX_HDMI_CVTS]; 944 936 945 937 nodes = snd_hda_get_sub_nodes(codec, codec->afg, &nid); 946 938 if (!nid || nodes < 0) { ··· 953 941 for (i = 0; i < nodes; i++, nid++) { 954 942 unsigned int caps; 955 943 unsigned int type; 944 + unsigned int config; 956 945 957 946 caps = snd_hda_param_read(codec, nid, AC_PAR_AUDIO_WIDGET_CAP); 958 947 type = get_wcaps_type(caps); ··· 963 950 964 951 switch (type) { 965 952 case AC_WID_AUD_OUT: 966 - hdmi_add_cvt(codec, nid); 953 + if (num_tmp_cvts >= MAX_HDMI_CVTS) { 954 + snd_printk(KERN_WARNING 955 + "HDMI: no space for converter %d\n", nid); 956 + continue; 957 + } 958 + tmp_cvt[num_tmp_cvts] = nid; 959 + num_tmp_cvts++; 967 960 break; 968 961 case AC_WID_PIN: 969 962 caps = snd_hda_param_read(codec, nid, AC_PAR_PIN_CAP); 970 963 if (!(caps & (AC_PINCAP_HDMI | AC_PINCAP_DP))) 971 964 continue; 965 + 966 + config = snd_hda_codec_read(codec, nid, 0, 967 + AC_VERB_GET_CONFIG_DEFAULT, 0); 968 + if (get_defcfg_connect(config) == AC_JACK_PORT_NONE) 969 + continue; 970 + 972 971 hdmi_add_pin(codec, nid); 973 972 break; 974 973 } 975 974 } 975 + 976 + for (i = 0; i < num_tmp_cvts; i++) 977 + hdmi_add_cvt(codec, tmp_cvt[i]); 976 978 977 979 /* 978 980 * G45/IbexPeak don't support EPSS: the unsolicited pin hot plug event ··· 1193 1165 return 0; 1194 1166 } 1195 1167 1168 + static unsigned int channels_2_6_8[] = { 1169 + 2, 6, 8 1170 + }; 1171 + 1172 + static unsigned int channels_2_8[] = { 1173 + 2, 8 1174 + }; 1175 + 1176 + static struct snd_pcm_hw_constraint_list hw_constraints_2_6_8_channels = { 1177 + .count = ARRAY_SIZE(channels_2_6_8), 1178 + .list = channels_2_6_8, 1179 + .mask = 0, 1180 + }; 1181 + 1182 + static struct snd_pcm_hw_constraint_list hw_constraints_2_8_channels = { 1183 + .count = ARRAY_SIZE(channels_2_8), 1184 + .list = channels_2_8, 1185 + .mask = 0, 1186 + }; 1187 + 1196 1188 static int simple_playback_pcm_open(struct hda_pcm_stream *hinfo, 1197 1189 struct hda_codec *codec, 1198 1190 struct snd_pcm_substream *substream) 1199 1191 { 1200 1192 struct hdmi_spec *spec = codec->spec; 1193 + struct snd_pcm_hw_constraint_list *hw_constraints_channels = NULL; 1194 + 1195 + switch (codec->preset->id) { 1196 + case 0x10de0002: 1197 + case 0x10de0003: 1198 + case 0x10de0005: 1199 + case 0x10de0006: 1200 + hw_constraints_channels = &hw_constraints_2_8_channels; 1201 + break; 1202 + case 0x10de0007: 1203 + hw_constraints_channels = &hw_constraints_2_6_8_channels; 1204 + break; 1205 + default: 1206 + break; 1207 + } 1208 + 1209 + if (hw_constraints_channels != NULL) { 1210 + snd_pcm_hw_constraint_list(substream->runtime, 0, 1211 + SNDRV_PCM_HW_PARAM_CHANNELS, 1212 + hw_constraints_channels); 1213 + } 1214 + 1201 1215 return snd_hda_multi_out_dig_open(codec, &spec->multiout); 1202 1216 } 1203 1217 ··· 1602 1532 { .id = 0x1002793c, .name = "RS600 HDMI", .patch = patch_atihdmi }, 1603 1533 { .id = 0x10027919, .name = "RS600 HDMI", .patch = patch_atihdmi }, 1604 1534 { .id = 0x1002791a, .name = "RS690/780 HDMI", .patch = patch_atihdmi }, 1605 - { .id = 0x1002aa01, .name = "R6xx HDMI", .patch = patch_atihdmi }, 1535 + { .id = 0x1002aa01, .name = "R6xx HDMI", .patch = patch_generic_hdmi }, 1606 1536 { .id = 0x10951390, .name = "SiI1390 HDMI", .patch = patch_generic_hdmi }, 1607 1537 { .id = 0x10951392, .name = "SiI1392 HDMI", .patch = patch_generic_hdmi }, 1608 1538 { .id = 0x17e80047, .name = "Chrontel HDMI", .patch = patch_generic_hdmi },
+363 -330
sound/pci/hda/patch_realtek.c
··· 231 231 ALC888_ACER_ASPIRE_8930G, 232 232 ALC888_ACER_ASPIRE_7730G, 233 233 ALC883_MEDION, 234 - ALC883_MEDION_MD2, 235 234 ALC883_MEDION_WIM2160, 236 235 ALC883_LAPTOP_EAPD, 237 236 ALC883_LENOVO_101E_2ch, ··· 1677 1678 u32 val; 1678 1679 }; 1679 1680 1681 + struct alc_model_fixup { 1682 + const int id; 1683 + const char *name; 1684 + }; 1685 + 1680 1686 struct alc_fixup { 1681 1687 unsigned int sku; 1682 1688 const struct alc_pincfg *pins; 1683 1689 const struct hda_verb *verbs; 1690 + void (*func)(struct hda_codec *codec, const struct alc_fixup *fix, 1691 + int pre_init); 1684 1692 }; 1685 1693 1686 - static void alc_pick_fixup(struct hda_codec *codec, 1687 - const struct snd_pci_quirk *quirk, 1688 - const struct alc_fixup *fix, 1689 - int pre_init) 1694 + static void __alc_pick_fixup(struct hda_codec *codec, 1695 + const struct alc_fixup *fix, 1696 + const char *modelname, 1697 + int pre_init) 1690 1698 { 1691 1699 const struct alc_pincfg *cfg; 1692 1700 struct alc_spec *spec; 1693 1701 1694 - quirk = snd_pci_quirk_lookup(codec->bus->pci, quirk); 1695 - if (!quirk) 1696 - return; 1697 - fix += quirk->value; 1698 1702 cfg = fix->pins; 1699 1703 if (pre_init && fix->sku) { 1700 1704 #ifdef CONFIG_SND_DEBUG_VERBOSE 1701 1705 snd_printdd(KERN_INFO "hda_codec: %s: Apply sku override for %s\n", 1702 - codec->chip_name, quirk->name); 1706 + codec->chip_name, modelname); 1703 1707 #endif 1704 1708 spec = codec->spec; 1705 1709 spec->cdefine.sku_cfg = fix->sku; ··· 1711 1709 if (pre_init && cfg) { 1712 1710 #ifdef CONFIG_SND_DEBUG_VERBOSE 1713 1711 snd_printdd(KERN_INFO "hda_codec: %s: Apply pincfg for %s\n", 1714 - codec->chip_name, quirk->name); 1712 + codec->chip_name, modelname); 1715 1713 #endif 1716 1714 for (; cfg->nid; cfg++) 1717 1715 snd_hda_codec_set_pincfg(codec, cfg->nid, cfg->val); ··· 1719 1717 if (!pre_init && fix->verbs) { 1720 1718 #ifdef CONFIG_SND_DEBUG_VERBOSE 1721 1719 snd_printdd(KERN_INFO "hda_codec: %s: Apply fix-verbs for %s\n", 1722 - codec->chip_name, quirk->name); 1720 + codec->chip_name, modelname); 1723 1721 #endif 1724 1722 add_verb(codec->spec, fix->verbs); 1723 + } 1724 + if (fix->func) { 1725 + #ifdef CONFIG_SND_DEBUG_VERBOSE 1726 + snd_printdd(KERN_INFO "hda_codec: %s: Apply fix-func for %s\n", 1727 + codec->chip_name, modelname); 1728 + #endif 1729 + fix->func(codec, fix, pre_init); 1730 + } 1731 + } 1732 + 1733 + static void alc_pick_fixup(struct hda_codec *codec, 1734 + const struct snd_pci_quirk *quirk, 1735 + const struct alc_fixup *fix, 1736 + int pre_init) 1737 + { 1738 + quirk = snd_pci_quirk_lookup(codec->bus->pci, quirk); 1739 + if (quirk) { 1740 + fix += quirk->value; 1741 + #ifdef CONFIG_SND_DEBUG_VERBOSE 1742 + __alc_pick_fixup(codec, fix, quirk->name, pre_init); 1743 + #else 1744 + __alc_pick_fixup(codec, fix, NULL, pre_init); 1745 + #endif 1746 + } 1747 + } 1748 + 1749 + static void alc_pick_fixup_model(struct hda_codec *codec, 1750 + const struct alc_model_fixup *models, 1751 + const struct snd_pci_quirk *quirk, 1752 + const struct alc_fixup *fix, 1753 + int pre_init) 1754 + { 1755 + if (codec->modelname && models) { 1756 + while (models->name) { 1757 + if (!strcmp(codec->modelname, models->name)) { 1758 + fix += models->id; 1759 + break; 1760 + } 1761 + models++; 1762 + } 1763 + __alc_pick_fixup(codec, fix, codec->modelname, pre_init); 1764 + } else { 1765 + alc_pick_fixup(codec, quirk, fix, pre_init); 1725 1766 } 1726 1767 } 1727 1768 ··· 2026 1981 {0x15, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT}, 2027 1982 {0x15, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE}, 2028 1983 {0x15, AC_VERB_SET_CONNECT_SEL, 0x00}, 1984 + {0x15, AC_VERB_SET_EAPD_BTLENABLE, 2}, 2029 1985 { } 2030 1986 }; 2031 1987 ··· 2166 2120 { 2167 2121 .num_items = 5, 2168 2122 .items = { 2169 - { "Ext Mic", 0x0 }, 2123 + { "Mic", 0x0 }, 2170 2124 { "Line In", 0x2 }, 2171 2125 { "CD", 0x4 }, 2172 2126 { "Input Mix", 0xa }, 2173 - { "Int Mic", 0xb }, 2127 + { "Internal Mic", 0xb }, 2174 2128 }, 2175 2129 }, 2176 2130 { 2177 2131 .num_items = 4, 2178 2132 .items = { 2179 - { "Ext Mic", 0x0 }, 2133 + { "Mic", 0x0 }, 2180 2134 { "Line In", 0x2 }, 2181 2135 { "CD", 0x4 }, 2182 2136 { "Input Mix", 0xa }, ··· 2233 2187 HDA_CODEC_VOLUME("Line Playback Volume", 0x0b, 0x02, HDA_INPUT), 2234 2188 HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x02, HDA_INPUT), 2235 2189 HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), 2236 - HDA_CODEC_VOLUME("Mic Boost", 0x18, 0, HDA_INPUT), 2190 + HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), 2237 2191 HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), 2238 2192 { } /* end */ 2239 2193 }; ··· 2251 2205 HDA_CODEC_VOLUME("Line Playback Volume", 0x0b, 0x02, HDA_INPUT), 2252 2206 HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x02, HDA_INPUT), 2253 2207 HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), 2254 - HDA_CODEC_VOLUME("Mic Boost", 0x18, 0, HDA_INPUT), 2208 + HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), 2255 2209 HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), 2256 2210 { } /* end */ 2257 2211 }; ··· 2842 2796 HDA_BIND_MUTE("Speaker Playback Switch", 0x0d, 2, HDA_INPUT), 2843 2797 HDA_CODEC_VOLUME("CD Playback Volume", 0x0b, 0x04, HDA_INPUT), 2844 2798 HDA_CODEC_MUTE("CD Playback Switch", 0x0b, 0x04, HDA_INPUT), 2845 - HDA_CODEC_VOLUME("Ext Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), 2846 - HDA_CODEC_MUTE("Ext Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), 2847 - HDA_CODEC_VOLUME("Int Mic Playback Volume", 0x0b, 0x1, HDA_INPUT), 2848 - HDA_CODEC_MUTE("Int Mic Playback Switch", 0x0b, 0x1, HDA_INPUT), 2799 + HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), 2800 + HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), 2801 + HDA_CODEC_VOLUME("Internal Mic Playback Volume", 0x0b, 0x1, HDA_INPUT), 2802 + HDA_CODEC_MUTE("Internal Mic Playback Switch", 0x0b, 0x1, HDA_INPUT), 2849 2803 { } /* end */ 2850 2804 }; 2851 2805 ··· 3353 3307 }; 3354 3308 3355 3309 /* auto-toggle front mic */ 3356 - static void alc880_uniwill_mic_automute(struct hda_codec *codec) 3310 + static void alc88x_simple_mic_automute(struct hda_codec *codec) 3357 3311 { 3358 3312 unsigned int present; 3359 3313 unsigned char bits; ··· 3375 3329 static void alc880_uniwill_init_hook(struct hda_codec *codec) 3376 3330 { 3377 3331 alc_automute_amp(codec); 3378 - alc880_uniwill_mic_automute(codec); 3332 + alc88x_simple_mic_automute(codec); 3379 3333 } 3380 3334 3381 3335 static void alc880_uniwill_unsol_event(struct hda_codec *codec, ··· 3386 3340 */ 3387 3341 switch (res >> 28) { 3388 3342 case ALC880_MIC_EVENT: 3389 - alc880_uniwill_mic_automute(codec); 3343 + alc88x_simple_mic_automute(codec); 3390 3344 break; 3391 3345 default: 3392 3346 alc_automute_amp_unsol_event(codec, res); ··· 5069 5023 return 0; 5070 5024 } 5071 5025 5026 + static const char *alc_get_line_out_pfx(const struct auto_pin_cfg *cfg, 5027 + bool can_be_master) 5028 + { 5029 + if (!cfg->hp_outs && !cfg->speaker_outs && can_be_master) 5030 + return "Master"; 5031 + 5032 + switch (cfg->line_out_type) { 5033 + case AUTO_PIN_SPEAKER_OUT: 5034 + return "Speaker"; 5035 + case AUTO_PIN_HP_OUT: 5036 + return "Headphone"; 5037 + default: 5038 + if (cfg->line_outs == 1) 5039 + return "PCM"; 5040 + break; 5041 + } 5042 + return NULL; 5043 + } 5044 + 5072 5045 /* add playback controls from the parsed DAC table */ 5073 5046 static int alc880_auto_create_multi_out_ctls(struct alc_spec *spec, 5074 5047 const struct auto_pin_cfg *cfg) ··· 5095 5030 static const char *chname[4] = { 5096 5031 "Front", "Surround", NULL /*CLFE*/, "Side" 5097 5032 }; 5033 + const char *pfx = alc_get_line_out_pfx(cfg, false); 5098 5034 hda_nid_t nid; 5099 5035 int i, err; 5100 5036 ··· 5103 5037 if (!spec->multiout.dac_nids[i]) 5104 5038 continue; 5105 5039 nid = alc880_idx_to_mixer(alc880_dac_to_idx(spec->multiout.dac_nids[i])); 5106 - if (i == 2) { 5040 + if (!pfx && i == 2) { 5107 5041 /* Center/LFE */ 5108 5042 err = add_pb_vol_ctrl(spec, ALC_CTL_WIDGET_VOL, 5109 5043 "Center", ··· 5130 5064 if (err < 0) 5131 5065 return err; 5132 5066 } else { 5133 - const char *pfx; 5134 - if (cfg->line_outs == 1 && 5135 - cfg->line_out_type == AUTO_PIN_SPEAKER_OUT) 5136 - pfx = "Speaker"; 5137 - else 5138 - pfx = chname[i]; 5139 - err = add_pb_vol_ctrl(spec, ALC_CTL_WIDGET_VOL, pfx, 5067 + const char *name = pfx; 5068 + if (!name) 5069 + name = chname[i]; 5070 + err = __add_pb_vol_ctrl(spec, ALC_CTL_WIDGET_VOL, 5071 + name, i, 5140 5072 HDA_COMPOSE_AMP_VAL(nid, 3, 0, 5141 5073 HDA_OUTPUT)); 5142 5074 if (err < 0) 5143 5075 return err; 5144 - err = add_pb_sw_ctrl(spec, ALC_CTL_BIND_MUTE, pfx, 5076 + err = __add_pb_sw_ctrl(spec, ALC_CTL_BIND_MUTE, 5077 + name, i, 5145 5078 HDA_COMPOSE_AMP_VAL(nid, 3, 2, 5146 5079 HDA_INPUT)); 5147 5080 if (err < 0) ··· 5220 5155 { 5221 5156 struct alc_spec *spec = codec->spec; 5222 5157 struct hda_input_mux *imux = &spec->private_imux[0]; 5223 - int i, err, idx, type, type_idx = 0; 5158 + int i, err, idx, type_idx = 0; 5159 + const char *prev_label = NULL; 5224 5160 5225 5161 for (i = 0; i < cfg->num_inputs; i++) { 5226 5162 hda_nid_t pin; ··· 5231 5165 if (!alc_is_input_pin(codec, pin)) 5232 5166 continue; 5233 5167 5234 - type = cfg->inputs[i].type; 5235 - if (i > 0 && type == cfg->inputs[i - 1].type) 5168 + label = hda_get_autocfg_input_label(codec, cfg, i); 5169 + if (prev_label && !strcmp(label, prev_label)) 5236 5170 type_idx++; 5237 5171 else 5238 5172 type_idx = 0; 5239 - label = hda_get_autocfg_input_label(codec, cfg, i); 5173 + prev_label = label; 5174 + 5240 5175 if (mixer) { 5241 5176 idx = get_connection_index(codec, mixer, pin); 5242 5177 if (idx >= 0) { ··· 7473 7406 .num_items = 4, 7474 7407 .items = { 7475 7408 { "Mic", 0x0 }, 7476 - { "Int Mic", 0x1 }, 7409 + { "Internal Mic", 0x1 }, 7477 7410 { "Line", 0x2 }, 7478 7411 { "CD", 0x4 }, 7479 7412 }, ··· 7483 7416 .num_items = 2, 7484 7417 .items = { 7485 7418 { "Mic", 0x0 }, 7486 - { "Int Mic", 0x1 }, 7419 + { "Internal Mic", 0x1 }, 7487 7420 }, 7488 7421 }; 7489 7422 ··· 7918 7851 HDA_CODEC_VOLUME("Line Playback Volume", 0x0b, 0x02, HDA_INPUT), 7919 7852 HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x02, HDA_INPUT), 7920 7853 HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), 7921 - HDA_CODEC_VOLUME("Mic Boost", 0x18, 0, HDA_INPUT), 7854 + HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), 7922 7855 HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), 7923 7856 HDA_CODEC_VOLUME("Front Mic Playback Volume", 0x0b, 0x1, HDA_INPUT), 7924 - HDA_CODEC_VOLUME("Front Mic Boost", 0x19, 0, HDA_INPUT), 7857 + HDA_CODEC_VOLUME("Front Mic Boost Volume", 0x19, 0, HDA_INPUT), 7925 7858 HDA_CODEC_MUTE("Front Mic Playback Switch", 0x0b, 0x1, HDA_INPUT), 7926 7859 { } /* end */ 7927 7860 }; ··· 7945 7878 HDA_CODEC_MUTE ("Line Playback Switch", 0x0b, 0x02, HDA_INPUT), 7946 7879 HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x00, HDA_INPUT), 7947 7880 HDA_CODEC_MUTE ("Mic Playback Switch", 0x0b, 0x00, HDA_INPUT), 7948 - HDA_CODEC_VOLUME("Line Boost", 0x1a, 0x00, HDA_INPUT), 7949 - HDA_CODEC_VOLUME("Mic Boost", 0x18, 0x00, HDA_INPUT), 7881 + HDA_CODEC_VOLUME("Line Boost Volume", 0x1a, 0x00, HDA_INPUT), 7882 + HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0x00, HDA_INPUT), 7950 7883 { } /* end */ 7951 7884 }; 7952 7885 ··· 7963 7896 HDA_CODEC_MUTE ("Line Playback Switch", 0x0b, 0x07, HDA_INPUT), 7964 7897 HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x01, HDA_INPUT), 7965 7898 HDA_CODEC_MUTE ("Mic Playback Switch", 0x0b, 0x01, HDA_INPUT), 7966 - HDA_CODEC_VOLUME("Line Boost", 0x15, 0x00, HDA_INPUT), 7967 - HDA_CODEC_VOLUME("Mic Boost", 0x19, 0x00, HDA_INPUT), 7899 + HDA_CODEC_VOLUME("Line Boost Volume", 0x15, 0x00, HDA_INPUT), 7900 + HDA_CODEC_VOLUME("Mic Boost Volume", 0x19, 0x00, HDA_INPUT), 7968 7901 { } /* end */ 7969 7902 }; 7970 7903 ··· 7979 7912 HDA_BIND_MUTE ("Headphone Playback Switch", 0x0f, 0x02, HDA_INPUT), 7980 7913 HDA_CODEC_VOLUME("Line Playback Volume", 0x0b, 0x07, HDA_INPUT), 7981 7914 HDA_CODEC_MUTE ("Line Playback Switch", 0x0b, 0x07, HDA_INPUT), 7982 - HDA_CODEC_VOLUME("Line Boost", 0x15, 0x00, HDA_INPUT), 7915 + HDA_CODEC_VOLUME("Line Boost Volume", 0x15, 0x00, HDA_INPUT), 7983 7916 { } /* end */ 7984 7917 }; 7985 7918 ··· 7998 7931 HDA_CODEC_VOLUME("Line Playback Volume", 0x0b, 0x02, HDA_INPUT), 7999 7932 HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x02, HDA_INPUT), 8000 7933 HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), 8001 - HDA_CODEC_VOLUME("Mic Boost", 0x18, 0, HDA_INPUT), 7934 + HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), 8002 7935 HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), 8003 7936 { } /* end */ 8004 7937 }; ··· 8013 7946 HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x02, HDA_INPUT), 8014 7947 HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), 8015 7948 HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), 8016 - HDA_CODEC_VOLUME("Mic Boost", 0x18, 0, HDA_INPUT), 7949 + HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), 8017 7950 HDA_CODEC_VOLUME("Front Mic Playback Volume", 0x0b, 0x1, HDA_INPUT), 8018 7951 HDA_CODEC_MUTE("Front Mic Playback Switch", 0x0b, 0x1, HDA_INPUT), 8019 - HDA_CODEC_VOLUME("Front Mic Boost", 0x19, 0, HDA_INPUT), 7952 + HDA_CODEC_VOLUME("Front Mic Boost Volume", 0x19, 0, HDA_INPUT), 8020 7953 { } /* end */ 8021 7954 }; 8022 7955 ··· 8036 7969 HDA_CODEC_MUTE("Mobile Line Playback Switch", 0x0b, 0x03, HDA_INPUT), 8037 7970 HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), 8038 7971 HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), 8039 - HDA_CODEC_VOLUME("Mic Boost", 0x18, 0, HDA_INPUT), 7972 + HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), 8040 7973 { } /* end */ 8041 7974 }; 8042 7975 ··· 8049 7982 HDA_CODEC_VOLUME("Line Playback Volume", 0x0b, 0x02, HDA_INPUT), 8050 7983 HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x02, HDA_INPUT), 8051 7984 HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), 8052 - HDA_CODEC_VOLUME("Mic Boost", 0x18, 0, HDA_INPUT), 7985 + HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), 8053 7986 HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), 8054 7987 { } /* end */ 8055 7988 }; ··· 8830 8763 HDA_BIND_MUTE_MONO("LFE Playback Switch", 0x0e, 2, 2, HDA_INPUT), 8831 8764 HDA_CODEC_MUTE("Headphone Playback Switch", 0x15, 0x0, HDA_OUTPUT), 8832 8765 HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), 8833 - HDA_CODEC_VOLUME("Mic Boost", 0x18, 0, HDA_INPUT), 8766 + HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), 8834 8767 HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), 8835 8768 HDA_CODEC_VOLUME("Front Mic Playback Volume", 0x0b, 0x1, HDA_INPUT), 8836 - HDA_CODEC_VOLUME("Front Mic Boost", 0x19, 0, HDA_INPUT), 8769 + HDA_CODEC_VOLUME("Front Mic Boost Volume", 0x19, 0, HDA_INPUT), 8837 8770 HDA_CODEC_MUTE("Front Mic Playback Switch", 0x0b, 0x1, HDA_INPUT), 8838 8771 { } /* end */ 8839 8772 }; ··· 8844 8777 HDA_CODEC_VOLUME("Speaker Playback Volume", 0x0d, 0x0, HDA_OUTPUT), 8845 8778 HDA_BIND_MUTE("Speaker Playback Switch", 0x0d, 2, HDA_INPUT), 8846 8779 HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), 8847 - HDA_CODEC_VOLUME("Mic Boost", 0x18, 0, HDA_INPUT), 8780 + HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), 8848 8781 HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), 8849 - HDA_CODEC_VOLUME("Int Mic Playback Volume", 0x0b, 0x1, HDA_INPUT), 8850 - HDA_CODEC_VOLUME("Int Mic Boost", 0x19, 0, HDA_INPUT), 8851 - HDA_CODEC_MUTE("Int Mic Playback Switch", 0x0b, 0x1, HDA_INPUT), 8782 + HDA_CODEC_VOLUME("Internal Mic Playback Volume", 0x0b, 0x1, HDA_INPUT), 8783 + HDA_CODEC_VOLUME("Internal Mic Boost Volume", 0x19, 0, HDA_INPUT), 8784 + HDA_CODEC_MUTE("Internal Mic Playback Switch", 0x0b, 0x1, HDA_INPUT), 8852 8785 { } /* end */ 8853 8786 }; 8854 8787 ··· 8858 8791 HDA_CODEC_VOLUME("Speaker Playback Volume", 0x0d, 0x0, HDA_OUTPUT), 8859 8792 HDA_BIND_MUTE("Speaker Playback Switch", 0x0d, 2, HDA_INPUT), 8860 8793 HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), 8861 - HDA_CODEC_VOLUME("Mic Boost", 0x18, 0, HDA_INPUT), 8794 + HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), 8862 8795 HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), 8863 - HDA_CODEC_VOLUME("Int Mic Playback Volume", 0x0b, 0x1, HDA_INPUT), 8864 - HDA_CODEC_VOLUME("Int Mic Boost", 0x19, 0, HDA_INPUT), 8865 - HDA_CODEC_MUTE("Int Mic Playback Switch", 0x0b, 0x1, HDA_INPUT), 8796 + HDA_CODEC_VOLUME("Internal Mic Playback Volume", 0x0b, 0x1, HDA_INPUT), 8797 + HDA_CODEC_VOLUME("Internal Mic Boost Volume", 0x19, 0, HDA_INPUT), 8798 + HDA_CODEC_MUTE("Internal Mic Playback Switch", 0x0b, 0x1, HDA_INPUT), 8866 8799 { } /* end */ 8867 8800 }; 8868 8801 ··· 8875 8808 HDA_CODEC_VOLUME("Line Playback Volume", 0x0b, 0x02, HDA_INPUT), 8876 8809 HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x02, HDA_INPUT), 8877 8810 HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), 8878 - HDA_CODEC_VOLUME("Mic Boost", 0x18, 0, HDA_INPUT), 8811 + HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), 8879 8812 HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), 8880 8813 HDA_CODEC_VOLUME("Front Mic Playback Volume", 0x0b, 0x1, HDA_INPUT), 8881 - HDA_CODEC_VOLUME("Front Mic Boost", 0x19, 0, HDA_INPUT), 8814 + HDA_CODEC_VOLUME("Front Mic Boost Volume", 0x19, 0, HDA_INPUT), 8882 8815 HDA_CODEC_MUTE("Front Mic Playback Switch", 0x0b, 0x1, HDA_INPUT), 8883 8816 { } /* end */ 8884 8817 }; ··· 8898 8831 HDA_CODEC_VOLUME("Line Playback Volume", 0x0b, 0x02, HDA_INPUT), 8899 8832 HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x02, HDA_INPUT), 8900 8833 HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), 8901 - HDA_CODEC_VOLUME("Mic Boost", 0x18, 0, HDA_INPUT), 8834 + HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), 8902 8835 HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), 8903 8836 HDA_CODEC_VOLUME("Front Mic Playback Volume", 0x0b, 0x1, HDA_INPUT), 8904 - HDA_CODEC_VOLUME("Front Mic Boost", 0x19, 0, HDA_INPUT), 8837 + HDA_CODEC_VOLUME("Front Mic Boost Volume", 0x19, 0, HDA_INPUT), 8905 8838 HDA_CODEC_MUTE("Front Mic Playback Switch", 0x0b, 0x1, HDA_INPUT), 8906 8839 { } /* end */ 8907 8840 }; ··· 8922 8855 HDA_CODEC_VOLUME("Line Playback Volume", 0x0b, 0x02, HDA_INPUT), 8923 8856 HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x02, HDA_INPUT), 8924 8857 HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x1, HDA_INPUT), 8925 - HDA_CODEC_VOLUME("Mic Boost", 0x19, 0, HDA_INPUT), 8858 + HDA_CODEC_VOLUME("Mic Boost Volume", 0x19, 0, HDA_INPUT), 8926 8859 HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x1, HDA_INPUT), 8927 8860 HDA_CODEC_VOLUME("Front Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), 8928 - HDA_CODEC_VOLUME("Front Mic Boost", 0x18, 0, HDA_INPUT), 8861 + HDA_CODEC_VOLUME("Front Mic Boost Volume", 0x18, 0, HDA_INPUT), 8929 8862 HDA_CODEC_MUTE("Front Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), 8930 8863 { } /* end */ 8931 8864 }; ··· 8946 8879 HDA_CODEC_VOLUME("Line Playback Volume", 0x0b, 0x02, HDA_INPUT), 8947 8880 HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x02, HDA_INPUT), 8948 8881 HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x3, HDA_INPUT), 8949 - HDA_CODEC_VOLUME("Mic Boost", 0x1b, 0, HDA_INPUT), 8882 + HDA_CODEC_VOLUME("Mic Boost Volume", 0x1b, 0, HDA_INPUT), 8950 8883 HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x3, HDA_INPUT), 8951 8884 HDA_CODEC_VOLUME("Front Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), 8952 - HDA_CODEC_VOLUME("Front Mic Boost", 0x18, 0, HDA_INPUT), 8885 + HDA_CODEC_VOLUME("Front Mic Boost Volume", 0x18, 0, HDA_INPUT), 8953 8886 HDA_CODEC_MUTE("Front Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), 8954 8887 { } /* end */ 8955 8888 }; ··· 8969 8902 HDA_CODEC_VOLUME("Line Playback Volume", 0x0b, 0x02, HDA_INPUT), 8970 8903 HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x02, HDA_INPUT), 8971 8904 HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), 8972 - HDA_CODEC_VOLUME("Mic Boost", 0x18, 0, HDA_INPUT), 8905 + HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), 8973 8906 HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), 8974 8907 HDA_CODEC_VOLUME("Front Mic Playback Volume", 0x0b, 0x1, HDA_INPUT), 8975 - HDA_CODEC_VOLUME("Front Mic Boost", 0x19, 0, HDA_INPUT), 8908 + HDA_CODEC_VOLUME("Front Mic Boost Volume", 0x19, 0, HDA_INPUT), 8976 8909 HDA_CODEC_MUTE("Front Mic Playback Switch", 0x0b, 0x1, HDA_INPUT), 8977 8910 { } /* end */ 8978 8911 }; ··· 8993 8926 HDA_CODEC_VOLUME("Line Playback Volume", 0x0b, 0x02, HDA_INPUT), 8994 8927 HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x02, HDA_INPUT), 8995 8928 HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), 8996 - HDA_CODEC_VOLUME("Mic Boost", 0x18, 0, HDA_INPUT), 8929 + HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), 8997 8930 HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), 8998 8931 { } /* end */ 8999 8932 }; ··· 9006 8939 HDA_CODEC_VOLUME("CD Playback Volume", 0x0b, 0x04, HDA_INPUT), 9007 8940 HDA_CODEC_MUTE("CD Playback Switch", 0x0b, 0x04, HDA_INPUT), 9008 8941 HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), 9009 - HDA_CODEC_VOLUME("Mic Boost", 0x18, 0, HDA_INPUT), 8942 + HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), 9010 8943 HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), 9011 - HDA_CODEC_VOLUME("Int Mic Playback Volume", 0x0b, 0x1, HDA_INPUT), 9012 - HDA_CODEC_VOLUME("Int Mic Boost", 0x19, 0, HDA_INPUT), 9013 - HDA_CODEC_MUTE("Int Mic Playback Switch", 0x0b, 0x1, HDA_INPUT), 8944 + HDA_CODEC_VOLUME("Internal Mic Playback Volume", 0x0b, 0x1, HDA_INPUT), 8945 + HDA_CODEC_VOLUME("Internal Mic Boost Volume", 0x19, 0, HDA_INPUT), 8946 + HDA_CODEC_MUTE("Internal Mic Playback Switch", 0x0b, 0x1, HDA_INPUT), 9014 8947 { } /* end */ 9015 8948 }; 9016 8949 9017 8950 static struct snd_kcontrol_new alc883_targa_8ch_mixer[] = { 9018 8951 HDA_CODEC_VOLUME("Side Playback Volume", 0x0f, 0x0, HDA_OUTPUT), 9019 8952 HDA_BIND_MUTE("Side Playback Switch", 0x0f, 2, HDA_INPUT), 9020 - HDA_CODEC_VOLUME("Int Mic Playback Volume", 0x0b, 0x1, HDA_INPUT), 9021 - HDA_CODEC_VOLUME("Int Mic Boost", 0x19, 0, HDA_INPUT), 9022 - HDA_CODEC_MUTE("Int Mic Playback Switch", 0x0b, 0x1, HDA_INPUT), 8953 + HDA_CODEC_VOLUME("Internal Mic Playback Volume", 0x0b, 0x1, HDA_INPUT), 8954 + HDA_CODEC_VOLUME("Internal Mic Boost Volume", 0x19, 0, HDA_INPUT), 8955 + HDA_CODEC_MUTE("Internal Mic Playback Switch", 0x0b, 0x1, HDA_INPUT), 9023 8956 { } /* end */ 9024 8957 }; 9025 8958 ··· 9030 8963 HDA_BIND_MUTE("Speaker Playback Switch", 0x0d, 2, HDA_INPUT), 9031 8964 HDA_CODEC_MUTE("Headphone Playback Switch", 0x1b, 0x0, HDA_OUTPUT), 9032 8965 HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x1, HDA_INPUT), 9033 - HDA_CODEC_VOLUME("Mic Boost", 0x18, 0, HDA_INPUT), 8966 + HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), 9034 8967 HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x1, HDA_INPUT), 9035 8968 { } /* end */ 9036 8969 }; ··· 9043 8976 HDA_CODEC_MUTE("CD Playback Switch", 0x0b, 0x04, HDA_INPUT), 9044 8977 HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), 9045 8978 HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), 9046 - HDA_CODEC_VOLUME("Int Mic Playback Volume", 0x0b, 0x1, HDA_INPUT), 9047 - HDA_CODEC_MUTE("Int Mic Playback Switch", 0x0b, 0x1, HDA_INPUT), 9048 - { } /* end */ 9049 - }; 9050 - 9051 - static struct snd_kcontrol_new alc883_medion_md2_mixer[] = { 9052 - HDA_CODEC_VOLUME("Front Playback Volume", 0x0c, 0x0, HDA_OUTPUT), 9053 - HDA_CODEC_MUTE("Headphone Playback Switch", 0x14, 0x0, HDA_OUTPUT), 9054 - HDA_CODEC_MUTE("Front Playback Switch", 0x15, 0x0, HDA_OUTPUT), 9055 - HDA_CODEC_VOLUME("CD Playback Volume", 0x0b, 0x04, HDA_INPUT), 9056 - HDA_CODEC_MUTE("CD Playback Switch", 0x0b, 0x04, HDA_INPUT), 9057 - HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), 9058 - HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), 9059 - HDA_CODEC_VOLUME("Line Playback Volume", 0x0b, 0x02, HDA_INPUT), 9060 - HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x02, HDA_INPUT), 8979 + HDA_CODEC_VOLUME("Internal Mic Playback Volume", 0x0b, 0x1, HDA_INPUT), 8980 + HDA_CODEC_MUTE("Internal Mic Playback Switch", 0x0b, 0x1, HDA_INPUT), 9061 8981 { } /* end */ 9062 8982 }; 9063 8983 ··· 9091 9037 HDA_CODEC_VOLUME("Line Playback Volume", 0x0b, 0x02, HDA_INPUT), 9092 9038 HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x02, HDA_INPUT), 9093 9039 HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), 9094 - HDA_CODEC_VOLUME("Mic Boost", 0x18, 0, HDA_INPUT), 9040 + HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), 9095 9041 HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), 9096 9042 { } /* end */ 9097 9043 }; ··· 9104 9050 HDA_CODEC_VOLUME("CD Playback Volume", 0x0b, 0x04, HDA_INPUT), 9105 9051 HDA_CODEC_MUTE("CD Playback Switch", 0x0b, 0x04, HDA_INPUT), 9106 9052 HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), 9107 - HDA_CODEC_VOLUME("Mic Boost", 0x18, 0, HDA_INPUT), 9053 + HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), 9108 9054 HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), 9109 9055 { } /* end */ 9110 9056 }; ··· 9126 9072 HDA_CODEC_VOLUME("Line Playback Volume", 0x0b, 0x02, HDA_INPUT), 9127 9073 HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x02, HDA_INPUT), 9128 9074 HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), 9129 - HDA_CODEC_VOLUME("Mic Boost", 0x18, 0, HDA_INPUT), 9075 + HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), 9130 9076 HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), 9131 9077 HDA_CODEC_VOLUME("Front Mic Playback Volume", 0x0b, 0x1, HDA_INPUT), 9132 - HDA_CODEC_VOLUME("Front Mic Boost", 0x19, 0, HDA_INPUT), 9078 + HDA_CODEC_VOLUME("Front Mic Boost Volume", 0x19, 0, HDA_INPUT), 9133 9079 HDA_CODEC_MUTE("Front Mic Playback Switch", 0x0b, 0x1, HDA_INPUT), 9134 9080 { } /* end */ 9135 9081 }; ··· 9150 9096 HDA_CODEC_MUTE("Enable Headphones", 0x15, 0x00, HDA_OUTPUT), 9151 9097 HDA_CODEC_MUTE_MONO("Enable LFE", 0x16, 2, 0x00, HDA_OUTPUT), 9152 9098 /* Boost mixers */ 9153 - HDA_CODEC_VOLUME("Mic Boost", 0x18, 0x00, HDA_INPUT), 9154 - HDA_CODEC_VOLUME("Line Boost", 0x1a, 0x00, HDA_INPUT), 9099 + HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0x00, HDA_INPUT), 9100 + HDA_CODEC_VOLUME("Line Boost Volume", 0x1a, 0x00, HDA_INPUT), 9155 9101 /* Input mixers */ 9156 9102 HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x00, HDA_INPUT), 9157 9103 HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x00, HDA_INPUT), ··· 9165 9111 HDA_BIND_MUTE("Front Playback Switch", 0x0c, 2, HDA_INPUT), 9166 9112 HDA_CODEC_MUTE("Headphone Playback Switch", 0x15, 0x0, HDA_OUTPUT), 9167 9113 HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x1, HDA_INPUT), 9168 - HDA_CODEC_VOLUME("Mic Boost", 0x19, 0, HDA_INPUT), 9114 + HDA_CODEC_VOLUME("Mic Boost Volume", 0x19, 0, HDA_INPUT), 9169 9115 HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x1, HDA_INPUT), 9170 9116 { } /* end */ 9171 9117 }; ··· 9195 9141 HDA_CODEC_VOLUME("Line Playback Volume", 0x0b, 0x02, HDA_INPUT), 9196 9142 HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x02, HDA_INPUT), 9197 9143 HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), 9198 - HDA_CODEC_VOLUME("Mic Boost", 0x18, 0, HDA_INPUT), 9144 + HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), 9199 9145 HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), 9200 9146 { } /* end */ 9201 9147 }; ··· 9235 9181 spec->autocfg.speaker_pins[0] = 0x14; 9236 9182 spec->autocfg.speaker_pins[1] = 0x17; 9237 9183 } 9238 - 9239 - /* auto-toggle front mic */ 9240 - /* 9241 - static void alc883_mitac_mic_automute(struct hda_codec *codec) 9242 - { 9243 - unsigned char bits = snd_hda_jack_detect(codec, 0x18) ? HDA_AMP_MUTE : 0; 9244 - 9245 - snd_hda_codec_amp_stereo(codec, 0x0b, HDA_INPUT, 1, HDA_AMP_MUTE, bits); 9246 - } 9247 - */ 9248 9184 9249 9185 static struct hda_verb alc883_mitac_verbs[] = { 9250 9186 /* HP */ ··· 9479 9435 alc888_lenovo_ms7195_rca_automute(codec); 9480 9436 } 9481 9437 9482 - static struct hda_verb alc883_medion_md2_verbs[] = { 9483 - {0x0c, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)}, 9484 - {0x0c, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(1)}, 9485 - 9486 - {0x14, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_HP}, 9487 - 9488 - {0x14, AC_VERB_SET_UNSOLICITED_ENABLE, ALC880_HP_EVENT | AC_USRSP_EN}, 9489 - { } /* end */ 9490 - }; 9491 - 9492 9438 /* toggle speaker-output according to the hp-jack state */ 9493 - static void alc883_medion_md2_setup(struct hda_codec *codec) 9439 + static void alc883_lenovo_nb0763_setup(struct hda_codec *codec) 9494 9440 { 9495 9441 struct alc_spec *spec = codec->spec; 9496 9442 ··· 9491 9457 /* toggle speaker-output according to the hp-jack state */ 9492 9458 #define alc883_targa_init_hook alc882_targa_init_hook 9493 9459 #define alc883_targa_unsol_event alc882_targa_unsol_event 9494 - 9495 - static void alc883_clevo_m720_mic_automute(struct hda_codec *codec) 9496 - { 9497 - unsigned int present; 9498 - 9499 - present = snd_hda_jack_detect(codec, 0x18); 9500 - snd_hda_codec_amp_stereo(codec, 0x0b, HDA_INPUT, 1, 9501 - HDA_AMP_MUTE, present ? HDA_AMP_MUTE : 0); 9502 - } 9503 9460 9504 9461 static void alc883_clevo_m720_setup(struct hda_codec *codec) 9505 9462 { ··· 9503 9478 static void alc883_clevo_m720_init_hook(struct hda_codec *codec) 9504 9479 { 9505 9480 alc_automute_amp(codec); 9506 - alc883_clevo_m720_mic_automute(codec); 9481 + alc88x_simple_mic_automute(codec); 9507 9482 } 9508 9483 9509 9484 static void alc883_clevo_m720_unsol_event(struct hda_codec *codec, ··· 9511 9486 { 9512 9487 switch (res >> 26) { 9513 9488 case ALC880_MIC_EVENT: 9514 - alc883_clevo_m720_mic_automute(codec); 9489 + alc88x_simple_mic_automute(codec); 9515 9490 break; 9516 9491 default: 9517 9492 alc_automute_amp_unsol_event(codec, res); ··· 9756 9731 [ALC888_ACER_ASPIRE_8930G] = "acer-aspire-8930g", 9757 9732 [ALC888_ACER_ASPIRE_7730G] = "acer-aspire-7730g", 9758 9733 [ALC883_MEDION] = "medion", 9759 - [ALC883_MEDION_MD2] = "medion-md2", 9760 9734 [ALC883_MEDION_WIM2160] = "medion-wim2160", 9761 9735 [ALC883_LAPTOP_EAPD] = "laptop-eapd", 9762 9736 [ALC883_LENOVO_101E_2ch] = "lenovo-101e", ··· 10403 10379 .channel_mode = alc883_sixstack_modes, 10404 10380 .input_mux = &alc883_capture_source, 10405 10381 }, 10406 - [ALC883_MEDION_MD2] = { 10407 - .mixers = { alc883_medion_md2_mixer}, 10408 - .init_verbs = { alc883_init_verbs, alc883_medion_md2_verbs}, 10409 - .num_dacs = ARRAY_SIZE(alc883_dac_nids), 10410 - .dac_nids = alc883_dac_nids, 10411 - .dig_out_nid = ALC883_DIGOUT_NID, 10412 - .num_channel_mode = ARRAY_SIZE(alc883_3ST_2ch_modes), 10413 - .channel_mode = alc883_3ST_2ch_modes, 10414 - .input_mux = &alc883_capture_source, 10415 - .unsol_event = alc_automute_amp_unsol_event, 10416 - .setup = alc883_medion_md2_setup, 10417 - .init_hook = alc_automute_amp, 10418 - }, 10419 10382 [ALC883_MEDION_WIM2160] = { 10420 10383 .mixers = { alc883_medion_wim2160_mixer }, 10421 10384 .init_verbs = { alc883_init_verbs, alc883_medion_wim2160_verbs }, ··· 10479 10468 .need_dac_fix = 1, 10480 10469 .input_mux = &alc883_lenovo_nb0763_capture_source, 10481 10470 .unsol_event = alc_automute_amp_unsol_event, 10482 - .setup = alc883_medion_md2_setup, 10471 + .setup = alc883_lenovo_nb0763_setup, 10483 10472 .init_hook = alc_automute_amp, 10484 10473 }, 10485 10474 [ALC888_LENOVO_MS7195_DIG] = { ··· 10841 10830 { 10842 10831 struct alc_spec *spec = codec->spec; 10843 10832 struct auto_pin_cfg *cfg = &spec->autocfg; 10844 - int i, err, type; 10833 + int i, err; 10845 10834 int type_idx = 0; 10846 10835 hda_nid_t nid; 10836 + const char *prev_label = NULL; 10847 10837 10848 10838 for (i = 0; i < cfg->num_inputs; i++) { 10849 10839 if (cfg->inputs[i].type > AUTO_PIN_MIC) 10850 10840 break; 10851 10841 nid = cfg->inputs[i].pin; 10852 10842 if (get_wcaps(codec, nid) & AC_WCAP_IN_AMP) { 10853 - char label[32]; 10854 - type = cfg->inputs[i].type; 10855 - if (i > 0 && type == cfg->inputs[i - 1].type) 10843 + const char *label; 10844 + char boost_label[32]; 10845 + 10846 + label = hda_get_autocfg_input_label(codec, cfg, i); 10847 + if (prev_label && !strcmp(label, prev_label)) 10856 10848 type_idx++; 10857 10849 else 10858 10850 type_idx = 0; 10859 - snprintf(label, sizeof(label), "%s Boost", 10860 - hda_get_autocfg_input_label(codec, cfg, i)); 10861 - err = add_control(spec, ALC_CTL_WIDGET_VOL, label, 10862 - type_idx, 10851 + prev_label = label; 10852 + 10853 + snprintf(boost_label, sizeof(boost_label), 10854 + "%s Boost Volume", label); 10855 + err = add_control(spec, ALC_CTL_WIDGET_VOL, 10856 + boost_label, type_idx, 10863 10857 HDA_COMPOSE_AMP_VAL(nid, 3, 0, HDA_INPUT)); 10864 10858 if (err < 0) 10865 10859 return err; ··· 11112 11096 HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x02, HDA_INPUT), 11113 11097 HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), 11114 11098 HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), 11115 - HDA_CODEC_VOLUME("Mic Boost", 0x18, 0, HDA_INPUT), 11099 + HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), 11116 11100 HDA_CODEC_VOLUME("Front Mic Playback Volume", 0x0b, 0x01, HDA_INPUT), 11117 11101 HDA_CODEC_MUTE("Front Mic Playback Switch", 0x0b, 0x01, HDA_INPUT), 11118 - HDA_CODEC_VOLUME("Front Mic Boost", 0x19, 0, HDA_INPUT), 11102 + HDA_CODEC_VOLUME("Front Mic Boost Volume", 0x19, 0, HDA_INPUT), 11119 11103 HDA_CODEC_VOLUME("Headphone Playback Volume", 0x0D, 0x0, HDA_OUTPUT), 11120 11104 HDA_CODEC_MUTE("Headphone Playback Switch", 0x15, 0x0, HDA_OUTPUT), 11121 11105 HDA_CODEC_VOLUME_MONO("Mono Playback Volume", 0x0e, 2, 0x0, HDA_OUTPUT), ··· 11216 11200 HDA_OUTPUT), 11217 11201 HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), 11218 11202 HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), 11219 - HDA_CODEC_VOLUME("Mic Boost", 0x18, 0, HDA_INPUT), 11203 + HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), 11220 11204 HDA_CODEC_VOLUME("Front Mic Playback Volume", 0x0b, 0x01, HDA_INPUT), 11221 11205 HDA_CODEC_MUTE("Front Mic Playback Switch", 0x0b, 0x01, HDA_INPUT), 11222 - HDA_CODEC_VOLUME("Front Mic Boost", 0x19, 0, HDA_INPUT), 11206 + HDA_CODEC_VOLUME("Front Mic Boost Volume", 0x19, 0, HDA_INPUT), 11223 11207 HDA_CODEC_VOLUME("Line Playback Volume", 0x0b, 0x02, HDA_INPUT), 11224 11208 HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x02, HDA_INPUT), 11225 11209 HDA_CODEC_VOLUME("CD Playback Volume", 0x0b, 0x04, HDA_INPUT), ··· 11241 11225 HDA_OUTPUT), 11242 11226 HDA_CODEC_VOLUME("Front Mic Playback Volume", 0x0b, 0x02, HDA_INPUT), 11243 11227 HDA_CODEC_MUTE("Front Mic Playback Switch", 0x0b, 0x02, HDA_INPUT), 11244 - HDA_CODEC_VOLUME("Front Mic Boost", 0x1a, 0, HDA_INPUT), 11228 + HDA_CODEC_VOLUME("Front Mic Boost Volume", 0x1a, 0, HDA_INPUT), 11245 11229 HDA_CODEC_VOLUME("Line Playback Volume", 0x0b, 0x01, HDA_INPUT), 11246 11230 HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x01, HDA_INPUT), 11247 11231 HDA_CODEC_VOLUME("CD Playback Volume", 0x0b, 0x04, HDA_INPUT), ··· 11252 11236 static struct snd_kcontrol_new alc262_HP_BPC_WildWest_option_mixer[] = { 11253 11237 HDA_CODEC_VOLUME("Rear Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), 11254 11238 HDA_CODEC_MUTE("Rear Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), 11255 - HDA_CODEC_VOLUME("Rear Mic Boost", 0x18, 0, HDA_INPUT), 11239 + HDA_CODEC_VOLUME("Rear Mic Boost Volume", 0x18, 0, HDA_INPUT), 11256 11240 { } /* end */ 11257 11241 }; 11258 11242 ··· 11272 11256 HDA_CODEC_MUTE("Headphone Playback Switch", 0x15, 0x0, HDA_OUTPUT), 11273 11257 HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), 11274 11258 HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), 11275 - HDA_CODEC_VOLUME("Mic Boost", 0x18, 0, HDA_INPUT), 11259 + HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), 11276 11260 { } /* end */ 11277 11261 }; 11278 11262 ··· 11379 11363 HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x02, HDA_INPUT), 11380 11364 HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), 11381 11365 HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), 11382 - HDA_CODEC_VOLUME("Mic Boost", 0x18, 0, HDA_INPUT), 11366 + HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), 11383 11367 HDA_CODEC_VOLUME("Front Mic Playback Volume", 0x0b, 0x01, HDA_INPUT), 11384 11368 HDA_CODEC_MUTE("Front Mic Playback Switch", 0x0b, 0x01, HDA_INPUT), 11385 - HDA_CODEC_VOLUME("Front Mic Boost", 0x19, 0, HDA_INPUT), 11369 + HDA_CODEC_VOLUME("Front Mic Boost Volume", 0x19, 0, HDA_INPUT), 11386 11370 HDA_CODEC_VOLUME("Headphone Playback Volume", 0x0d, 0x0, HDA_OUTPUT), 11387 11371 { } /* end */ 11388 11372 }; ··· 11396 11380 HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x02, HDA_INPUT), 11397 11381 HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), 11398 11382 HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), 11399 - HDA_CODEC_VOLUME("Mic Boost", 0x18, 0, HDA_INPUT), 11383 + HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), 11400 11384 HDA_CODEC_VOLUME("Front Mic Playback Volume", 0x0b, 0x01, HDA_INPUT), 11401 11385 HDA_CODEC_MUTE("Front Mic Playback Switch", 0x0b, 0x01, HDA_INPUT), 11402 - HDA_CODEC_VOLUME("Front Mic Boost", 0x19, 0, HDA_INPUT), 11386 + HDA_CODEC_VOLUME("Front Mic Boost Volume", 0x19, 0, HDA_INPUT), 11403 11387 { } /* end */ 11404 11388 }; 11405 11389 ··· 11467 11451 HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x02, HDA_INPUT), 11468 11452 HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), 11469 11453 HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), 11470 - HDA_CODEC_VOLUME("Mic Boost", 0x18, 0, HDA_INPUT), 11454 + HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), 11471 11455 HDA_CODEC_VOLUME("Front Mic Playback Volume", 0x0b, 0x01, HDA_INPUT), 11472 11456 HDA_CODEC_MUTE("Front Mic Playback Switch", 0x0b, 0x01, HDA_INPUT), 11473 - HDA_CODEC_VOLUME("Front Mic Boost", 0x19, 0, HDA_INPUT), 11457 + HDA_CODEC_VOLUME("Front Mic Boost Volume", 0x19, 0, HDA_INPUT), 11474 11458 { } /* end */ 11475 11459 }; 11476 11460 ··· 11654 11638 11655 11639 HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), 11656 11640 HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), 11657 - HDA_CODEC_VOLUME("Mic Boost", 0x18, 0, HDA_INPUT), 11641 + HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), 11658 11642 11659 11643 HDA_CODEC_VOLUME("Headphone Playback Volume", 0x0d, 0x0, HDA_OUTPUT), 11660 11644 HDA_CODEC_MUTE("Headphone Playback Switch", 0x15, 0x0, HDA_OUTPUT), ··· 11709 11693 .num_items = 3, 11710 11694 .items = { 11711 11695 { "Mic", 0x0 }, 11712 - { "Int Mic", 0x1 }, 11696 + { "Internal Mic", 0x1 }, 11713 11697 { "CD", 0x4 }, 11714 11698 }, 11715 11699 }; ··· 11861 11845 }, 11862 11846 HDA_CODEC_VOLUME("CD Playback Volume", 0x0b, 0x04, HDA_INPUT), 11863 11847 HDA_CODEC_MUTE("CD Playback Switch", 0x0b, 0x04, HDA_INPUT), 11864 - HDA_CODEC_VOLUME("Mic Boost", 0x18, 0, HDA_INPUT), 11848 + HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), 11865 11849 HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), 11866 11850 HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), 11867 - HDA_CODEC_VOLUME("Int Mic Boost", 0x19, 0, HDA_INPUT), 11868 - HDA_CODEC_VOLUME("Int Mic Playback Volume", 0x0b, 0x1, HDA_INPUT), 11869 - HDA_CODEC_MUTE("Int Mic Playback Switch", 0x0b, 0x1, HDA_INPUT), 11851 + HDA_CODEC_VOLUME("Internal Mic Boost Volume", 0x19, 0, HDA_INPUT), 11852 + HDA_CODEC_VOLUME("Internal Mic Playback Volume", 0x0b, 0x1, HDA_INPUT), 11853 + HDA_CODEC_MUTE("Internal Mic Playback Switch", 0x0b, 0x1, HDA_INPUT), 11870 11854 { } /* end */ 11871 11855 }; 11872 11856 ··· 11897 11881 }, 11898 11882 HDA_CODEC_VOLUME("CD Playback Volume", 0x0b, 0x04, HDA_INPUT), 11899 11883 HDA_CODEC_MUTE("CD Playback Switch", 0x0b, 0x04, HDA_INPUT), 11900 - HDA_CODEC_VOLUME("Mic Boost", 0x18, 0, HDA_INPUT), 11884 + HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), 11901 11885 HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), 11902 11886 HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), 11903 - HDA_CODEC_VOLUME("Int Mic Boost", 0x19, 0, HDA_INPUT), 11904 - HDA_CODEC_VOLUME("Int Mic Playback Volume", 0x0b, 0x1, HDA_INPUT), 11905 - HDA_CODEC_MUTE("Int Mic Playback Switch", 0x0b, 0x1, HDA_INPUT), 11887 + HDA_CODEC_VOLUME("Internal Mic Boost Volume", 0x19, 0, HDA_INPUT), 11888 + HDA_CODEC_VOLUME("Internal Mic Playback Volume", 0x0b, 0x1, HDA_INPUT), 11889 + HDA_CODEC_MUTE("Internal Mic Playback Switch", 0x0b, 0x1, HDA_INPUT), 11906 11890 { } /* end */ 11907 11891 }; 11908 11892 ··· 11911 11895 ALC262_HIPPO_MASTER_SWITCH, 11912 11896 HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), 11913 11897 HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), 11914 - HDA_CODEC_VOLUME("Mic Boost", 0x18, 0, HDA_INPUT), 11898 + HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), 11915 11899 HDA_CODEC_VOLUME("Front Mic Playback Volume", 0x0b, 0x01, HDA_INPUT), 11916 11900 HDA_CODEC_MUTE("Front Mic Playback Switch", 0x0b, 0x01, HDA_INPUT), 11917 - HDA_CODEC_VOLUME("Front Mic Boost", 0x19, 0, HDA_INPUT), 11901 + HDA_CODEC_VOLUME("Front Mic Boost Volume", 0x19, 0, HDA_INPUT), 11918 11902 { } /* end */ 11919 11903 }; 11920 11904 ··· 11940 11924 HDA_BIND_MUTE("Master Playback Switch", 0x0c, 2, HDA_INPUT), 11941 11925 HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x01, HDA_INPUT), 11942 11926 HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x01, HDA_INPUT), 11943 - HDA_CODEC_VOLUME("Mic Boost", 0x19, 0, HDA_INPUT), 11944 - HDA_CODEC_VOLUME("Headphone Mic Boost", 0x15, 0, HDA_INPUT), 11927 + HDA_CODEC_VOLUME("Mic Boost Volume", 0x19, 0, HDA_INPUT), 11928 + HDA_CODEC_VOLUME("Headphone Mic Boost Volume", 0x15, 0, HDA_INPUT), 11945 11929 { } /* end */ 11946 11930 }; 11947 11931 ··· 12111 12095 spec->multiout.dac_nids = spec->private_dac_nids; 12112 12096 spec->multiout.dac_nids[0] = 2; 12113 12097 12114 - if (!cfg->speaker_pins[0] && !cfg->hp_pins[0]) 12115 - pfx = "Master"; 12116 - else if (cfg->line_out_type == AUTO_PIN_SPEAKER_OUT) 12117 - pfx = "Speaker"; 12118 - else if (cfg->line_out_type == AUTO_PIN_HP_OUT) 12119 - pfx = "Headphone"; 12120 - else 12098 + pfx = alc_get_line_out_pfx(cfg, true); 12099 + if (!pfx) 12121 12100 pfx = "Front"; 12122 12101 for (i = 0; i < 2; i++) { 12123 12102 err = alc262_add_out_sw_ctl(spec, cfg->line_out_pins[i], pfx, i); ··· 13013 13002 HDA_CODEC_MUTE("Front Playback Switch", 0x14, 0x0, HDA_OUTPUT), 13014 13003 HDA_CODEC_VOLUME("Headphone Playback Volume", 0x3, 0x0, HDA_OUTPUT), 13015 13004 HDA_CODEC_MUTE("Headphone Playback Switch", 0x15, 0x0, HDA_OUTPUT), 13016 - HDA_CODEC_VOLUME("Mic Boost", 0x18, 0, HDA_INPUT), 13017 - HDA_CODEC_VOLUME("Front Mic Boost", 0x19, 0, HDA_INPUT), 13018 - HDA_CODEC_VOLUME("Line In Boost", 0x1a, 0, HDA_INPUT), 13005 + HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), 13006 + HDA_CODEC_VOLUME("Front Mic Boost Volume", 0x19, 0, HDA_INPUT), 13007 + HDA_CODEC_VOLUME("Line In Boost Volume", 0x1a, 0, HDA_INPUT), 13019 13008 { } 13020 13009 }; 13021 13010 ··· 13024 13013 HDA_CODEC_VOLUME("Front Playback Volume", 0x2, 0x0, HDA_OUTPUT), 13025 13014 HDA_CODEC_VOLUME("Headphone Playback Volume", 0x3, 0x0, HDA_OUTPUT), 13026 13015 ALC262_HIPPO_MASTER_SWITCH, 13027 - HDA_CODEC_VOLUME("Mic Boost", 0x18, 0, HDA_INPUT), 13028 - HDA_CODEC_VOLUME("Front Mic Boost", 0x19, 0, HDA_INPUT), 13029 - HDA_CODEC_VOLUME("Line In Boost", 0x1a, 0, HDA_INPUT), 13016 + HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), 13017 + HDA_CODEC_VOLUME("Front Mic Boost Volume", 0x19, 0, HDA_INPUT), 13018 + HDA_CODEC_VOLUME("Line In Boost Volume", 0x1a, 0, HDA_INPUT), 13030 13019 { } 13031 13020 }; 13032 13021 ··· 13130 13119 .put = alc268_acer_master_sw_put, 13131 13120 .private_value = HDA_COMPOSE_AMP_VAL(0x14, 3, 0, HDA_OUTPUT), 13132 13121 }, 13133 - HDA_CODEC_VOLUME("Mic Boost", 0x18, 0, HDA_INPUT), 13134 - HDA_CODEC_VOLUME("Internal Mic Boost", 0x19, 0, HDA_INPUT), 13135 - HDA_CODEC_VOLUME("Line In Boost", 0x1a, 0, HDA_INPUT), 13122 + HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), 13123 + HDA_CODEC_VOLUME("Internal Mic Boost Volume", 0x19, 0, HDA_INPUT), 13124 + HDA_CODEC_VOLUME("Line In Boost Volume", 0x1a, 0, HDA_INPUT), 13136 13125 { } 13137 13126 }; 13138 13127 ··· 13148 13137 .put = alc268_acer_master_sw_put, 13149 13138 .private_value = HDA_COMPOSE_AMP_VAL(0x14, 3, 0, HDA_OUTPUT), 13150 13139 }, 13151 - HDA_CODEC_VOLUME("Mic Boost", 0x18, 0, HDA_INPUT), 13152 - HDA_CODEC_VOLUME("Line In Boost", 0x1a, 0, HDA_INPUT), 13140 + HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), 13141 + HDA_CODEC_VOLUME("Line In Boost Volume", 0x1a, 0, HDA_INPUT), 13153 13142 { } 13154 13143 }; 13155 13144 ··· 13241 13230 HDA_CODEC_MUTE("Speaker Playback Switch", 0x14, 0x0, HDA_OUTPUT), 13242 13231 HDA_CODEC_VOLUME("Headphone Playback Volume", 0x03, 0x0, HDA_OUTPUT), 13243 13232 HDA_CODEC_MUTE("Headphone Playback Switch", 0x15, 0x0, HDA_OUTPUT), 13244 - HDA_CODEC_VOLUME("Mic Boost", 0x18, 0, HDA_INPUT), 13245 - HDA_CODEC_VOLUME("Internal Mic Boost", 0x19, 0, HDA_INPUT), 13233 + HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), 13234 + HDA_CODEC_VOLUME("Internal Mic Boost Volume", 0x19, 0, HDA_INPUT), 13246 13235 { } 13247 13236 }; 13248 13237 ··· 13275 13264 HDA_CODEC_MUTE("Headphone Playback Switch", 0x15, 0x0, HDA_OUTPUT), 13276 13265 HDA_CODEC_VOLUME("Mic Capture Volume", 0x23, 0x0, HDA_OUTPUT), 13277 13266 HDA_BIND_MUTE("Mic Capture Switch", 0x23, 2, HDA_OUTPUT), 13278 - HDA_CODEC_VOLUME("Ext Mic Boost", 0x18, 0, HDA_INPUT), 13279 - HDA_CODEC_VOLUME("Int Mic Boost", 0x19, 0, HDA_INPUT), 13267 + HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), 13268 + HDA_CODEC_VOLUME("Internal Mic Boost Volume", 0x19, 0, HDA_INPUT), 13280 13269 { } 13281 13270 }; 13282 13271 ··· 14099 14088 HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x02, HDA_INPUT), 14100 14089 HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), 14101 14090 HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), 14102 - HDA_CODEC_VOLUME("Mic Boost", 0x18, 0, HDA_INPUT), 14091 + HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), 14103 14092 HDA_CODEC_VOLUME("Front Mic Playback Volume", 0x0b, 0x01, HDA_INPUT), 14104 14093 HDA_CODEC_MUTE("Front Mic Playback Switch", 0x0b, 0x01, HDA_INPUT), 14105 - HDA_CODEC_VOLUME("Front Mic Boost", 0x19, 0, HDA_INPUT), 14094 + HDA_CODEC_VOLUME("Front Mic Boost Volume", 0x19, 0, HDA_INPUT), 14106 14095 HDA_CODEC_MUTE("Headphone Playback Switch", 0x15, 0x0, HDA_OUTPUT), 14107 14096 HDA_CODEC_MUTE_MONO("Mono Playback Switch", 0x16, 2, 0x0, HDA_OUTPUT), 14108 14097 { } /* end */ ··· 14122 14111 }, 14123 14112 HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), 14124 14113 HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), 14125 - HDA_CODEC_VOLUME("Mic Boost", 0x18, 0, HDA_INPUT), 14114 + HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), 14126 14115 HDA_CODEC_VOLUME("Internal Mic Playback Volume", 0x0b, 0x01, HDA_INPUT), 14127 14116 HDA_CODEC_MUTE("Internal Mic Playback Switch", 0x0b, 0x01, HDA_INPUT), 14128 - HDA_CODEC_VOLUME("Internal Mic Boost", 0x19, 0, HDA_INPUT), 14117 + HDA_CODEC_VOLUME("Internal Mic Boost Volume", 0x19, 0, HDA_INPUT), 14129 14118 { } 14130 14119 }; 14131 14120 ··· 14143 14132 }, 14144 14133 HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), 14145 14134 HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), 14146 - HDA_CODEC_VOLUME("Mic Boost", 0x18, 0, HDA_INPUT), 14135 + HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), 14147 14136 HDA_CODEC_VOLUME("Internal Mic Playback Volume", 0x0b, 0x01, HDA_INPUT), 14148 14137 HDA_CODEC_MUTE("Internal Mic Playback Switch", 0x0b, 0x01, HDA_INPUT), 14149 - HDA_CODEC_VOLUME("Internal Mic Boost", 0x19, 0, HDA_INPUT), 14138 + HDA_CODEC_VOLUME("Internal Mic Boost Volume", 0x19, 0, HDA_INPUT), 14150 14139 HDA_CODEC_VOLUME("Dock Mic Playback Volume", 0x0b, 0x03, HDA_INPUT), 14151 14140 HDA_CODEC_MUTE("Dock Mic Playback Switch", 0x0b, 0x03, HDA_INPUT), 14152 - HDA_CODEC_VOLUME("Dock Mic Boost", 0x1b, 0, HDA_INPUT), 14141 + HDA_CODEC_VOLUME("Dock Mic Boost Volume", 0x1b, 0, HDA_INPUT), 14153 14142 { } 14154 14143 }; 14155 14144 ··· 14179 14168 static struct snd_kcontrol_new alc269_laptop_analog_capture_mixer[] = { 14180 14169 HDA_CODEC_VOLUME("Capture Volume", 0x08, 0x0, HDA_INPUT), 14181 14170 HDA_CODEC_MUTE("Capture Switch", 0x08, 0x0, HDA_INPUT), 14182 - HDA_CODEC_VOLUME("Mic Boost", 0x18, 0, HDA_INPUT), 14183 - HDA_CODEC_VOLUME("IntMic Boost", 0x19, 0, HDA_INPUT), 14171 + HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), 14172 + HDA_CODEC_VOLUME("Internal Mic Boost Volume", 0x19, 0, HDA_INPUT), 14184 14173 { } /* end */ 14185 14174 }; 14186 14175 14187 14176 static struct snd_kcontrol_new alc269_laptop_digital_capture_mixer[] = { 14188 14177 HDA_CODEC_VOLUME("Capture Volume", 0x08, 0x0, HDA_INPUT), 14189 14178 HDA_CODEC_MUTE("Capture Switch", 0x08, 0x0, HDA_INPUT), 14190 - HDA_CODEC_VOLUME("Mic Boost", 0x18, 0, HDA_INPUT), 14179 + HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), 14191 14180 { } /* end */ 14192 14181 }; 14193 14182 14194 14183 static struct snd_kcontrol_new alc269vb_laptop_analog_capture_mixer[] = { 14195 14184 HDA_CODEC_VOLUME("Capture Volume", 0x09, 0x0, HDA_INPUT), 14196 14185 HDA_CODEC_MUTE("Capture Switch", 0x09, 0x0, HDA_INPUT), 14197 - HDA_CODEC_VOLUME("Mic Boost", 0x18, 0, HDA_INPUT), 14198 - HDA_CODEC_VOLUME("IntMic Boost", 0x19, 0, HDA_INPUT), 14186 + HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), 14187 + HDA_CODEC_VOLUME("Internal Mic Boost Volume", 0x19, 0, HDA_INPUT), 14199 14188 { } /* end */ 14200 14189 }; 14201 14190 14202 14191 static struct snd_kcontrol_new alc269vb_laptop_digital_capture_mixer[] = { 14203 14192 HDA_CODEC_VOLUME("Capture Volume", 0x09, 0x0, HDA_INPUT), 14204 14193 HDA_CODEC_MUTE("Capture Switch", 0x09, 0x0, HDA_INPUT), 14205 - HDA_CODEC_VOLUME("Mic Boost", 0x18, 0, HDA_INPUT), 14194 + HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), 14206 14195 { } /* end */ 14207 14196 }; 14208 14197 ··· 14821 14810 } 14822 14811 #endif /* SND_HDA_NEEDS_RESUME */ 14823 14812 14813 + static void alc269_fixup_hweq(struct hda_codec *codec, 14814 + const struct alc_fixup *fix, int pre_init) 14815 + { 14816 + int coef; 14817 + 14818 + coef = alc_read_coef_idx(codec, 0x1e); 14819 + alc_write_coef_idx(codec, 0x1e, coef | 0x80); 14820 + } 14821 + 14824 14822 enum { 14825 14823 ALC269_FIXUP_SONY_VAIO, 14826 14824 ALC275_FIX_SONY_VAIO_GPIO2, 14827 14825 ALC269_FIXUP_DELL_M101Z, 14828 14826 ALC269_FIXUP_SKU_IGNORE, 14829 14827 ALC269_FIXUP_ASUS_G73JW, 14828 + ALC269_FIXUP_LENOVO_EAPD, 14829 + ALC275_FIXUP_SONY_HWEQ, 14830 14830 }; 14831 14831 14832 14832 static const struct alc_fixup alc269_fixups[] = { ··· 14852 14830 {0x01, AC_VERB_SET_GPIO_MASK, 0x04}, 14853 14831 {0x01, AC_VERB_SET_GPIO_DIRECTION, 0x04}, 14854 14832 {0x01, AC_VERB_SET_GPIO_DATA, 0x00}, 14833 + {0x19, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_VREFGRD}, 14855 14834 { } 14856 14835 } 14857 14836 }, ··· 14873 14850 { } 14874 14851 } 14875 14852 }, 14853 + [ALC269_FIXUP_LENOVO_EAPD] = { 14854 + .verbs = (const struct hda_verb[]) { 14855 + {0x14, AC_VERB_SET_EAPD_BTLENABLE, 0}, 14856 + {} 14857 + } 14858 + }, 14859 + [ALC275_FIXUP_SONY_HWEQ] = { 14860 + .func = alc269_fixup_hweq, 14861 + .verbs = (const struct hda_verb[]) { 14862 + {0x01, AC_VERB_SET_GPIO_MASK, 0x04}, 14863 + {0x01, AC_VERB_SET_GPIO_DIRECTION, 0x04}, 14864 + {0x01, AC_VERB_SET_GPIO_DATA, 0x00}, 14865 + {0x19, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_VREFGRD}, 14866 + { } 14867 + } 14868 + } 14876 14869 }; 14877 14870 14878 14871 static struct snd_pci_quirk alc269_fixup_tbl[] = { 14879 14872 SND_PCI_QUIRK(0x104d, 0x9073, "Sony VAIO", ALC275_FIX_SONY_VAIO_GPIO2), 14880 - SND_PCI_QUIRK(0x104d, 0x907b, "Sony VAIO", ALC275_FIX_SONY_VAIO_GPIO2), 14881 - SND_PCI_QUIRK(0x104d, 0x9084, "Sony VAIO", ALC275_FIX_SONY_VAIO_GPIO2), 14873 + SND_PCI_QUIRK(0x104d, 0x907b, "Sony VAIO", ALC275_FIXUP_SONY_HWEQ), 14874 + SND_PCI_QUIRK(0x104d, 0x9084, "Sony VAIO", ALC275_FIXUP_SONY_HWEQ), 14882 14875 SND_PCI_QUIRK_VENDOR(0x104d, "Sony VAIO", ALC269_FIXUP_SONY_VAIO), 14883 14876 SND_PCI_QUIRK(0x1028, 0x0470, "Dell M101z", ALC269_FIXUP_DELL_M101Z), 14884 14877 SND_PCI_QUIRK(0x17aa, 0x21b8, "Thinkpad Edge 14", ALC269_FIXUP_SKU_IGNORE), 14885 14878 SND_PCI_QUIRK(0x17aa, 0x20f2, "Thinkpad SL410/510", ALC269_FIXUP_SKU_IGNORE), 14886 14879 SND_PCI_QUIRK(0x1043, 0x1a13, "Asus G73Jw", ALC269_FIXUP_ASUS_G73JW), 14880 + SND_PCI_QUIRK(0x17aa, 0x9e54, "LENOVO NB", ALC269_FIXUP_LENOVO_EAPD), 14887 14881 {} 14888 14882 }; 14889 14883 ··· 15935 15895 return 0; 15936 15896 } 15937 15897 15938 - static int alc861_create_out_sw(struct hda_codec *codec, const char *pfx, 15939 - hda_nid_t nid, unsigned int chs) 15898 + static int __alc861_create_out_sw(struct hda_codec *codec, const char *pfx, 15899 + hda_nid_t nid, int idx, unsigned int chs) 15940 15900 { 15941 - return add_pb_sw_ctrl(codec->spec, ALC_CTL_WIDGET_MUTE, pfx, 15901 + return __add_pb_sw_ctrl(codec->spec, ALC_CTL_WIDGET_MUTE, pfx, idx, 15942 15902 HDA_COMPOSE_AMP_VAL(nid, chs, 0, HDA_OUTPUT)); 15943 15903 } 15904 + 15905 + #define alc861_create_out_sw(codec, pfx, nid, chs) \ 15906 + __alc861_create_out_sw(codec, pfx, nid, 0, chs) 15944 15907 15945 15908 /* add playback controls from the parsed DAC table */ 15946 15909 static int alc861_auto_create_multi_out_ctls(struct hda_codec *codec, ··· 15953 15910 static const char *chname[4] = { 15954 15911 "Front", "Surround", NULL /*CLFE*/, "Side" 15955 15912 }; 15913 + const char *pfx = alc_get_line_out_pfx(cfg, true); 15956 15914 hda_nid_t nid; 15957 15915 int i, err; 15958 - 15959 - if (cfg->line_outs == 1) { 15960 - const char *pfx = NULL; 15961 - if (!cfg->hp_outs) 15962 - pfx = "Master"; 15963 - else if (cfg->line_out_type == AUTO_PIN_SPEAKER_OUT) 15964 - pfx = "Speaker"; 15965 - if (pfx) { 15966 - nid = spec->multiout.dac_nids[0]; 15967 - return alc861_create_out_sw(codec, pfx, nid, 3); 15968 - } 15969 - } 15970 15916 15971 15917 for (i = 0; i < cfg->line_outs; i++) { 15972 15918 nid = spec->multiout.dac_nids[i]; 15973 15919 if (!nid) 15974 15920 continue; 15975 - if (i == 2) { 15921 + if (!pfx && i == 2) { 15976 15922 /* Center/LFE */ 15977 15923 err = alc861_create_out_sw(codec, "Center", nid, 1); 15978 15924 if (err < 0) ··· 15970 15938 if (err < 0) 15971 15939 return err; 15972 15940 } else { 15973 - err = alc861_create_out_sw(codec, chname[i], nid, 3); 15941 + const char *name = pfx; 15942 + if (!name) 15943 + name = chname[i]; 15944 + err = __alc861_create_out_sw(codec, name, nid, i, 3); 15974 15945 if (err < 0) 15975 15946 return err; 15976 15947 } ··· 16445 16410 static struct hda_input_mux alc861vd_dallas_capture_source = { 16446 16411 .num_items = 2, 16447 16412 .items = { 16448 - { "Ext Mic", 0x0 }, 16449 - { "Int Mic", 0x1 }, 16413 + { "Mic", 0x0 }, 16414 + { "Internal Mic", 0x1 }, 16450 16415 }, 16451 16416 }; 16452 16417 ··· 16525 16490 16526 16491 HDA_CODEC_MUTE("Headphone Playback Switch", 0x1b, 0x0, HDA_OUTPUT), 16527 16492 16528 - HDA_CODEC_VOLUME("Mic Boost", 0x18, 0, HDA_INPUT), 16493 + HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), 16529 16494 HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), 16530 16495 HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), 16531 16496 16532 - HDA_CODEC_VOLUME("Front Mic Boost", 0x19, 0, HDA_INPUT), 16497 + HDA_CODEC_VOLUME("Front Mic Boost Volume", 0x19, 0, HDA_INPUT), 16533 16498 HDA_CODEC_VOLUME("Front Mic Playback Volume", 0x0b, 0x1, HDA_INPUT), 16534 16499 HDA_CODEC_MUTE("Front Mic Playback Switch", 0x0b, 0x1, HDA_INPUT), 16535 16500 ··· 16548 16513 16549 16514 HDA_CODEC_MUTE("Headphone Playback Switch", 0x1b, 0x0, HDA_OUTPUT), 16550 16515 16551 - HDA_CODEC_VOLUME("Mic Boost", 0x18, 0, HDA_INPUT), 16516 + HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), 16552 16517 HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), 16553 16518 HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), 16554 16519 16555 - HDA_CODEC_VOLUME("Front Mic Boost", 0x19, 0, HDA_INPUT), 16520 + HDA_CODEC_VOLUME("Front Mic Boost Volume", 0x19, 0, HDA_INPUT), 16556 16521 HDA_CODEC_VOLUME("Front Mic Playback Volume", 0x0b, 0x1, HDA_INPUT), 16557 16522 HDA_CODEC_MUTE("Front Mic Playback Switch", 0x0b, 0x1, HDA_INPUT), 16558 16523 ··· 16572 16537 16573 16538 HDA_CODEC_MUTE("Headphone Playback Switch", 0x1b, 0x0, HDA_OUTPUT), 16574 16539 16575 - HDA_CODEC_VOLUME("Mic Boost", 0x18, 0, HDA_INPUT), 16540 + HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), 16576 16541 HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), 16577 16542 HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), 16578 16543 16579 - HDA_CODEC_VOLUME("Front Mic Boost", 0x19, 0, HDA_INPUT), 16544 + HDA_CODEC_VOLUME("Front Mic Boost Volume", 0x19, 0, HDA_INPUT), 16580 16545 HDA_CODEC_VOLUME("Front Mic Playback Volume", 0x0b, 0x1, HDA_INPUT), 16581 16546 HDA_CODEC_MUTE("Front Mic Playback Switch", 0x0b, 0x1, HDA_INPUT), 16582 16547 ··· 16587 16552 }; 16588 16553 16589 16554 /* Pin assignment: Speaker=0x14, HP = 0x15, 16590 - * Ext Mic=0x18, Int Mic = 0x19, CD = 0x1c, PC Beep = 0x1d 16555 + * Mic=0x18, Internal Mic = 0x19, CD = 0x1c, PC Beep = 0x1d 16591 16556 */ 16592 16557 static struct snd_kcontrol_new alc861vd_dallas_mixer[] = { 16593 16558 HDA_CODEC_VOLUME("Speaker Playback Volume", 0x02, 0x0, HDA_OUTPUT), 16594 16559 HDA_BIND_MUTE("Speaker Playback Switch", 0x0c, 2, HDA_INPUT), 16595 16560 HDA_CODEC_VOLUME("Headphone Playback Volume", 0x03, 0x0, HDA_OUTPUT), 16596 16561 HDA_BIND_MUTE("Headphone Playback Switch", 0x0d, 2, HDA_INPUT), 16597 - HDA_CODEC_VOLUME("Ext Mic Boost", 0x18, 0, HDA_INPUT), 16598 - HDA_CODEC_VOLUME("Ext Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), 16599 - HDA_CODEC_MUTE("Ext Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), 16600 - HDA_CODEC_VOLUME("Int Mic Boost", 0x19, 0, HDA_INPUT), 16601 - HDA_CODEC_VOLUME("Int Mic Playback Volume", 0x0b, 0x1, HDA_INPUT), 16602 - HDA_CODEC_MUTE("Int Mic Playback Switch", 0x0b, 0x1, HDA_INPUT), 16562 + HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), 16563 + HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), 16564 + HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), 16565 + HDA_CODEC_VOLUME("Internal Mic Boost Volume", 0x19, 0, HDA_INPUT), 16566 + HDA_CODEC_VOLUME("Internal Mic Playback Volume", 0x0b, 0x1, HDA_INPUT), 16567 + HDA_CODEC_MUTE("Internal Mic Playback Switch", 0x0b, 0x1, HDA_INPUT), 16603 16568 { } /* end */ 16604 16569 }; 16605 16570 ··· 16764 16729 {} 16765 16730 }; 16766 16731 16767 - static void alc861vd_lenovo_mic_automute(struct hda_codec *codec) 16768 - { 16769 - unsigned int present; 16770 - unsigned char bits; 16771 - 16772 - present = snd_hda_jack_detect(codec, 0x18); 16773 - bits = present ? HDA_AMP_MUTE : 0; 16774 - 16775 - snd_hda_codec_amp_stereo(codec, 0x0b, HDA_INPUT, 1, 16776 - HDA_AMP_MUTE, bits); 16777 - } 16778 - 16779 16732 static void alc861vd_lenovo_setup(struct hda_codec *codec) 16780 16733 { 16781 16734 struct alc_spec *spec = codec->spec; ··· 16774 16751 static void alc861vd_lenovo_init_hook(struct hda_codec *codec) 16775 16752 { 16776 16753 alc_automute_amp(codec); 16777 - alc861vd_lenovo_mic_automute(codec); 16754 + alc88x_simple_mic_automute(codec); 16778 16755 } 16779 16756 16780 16757 static void alc861vd_lenovo_unsol_event(struct hda_codec *codec, ··· 16782 16759 { 16783 16760 switch (res >> 26) { 16784 16761 case ALC880_MIC_EVENT: 16785 - alc861vd_lenovo_mic_automute(codec); 16762 + alc88x_simple_mic_automute(codec); 16786 16763 break; 16787 16764 default: 16788 16765 alc_automute_amp_unsol_event(codec, res); ··· 17078 17055 const struct auto_pin_cfg *cfg) 17079 17056 { 17080 17057 static const char *chname[4] = {"Front", "Surround", "CLFE", "Side"}; 17058 + const char *pfx = alc_get_line_out_pfx(cfg, true); 17081 17059 hda_nid_t nid_v, nid_s; 17082 17060 int i, err; 17083 17061 ··· 17092 17068 alc880_dac_to_idx( 17093 17069 spec->multiout.dac_nids[i])); 17094 17070 17095 - if (i == 2) { 17071 + if (!pfx && i == 2) { 17096 17072 /* Center/LFE */ 17097 17073 err = add_pb_vol_ctrl(spec, ALC_CTL_WIDGET_VOL, 17098 17074 "Center", ··· 17119 17095 if (err < 0) 17120 17096 return err; 17121 17097 } else { 17122 - const char *pfx; 17123 - if (cfg->line_outs == 1 && 17124 - cfg->line_out_type == AUTO_PIN_SPEAKER_OUT) { 17125 - if (!cfg->hp_pins) 17126 - pfx = "Speaker"; 17127 - else 17128 - pfx = "PCM"; 17129 - } else 17130 - pfx = chname[i]; 17131 - err = add_pb_vol_ctrl(spec, ALC_CTL_WIDGET_VOL, pfx, 17098 + const char *name = pfx; 17099 + if (!name) 17100 + name = chname[i]; 17101 + err = __add_pb_vol_ctrl(spec, ALC_CTL_WIDGET_VOL, 17102 + name, i, 17132 17103 HDA_COMPOSE_AMP_VAL(nid_v, 3, 0, 17133 17104 HDA_OUTPUT)); 17134 17105 if (err < 0) 17135 17106 return err; 17136 - if (cfg->line_outs == 1 && 17137 - cfg->line_out_type == AUTO_PIN_SPEAKER_OUT) 17138 - pfx = "Speaker"; 17139 - err = add_pb_sw_ctrl(spec, ALC_CTL_BIND_MUTE, pfx, 17107 + err = __add_pb_sw_ctrl(spec, ALC_CTL_BIND_MUTE, 17108 + name, i, 17140 17109 HDA_COMPOSE_AMP_VAL(nid_s, 3, 2, 17141 17110 HDA_INPUT)); 17142 17111 if (err < 0) ··· 17593 17576 HDA_CODEC_VOLUME("Master Playback Volume", 0x02, 0x0, HDA_OUTPUT), 17594 17577 ALC262_HIPPO_MASTER_SWITCH, 17595 17578 17596 - HDA_CODEC_VOLUME("e-Mic Boost", 0x18, 0, HDA_INPUT), 17597 - HDA_CODEC_VOLUME("e-Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), 17598 - HDA_CODEC_MUTE("e-Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), 17579 + HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), 17580 + HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), 17581 + HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), 17599 17582 17600 - HDA_CODEC_VOLUME("i-Mic Boost", 0x19, 0, HDA_INPUT), 17601 - HDA_CODEC_VOLUME("i-Mic Playback Volume", 0x0b, 0x1, HDA_INPUT), 17602 - HDA_CODEC_MUTE("i-Mic Playback Switch", 0x0b, 0x1, HDA_INPUT), 17583 + HDA_CODEC_VOLUME("Internal Mic Boost Volume", 0x19, 0, HDA_INPUT), 17584 + HDA_CODEC_VOLUME("Internal Mic Playback Volume", 0x0b, 0x1, HDA_INPUT), 17585 + HDA_CODEC_MUTE("Internal Mic Playback Switch", 0x0b, 0x1, HDA_INPUT), 17603 17586 { } /* end */ 17604 17587 }; 17605 17588 ··· 17743 17726 17744 17727 HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), 17745 17728 HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), 17746 - HDA_CODEC_VOLUME("i-Mic Playback Volume", 0x0b, 0x1, HDA_INPUT), 17747 - HDA_CODEC_MUTE("i-Mic Playback Switch", 0x0b, 0x1, HDA_INPUT), 17729 + HDA_CODEC_VOLUME("Internal Mic Playback Volume", 0x0b, 0x1, HDA_INPUT), 17730 + HDA_CODEC_MUTE("Internal Mic Playback Switch", 0x0b, 0x1, HDA_INPUT), 17748 17731 { } /* end */ 17749 17732 }; 17750 17733 ··· 17755 17738 17756 17739 HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), 17757 17740 HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), 17758 - HDA_CODEC_VOLUME("i-Mic Playback Volume", 0x0b, 0x1, HDA_INPUT), 17759 - HDA_CODEC_MUTE("i-Mic Playback Switch", 0x0b, 0x1, HDA_INPUT), 17741 + HDA_CODEC_VOLUME("Internal Mic Playback Volume", 0x0b, 0x1, HDA_INPUT), 17742 + HDA_CODEC_MUTE("Internal Mic Playback Switch", 0x0b, 0x1, HDA_INPUT), 17760 17743 HDA_CODEC_VOLUME("Line Playback Volume", 0x0b, 0x02, HDA_INPUT), 17761 17744 HDA_CODEC_MUTE("Line Playback Switch", 0x0b, 0x02, HDA_INPUT), 17762 17745 { } /* end */ ··· 18589 18572 HDA_CODEC_VOLUME("Master Playback Volume", 0x02, 0x0, HDA_OUTPUT), 18590 18573 ALC262_HIPPO_MASTER_SWITCH, 18591 18574 18592 - HDA_CODEC_VOLUME("e-Mic/LineIn Boost", 0x18, 0, HDA_INPUT), 18593 - HDA_CODEC_VOLUME("e-Mic/LineIn Playback Volume", 0x0b, 0x0, HDA_INPUT), 18594 - HDA_CODEC_MUTE("e-Mic/LineIn Playback Switch", 0x0b, 0x0, HDA_INPUT), 18575 + HDA_CODEC_VOLUME("Mic/LineIn Boost Volume", 0x18, 0, HDA_INPUT), 18576 + HDA_CODEC_VOLUME("Mic/LineIn Playback Volume", 0x0b, 0x0, HDA_INPUT), 18577 + HDA_CODEC_MUTE("Mic/LineIn Playback Switch", 0x0b, 0x0, HDA_INPUT), 18595 18578 18596 - HDA_CODEC_VOLUME("i-Mic Boost", 0x19, 0, HDA_INPUT), 18597 - HDA_CODEC_VOLUME("i-Mic Playback Volume", 0x0b, 0x1, HDA_INPUT), 18598 - HDA_CODEC_MUTE("i-Mic Playback Switch", 0x0b, 0x1, HDA_INPUT), 18579 + HDA_CODEC_VOLUME("Internal Mic Boost Volume", 0x19, 0, HDA_INPUT), 18580 + HDA_CODEC_VOLUME("Internal Mic Playback Volume", 0x0b, 0x1, HDA_INPUT), 18581 + HDA_CODEC_MUTE("Internal Mic Playback Switch", 0x0b, 0x1, HDA_INPUT), 18599 18582 { } /* end */ 18600 18583 }; 18601 18584 ··· 18606 18589 HDA_CODEC_VOLUME("Headphone Playback Volume", 0x03, 0x0, HDA_OUTPUT), 18607 18590 HDA_CODEC_MUTE("Headphone Playback Switch", 0x21, 0x0, HDA_OUTPUT), 18608 18591 18609 - HDA_CODEC_VOLUME("Ext Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), 18610 - HDA_CODEC_MUTE("Ext Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), 18611 - HDA_CODEC_VOLUME("Ext Mic Boost", 0x18, 0, HDA_INPUT), 18592 + HDA_CODEC_VOLUME("Mic Playback Volume", 0x0b, 0x0, HDA_INPUT), 18593 + HDA_CODEC_MUTE("Mic Playback Switch", 0x0b, 0x0, HDA_INPUT), 18594 + HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), 18612 18595 18613 - HDA_CODEC_VOLUME("Int Mic Playback Volume", 0x0b, 0x1, HDA_INPUT), 18614 - HDA_CODEC_MUTE("Int Mic Playback Switch", 0x0b, 0x1, HDA_INPUT), 18615 - HDA_CODEC_VOLUME("Int Mic Boost", 0x19, 0, HDA_INPUT), 18596 + HDA_CODEC_VOLUME("Internal Mic Playback Volume", 0x0b, 0x1, HDA_INPUT), 18597 + HDA_CODEC_MUTE("Internal Mic Playback Switch", 0x0b, 0x1, HDA_INPUT), 18598 + HDA_CODEC_VOLUME("Internal Mic Boost Volume", 0x19, 0, HDA_INPUT), 18616 18599 { } /* end */ 18617 18600 }; 18618 18601 ··· 19117 19100 return 0; 19118 19101 } 19119 19102 19120 - static inline int alc662_add_vol_ctl(struct alc_spec *spec, const char *pfx, 19121 - hda_nid_t nid, unsigned int chs) 19103 + static inline int __alc662_add_vol_ctl(struct alc_spec *spec, const char *pfx, 19104 + hda_nid_t nid, int idx, unsigned int chs) 19122 19105 { 19123 - return add_pb_vol_ctrl(spec, ALC_CTL_WIDGET_VOL, pfx, 19106 + return __add_pb_vol_ctrl(spec, ALC_CTL_WIDGET_VOL, pfx, idx, 19124 19107 HDA_COMPOSE_AMP_VAL(nid, chs, 0, HDA_OUTPUT)); 19125 19108 } 19126 19109 19127 - static inline int alc662_add_sw_ctl(struct alc_spec *spec, const char *pfx, 19128 - hda_nid_t nid, unsigned int chs) 19110 + static inline int __alc662_add_sw_ctl(struct alc_spec *spec, const char *pfx, 19111 + hda_nid_t nid, int idx, unsigned int chs) 19129 19112 { 19130 - return add_pb_sw_ctrl(spec, ALC_CTL_WIDGET_MUTE, pfx, 19113 + return __add_pb_sw_ctrl(spec, ALC_CTL_WIDGET_MUTE, pfx, idx, 19131 19114 HDA_COMPOSE_AMP_VAL(nid, chs, 0, HDA_INPUT)); 19132 19115 } 19133 19116 19117 + #define alc662_add_vol_ctl(spec, pfx, nid, chs) \ 19118 + __alc662_add_vol_ctl(spec, pfx, nid, 0, chs) 19119 + #define alc662_add_sw_ctl(spec, pfx, nid, chs) \ 19120 + __alc662_add_sw_ctl(spec, pfx, nid, 0, chs) 19134 19121 #define alc662_add_stereo_vol(spec, pfx, nid) \ 19135 19122 alc662_add_vol_ctl(spec, pfx, nid, 3) 19136 19123 #define alc662_add_stereo_sw(spec, pfx, nid) \ ··· 19148 19127 static const char *chname[4] = { 19149 19128 "Front", "Surround", NULL /*CLFE*/, "Side" 19150 19129 }; 19130 + const char *pfx = alc_get_line_out_pfx(cfg, true); 19151 19131 hda_nid_t nid, mix; 19152 19132 int i, err; 19153 19133 ··· 19159 19137 mix = alc662_dac_to_mix(codec, cfg->line_out_pins[i], nid); 19160 19138 if (!mix) 19161 19139 continue; 19162 - if (i == 2) { 19140 + if (!pfx && i == 2) { 19163 19141 /* Center/LFE */ 19164 19142 err = alc662_add_vol_ctl(spec, "Center", nid, 1); 19165 19143 if (err < 0) ··· 19174 19152 if (err < 0) 19175 19153 return err; 19176 19154 } else { 19177 - const char *pfx; 19178 - if (cfg->line_outs == 1 && 19179 - cfg->line_out_type == AUTO_PIN_SPEAKER_OUT) { 19180 - if (cfg->hp_outs) 19181 - pfx = "Speaker"; 19182 - else 19183 - pfx = "PCM"; 19184 - } else 19185 - pfx = chname[i]; 19186 - err = alc662_add_vol_ctl(spec, pfx, nid, 3); 19155 + const char *name = pfx; 19156 + if (!name) 19157 + name = chname[i]; 19158 + err = __alc662_add_vol_ctl(spec, name, nid, i, 3); 19187 19159 if (err < 0) 19188 19160 return err; 19189 - if (cfg->line_outs == 1 && 19190 - cfg->line_out_type == AUTO_PIN_SPEAKER_OUT) 19191 - pfx = "Speaker"; 19192 - err = alc662_add_sw_ctl(spec, pfx, mix, 3); 19161 + err = __alc662_add_sw_ctl(spec, name, mix, i, 3); 19193 19162 if (err < 0) 19194 19163 return err; 19195 19164 } ··· 19377 19364 alc_inithook(codec); 19378 19365 } 19379 19366 19367 + static void alc272_fixup_mario(struct hda_codec *codec, 19368 + const struct alc_fixup *fix, int pre_init) { 19369 + if (snd_hda_override_amp_caps(codec, 0x2, HDA_OUTPUT, 19370 + (0x3b << AC_AMPCAP_OFFSET_SHIFT) | 19371 + (0x3b << AC_AMPCAP_NUM_STEPS_SHIFT) | 19372 + (0x03 << AC_AMPCAP_STEP_SIZE_SHIFT) | 19373 + (0 << AC_AMPCAP_MUTE_SHIFT))) 19374 + printk(KERN_WARNING 19375 + "hda_codec: failed to override amp caps for NID 0x2\n"); 19376 + } 19377 + 19380 19378 enum { 19381 19379 ALC662_FIXUP_ASPIRE, 19382 19380 ALC662_FIXUP_IDEAPAD, 19381 + ALC272_FIXUP_MARIO, 19383 19382 }; 19384 19383 19385 19384 static const struct alc_fixup alc662_fixups[] = { ··· 19407 19382 { } 19408 19383 } 19409 19384 }, 19385 + [ALC272_FIXUP_MARIO] = { 19386 + .func = alc272_fixup_mario, 19387 + } 19410 19388 }; 19411 19389 19412 19390 static struct snd_pci_quirk alc662_fixup_tbl[] = { ··· 19420 19392 {} 19421 19393 }; 19422 19394 19395 + static const struct alc_model_fixup alc662_fixup_models[] = { 19396 + {.id = ALC272_FIXUP_MARIO, .name = "mario"}, 19397 + {} 19398 + }; 19423 19399 19424 19400 19425 19401 static int patch_alc662(struct hda_codec *codec) ··· 19523 19491 codec->patch_ops = alc_patch_ops; 19524 19492 if (board_config == ALC662_AUTO) { 19525 19493 spec->init_hook = alc662_auto_init; 19526 - alc_pick_fixup(codec, alc662_fixup_tbl, alc662_fixups, 0); 19494 + alc_pick_fixup_model(codec, alc662_fixup_models, 19495 + alc662_fixup_tbl, alc662_fixups, 0); 19527 19496 } 19528 19497 19529 19498 alc_init_jacks(codec); ··· 19651 19618 HDA_CODEC_MUTE("Front Playback Switch", 0x14, 0x0, HDA_OUTPUT), 19652 19619 HDA_CODEC_VOLUME("Headphone Playback Volume", 0x4, 0x0, HDA_OUTPUT), 19653 19620 HDA_CODEC_MUTE("Headphone Playback Switch", 0x16, 0x0, HDA_OUTPUT), 19654 - HDA_CODEC_VOLUME("Int Mic Boost", 0x12, 0, HDA_INPUT), 19655 - HDA_CODEC_VOLUME("Mic Boost", 0x18, 0, HDA_INPUT), 19656 - HDA_CODEC_VOLUME("Line In Boost", 0x19, 0, HDA_INPUT), 19621 + HDA_CODEC_VOLUME("Internal Mic Boost Volume", 0x12, 0, HDA_INPUT), 19622 + HDA_CODEC_VOLUME("Mic Boost Volume", 0x18, 0, HDA_INPUT), 19623 + HDA_CODEC_VOLUME("Line In Boost Volume", 0x19, 0, HDA_INPUT), 19657 19624 { } 19658 19625 }; 19659 19626
+13 -4
sound/pci/hda/patch_sigmatel.c
··· 389 389 0x11, 0x20, 0 390 390 }; 391 391 392 + #define STAC92HD88XXX_NUM_DMICS STAC92HD83XXX_NUM_DMICS 393 + #define stac92hd88xxx_dmic_nids stac92hd83xxx_dmic_nids 394 + 392 395 #define STAC92HD87B_NUM_DMICS 1 393 396 static hda_nid_t stac92hd87b_dmic_nids[STAC92HD87B_NUM_DMICS + 1] = { 394 397 0x11, 0 ··· 3594 3591 if (check_mic_pin(codec, spec->dmic_nids[i], 3595 3592 &fixed, &ext, &dock)) 3596 3593 return 0; 3597 - if (!fixed && !ext && !dock) 3594 + if (!fixed || (!ext && !dock)) 3598 3595 return 0; /* no input to switch */ 3599 3596 if (!(get_wcaps(codec, ext) & AC_WCAP_UNSOL_CAP)) 3600 3597 return 0; /* no unsol support */ ··· 5425 5422 snd_hda_codec_write_cache(codec, codec->afg, 0, 0x7ED, 0); 5426 5423 codec->no_trigger_sense = 1; 5427 5424 codec->spec = spec; 5428 - spec->linear_tone_beep = 1; 5425 + spec->linear_tone_beep = 0; 5429 5426 codec->slave_dig_outs = stac92hd83xxx_slave_dig_outs; 5430 5427 spec->digbeep_nid = 0x21; 5431 5428 spec->dmic_nids = stac92hd83xxx_dmic_nids; ··· 5465 5462 spec->num_dmics = stac92xx_connected_ports(codec, 5466 5463 stac92hd87b_dmic_nids, 5467 5464 STAC92HD87B_NUM_DMICS); 5468 - /* Fall through */ 5465 + spec->num_pins = ARRAY_SIZE(stac92hd88xxx_pin_nids); 5466 + spec->pin_nids = stac92hd88xxx_pin_nids; 5467 + spec->mono_nid = 0; 5468 + spec->num_pwrs = 0; 5469 + break; 5469 5470 case 0x111d7666: 5470 5471 case 0x111d7667: 5471 5472 case 0x111d7668: 5472 5473 case 0x111d7669: 5474 + spec->num_dmics = stac92xx_connected_ports(codec, 5475 + stac92hd88xxx_dmic_nids, 5476 + STAC92HD88XXX_NUM_DMICS); 5473 5477 spec->num_pins = ARRAY_SIZE(stac92hd88xxx_pin_nids); 5474 5478 spec->pin_nids = stac92hd88xxx_pin_nids; 5475 5479 spec->mono_nid = 0; 5476 - spec->digbeep_nid = 0; 5477 5480 spec->num_pwrs = 0; 5478 5481 break; 5479 5482 case 0x111d7604: