Lines Matching refs:spec

33  * @spec: hda_gen_spec object to initialize
37 int snd_hda_gen_spec_init(struct hda_gen_spec *spec)
39 snd_array_init(&spec->kctls, sizeof(struct snd_kcontrol_new), 32);
40 snd_array_init(&spec->paths, sizeof(struct nid_path), 8);
41 snd_array_init(&spec->loopback_list, sizeof(struct hda_amp_list), 8);
42 mutex_init(&spec->pcm_mutex);
49 * @spec: hda_gen_spec object
55 * name string @name to the list in @spec.
59 snd_hda_gen_add_kctl(struct hda_gen_spec *spec, const char *name,
62 struct snd_kcontrol_new *knew = snd_array_new(&spec->kctls);
76 static void free_kctls(struct hda_gen_spec *spec)
78 if (spec->kctls.list) {
79 struct snd_kcontrol_new *kctl = spec->kctls.list;
81 for (i = 0; i < spec->kctls.used; i++)
84 snd_array_free(&spec->kctls);
87 static void snd_hda_gen_spec_free(struct hda_gen_spec *spec)
89 if (!spec)
91 free_kctls(spec);
92 snd_array_free(&spec->paths);
93 snd_array_free(&spec->loopback_list);
95 if (spec->led_cdevs[LED_AUDIO_MUTE])
96 led_classdev_unregister(spec->led_cdevs[LED_AUDIO_MUTE]);
97 if (spec->led_cdevs[LED_AUDIO_MICMUTE])
98 led_classdev_unregister(spec->led_cdevs[LED_AUDIO_MICMUTE]);
107 struct hda_gen_spec *spec = codec->spec;
143 spec->suppress_auto_mute = !val;
146 spec->suppress_auto_mic = !val;
149 spec->line_in_auto_switch = !!val;
152 spec->auto_mute_via_amp = !!val;
155 spec->need_dac_fix = !!val;
158 spec->no_primary_hp = !val;
161 spec->no_multi_io = !val;
164 spec->multi_cap_vol = !!val;
167 spec->inv_dmic_split = !!val;
170 spec->indep_hp = !!val;
173 spec->add_stereo_mix_input = !!val;
177 spec->add_jack_modes = !!val;
180 spec->add_jack_modes = !!val;
183 spec->add_jack_modes = !!val;
186 spec->power_down_unused = !!val;
189 spec->hp_mic = !!val;
192 spec->suppress_hp_mic_detect = !val;
195 spec->suppress_vmaster = !val;
198 spec->mixer_nid = val;
260 struct hda_gen_spec *spec = codec->spec;
264 snd_array_for_each(&spec->paths, i, path) {
289 struct hda_gen_spec *spec = codec->spec;
290 struct nid_path *array = spec->paths.list;
293 if (!spec->paths.used)
296 if (idx < 0 || idx >= spec->paths.used)
310 struct hda_gen_spec *spec = codec->spec;
312 if (idx <= 0 || idx > spec->paths.used)
314 return snd_array_elem(&spec->paths, idx - 1);
321 struct hda_gen_spec *spec = codec->spec;
325 snd_array_for_each(&spec->paths, i, path) {
347 struct hda_gen_spec *spec = codec->spec;
352 snd_array_for_each(&spec->paths, i, path) {
480 struct hda_gen_spec *spec = codec->spec;
491 path = snd_array_new(&spec->paths);
498 spec->paths.used--;
515 struct hda_gen_spec *spec = codec->spec;
516 const hda_nid_t *list = spec->preferred_dacs;
530 struct hda_gen_spec *spec = codec->spec;
534 for (i = 0; i < spec->num_all_dacs; i++) {
535 hda_nid_t nid = spec->all_dacs[i];
584 struct hda_gen_spec *spec = codec->spec;
589 if ((spec->out_vol_mask >> nid) & 1)
633 struct hda_gen_spec *spec = codec->spec;
641 snd_array_for_each(&spec->paths, n, path) {
785 struct hda_gen_spec *spec = codec->spec;
810 if (conn[n] != spec->mixer_merge_nid)
882 struct hda_gen_spec *spec = codec->spec;
888 if (enable && (spec->power_down_unused || codec->power_save_node))
909 struct hda_gen_spec *spec = codec->spec;
911 if (!(spec->power_down_unused || codec->power_save_node) || path->active)
919 struct hda_gen_spec *spec = codec->spec;
920 if (spec->own_eapd_ctl ||
923 if (spec->keep_eapd_on && !enable)
979 add_control(struct hda_gen_spec *spec, int type, const char *name,
984 knew = snd_hda_gen_add_kctl(spec, name, &control_templates[type]);
994 static int add_control_with_pfx(struct hda_gen_spec *spec, int type,
1000 if (!add_control(spec, type, name, cidx, val))
1005 #define add_pb_vol_ctrl(spec, type, pfx, val) \
1006 add_control_with_pfx(spec, type, pfx, "Playback", "Volume", 0, val)
1007 #define add_pb_sw_ctrl(spec, type, pfx, val) \
1008 add_control_with_pfx(spec, type, pfx, "Playback", "Switch", 0, val)
1009 #define __add_pb_vol_ctrl(spec, type, pfx, cidx, val) \
1010 add_control_with_pfx(spec, type, pfx, "Playback", "Volume", cidx, val)
1011 #define __add_pb_sw_ctrl(spec, type, pfx, cidx, val) \
1012 add_control_with_pfx(spec, type, pfx, "Playback", "Switch", cidx, val)
1024 return __add_pb_vol_ctrl(codec->spec, HDA_CTL_WIDGET_VOL, pfx, cidx, val);
1070 return __add_pb_sw_ctrl(codec->spec, type, pfx, cidx, val);
1085 struct hda_gen_spec *spec = codec->spec;
1087 if (spec->auto_mute_via_amp) {
1089 bool enabled = !((spec->mute_bits >> nid) & 1);
1164 struct hda_gen_spec *spec = codec->spec;
1165 struct auto_pin_cfg *cfg = &spec->autocfg;
1168 if (cfg->line_outs == 1 && !spec->multi_ios &&
1171 return spec->vmaster_mute.hook ? "PCM" : "Master";
1176 if (spec->multiout.num_dacs == 1 && !spec->mixer_nid &&
1178 !spec->multiout.hp_out_nid[0] && !spec->multiout.extra_out_nid[0])
1179 return spec->vmaster_mute.hook ? "PCM" : "Master";
1191 !path_has_mixer(codec, spec->hp_paths[0], ctl_type))
1203 !path_has_mixer(codec, spec->speaker_paths[0], ctl_type))
1206 if (ch && spec->multi_ios)
1219 spec->speaker_paths[0], ctl_type);
1221 hp_lo_shared = !path_has_mixer(codec, spec->hp_paths[0], ctl_type);
1223 return spec->vmaster_mute.hook ? "PCM" : "Master";
1232 if (cfg->line_outs == 1 && !spec->multi_ios)
1281 struct hda_gen_spec *spec = codec->spec;
1296 if (spec->dac_min_mute)
1344 struct hda_gen_spec *spec = codec->spec;
1345 struct auto_pin_cfg *cfg = &spec->autocfg;
1348 return spec->private_dac_nids[idx];
1350 if (spec->multi_ios > idx)
1351 return spec->multi_io[idx].dac;
1368 struct hda_gen_spec *spec = codec->spec;
1380 if (!spec->obey_preferred_dacs) {
1392 } else if (spec->obey_preferred_dacs) {
1425 } else if (is_reachable_path(codec, spec->private_dac_nids[0], pin)) {
1426 dac = spec->private_dac_nids[0];
1435 path = snd_hda_add_new_path(codec, dac, pin, -spec->mixer_nid);
1436 if (!path && !i && spec->mixer_nid) {
1457 struct hda_gen_spec *spec = codec->spec;
1461 for (i = 0; i < spec->num_all_dacs; i++) {
1462 hda_nid_t nid = spec->all_dacs[i];
1494 struct hda_gen_spec *spec = codec->spec;
1495 struct auto_pin_cfg *cfg = &spec->autocfg;
1525 struct hda_gen_spec *spec = codec->spec;
1526 struct auto_pin_cfg *cfg = &spec->autocfg;
1533 old_pins = spec->multi_ios;
1550 for (j = 0; j < spec->multi_ios; j++) {
1551 if (nid == spec->multi_io[j].pin)
1554 if (j < spec->multi_ios)
1566 -spec->mixer_nid);
1572 spec->multi_io[spec->multi_ios].pin = nid;
1573 spec->multi_io[spec->multi_ios].dac = dac;
1574 spec->out_paths[cfg->line_outs + spec->multi_ios] =
1576 spec->multi_ios++;
1577 if (spec->multi_ios >= 2)
1584 if (old_pins == spec->multi_ios) {
1590 if (!hardwired && spec->multi_ios < 2) {
1592 spec->paths.used -= spec->multi_ios - old_pins;
1593 spec->multi_ios = old_pins;
1598 for (i = old_pins; i < spec->multi_ios; i++) {
1599 path = snd_hda_get_path_from_idx(codec, spec->out_paths[cfg->line_outs + i]);
1610 struct hda_gen_spec *spec = codec->spec;
1622 -spec->mixer_nid);
1623 if (!path && !i && spec->mixer_nid)
1636 static inline bool has_aamix_out_paths(struct hda_gen_spec *spec)
1638 return spec->aamix_out_paths[0] || spec->aamix_out_paths[1] ||
1639 spec->aamix_out_paths[2];
1645 struct hda_gen_spec *spec = codec->spec;
1651 is_nid_contained(path, spec->mixer_nid))
1654 dac = spec->private_dac_nids[0];
1656 path = snd_hda_add_new_path(codec, dac, pin, spec->mixer_nid);
1660 else if (spec->multiout.hp_out_nid[0])
1661 dac = spec->multiout.hp_out_nid[0];
1662 else if (spec->multiout.extra_out_nid[0])
1663 dac = spec->multiout.extra_out_nid[0];
1668 spec->mixer_nid);
1681 struct hda_gen_spec *spec = codec->spec;
1682 struct auto_pin_cfg *cfg = &spec->autocfg;
1687 idx = spec->out_paths[0];
1689 idx = spec->hp_paths[0];
1695 if (!spec->mixer_nid || !is_nid_contained(path, spec->mixer_nid))
1700 if (spec->out_paths[i] == idx)
1702 path = snd_hda_get_path_from_idx(codec, spec->out_paths[i]);
1703 if (path && is_nid_contained(path, spec->mixer_nid))
1707 path = snd_hda_get_path_from_idx(codec, spec->speaker_paths[i]);
1708 if (path && is_nid_contained(path, spec->mixer_nid))
1739 struct hda_gen_spec *spec = codec->spec;
1740 struct auto_pin_cfg *cfg = &spec->autocfg;
1744 spec->multiout.num_dacs = cfg->line_outs;
1745 spec->multiout.dac_nids = spec->private_dac_nids;
1746 memset(spec->private_dac_nids, 0, sizeof(spec->private_dac_nids));
1747 memset(spec->multiout.hp_out_nid, 0, sizeof(spec->multiout.hp_out_nid));
1748 memset(spec->multiout.extra_out_nid, 0, sizeof(spec->multiout.extra_out_nid));
1749 spec->multi_ios = 0;
1750 snd_array_free(&spec->paths);
1753 memset(spec->out_paths, 0, sizeof(spec->out_paths));
1754 memset(spec->hp_paths, 0, sizeof(spec->hp_paths));
1755 memset(spec->speaker_paths, 0, sizeof(spec->speaker_paths));
1756 memset(spec->aamix_out_paths, 0, sizeof(spec->aamix_out_paths));
1757 memset(spec->digout_paths, 0, sizeof(spec->digout_paths));
1758 memset(spec->input_paths, 0, sizeof(spec->input_paths));
1759 memset(spec->loopback_paths, 0, sizeof(spec->loopback_paths));
1760 memset(&spec->digin_path, 0, sizeof(spec->digin_path));
1770 spec->private_dac_nids,
1771 spec->out_paths);
1774 spec->multiout.hp_out_nid,
1775 spec->hp_paths);
1778 spec->multiout.extra_out_nid,
1779 spec->speaker_paths);
1780 if (!spec->no_multi_io &&
1791 spec->private_dac_nids, spec->out_paths,
1792 spec->main_out_badness);
1794 if (!spec->no_multi_io && fill_mio_first &&
1805 spec->multiout.hp_out_nid,
1806 spec->hp_paths,
1807 spec->extra_out_badness);
1815 spec->multiout.extra_out_nid,
1816 spec->speaker_paths,
1817 spec->extra_out_badness);
1822 if (!spec->no_multi_io &&
1830 if (spec->mixer_nid) {
1831 spec->aamix_out_paths[0] =
1832 check_aamix_out_path(codec, spec->out_paths[0]);
1834 spec->aamix_out_paths[1] =
1835 check_aamix_out_path(codec, spec->hp_paths[0]);
1837 spec->aamix_out_paths[2] =
1838 check_aamix_out_path(codec, spec->speaker_paths[0]);
1841 if (!spec->no_multi_io &&
1844 spec->multi_ios = 1; /* give badness */
1847 spec->multiout.num_dacs = 0;
1849 if (spec->private_dac_nids[i])
1850 spec->multiout.num_dacs++;
1852 memmove(spec->private_dac_nids + i,
1853 spec->private_dac_nids + i + 1,
1855 spec->private_dac_nids[cfg->line_outs - 1] = 0;
1859 spec->ext_channel_count = spec->min_channel_count =
1860 spec->multiout.num_dacs * 2;
1862 if (spec->multi_ios == 2) {
1864 spec->private_dac_nids[spec->multiout.num_dacs++] =
1865 spec->multi_io[i].dac;
1866 } else if (spec->multi_ios) {
1867 spec->multi_ios = 0;
1871 if (spec->indep_hp && !indep_hp_possible(codec))
1877 spec->multiout.hp_out_nid,
1878 spec->hp_paths);
1881 spec->multiout.extra_out_nid,
1882 spec->speaker_paths);
1911 struct hda_gen_spec *spec = codec->spec;
1918 spec->multiout.dac_nids[0],
1919 spec->multiout.dac_nids[1],
1920 spec->multiout.dac_nids[2],
1921 spec->multiout.dac_nids[3],
1924 print_nid_path_idx(codec, " out", spec->out_paths[i]);
1925 if (spec->multi_ios > 0)
1927 spec->multi_ios,
1928 spec->multi_io[0].pin, spec->multi_io[1].pin,
1929 spec->multi_io[0].dac, spec->multi_io[1].dac);
1930 for (i = 0; i < spec->multi_ios; i++)
1932 spec->out_paths[cfg->line_outs + i]);
1937 spec->multiout.hp_out_nid[0],
1938 spec->multiout.hp_out_nid[1],
1939 spec->multiout.hp_out_nid[2],
1940 spec->multiout.hp_out_nid[3]);
1942 print_nid_path_idx(codec, " hp ", spec->hp_paths[i]);
1947 spec->multiout.extra_out_nid[0],
1948 spec->multiout.extra_out_nid[1],
1949 spec->multiout.extra_out_nid[2],
1950 spec->multiout.extra_out_nid[3]);
1952 print_nid_path_idx(codec, " spk", spec->speaker_paths[i]);
1954 print_nid_path_idx(codec, " mix", spec->aamix_out_paths[i]);
1963 struct hda_gen_spec *spec = codec->spec;
1966 spec->num_all_dacs = 0;
1967 memset(spec->all_dacs, 0, sizeof(spec->all_dacs));
1971 if (spec->num_all_dacs >= ARRAY_SIZE(spec->all_dacs)) {
1975 spec->all_dacs[spec->num_all_dacs++] = nid;
1981 struct hda_gen_spec *spec = codec->spec;
1982 struct auto_pin_cfg *cfg = &spec->autocfg;
2066 path = snd_hda_get_path_from_idx(codec, spec->out_paths[0]);
2068 spec->vmaster_nid = look_for_out_vol_nid(codec, path);
2069 if (spec->vmaster_nid) {
2070 snd_hda_set_vmaster_tlv(codec, spec->vmaster_nid,
2071 HDA_OUTPUT, spec->vmaster_tlv);
2072 if (spec->dac_min_mute)
2073 spec->vmaster_tlv[SNDRV_CTL_TLVO_DB_SCALE_MUTE_AND_STEP] |= TLV_DB_SCALE_MUTE;
2078 if (spec->prefer_hp_amp || cfg->line_out_type == AUTO_PIN_HP_OUT)
2086 val = spec->prefer_hp_amp ? PIN_HP : PIN_OUT;
2092 if (spec->indep_hp && !indep_hp_possible(codec))
2093 spec->indep_hp = 0;
2103 struct hda_gen_spec *spec = codec->spec;
2107 if (spec->multi_ios > 0 && cfg->line_outs < 3)
2108 noutputs += spec->multi_ios;
2115 path = snd_hda_get_path_from_idx(codec, spec->out_paths[i]);
2199 struct hda_gen_spec *spec = codec->spec;
2200 return create_extra_outs(codec, spec->autocfg.hp_outs,
2201 spec->hp_paths,
2207 struct hda_gen_spec *spec = codec->spec;
2208 return create_extra_outs(codec, spec->autocfg.speaker_outs,
2209 spec->speaker_paths,
2229 struct hda_gen_spec *spec = codec->spec;
2230 ucontrol->value.enumerated.item[0] = spec->indep_hp_enabled;
2242 struct hda_gen_spec *spec = codec->spec;
2246 mutex_lock(&spec->pcm_mutex);
2247 if (spec->active_streams) {
2252 if (spec->indep_hp_enabled != select) {
2254 if (spec->autocfg.line_out_type == AUTO_PIN_HP_OUT)
2255 dacp = &spec->private_dac_nids[0];
2257 dacp = &spec->multiout.hp_out_nid[0];
2260 if (spec->have_aamix_ctl) {
2261 if (spec->autocfg.line_out_type == AUTO_PIN_HP_OUT)
2262 update_aamix_paths(codec, spec->aamix_mode,
2263 spec->out_paths[0],
2264 spec->aamix_out_paths[0],
2265 spec->autocfg.line_out_type);
2267 update_aamix_paths(codec, spec->aamix_mode,
2268 spec->hp_paths[0],
2269 spec->aamix_out_paths[1],
2273 spec->indep_hp_enabled = select;
2274 if (spec->indep_hp_enabled)
2277 *dacp = spec->alt_dac_nid;
2283 mutex_unlock(&spec->pcm_mutex);
2298 struct hda_gen_spec *spec = codec->spec;
2301 if (!spec->indep_hp)
2303 if (spec->autocfg.line_out_type == AUTO_PIN_HP_OUT)
2304 dac = spec->multiout.dac_nids[0];
2306 dac = spec->multiout.hp_out_nid[0];
2308 spec->indep_hp = 0;
2312 spec->indep_hp_enabled = false;
2313 spec->alt_dac_nid = dac;
2314 if (!snd_hda_gen_add_kctl(spec, NULL, &indep_hp_ctl))
2327 struct hda_gen_spec *spec = codec->spec;
2332 uinfo->value.enumerated.items = spec->multi_ios + 1;
2333 if (uinfo->value.enumerated.item > spec->multi_ios)
2334 uinfo->value.enumerated.item = spec->multi_ios;
2335 chs = uinfo->value.enumerated.item * 2 + spec->min_channel_count;
2344 struct hda_gen_spec *spec = codec->spec;
2346 (spec->ext_channel_count - spec->min_channel_count) / 2;
2353 struct hda_gen_spec *spec = codec->spec;
2355 spec->out_paths[spec->autocfg.line_outs + idx]);
2363 static bool aamix_default(struct hda_gen_spec *spec)
2365 return !spec->have_aamix_ctl || spec->aamix_mode;
2370 struct hda_gen_spec *spec = codec->spec;
2371 hda_nid_t nid = spec->multi_io[idx].pin;
2383 snd_hda_activate_path(codec, path, true, aamix_default(spec));
2387 snd_hda_activate_path(codec, path, false, aamix_default(spec));
2388 set_pin_target(codec, nid, spec->multi_io[idx].ctl_in, true);
2402 struct hda_gen_spec *spec = codec->spec;
2406 if (ch < 0 || ch > spec->multi_ios)
2408 if (ch == (spec->ext_channel_count - spec->min_channel_count) / 2)
2410 spec->ext_channel_count = ch * 2 + spec->min_channel_count;
2411 for (i = 0; i < spec->multi_ios; i++)
2413 spec->multiout.max_channels = max(spec->ext_channel_count,
2414 spec->const_channel_count);
2415 if (spec->need_dac_fix)
2416 spec->multiout.num_dacs = spec->multiout.max_channels / 2;
2430 struct hda_gen_spec *spec = codec->spec;
2432 if (spec->multi_ios > 0) {
2433 if (!snd_hda_gen_add_kctl(spec, NULL, &channel_mode_enum))
2449 struct hda_gen_spec *spec = codec->spec;
2450 ucontrol->value.enumerated.item[0] = spec->aamix_mode;
2458 struct hda_gen_spec *spec = codec->spec;
2469 if (out_type == AUTO_PIN_HP_OUT && spec->indep_hp_enabled &&
2470 mix_path->path[0] != spec->alt_dac_nid)
2488 struct hda_gen_spec *spec = codec->spec;
2496 spec->aamix_mode);
2504 struct hda_gen_spec *spec = codec->spec;
2505 const struct auto_pin_cfg *cfg = &spec->autocfg;
2508 if (val == spec->aamix_mode)
2510 spec->aamix_mode = val;
2511 if (has_aamix_out_paths(spec)) {
2512 update_aamix_paths(codec, val, spec->out_paths[0],
2513 spec->aamix_out_paths[0],
2515 update_aamix_paths(codec, val, spec->hp_paths[0],
2516 spec->aamix_out_paths[1],
2518 update_aamix_paths(codec, val, spec->speaker_paths[0],
2519 spec->aamix_out_paths[2],
2522 update_output_paths(codec, cfg->line_outs, spec->out_paths);
2524 update_output_paths(codec, cfg->hp_outs, spec->hp_paths);
2527 spec->speaker_paths);
2542 struct hda_gen_spec *spec = codec->spec;
2544 if (!spec->mixer_nid)
2546 if (!snd_hda_gen_add_kctl(spec, NULL, &loopback_mixing_enum))
2548 spec->have_aamix_ctl = 1;
2561 struct hda_gen_spec *spec = codec->spec;
2566 pin = spec->hp_mic_pin;
2567 as_mic = spec->cur_mux[adc_mux] == spec->hp_mic_mux_idx;
2584 if (val == AC_PINCTL_VREF_HIZ && spec->shared_mic_vref_pin) {
2585 const hda_nid_t vref_pin = spec->shared_mic_vref_pin;
2592 if (!spec->hp_mic_jack_modes) {
2605 struct hda_gen_spec *spec = codec->spec;
2606 struct auto_pin_cfg *cfg = &spec->autocfg;
2610 if (!spec->hp_mic) {
2611 if (spec->suppress_hp_mic_detect)
2625 spec->hp_mic = 0; /* clear once */
2644 spec->hp_mic = 1;
2645 spec->hp_mic_pin = nid;
2647 spec->suppress_auto_mic = 1;
2703 struct hda_gen_spec *spec = codec->spec;
2707 snd_array_for_each(&spec->kctls, i, kctl) {
2717 struct hda_gen_spec *spec = codec->spec;
2720 snd_hda_get_pin_label(codec, pin, &spec->autocfg, name, name_len, &idx);
2729 struct hda_gen_spec *spec = codec->spec;
2730 if (spec->add_jack_modes) {
2741 struct hda_gen_spec *spec = codec->spec;
2746 if (pin == spec->hp_mic_pin)
2752 knew = snd_hda_gen_add_kctl(spec, name,
2871 struct hda_gen_spec *spec = codec->spec;
2873 if (spec->add_jack_modes)
2880 struct hda_gen_spec *spec = codec->spec;
2885 if (pin == spec->hp_mic_pin)
2898 knew = snd_hda_gen_add_kctl(spec, name, &in_jack_mode_enum);
3017 struct hda_gen_spec *spec = codec->spec;
3020 knew = snd_hda_gen_add_kctl(spec, "Headphone Mic Jack Mode",
3025 spec->hp_mic_jack_modes = 1;
3034 static int add_loopback_list(struct hda_gen_spec *spec, hda_nid_t mix, int idx)
3038 list = snd_array_new(&spec->loopback_list);
3044 spec->loopback.amplist = spec->loopback_list.list;
3091 struct hda_gen_spec *spec = codec->spec;
3103 spec->loopback_paths[input_idx] = snd_hda_get_path_idx(codec, path);
3107 err = __add_pb_vol_ctrl(spec, HDA_CTL_WIDGET_VOL, ctlname, ctlidx, mix_val);
3114 err = __add_pb_sw_ctrl(spec, HDA_CTL_WIDGET_MUTE, ctlname, ctlidx, mute_val);
3122 err = add_loopback_list(spec, mix_nid, idx);
3126 if (spec->mixer_nid != spec->mixer_merge_nid &&
3127 !spec->loopback_merge_path) {
3128 path = snd_hda_add_new_path(codec, spec->mixer_nid,
3129 spec->mixer_merge_nid, 0);
3135 spec->loopback_merge_path =
3152 struct hda_gen_spec *spec = codec->spec;
3154 hda_nid_t *adc_nids = spec->adc_nids;
3155 int max_nums = ARRAY_SIZE(spec->adc_nids);
3168 spec->num_adc_nids = nums;
3171 spec->num_all_adcs = nums;
3172 memcpy(spec->all_adcs, spec->adc_nids, nums * sizeof(hda_nid_t));
3182 struct hda_gen_spec *spec = codec->spec;
3183 struct hda_input_mux *imux = &spec->input_mux;
3189 for (n = 0; n < spec->num_adc_nids; n++) {
3191 if (!spec->input_paths[i][n])
3203 for (n = 0; n < spec->num_adc_nids; n++) {
3204 if (spec->input_paths[i][n]) {
3205 spec->dyn_adc_idx[i] = n;
3212 spec->dyn_adc_switch = 1;
3213 } else if (nums != spec->num_adc_nids) {
3216 for (n = 0; n < spec->num_adc_nids; n++) {
3220 spec->adc_nids[nums] = spec->adc_nids[n];
3223 spec->input_paths[i][nums]);
3224 spec->input_paths[i][nums] =
3225 spec->input_paths[i][n];
3226 spec->input_paths[i][n] = 0;
3231 spec->num_adc_nids = nums;
3235 (imux->num_items == 2 && spec->hp_mic)) {
3237 spec->num_adc_nids = 1; /* reduce to a single ADC */
3241 if (!spec->dyn_adc_switch && spec->multi_cap_vol)
3242 spec->num_adc_nids = 1;
3252 struct hda_gen_spec *spec = codec->spec;
3253 struct hda_input_mux *imux = &spec->input_mux;
3260 hda_nid_t adc = spec->adc_nids[c];
3268 spec->input_paths[imux_idx][c] =
3272 if (spec->hp_mic_pin == pin)
3273 spec->hp_mic_mux_idx = imux->num_items;
3274 spec->imux_pins[imux->num_items] = pin;
3277 if (spec->dyn_adc_switch)
3278 spec->dyn_adc_idx[imux_idx] = c;
3292 struct hda_gen_spec *spec = codec->spec;
3293 const struct auto_pin_cfg *cfg = &spec->autocfg;
3307 if (spec->input_labels[j] &&
3308 !strcmp(spec->input_labels[j], label)) {
3309 idx = spec->input_label_idxs[j] + 1;
3314 spec->input_labels[i] = label;
3315 spec->input_label_idxs[i] = idx;
3325 struct hda_gen_spec *spec = codec->spec;
3326 const struct auto_pin_cfg *cfg = &spec->autocfg;
3327 hda_nid_t mixer = spec->mixer_nid;
3350 if (pin != spec->hp_mic_pin &&
3357 spec->input_labels[i],
3358 spec->input_label_idxs[i],
3366 spec->input_labels[i], -mixer);
3370 if (spec->add_jack_modes) {
3378 if (mixer && spec->add_stereo_mix_input == HDA_HINT_STEREO_MIX_ENABLE) {
3384 spec->suppress_auto_mic = 1;
3398 struct hda_gen_spec *spec = codec->spec;
3403 if (spec->dyn_adc_switch)
3404 adc_idx = spec->dyn_adc_idx[imux_idx];
3409 return snd_hda_get_path_from_idx(codec, spec->input_paths[imux_idx][adc_idx]);
3419 struct hda_gen_spec *spec = codec->spec;
3420 return snd_hda_input_mux_info(&spec->input_mux, uinfo);
3427 struct hda_gen_spec *spec = codec->spec;
3431 ucontrol->value.enumerated.item[0] = spec->cur_mux[adc_idx];
3465 struct hda_gen_spec *spec = codec->spec;
3470 imux = &spec->input_mux;
3487 if (err >= 0 && spec->cap_sync_hook)
3488 spec->cap_sync_hook(codec, kcontrol, ucontrol);
3578 struct hda_gen_spec *spec = codec->spec;
3579 struct auto_pin_cfg *cfg = &spec->autocfg;
3583 if (!spec->inv_dmic_split)
3601 struct hda_gen_spec *spec = codec->spec;
3608 if (spec->cap_sync_hook)
3609 spec->cap_sync_hook(codec, kcontrol, ucontrol);
3618 struct hda_gen_spec *spec = codec->spec;
3634 knew = add_control(spec, type, tmpname, idx,
3650 knew = add_control(spec, type, tmpname, idx,
3678 struct hda_gen_spec *spec = codec->spec;
3682 knew = snd_hda_gen_add_kctl(spec, NULL, &cap_vol_temp);
3690 knew = snd_hda_gen_add_kctl(spec, NULL, &cap_sw_temp);
3724 struct hda_gen_spec *spec = codec->spec;
3725 struct hda_input_mux *imux = &spec->input_mux;
3733 if (idx >= spec->autocfg.num_inputs)
3735 inv_dmic = is_inv_dmic_pin(codec, spec->imux_pins[i]);
3739 spec->input_labels[idx],
3740 spec->input_label_idxs[idx],
3753 struct hda_gen_spec *spec = codec->spec;
3754 struct hda_input_mux *imux = &spec->input_mux;
3757 if (spec->dyn_adc_switch)
3760 nums = spec->num_adc_nids;
3762 if (!spec->auto_mic && imux->num_items > 1) {
3766 knew = snd_hda_gen_add_kctl(spec, name, &cap_src_temp);
3774 bool multi_cap_vol = spec->multi_cap_vol;
3801 if (is_inv_dmic_pin(codec, spec->imux_pins[i]))
3869 struct hda_gen_spec *spec = codec->spec;
3870 struct auto_pin_cfg *cfg = &spec->autocfg;
3871 struct hda_input_mux *imux = &spec->input_mux;
3874 if (!spec->num_adc_nids)
3901 "%s Boost Volume", spec->input_labels[idx]);
3902 if (!add_control(spec, HDA_CTL_WIDGET_VOL, boost_label,
3903 spec->input_label_idxs[idx], val))
3921 struct hda_gen_spec *spec = codec->spec;
3940 spec->led_cdevs[idx] = cdev;
3958 struct hda_gen_spec *spec = codec->spec;
3969 if (spec->vmaster_mute.hook)
3972 spec->vmaster_mute.hook = vmaster_update_mute_led;
3973 spec->vmaster_mute_enum = 1;
3990 struct hda_gen_spec *spec = codec->spec;
3993 switch (spec->micmute_led.led_mode) {
4001 val = !!spec->micmute_led.capture;
4005 val = !spec->micmute_led.capture;
4009 if (val == spec->micmute_led.led_value)
4011 spec->micmute_led.led_value = val;
4013 spec->micmute_led.led_value ? LED_ON : LED_OFF);
4020 struct hda_gen_spec *spec = codec->spec;
4023 if (spec->micmute_led.old_hook)
4024 spec->micmute_led.old_hook(codec, kcontrol, ucontrol);
4033 spec->micmute_led.capture |= mask;
4035 spec->micmute_led.capture &= ~mask;
4054 struct hda_gen_spec *spec = codec->spec;
4056 ucontrol->value.enumerated.item[0] = spec->micmute_led.led_mode;
4064 struct hda_gen_spec *spec = codec->spec;
4070 if (mode == spec->micmute_led.led_mode)
4072 spec->micmute_led.led_mode = mode;
4088 struct hda_gen_spec *spec = codec->spec;
4090 spec->micmute_led.led_mode = MICMUTE_LED_FOLLOW_MUTE;
4091 spec->micmute_led.capture = 0;
4092 spec->micmute_led.led_value = -1;
4093 spec->micmute_led.old_hook = spec->cap_sync_hook;
4094 spec->cap_sync_hook = update_micmute_led;
4095 if (!snd_hda_gen_add_kctl(spec, NULL, &micmute_led_mode_ctl))
4138 struct hda_gen_spec *spec = codec->spec;
4145 for (i = 0; i < spec->autocfg.dig_outs; i++) {
4146 pin = spec->autocfg.dig_out_pins[i];
4156 spec->digout_paths[i] = snd_hda_get_path_idx(codec, path);
4159 spec->multiout.dig_out_nid = dig_nid;
4160 spec->dig_out_type = spec->autocfg.dig_out_type[0];
4162 spec->multiout.follower_dig_outs = spec->follower_dig_outs;
4163 if (nums >= ARRAY_SIZE(spec->follower_dig_outs) - 1)
4165 spec->follower_dig_outs[nums - 1] = dig_nid;
4170 if (spec->autocfg.dig_in_pin) {
4171 pin = spec->autocfg.dig_in_pin;
4183 spec->dig_in_nid = dig_nid;
4184 spec->digin_path = snd_hda_get_path_idx(codec, path);
4203 struct hda_gen_spec *spec = codec->spec;
4207 imux = &spec->input_mux;
4213 if (spec->cur_mux[adc_idx] == idx)
4216 old_path = get_input_path(codec, adc_idx, spec->cur_mux[adc_idx]);
4222 spec->cur_mux[adc_idx] = idx;
4224 if (spec->hp_mic)
4227 if (spec->dyn_adc_switch)
4236 if (spec->cap_sync_hook)
4237 spec->cap_sync_hook(codec, NULL, NULL);
4250 struct hda_gen_spec *spec = codec->spec;
4255 snd_array_for_each(&spec->paths, n, path) {
4351 struct hda_gen_spec *spec = codec->spec;
4352 struct auto_pin_cfg *cfg = &spec->autocfg;
4380 struct hda_gen_spec *spec = codec->spec;
4381 struct auto_pin_cfg *cfg = &spec->autocfg;
4399 struct hda_gen_spec *spec = codec->spec;
4408 path = snd_array_new(&spec->paths);
4423 struct hda_gen_spec *spec = codec->spec;
4424 struct auto_pin_cfg *cfg = &spec->autocfg;
4425 hda_nid_t nid = spec->beep_nid;
4460 struct hda_gen_spec *spec = codec->spec;
4463 path = snd_array_new(&spec->paths);
4503 struct hda_gen_spec *spec = codec->spec;
4516 if (spec->auto_mute_via_amp) {
4527 spec->mute_bits |= (1ULL << mute_nid);
4529 spec->mute_bits &= ~(1ULL << mute_nid);
4535 if (spec->keep_vref_in_automute)
4567 struct hda_gen_spec *spec = codec->spec;
4575 if (spec->autocfg.line_out_type == AUTO_PIN_HP_OUT)
4576 paths = spec->out_paths;
4578 paths = spec->hp_paths;
4579 do_automute(codec, ARRAY_SIZE(spec->autocfg.hp_pins),
4580 spec->autocfg.hp_pins, paths, spec->master_mute);
4582 if (!spec->automute_speaker)
4585 on = spec->hp_jack_present | spec->line_jack_present;
4586 on |= spec->master_mute;
4587 spec->speaker_muted = on;
4588 if (spec->autocfg.line_out_type == AUTO_PIN_SPEAKER_OUT)
4589 paths = spec->out_paths;
4591 paths = spec->speaker_paths;
4592 do_automute(codec, ARRAY_SIZE(spec->autocfg.speaker_pins),
4593 spec->autocfg.speaker_pins, paths, on);
4597 if (spec->autocfg.line_out_pins[0] == spec->autocfg.hp_pins[0] ||
4598 spec->autocfg.line_out_pins[0] == spec->autocfg.speaker_pins[0])
4600 if (!spec->automute_lo)
4603 on = spec->hp_jack_present;
4604 on |= spec->master_mute;
4605 spec->line_out_muted = on;
4606 paths = spec->out_paths;
4607 do_automute(codec, ARRAY_SIZE(spec->autocfg.line_out_pins),
4608 spec->autocfg.line_out_pins, paths, on);
4614 struct hda_gen_spec *spec = codec->spec;
4615 if (spec->automute_hook)
4616 spec->automute_hook(codec);
4621 if (spec->auto_mute_via_amp && !codec->bus->shutdown)
4622 snd_ctl_sync_vmaster(spec->vmaster_mute.sw_kctl, false);
4633 struct hda_gen_spec *spec = codec->spec;
4634 hda_nid_t *pins = spec->autocfg.hp_pins;
4635 int num_pins = ARRAY_SIZE(spec->autocfg.hp_pins);
4638 if (spec->indep_hp_enabled) {
4643 spec->hp_jack_present = detect_jacks(codec, num_pins, pins);
4644 if (!spec->detect_hp || (!spec->automute_speaker && !spec->automute_lo))
4658 struct hda_gen_spec *spec = codec->spec;
4660 if (spec->autocfg.line_out_type == AUTO_PIN_SPEAKER_OUT)
4663 if (spec->autocfg.line_out_pins[0] == spec->autocfg.hp_pins[0])
4666 spec->line_jack_present =
4667 detect_jacks(codec, ARRAY_SIZE(spec->autocfg.line_out_pins),
4668 spec->autocfg.line_out_pins);
4669 if (!spec->automute_speaker || !spec->detect_lo)
4683 struct hda_gen_spec *spec = codec->spec;
4686 if (!spec->auto_mic)
4689 for (i = spec->am_num_entries - 1; i > 0; i--) {
4690 hda_nid_t pin = spec->am_entry[i].pin;
4695 mux_select(codec, 0, spec->am_entry[i].idx);
4699 mux_select(codec, 0, spec->am_entry[0].idx);
4707 struct hda_gen_spec *spec = codec->spec;
4708 if (spec->hp_automute_hook)
4709 spec->hp_automute_hook(codec, jack);
4717 struct hda_gen_spec *spec = codec->spec;
4718 if (spec->line_automute_hook)
4719 spec->line_automute_hook(codec, jack);
4727 struct hda_gen_spec *spec = codec->spec;
4728 if (spec->mic_autoswitch_hook)
4729 spec->mic_autoswitch_hook(codec, jack);
4749 struct hda_gen_spec *spec = codec->spec;
4754 if (spec->automute_speaker_possible && spec->automute_lo_possible)
4763 struct hda_gen_spec *spec = codec->spec;
4765 if (spec->automute_speaker)
4767 if (spec->automute_lo)
4778 struct hda_gen_spec *spec = codec->spec;
4782 if (!spec->automute_speaker && !spec->automute_lo)
4784 spec->automute_speaker = 0;
4785 spec->automute_lo = 0;
4788 if (spec->automute_speaker_possible) {
4789 if (!spec->automute_lo && spec->automute_speaker)
4791 spec->automute_speaker = 1;
4792 spec->automute_lo = 0;
4793 } else if (spec->automute_lo_possible) {
4794 if (spec->automute_lo)
4796 spec->automute_lo = 1;
4801 if (!spec->automute_lo_possible || !spec->automute_speaker_possible)
4803 if (spec->automute_speaker && spec->automute_lo)
4805 spec->automute_speaker = 1;
4806 spec->automute_lo = 1;
4825 struct hda_gen_spec *spec = codec->spec;
4827 if (!snd_hda_gen_add_kctl(spec, NULL, &automute_mode_enum))
4838 struct hda_gen_spec *spec = codec->spec;
4839 struct auto_pin_cfg *cfg = &spec->autocfg;
4843 if (spec->suppress_auto_mute)
4876 spec->detect_hp = 1;
4888 spec->detect_lo = 1;
4890 spec->automute_lo_possible = spec->detect_hp;
4893 spec->automute_speaker_possible = cfg->speaker_outs &&
4894 (spec->detect_hp || spec->detect_lo);
4896 spec->automute_lo = spec->automute_lo_possible;
4897 spec->automute_speaker = spec->automute_speaker_possible;
4899 if (spec->automute_speaker_possible || spec->automute_lo_possible) {
4911 struct hda_gen_spec *spec = codec->spec;
4915 imux = &spec->input_mux;
4916 for (i = 0; i < spec->am_num_entries; i++) {
4917 spec->am_entry[i].idx =
4918 find_idx_in_nid_list(spec->am_entry[i].pin,
4919 spec->imux_pins, imux->num_items);
4920 if (spec->am_entry[i].idx < 0)
4925 for (i = 1; i < spec->am_num_entries; i++)
4927 spec->am_entry[i].pin,
4945 struct hda_gen_spec *spec = codec->spec;
4946 struct auto_pin_cfg *cfg = &spec->autocfg;
4950 if (spec->suppress_auto_mic)
4972 if (!spec->line_in_auto_switch &&
4982 spec->am_entry[num_pins].pin = nid;
4983 spec->am_entry[num_pins].attr = attr;
4990 spec->am_num_entries = num_pins;
4994 sort(spec->am_entry, num_pins, sizeof(spec->am_entry[0]),
5000 spec->auto_mic = 1;
5001 spec->num_adc_nids = 1;
5002 spec->cur_mux[0] = spec->am_entry[0].idx;
5004 spec->am_entry[0].pin,
5005 spec->am_entry[1].pin,
5006 spec->am_entry[2].pin);
5022 struct hda_gen_spec *spec = codec->spec;
5024 if (!spec->power_down_unused && !codec->power_save_node)
5082 struct hda_gen_spec *spec = codec->spec;
5087 if (spec->mixer_nid && !spec->mixer_merge_nid)
5088 spec->mixer_merge_nid = spec->mixer_nid;
5090 if (cfg != &spec->autocfg) {
5091 spec->autocfg = *cfg;
5092 cfg = &spec->autocfg;
5095 if (!spec->main_out_badness)
5096 spec->main_out_badness = &hda_main_out_badness;
5097 if (!spec->extra_out_badness)
5098 spec->extra_out_badness = &hda_extra_out_badness;
5104 spec->multiout.max_channels = 2;
5105 spec->no_analog = 1;
5112 if (!spec->no_primary_hp &&
5157 spec->const_channel_count = spec->ext_channel_count;
5160 spec->const_channel_count = max(spec->const_channel_count,
5163 spec->const_channel_count = max(spec->const_channel_count,
5165 spec->multiout.max_channels = max(spec->ext_channel_count,
5166 spec->const_channel_count);
5181 if (!spec->auto_mic && spec->mixer_nid &&
5182 spec->add_stereo_mix_input == HDA_HINT_STEREO_MIX_AUTO &&
5183 spec->input_mux.num_items > 1) {
5184 err = parse_capture_source(codec, spec->mixer_nid,
5185 CFG_IDX_MIX, spec->num_all_adcs,
5203 if (spec->hp_mic_pin &&
5204 (spec->auto_mic || spec->input_mux.num_items == 1 ||
5205 spec->add_jack_modes)) {
5206 err = create_hp_mic_jack_mode(codec, spec->hp_mic_pin);
5211 if (spec->add_jack_modes) {
5230 if (spec->mixer_nid)
5231 mute_all_mixer_nid(codec, spec->mixer_nid);
5236 if (spec->power_down_unused || codec->power_save_node) {
5243 if (!spec->no_analog && spec->beep_nid) {
5244 err = snd_hda_attach_beep_device(codec, spec->beep_nid);
5283 struct hda_gen_spec *spec = codec->spec;
5286 if (spec->kctls.used) {
5287 err = snd_hda_add_new_ctls(codec, spec->kctls.list);
5292 if (spec->multiout.dig_out_nid) {
5294 spec->multiout.dig_out_nid,
5295 spec->multiout.dig_out_nid,
5296 spec->pcm_rec[1]->pcm_type);
5299 if (!spec->no_analog) {
5301 &spec->multiout);
5304 spec->multiout.share_spdif = 1;
5307 if (spec->dig_in_nid) {
5308 err = snd_hda_create_spdif_in_ctls(codec, spec->dig_in_nid);
5314 if (!spec->no_analog && !spec->suppress_vmaster &&
5317 spec->vmaster_tlv, follower_pfxs,
5322 if (!spec->no_analog && !spec->suppress_vmaster &&
5327 true, &spec->vmaster_mute.sw_kctl);
5330 if (spec->vmaster_mute.hook) {
5331 snd_hda_add_vmaster_hook(codec, &spec->vmaster_mute,
5332 spec->vmaster_mute_enum);
5333 snd_hda_sync_vmaster_hook(&spec->vmaster_mute);
5337 free_kctls(spec); /* no longer needed */
5339 err = snd_hda_jack_add_kctls(codec, &spec->autocfg);
5357 struct hda_gen_spec *spec = codec->spec;
5358 if (spec->pcm_playback_hook)
5359 spec->pcm_playback_hook(hinfo, codec, substream, action);
5367 struct hda_gen_spec *spec = codec->spec;
5368 if (spec->pcm_capture_hook)
5369 spec->pcm_capture_hook(hinfo, codec, substream, action);
5379 struct hda_gen_spec *spec = codec->spec;
5382 mutex_lock(&spec->pcm_mutex);
5384 &spec->multiout, substream,
5387 spec->active_streams |= 1 << STREAM_MULTI_OUT;
5391 mutex_unlock(&spec->pcm_mutex);
5401 struct hda_gen_spec *spec = codec->spec;
5404 err = snd_hda_multi_out_analog_prepare(codec, &spec->multiout,
5416 struct hda_gen_spec *spec = codec->spec;
5419 err = snd_hda_multi_out_analog_cleanup(codec, &spec->multiout);
5430 struct hda_gen_spec *spec = codec->spec;
5431 mutex_lock(&spec->pcm_mutex);
5432 spec->active_streams &= ~(1 << STREAM_MULTI_OUT);
5435 mutex_unlock(&spec->pcm_mutex);
5481 struct hda_gen_spec *spec = codec->spec;
5484 mutex_lock(&spec->pcm_mutex);
5485 if (spec->indep_hp && !spec->indep_hp_enabled)
5488 spec->active_streams |= 1 << STREAM_INDEP_HP;
5491 mutex_unlock(&spec->pcm_mutex);
5499 struct hda_gen_spec *spec = codec->spec;
5500 mutex_lock(&spec->pcm_mutex);
5501 spec->active_streams &= ~(1 << STREAM_INDEP_HP);
5504 mutex_unlock(&spec->pcm_mutex);
5537 struct hda_gen_spec *spec = codec->spec;
5538 return snd_hda_multi_out_dig_open(codec, &spec->multiout);
5547 struct hda_gen_spec *spec = codec->spec;
5548 return snd_hda_multi_out_dig_prepare(codec, &spec->multiout,
5556 struct hda_gen_spec *spec = codec->spec;
5557 return snd_hda_multi_out_dig_cleanup(codec, &spec->multiout);
5564 struct hda_gen_spec *spec = codec->spec;
5565 return snd_hda_multi_out_dig_close(codec, &spec->multiout);
5580 struct hda_gen_spec *spec = codec->spec;
5582 snd_hda_codec_setup_stream(codec, spec->adc_nids[substream->number + 1],
5593 struct hda_gen_spec *spec = codec->spec;
5596 spec->adc_nids[substream->number + 1]);
5688 struct hda_gen_spec *spec = codec->spec;
5689 hda_nid_t new_adc = spec->adc_nids[spec->dyn_adc_idx[cur]];
5691 if (spec->cur_adc && spec->cur_adc != new_adc) {
5693 __snd_hda_codec_cleanup_stream(codec, spec->cur_adc, 1);
5694 spec->cur_adc = new_adc;
5696 spec->cur_adc_stream_tag, 0,
5697 spec->cur_adc_format);
5710 struct hda_gen_spec *spec = codec->spec;
5711 spec->cur_adc = spec->adc_nids[spec->dyn_adc_idx[spec->cur_mux[0]]];
5712 spec->cur_adc_stream_tag = stream_tag;
5713 spec->cur_adc_format = format;
5714 snd_hda_codec_setup_stream(codec, spec->cur_adc, stream_tag, 0, format);
5723 struct hda_gen_spec *spec = codec->spec;
5724 snd_hda_codec_cleanup_stream(codec, spec->cur_adc);
5725 spec->cur_adc = 0;
5795 struct hda_gen_spec *spec = codec->spec;
5799 if (spec->no_analog)
5802 fill_pcm_stream_name(spec->stream_name_analog,
5803 sizeof(spec->stream_name_analog),
5805 info = snd_hda_codec_pcm_new(codec, "%s", spec->stream_name_analog);
5808 spec->pcm_rec[0] = info;
5810 if (spec->multiout.num_dacs > 0) {
5813 spec->stream_analog_playback,
5814 spec->multiout.dac_nids[0]);
5816 spec->multiout.max_channels;
5817 if (spec->autocfg.line_out_type == AUTO_PIN_SPEAKER_OUT &&
5818 spec->autocfg.line_outs == 2)
5822 if (spec->num_adc_nids) {
5824 (spec->dyn_adc_switch ?
5826 spec->stream_analog_capture,
5827 spec->adc_nids[0]);
5832 if (spec->multiout.dig_out_nid || spec->dig_in_nid) {
5833 fill_pcm_stream_name(spec->stream_name_digital,
5834 sizeof(spec->stream_name_digital),
5837 spec->stream_name_digital);
5840 codec->follower_dig_outs = spec->multiout.follower_dig_outs;
5841 spec->pcm_rec[1] = info;
5842 if (spec->dig_out_type)
5843 info->pcm_type = spec->dig_out_type;
5846 if (spec->multiout.dig_out_nid)
5849 spec->stream_digital_playback,
5850 spec->multiout.dig_out_nid);
5851 if (spec->dig_in_nid)
5854 spec->stream_digital_capture,
5855 spec->dig_in_nid);
5858 if (spec->no_analog)
5864 have_multi_adcs = (spec->num_adc_nids > 1) &&
5865 !spec->dyn_adc_switch && !spec->auto_mic;
5867 if (spec->alt_dac_nid || have_multi_adcs) {
5868 fill_pcm_stream_name(spec->stream_name_alt_analog,
5869 sizeof(spec->stream_name_alt_analog),
5872 spec->stream_name_alt_analog);
5875 spec->pcm_rec[2] = info;
5876 if (spec->alt_dac_nid)
5879 spec->stream_analog_alt_playback,
5880 spec->alt_dac_nid);
5887 spec->stream_analog_alt_capture,
5888 spec->adc_nids[1]);
5890 spec->num_adc_nids - 1;
5918 aamix_default(codec->spec));
5925 struct hda_gen_spec *spec = codec->spec;
5928 for (i = 0; i < spec->autocfg.line_outs; i++)
5929 set_output_and_unmute(codec, spec->out_paths[i]);
5944 struct hda_gen_spec *spec = codec->spec;
5946 if (spec->autocfg.line_out_type != AUTO_PIN_HP_OUT)
5947 __init_extra_out(codec, spec->autocfg.hp_outs, spec->hp_paths);
5948 if (spec->autocfg.line_out_type != AUTO_PIN_SPEAKER_OUT)
5949 __init_extra_out(codec, spec->autocfg.speaker_outs,
5950 spec->speaker_paths);
5956 struct hda_gen_spec *spec = codec->spec;
5959 for (i = 0; i < spec->multi_ios; i++) {
5960 hda_nid_t pin = spec->multi_io[i].pin;
5965 if (!spec->multi_io[i].ctl_in)
5966 spec->multi_io[i].ctl_in =
5969 aamix_default(spec));
5975 struct hda_gen_spec *spec = codec->spec;
5977 if (!spec->have_aamix_ctl)
5979 if (!has_aamix_out_paths(spec))
5981 update_aamix_paths(codec, spec->aamix_mode, spec->out_paths[0],
5982 spec->aamix_out_paths[0],
5983 spec->autocfg.line_out_type);
5984 update_aamix_paths(codec, spec->aamix_mode, spec->hp_paths[0],
5985 spec->aamix_out_paths[1],
5987 update_aamix_paths(codec, spec->aamix_mode, spec->speaker_paths[0],
5988 spec->aamix_out_paths[2],
5995 struct hda_gen_spec *spec = codec->spec;
5996 struct auto_pin_cfg *cfg = &spec->autocfg;
6005 if (spec->mixer_nid) {
6006 resume_path_from_idx(codec, spec->loopback_paths[i]);
6007 resume_path_from_idx(codec, spec->loopback_merge_path);
6015 struct hda_gen_spec *spec = codec->spec;
6016 struct hda_input_mux *imux = &spec->input_mux;
6020 if (spec->dyn_adc_switch)
6023 nums = spec->num_adc_nids;
6030 if (i == spec->cur_mux[c])
6035 if (spec->hp_mic)
6039 if (spec->cap_sync_hook)
6040 spec->cap_sync_hook(codec, NULL, NULL);
6046 struct hda_gen_spec *spec = codec->spec;
6050 for (i = 0; i < spec->autocfg.dig_outs; i++)
6051 set_output_and_unmute(codec, spec->digout_paths[i]);
6052 pin = spec->autocfg.dig_in_pin;
6055 resume_path_from_idx(codec, spec->digin_path);
6077 * snd_hda_gen_init - initialize the generic spec
6084 struct hda_gen_spec *spec = codec->spec;
6086 if (spec->init_hook)
6087 spec->init_hook(codec);
6089 if (!spec->skip_verbs)
6109 if (spec->vmaster_mute.sw_kctl && spec->vmaster_mute.hook)
6110 snd_hda_sync_vmaster_hook(&spec->vmaster_mute);
6118 * snd_hda_gen_free - free the generic spec
6126 snd_hda_gen_spec_free(codec->spec);
6127 kfree(codec->spec);
6128 codec->spec = NULL;
6160 struct hda_gen_spec *spec = codec->spec;
6161 return snd_hda_check_amp_list_power(codec, &spec->loopback, nid);
6189 struct hda_gen_spec *spec;
6192 spec = kzalloc(sizeof(*spec), GFP_KERNEL);
6193 if (!spec)
6195 snd_hda_gen_spec_init(spec);
6196 codec->spec = spec;
6198 err = snd_hda_parse_pin_defcfg(codec, &spec->autocfg, NULL, 0);
6202 err = snd_hda_gen_parse_auto_config(codec, &spec->autocfg);