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]);
996 static int add_control_with_pfx(struct hda_gen_spec *spec, int type,
1006 if (!add_control(spec, type, name, cidx, val))
1011 #define add_pb_vol_ctrl(spec, type, pfx, val) \
1012 add_control_with_pfx(spec, type, pfx, "Playback", "Volume", 0, val)
1013 #define add_pb_sw_ctrl(spec, type, pfx, val) \
1014 add_control_with_pfx(spec, type, pfx, "Playback", "Switch", 0, val)
1015 #define __add_pb_vol_ctrl(spec, type, pfx, cidx, val) \
1016 add_control_with_pfx(spec, type, pfx, "Playback", "Volume", cidx, val)
1017 #define __add_pb_sw_ctrl(spec, type, pfx, cidx, val) \
1018 add_control_with_pfx(spec, type, pfx, "Playback", "Switch", cidx, val)
1030 return __add_pb_vol_ctrl(codec->spec, HDA_CTL_WIDGET_VOL, pfx, cidx, val);
1076 return __add_pb_sw_ctrl(codec->spec, type, pfx, cidx, val);
1091 struct hda_gen_spec *spec = codec->spec;
1093 if (spec->auto_mute_via_amp) {
1095 bool enabled = !((spec->mute_bits >> nid) & 1);
1170 struct hda_gen_spec *spec = codec->spec;
1171 struct auto_pin_cfg *cfg = &spec->autocfg;
1174 if (cfg->line_outs == 1 && !spec->multi_ios &&
1177 return spec->vmaster_mute.hook ? "PCM" : "Master";
1182 if (spec->multiout.num_dacs == 1 && !spec->mixer_nid &&
1184 !spec->multiout.hp_out_nid[0] && !spec->multiout.extra_out_nid[0])
1185 return spec->vmaster_mute.hook ? "PCM" : "Master";
1197 !path_has_mixer(codec, spec->hp_paths[0], ctl_type))
1209 !path_has_mixer(codec, spec->speaker_paths[0], ctl_type))
1212 if (ch && spec->multi_ios)
1225 spec->speaker_paths[0], ctl_type);
1227 hp_lo_shared = !path_has_mixer(codec, spec->hp_paths[0], ctl_type);
1229 return spec->vmaster_mute.hook ? "PCM" : "Master";
1238 if (cfg->line_outs == 1 && !spec->multi_ios)
1287 struct hda_gen_spec *spec = codec->spec;
1302 if (spec->dac_min_mute)
1350 struct hda_gen_spec *spec = codec->spec;
1351 struct auto_pin_cfg *cfg = &spec->autocfg;
1354 return spec->private_dac_nids[idx];
1356 if (spec->multi_ios > idx)
1357 return spec->multi_io[idx].dac;
1374 struct hda_gen_spec *spec = codec->spec;
1386 if (!spec->obey_preferred_dacs) {
1398 } else if (spec->obey_preferred_dacs) {
1431 } else if (is_reachable_path(codec, spec->private_dac_nids[0], pin)) {
1432 dac = spec->private_dac_nids[0];
1441 path = snd_hda_add_new_path(codec, dac, pin, -spec->mixer_nid);
1442 if (!path && !i && spec->mixer_nid) {
1463 struct hda_gen_spec *spec = codec->spec;
1467 for (i = 0; i < spec->num_all_dacs; i++) {
1468 hda_nid_t nid = spec->all_dacs[i];
1500 struct hda_gen_spec *spec = codec->spec;
1501 struct auto_pin_cfg *cfg = &spec->autocfg;
1531 struct hda_gen_spec *spec = codec->spec;
1532 struct auto_pin_cfg *cfg = &spec->autocfg;
1539 old_pins = spec->multi_ios;
1556 for (j = 0; j < spec->multi_ios; j++) {
1557 if (nid == spec->multi_io[j].pin)
1560 if (j < spec->multi_ios)
1572 -spec->mixer_nid);
1578 spec->multi_io[spec->multi_ios].pin = nid;
1579 spec->multi_io[spec->multi_ios].dac = dac;
1580 spec->out_paths[cfg->line_outs + spec->multi_ios] =
1582 spec->multi_ios++;
1583 if (spec->multi_ios >= 2)
1590 if (old_pins == spec->multi_ios) {
1596 if (!hardwired && spec->multi_ios < 2) {
1598 spec->paths.used -= spec->multi_ios - old_pins;
1599 spec->multi_ios = old_pins;
1604 for (i = old_pins; i < spec->multi_ios; i++) {
1605 path = snd_hda_get_path_from_idx(codec, spec->out_paths[cfg->line_outs + i]);
1616 struct hda_gen_spec *spec = codec->spec;
1628 -spec->mixer_nid);
1629 if (!path && !i && spec->mixer_nid)
1642 static inline bool has_aamix_out_paths(struct hda_gen_spec *spec)
1644 return spec->aamix_out_paths[0] || spec->aamix_out_paths[1] ||
1645 spec->aamix_out_paths[2];
1651 struct hda_gen_spec *spec = codec->spec;
1657 is_nid_contained(path, spec->mixer_nid))
1660 dac = spec->private_dac_nids[0];
1662 path = snd_hda_add_new_path(codec, dac, pin, spec->mixer_nid);
1666 else if (spec->multiout.hp_out_nid[0])
1667 dac = spec->multiout.hp_out_nid[0];
1668 else if (spec->multiout.extra_out_nid[0])
1669 dac = spec->multiout.extra_out_nid[0];
1674 spec->mixer_nid);
1687 struct hda_gen_spec *spec = codec->spec;
1688 struct auto_pin_cfg *cfg = &spec->autocfg;
1693 idx = spec->out_paths[0];
1695 idx = spec->hp_paths[0];
1701 if (!spec->mixer_nid || !is_nid_contained(path, spec->mixer_nid))
1706 if (spec->out_paths[i] == idx)
1708 path = snd_hda_get_path_from_idx(codec, spec->out_paths[i]);
1709 if (path && is_nid_contained(path, spec->mixer_nid))
1713 path = snd_hda_get_path_from_idx(codec, spec->speaker_paths[i]);
1714 if (path && is_nid_contained(path, spec->mixer_nid))
1745 struct hda_gen_spec *spec = codec->spec;
1746 struct auto_pin_cfg *cfg = &spec->autocfg;
1750 spec->multiout.num_dacs = cfg->line_outs;
1751 spec->multiout.dac_nids = spec->private_dac_nids;
1752 memset(spec->private_dac_nids, 0, sizeof(spec->private_dac_nids));
1753 memset(spec->multiout.hp_out_nid, 0, sizeof(spec->multiout.hp_out_nid));
1754 memset(spec->multiout.extra_out_nid, 0, sizeof(spec->multiout.extra_out_nid));
1755 spec->multi_ios = 0;
1756 snd_array_free(&spec->paths);
1759 memset(spec->out_paths, 0, sizeof(spec->out_paths));
1760 memset(spec->hp_paths, 0, sizeof(spec->hp_paths));
1761 memset(spec->speaker_paths, 0, sizeof(spec->speaker_paths));
1762 memset(spec->aamix_out_paths, 0, sizeof(spec->aamix_out_paths));
1763 memset(spec->digout_paths, 0, sizeof(spec->digout_paths));
1764 memset(spec->input_paths, 0, sizeof(spec->input_paths));
1765 memset(spec->loopback_paths, 0, sizeof(spec->loopback_paths));
1766 memset(&spec->digin_path, 0, sizeof(spec->digin_path));
1776 spec->private_dac_nids,
1777 spec->out_paths);
1780 spec->multiout.hp_out_nid,
1781 spec->hp_paths);
1784 spec->multiout.extra_out_nid,
1785 spec->speaker_paths);
1786 if (!spec->no_multi_io &&
1797 spec->private_dac_nids, spec->out_paths,
1798 spec->main_out_badness);
1800 if (!spec->no_multi_io && fill_mio_first &&
1811 spec->multiout.hp_out_nid,
1812 spec->hp_paths,
1813 spec->extra_out_badness);
1821 spec->multiout.extra_out_nid,
1822 spec->speaker_paths,
1823 spec->extra_out_badness);
1828 if (!spec->no_multi_io &&
1836 if (spec->mixer_nid) {
1837 spec->aamix_out_paths[0] =
1838 check_aamix_out_path(codec, spec->out_paths[0]);
1840 spec->aamix_out_paths[1] =
1841 check_aamix_out_path(codec, spec->hp_paths[0]);
1843 spec->aamix_out_paths[2] =
1844 check_aamix_out_path(codec, spec->speaker_paths[0]);
1847 if (!spec->no_multi_io &&
1850 spec->multi_ios = 1; /* give badness */
1853 spec->multiout.num_dacs = 0;
1855 if (spec->private_dac_nids[i])
1856 spec->multiout.num_dacs++;
1858 memmove(spec->private_dac_nids + i,
1859 spec->private_dac_nids + i + 1,
1861 spec->private_dac_nids[cfg->line_outs - 1] = 0;
1865 spec->ext_channel_count = spec->min_channel_count =
1866 spec->multiout.num_dacs * 2;
1868 if (spec->multi_ios == 2) {
1870 spec->private_dac_nids[spec->multiout.num_dacs++] =
1871 spec->multi_io[i].dac;
1872 } else if (spec->multi_ios) {
1873 spec->multi_ios = 0;
1877 if (spec->indep_hp && !indep_hp_possible(codec))
1883 spec->multiout.hp_out_nid,
1884 spec->hp_paths);
1887 spec->multiout.extra_out_nid,
1888 spec->speaker_paths);
1917 struct hda_gen_spec *spec = codec->spec;
1924 spec->multiout.dac_nids[0],
1925 spec->multiout.dac_nids[1],
1926 spec->multiout.dac_nids[2],
1927 spec->multiout.dac_nids[3],
1930 print_nid_path_idx(codec, " out", spec->out_paths[i]);
1931 if (spec->multi_ios > 0)
1933 spec->multi_ios,
1934 spec->multi_io[0].pin, spec->multi_io[1].pin,
1935 spec->multi_io[0].dac, spec->multi_io[1].dac);
1936 for (i = 0; i < spec->multi_ios; i++)
1938 spec->out_paths[cfg->line_outs + i]);
1943 spec->multiout.hp_out_nid[0],
1944 spec->multiout.hp_out_nid[1],
1945 spec->multiout.hp_out_nid[2],
1946 spec->multiout.hp_out_nid[3]);
1948 print_nid_path_idx(codec, " hp ", spec->hp_paths[i]);
1953 spec->multiout.extra_out_nid[0],
1954 spec->multiout.extra_out_nid[1],
1955 spec->multiout.extra_out_nid[2],
1956 spec->multiout.extra_out_nid[3]);
1958 print_nid_path_idx(codec, " spk", spec->speaker_paths[i]);
1960 print_nid_path_idx(codec, " mix", spec->aamix_out_paths[i]);
1969 struct hda_gen_spec *spec = codec->spec;
1972 spec->num_all_dacs = 0;
1973 memset(spec->all_dacs, 0, sizeof(spec->all_dacs));
1977 if (spec->num_all_dacs >= ARRAY_SIZE(spec->all_dacs)) {
1981 spec->all_dacs[spec->num_all_dacs++] = nid;
1987 struct hda_gen_spec *spec = codec->spec;
1988 struct auto_pin_cfg *cfg = &spec->autocfg;
2072 path = snd_hda_get_path_from_idx(codec, spec->out_paths[0]);
2074 spec->vmaster_nid = look_for_out_vol_nid(codec, path);
2075 if (spec->vmaster_nid) {
2076 snd_hda_set_vmaster_tlv(codec, spec->vmaster_nid,
2077 HDA_OUTPUT, spec->vmaster_tlv);
2078 if (spec->dac_min_mute)
2079 spec->vmaster_tlv[SNDRV_CTL_TLVO_DB_SCALE_MUTE_AND_STEP] |= TLV_DB_SCALE_MUTE;
2084 if (spec->prefer_hp_amp || cfg->line_out_type == AUTO_PIN_HP_OUT)
2092 val = spec->prefer_hp_amp ? PIN_HP : PIN_OUT;
2098 if (spec->indep_hp && !indep_hp_possible(codec))
2099 spec->indep_hp = 0;
2109 struct hda_gen_spec *spec = codec->spec;
2113 if (spec->multi_ios > 0 && cfg->line_outs < 3)
2114 noutputs += spec->multi_ios;
2121 path = snd_hda_get_path_from_idx(codec, spec->out_paths[i]);
2205 struct hda_gen_spec *spec = codec->spec;
2206 return create_extra_outs(codec, spec->autocfg.hp_outs,
2207 spec->hp_paths,
2213 struct hda_gen_spec *spec = codec->spec;
2214 return create_extra_outs(codec, spec->autocfg.speaker_outs,
2215 spec->speaker_paths,
2235 struct hda_gen_spec *spec = codec->spec;
2236 ucontrol->value.enumerated.item[0] = spec->indep_hp_enabled;
2248 struct hda_gen_spec *spec = codec->spec;
2252 mutex_lock(&spec->pcm_mutex);
2253 if (spec->active_streams) {
2258 if (spec->indep_hp_enabled != select) {
2260 if (spec->autocfg.line_out_type == AUTO_PIN_HP_OUT)
2261 dacp = &spec->private_dac_nids[0];
2263 dacp = &spec->multiout.hp_out_nid[0];
2266 if (spec->have_aamix_ctl) {
2267 if (spec->autocfg.line_out_type == AUTO_PIN_HP_OUT)
2268 update_aamix_paths(codec, spec->aamix_mode,
2269 spec->out_paths[0],
2270 spec->aamix_out_paths[0],
2271 spec->autocfg.line_out_type);
2273 update_aamix_paths(codec, spec->aamix_mode,
2274 spec->hp_paths[0],
2275 spec->aamix_out_paths[1],
2279 spec->indep_hp_enabled = select;
2280 if (spec->indep_hp_enabled)
2283 *dacp = spec->alt_dac_nid;
2289 mutex_unlock(&spec->pcm_mutex);
2304 struct hda_gen_spec *spec = codec->spec;
2307 if (!spec->indep_hp)
2309 if (spec->autocfg.line_out_type == AUTO_PIN_HP_OUT)
2310 dac = spec->multiout.dac_nids[0];
2312 dac = spec->multiout.hp_out_nid[0];
2314 spec->indep_hp = 0;
2318 spec->indep_hp_enabled = false;
2319 spec->alt_dac_nid = dac;
2320 if (!snd_hda_gen_add_kctl(spec, NULL, &indep_hp_ctl))
2333 struct hda_gen_spec *spec = codec->spec;
2338 uinfo->value.enumerated.items = spec->multi_ios + 1;
2339 if (uinfo->value.enumerated.item > spec->multi_ios)
2340 uinfo->value.enumerated.item = spec->multi_ios;
2341 chs = uinfo->value.enumerated.item * 2 + spec->min_channel_count;
2350 struct hda_gen_spec *spec = codec->spec;
2352 (spec->ext_channel_count - spec->min_channel_count) / 2;
2359 struct hda_gen_spec *spec = codec->spec;
2361 spec->out_paths[spec->autocfg.line_outs + idx]);
2369 static bool aamix_default(struct hda_gen_spec *spec)
2371 return !spec->have_aamix_ctl || spec->aamix_mode;
2376 struct hda_gen_spec *spec = codec->spec;
2377 hda_nid_t nid = spec->multi_io[idx].pin;
2389 snd_hda_activate_path(codec, path, true, aamix_default(spec));
2393 snd_hda_activate_path(codec, path, false, aamix_default(spec));
2394 set_pin_target(codec, nid, spec->multi_io[idx].ctl_in, true);
2408 struct hda_gen_spec *spec = codec->spec;
2412 if (ch < 0 || ch > spec->multi_ios)
2414 if (ch == (spec->ext_channel_count - spec->min_channel_count) / 2)
2416 spec->ext_channel_count = ch * 2 + spec->min_channel_count;
2417 for (i = 0; i < spec->multi_ios; i++)
2419 spec->multiout.max_channels = max(spec->ext_channel_count,
2420 spec->const_channel_count);
2421 if (spec->need_dac_fix)
2422 spec->multiout.num_dacs = spec->multiout.max_channels / 2;
2436 struct hda_gen_spec *spec = codec->spec;
2438 if (spec->multi_ios > 0) {
2439 if (!snd_hda_gen_add_kctl(spec, NULL, &channel_mode_enum))
2455 struct hda_gen_spec *spec = codec->spec;
2456 ucontrol->value.enumerated.item[0] = spec->aamix_mode;
2464 struct hda_gen_spec *spec = codec->spec;
2475 if (out_type == AUTO_PIN_HP_OUT && spec->indep_hp_enabled &&
2476 mix_path->path[0] != spec->alt_dac_nid)
2494 struct hda_gen_spec *spec = codec->spec;
2502 spec->aamix_mode);
2510 struct hda_gen_spec *spec = codec->spec;
2511 const struct auto_pin_cfg *cfg = &spec->autocfg;
2514 if (val == spec->aamix_mode)
2516 spec->aamix_mode = val;
2517 if (has_aamix_out_paths(spec)) {
2518 update_aamix_paths(codec, val, spec->out_paths[0],
2519 spec->aamix_out_paths[0],
2521 update_aamix_paths(codec, val, spec->hp_paths[0],
2522 spec->aamix_out_paths[1],
2524 update_aamix_paths(codec, val, spec->speaker_paths[0],
2525 spec->aamix_out_paths[2],
2528 update_output_paths(codec, cfg->line_outs, spec->out_paths);
2530 update_output_paths(codec, cfg->hp_outs, spec->hp_paths);
2533 spec->speaker_paths);
2548 struct hda_gen_spec *spec = codec->spec;
2550 if (!spec->mixer_nid)
2552 if (!snd_hda_gen_add_kctl(spec, NULL, &loopback_mixing_enum))
2554 spec->have_aamix_ctl = 1;
2567 struct hda_gen_spec *spec = codec->spec;
2572 pin = spec->hp_mic_pin;
2573 as_mic = spec->cur_mux[adc_mux] == spec->hp_mic_mux_idx;
2590 if (val == AC_PINCTL_VREF_HIZ && spec->shared_mic_vref_pin) {
2591 const hda_nid_t vref_pin = spec->shared_mic_vref_pin;
2598 if (!spec->hp_mic_jack_modes) {
2611 struct hda_gen_spec *spec = codec->spec;
2612 struct auto_pin_cfg *cfg = &spec->autocfg;
2616 if (!spec->hp_mic) {
2617 if (spec->suppress_hp_mic_detect)
2631 spec->hp_mic = 0; /* clear once */
2650 spec->hp_mic = 1;
2651 spec->hp_mic_pin = nid;
2653 spec->suppress_auto_mic = 1;
2709 struct hda_gen_spec *spec = codec->spec;
2713 snd_array_for_each(&spec->kctls, i, kctl) {
2723 struct hda_gen_spec *spec = codec->spec;
2726 snd_hda_get_pin_label(codec, pin, &spec->autocfg, name, name_len, &idx);
2735 struct hda_gen_spec *spec = codec->spec;
2736 if (spec->add_jack_modes) {
2747 struct hda_gen_spec *spec = codec->spec;
2752 if (pin == spec->hp_mic_pin)
2758 knew = snd_hda_gen_add_kctl(spec, name,
2877 struct hda_gen_spec *spec = codec->spec;
2879 if (spec->add_jack_modes)
2886 struct hda_gen_spec *spec = codec->spec;
2891 if (pin == spec->hp_mic_pin)
2904 knew = snd_hda_gen_add_kctl(spec, name, &in_jack_mode_enum);
3023 struct hda_gen_spec *spec = codec->spec;
3026 knew = snd_hda_gen_add_kctl(spec, "Headphone Mic Jack Mode",
3031 spec->hp_mic_jack_modes = 1;
3040 static int add_loopback_list(struct hda_gen_spec *spec, hda_nid_t mix, int idx)
3044 list = snd_array_new(&spec->loopback_list);
3050 spec->loopback.amplist = spec->loopback_list.list;
3097 struct hda_gen_spec *spec = codec->spec;
3109 spec->loopback_paths[input_idx] = snd_hda_get_path_idx(codec, path);
3113 err = __add_pb_vol_ctrl(spec, HDA_CTL_WIDGET_VOL, ctlname, ctlidx, mix_val);
3120 err = __add_pb_sw_ctrl(spec, HDA_CTL_WIDGET_MUTE, ctlname, ctlidx, mute_val);
3128 err = add_loopback_list(spec, mix_nid, idx);
3132 if (spec->mixer_nid != spec->mixer_merge_nid &&
3133 !spec->loopback_merge_path) {
3134 path = snd_hda_add_new_path(codec, spec->mixer_nid,
3135 spec->mixer_merge_nid, 0);
3141 spec->loopback_merge_path =
3158 struct hda_gen_spec *spec = codec->spec;
3160 hda_nid_t *adc_nids = spec->adc_nids;
3161 int max_nums = ARRAY_SIZE(spec->adc_nids);
3174 spec->num_adc_nids = nums;
3177 spec->num_all_adcs = nums;
3178 memcpy(spec->all_adcs, spec->adc_nids, nums * sizeof(hda_nid_t));
3188 struct hda_gen_spec *spec = codec->spec;
3189 struct hda_input_mux *imux = &spec->input_mux;
3195 for (n = 0; n < spec->num_adc_nids; n++) {
3197 if (!spec->input_paths[i][n])
3209 for (n = 0; n < spec->num_adc_nids; n++) {
3210 if (spec->input_paths[i][n]) {
3211 spec->dyn_adc_idx[i] = n;
3218 spec->dyn_adc_switch = 1;
3219 } else if (nums != spec->num_adc_nids) {
3222 for (n = 0; n < spec->num_adc_nids; n++) {
3226 spec->adc_nids[nums] = spec->adc_nids[n];
3229 spec->input_paths[i][nums]);
3230 spec->input_paths[i][nums] =
3231 spec->input_paths[i][n];
3232 spec->input_paths[i][n] = 0;
3237 spec->num_adc_nids = nums;
3241 (imux->num_items == 2 && spec->hp_mic)) {
3243 spec->num_adc_nids = 1; /* reduce to a single ADC */
3247 if (!spec->dyn_adc_switch && spec->multi_cap_vol)
3248 spec->num_adc_nids = 1;
3258 struct hda_gen_spec *spec = codec->spec;
3259 struct hda_input_mux *imux = &spec->input_mux;
3266 hda_nid_t adc = spec->adc_nids[c];
3274 spec->input_paths[imux_idx][c] =
3278 if (spec->hp_mic_pin == pin)
3279 spec->hp_mic_mux_idx = imux->num_items;
3280 spec->imux_pins[imux->num_items] = pin;
3283 if (spec->dyn_adc_switch)
3284 spec->dyn_adc_idx[imux_idx] = c;
3298 struct hda_gen_spec *spec = codec->spec;
3299 const struct auto_pin_cfg *cfg = &spec->autocfg;
3313 if (spec->input_labels[j] &&
3314 !strcmp(spec->input_labels[j], label)) {
3315 idx = spec->input_label_idxs[j] + 1;
3320 spec->input_labels[i] = label;
3321 spec->input_label_idxs[i] = idx;
3331 struct hda_gen_spec *spec = codec->spec;
3332 const struct auto_pin_cfg *cfg = &spec->autocfg;
3333 hda_nid_t mixer = spec->mixer_nid;
3356 if (pin != spec->hp_mic_pin &&
3363 spec->input_labels[i],
3364 spec->input_label_idxs[i],
3372 spec->input_labels[i], -mixer);
3376 if (spec->add_jack_modes) {
3384 if (mixer && spec->add_stereo_mix_input == HDA_HINT_STEREO_MIX_ENABLE) {
3390 spec->suppress_auto_mic = 1;
3404 struct hda_gen_spec *spec = codec->spec;
3409 if (spec->dyn_adc_switch)
3410 adc_idx = spec->dyn_adc_idx[imux_idx];
3415 return snd_hda_get_path_from_idx(codec, spec->input_paths[imux_idx][adc_idx]);
3425 struct hda_gen_spec *spec = codec->spec;
3426 return snd_hda_input_mux_info(&spec->input_mux, uinfo);
3433 struct hda_gen_spec *spec = codec->spec;
3437 ucontrol->value.enumerated.item[0] = spec->cur_mux[adc_idx];
3471 struct hda_gen_spec *spec = codec->spec;
3476 imux = &spec->input_mux;
3493 if (err >= 0 && spec->cap_sync_hook)
3494 spec->cap_sync_hook(codec, kcontrol, ucontrol);
3585 struct hda_gen_spec *spec = codec->spec;
3586 struct auto_pin_cfg *cfg = &spec->autocfg;
3590 if (!spec->inv_dmic_split)
3608 struct hda_gen_spec *spec = codec->spec;
3615 if (spec->cap_sync_hook)
3616 spec->cap_sync_hook(codec, kcontrol, ucontrol);
3625 struct hda_gen_spec *spec = codec->spec;
3641 knew = add_control(spec, type, tmpname, idx,
3647 if (spec->mic_mute_led)
3660 knew = add_control(spec, type, tmpname, idx,
3666 if (spec->mic_mute_led)
3691 struct hda_gen_spec *spec = codec->spec;
3695 knew = snd_hda_gen_add_kctl(spec, NULL, &cap_vol_temp);
3703 knew = snd_hda_gen_add_kctl(spec, NULL, &cap_sw_temp);
3709 if (spec->mic_mute_led)
3739 struct hda_gen_spec *spec = codec->spec;
3740 struct hda_input_mux *imux = &spec->input_mux;
3748 if (idx >= spec->autocfg.num_inputs)
3750 inv_dmic = is_inv_dmic_pin(codec, spec->imux_pins[i]);
3754 spec->input_labels[idx],
3755 spec->input_label_idxs[idx],
3768 struct hda_gen_spec *spec = codec->spec;
3769 struct hda_input_mux *imux = &spec->input_mux;
3772 if (spec->dyn_adc_switch)
3775 nums = spec->num_adc_nids;
3777 if (!spec->auto_mic && imux->num_items > 1) {
3781 knew = snd_hda_gen_add_kctl(spec, name, &cap_src_temp);
3789 bool multi_cap_vol = spec->multi_cap_vol;
3816 if (is_inv_dmic_pin(codec, spec->imux_pins[i]))
3884 struct hda_gen_spec *spec = codec->spec;
3885 struct auto_pin_cfg *cfg = &spec->autocfg;
3886 struct hda_input_mux *imux = &spec->input_mux;
3889 if (!spec->num_adc_nids)
3916 "%s Boost Volume", spec->input_labels[idx]);
3917 if (!add_control(spec, HDA_CTL_WIDGET_VOL, boost_label,
3918 spec->input_label_idxs[idx], val))
3936 struct hda_gen_spec *spec = codec->spec;
3955 spec->led_cdevs[idx] = cdev;
3968 struct hda_gen_spec *spec = codec->spec;
3979 if (spec->vmaster_mute.hook)
3982 spec->vmaster_mute_led = 1;
4005 struct hda_gen_spec *spec = codec->spec;
4016 spec->mic_mute_led = 1;
4027 struct hda_gen_spec *spec = codec->spec;
4034 for (i = 0; i < spec->autocfg.dig_outs; i++) {
4035 pin = spec->autocfg.dig_out_pins[i];
4045 spec->digout_paths[i] = snd_hda_get_path_idx(codec, path);
4048 spec->multiout.dig_out_nid = dig_nid;
4049 spec->dig_out_type = spec->autocfg.dig_out_type[0];
4051 spec->multiout.follower_dig_outs = spec->follower_dig_outs;
4052 if (nums >= ARRAY_SIZE(spec->follower_dig_outs) - 1)
4054 spec->follower_dig_outs[nums - 1] = dig_nid;
4059 if (spec->autocfg.dig_in_pin) {
4060 pin = spec->autocfg.dig_in_pin;
4072 spec->dig_in_nid = dig_nid;
4073 spec->digin_path = snd_hda_get_path_idx(codec, path);
4092 struct hda_gen_spec *spec = codec->spec;
4096 imux = &spec->input_mux;
4102 if (spec->cur_mux[adc_idx] == idx)
4105 old_path = get_input_path(codec, adc_idx, spec->cur_mux[adc_idx]);
4111 spec->cur_mux[adc_idx] = idx;
4113 if (spec->hp_mic)
4116 if (spec->dyn_adc_switch)
4125 if (spec->cap_sync_hook)
4126 spec->cap_sync_hook(codec, NULL, NULL);
4139 struct hda_gen_spec *spec = codec->spec;
4144 snd_array_for_each(&spec->paths, n, path) {
4240 struct hda_gen_spec *spec = codec->spec;
4241 struct auto_pin_cfg *cfg = &spec->autocfg;
4269 struct hda_gen_spec *spec = codec->spec;
4270 struct auto_pin_cfg *cfg = &spec->autocfg;
4288 struct hda_gen_spec *spec = codec->spec;
4297 path = snd_array_new(&spec->paths);
4312 struct hda_gen_spec *spec = codec->spec;
4313 struct auto_pin_cfg *cfg = &spec->autocfg;
4314 hda_nid_t nid = spec->beep_nid;
4349 struct hda_gen_spec *spec = codec->spec;
4352 path = snd_array_new(&spec->paths);
4392 struct hda_gen_spec *spec = codec->spec;
4405 if (spec->auto_mute_via_amp) {
4416 spec->mute_bits |= (1ULL << mute_nid);
4418 spec->mute_bits &= ~(1ULL << mute_nid);
4424 if (spec->keep_vref_in_automute)
4456 struct hda_gen_spec *spec = codec->spec;
4464 if (spec->autocfg.line_out_type == AUTO_PIN_HP_OUT)
4465 paths = spec->out_paths;
4467 paths = spec->hp_paths;
4468 do_automute(codec, ARRAY_SIZE(spec->autocfg.hp_pins),
4469 spec->autocfg.hp_pins, paths, spec->master_mute);
4471 if (!spec->automute_speaker)
4474 on = spec->hp_jack_present | spec->line_jack_present;
4475 on |= spec->master_mute;
4476 spec->speaker_muted = on;
4477 if (spec->autocfg.line_out_type == AUTO_PIN_SPEAKER_OUT)
4478 paths = spec->out_paths;
4480 paths = spec->speaker_paths;
4481 do_automute(codec, ARRAY_SIZE(spec->autocfg.speaker_pins),
4482 spec->autocfg.speaker_pins, paths, on);
4486 if (spec->autocfg.line_out_pins[0] == spec->autocfg.hp_pins[0] ||
4487 spec->autocfg.line_out_pins[0] == spec->autocfg.speaker_pins[0])
4489 if (!spec->automute_lo)
4492 on = spec->hp_jack_present;
4493 on |= spec->master_mute;
4494 spec->line_out_muted = on;
4495 paths = spec->out_paths;
4496 do_automute(codec, ARRAY_SIZE(spec->autocfg.line_out_pins),
4497 spec->autocfg.line_out_pins, paths, on);
4503 struct hda_gen_spec *spec = codec->spec;
4504 if (spec->automute_hook)
4505 spec->automute_hook(codec);
4510 if (spec->auto_mute_via_amp && !codec->bus->shutdown)
4511 snd_ctl_sync_vmaster(spec->vmaster_mute.sw_kctl, false);
4522 struct hda_gen_spec *spec = codec->spec;
4523 hda_nid_t *pins = spec->autocfg.hp_pins;
4524 int num_pins = ARRAY_SIZE(spec->autocfg.hp_pins);
4527 if (spec->indep_hp_enabled) {
4532 spec->hp_jack_present = detect_jacks(codec, num_pins, pins);
4533 if (!spec->detect_hp || (!spec->automute_speaker && !spec->automute_lo))
4547 struct hda_gen_spec *spec = codec->spec;
4549 if (spec->autocfg.line_out_type == AUTO_PIN_SPEAKER_OUT)
4552 if (spec->autocfg.line_out_pins[0] == spec->autocfg.hp_pins[0])
4555 spec->line_jack_present =
4556 detect_jacks(codec, ARRAY_SIZE(spec->autocfg.line_out_pins),
4557 spec->autocfg.line_out_pins);
4558 if (!spec->automute_speaker || !spec->detect_lo)
4572 struct hda_gen_spec *spec = codec->spec;
4575 if (!spec->auto_mic)
4578 for (i = spec->am_num_entries - 1; i > 0; i--) {
4579 hda_nid_t pin = spec->am_entry[i].pin;
4584 mux_select(codec, 0, spec->am_entry[i].idx);
4588 mux_select(codec, 0, spec->am_entry[0].idx);
4596 struct hda_gen_spec *spec = codec->spec;
4597 if (spec->hp_automute_hook)
4598 spec->hp_automute_hook(codec, jack);
4606 struct hda_gen_spec *spec = codec->spec;
4607 if (spec->line_automute_hook)
4608 spec->line_automute_hook(codec, jack);
4616 struct hda_gen_spec *spec = codec->spec;
4617 if (spec->mic_autoswitch_hook)
4618 spec->mic_autoswitch_hook(codec, jack);
4638 struct hda_gen_spec *spec = codec->spec;
4643 if (spec->automute_speaker_possible && spec->automute_lo_possible)
4652 struct hda_gen_spec *spec = codec->spec;
4654 if (spec->automute_speaker)
4656 if (spec->automute_lo)
4667 struct hda_gen_spec *spec = codec->spec;
4671 if (!spec->automute_speaker && !spec->automute_lo)
4673 spec->automute_speaker = 0;
4674 spec->automute_lo = 0;
4677 if (spec->automute_speaker_possible) {
4678 if (!spec->automute_lo && spec->automute_speaker)
4680 spec->automute_speaker = 1;
4681 spec->automute_lo = 0;
4682 } else if (spec->automute_lo_possible) {
4683 if (spec->automute_lo)
4685 spec->automute_lo = 1;
4690 if (!spec->automute_lo_possible || !spec->automute_speaker_possible)
4692 if (spec->automute_speaker && spec->automute_lo)
4694 spec->automute_speaker = 1;
4695 spec->automute_lo = 1;
4714 struct hda_gen_spec *spec = codec->spec;
4716 if (!snd_hda_gen_add_kctl(spec, NULL, &automute_mode_enum))
4727 struct hda_gen_spec *spec = codec->spec;
4728 struct auto_pin_cfg *cfg = &spec->autocfg;
4732 if (spec->suppress_auto_mute)
4765 spec->detect_hp = 1;
4777 spec->detect_lo = 1;
4779 spec->automute_lo_possible = spec->detect_hp;
4782 spec->automute_speaker_possible = cfg->speaker_outs &&
4783 (spec->detect_hp || spec->detect_lo);
4785 spec->automute_lo = spec->automute_lo_possible;
4786 spec->automute_speaker = spec->automute_speaker_possible;
4788 if (spec->automute_speaker_possible || spec->automute_lo_possible) {
4800 struct hda_gen_spec *spec = codec->spec;
4804 imux = &spec->input_mux;
4805 for (i = 0; i < spec->am_num_entries; i++) {
4806 spec->am_entry[i].idx =
4807 find_idx_in_nid_list(spec->am_entry[i].pin,
4808 spec->imux_pins, imux->num_items);
4809 if (spec->am_entry[i].idx < 0)
4814 for (i = 1; i < spec->am_num_entries; i++)
4816 spec->am_entry[i].pin,
4834 struct hda_gen_spec *spec = codec->spec;
4835 struct auto_pin_cfg *cfg = &spec->autocfg;
4839 if (spec->suppress_auto_mic)
4861 if (!spec->line_in_auto_switch &&
4871 spec->am_entry[num_pins].pin = nid;
4872 spec->am_entry[num_pins].attr = attr;
4879 spec->am_num_entries = num_pins;
4883 sort(spec->am_entry, num_pins, sizeof(spec->am_entry[0]),
4889 spec->auto_mic = 1;
4890 spec->num_adc_nids = 1;
4891 spec->cur_mux[0] = spec->am_entry[0].idx;
4893 spec->am_entry[0].pin,
4894 spec->am_entry[1].pin,
4895 spec->am_entry[2].pin);
4911 struct hda_gen_spec *spec = codec->spec;
4913 if (!spec->power_down_unused && !codec->power_save_node)
4971 struct hda_gen_spec *spec = codec->spec;
4976 if (spec->vmaster_mute_led || spec->mic_mute_led)
4979 if (spec->mixer_nid && !spec->mixer_merge_nid)
4980 spec->mixer_merge_nid = spec->mixer_nid;
4982 if (cfg != &spec->autocfg) {
4983 spec->autocfg = *cfg;
4984 cfg = &spec->autocfg;
4987 if (!spec->main_out_badness)
4988 spec->main_out_badness = &hda_main_out_badness;
4989 if (!spec->extra_out_badness)
4990 spec->extra_out_badness = &hda_extra_out_badness;
4996 spec->multiout.max_channels = 2;
4997 spec->no_analog = 1;
5004 if (!spec->no_primary_hp &&
5049 spec->const_channel_count = spec->ext_channel_count;
5052 spec->const_channel_count = max(spec->const_channel_count,
5055 spec->const_channel_count = max(spec->const_channel_count,
5057 spec->multiout.max_channels = max(spec->ext_channel_count,
5058 spec->const_channel_count);
5073 if (!spec->auto_mic && spec->mixer_nid &&
5074 spec->add_stereo_mix_input == HDA_HINT_STEREO_MIX_AUTO &&
5075 spec->input_mux.num_items > 1) {
5076 err = parse_capture_source(codec, spec->mixer_nid,
5077 CFG_IDX_MIX, spec->num_all_adcs,
5095 if (spec->hp_mic_pin &&
5096 (spec->auto_mic || spec->input_mux.num_items == 1 ||
5097 spec->add_jack_modes)) {
5098 err = create_hp_mic_jack_mode(codec, spec->hp_mic_pin);
5103 if (spec->add_jack_modes) {
5122 if (spec->mixer_nid)
5123 mute_all_mixer_nid(codec, spec->mixer_nid);
5128 if (spec->power_down_unused || codec->power_save_node) {
5135 if (!spec->no_analog && spec->beep_nid) {
5136 err = snd_hda_attach_beep_device(codec, spec->beep_nid);
5175 struct hda_gen_spec *spec = codec->spec;
5178 if (spec->kctls.used) {
5179 err = snd_hda_add_new_ctls(codec, spec->kctls.list);
5184 if (spec->multiout.dig_out_nid) {
5186 spec->multiout.dig_out_nid,
5187 spec->multiout.dig_out_nid,
5188 spec->pcm_rec[1]->pcm_type);
5191 if (!spec->no_analog) {
5193 &spec->multiout);
5196 spec->multiout.share_spdif = 1;
5199 if (spec->dig_in_nid) {
5200 err = snd_hda_create_spdif_in_ctls(codec, spec->dig_in_nid);
5206 if (!spec->no_analog && !spec->suppress_vmaster &&
5209 spec->vmaster_tlv, follower_pfxs,
5214 if (!spec->no_analog && !spec->suppress_vmaster &&
5219 spec->vmaster_mute_led ?
5221 &spec->vmaster_mute.sw_kctl);
5224 if (spec->vmaster_mute.hook) {
5225 snd_hda_add_vmaster_hook(codec, &spec->vmaster_mute);
5226 snd_hda_sync_vmaster_hook(&spec->vmaster_mute);
5230 free_kctls(spec); /* no longer needed */
5232 err = snd_hda_jack_add_kctls(codec, &spec->autocfg);
5250 struct hda_gen_spec *spec = codec->spec;
5251 if (spec->pcm_playback_hook)
5252 spec->pcm_playback_hook(hinfo, codec, substream, action);
5260 struct hda_gen_spec *spec = codec->spec;
5261 if (spec->pcm_capture_hook)
5262 spec->pcm_capture_hook(hinfo, codec, substream, action);
5272 struct hda_gen_spec *spec = codec->spec;
5275 mutex_lock(&spec->pcm_mutex);
5277 &spec->multiout, substream,
5280 spec->active_streams |= 1 << STREAM_MULTI_OUT;
5284 mutex_unlock(&spec->pcm_mutex);
5294 struct hda_gen_spec *spec = codec->spec;
5297 err = snd_hda_multi_out_analog_prepare(codec, &spec->multiout,
5309 struct hda_gen_spec *spec = codec->spec;
5312 err = snd_hda_multi_out_analog_cleanup(codec, &spec->multiout);
5323 struct hda_gen_spec *spec = codec->spec;
5324 mutex_lock(&spec->pcm_mutex);
5325 spec->active_streams &= ~(1 << STREAM_MULTI_OUT);
5328 mutex_unlock(&spec->pcm_mutex);
5374 struct hda_gen_spec *spec = codec->spec;
5377 mutex_lock(&spec->pcm_mutex);
5378 if (spec->indep_hp && !spec->indep_hp_enabled)
5381 spec->active_streams |= 1 << STREAM_INDEP_HP;
5384 mutex_unlock(&spec->pcm_mutex);
5392 struct hda_gen_spec *spec = codec->spec;
5393 mutex_lock(&spec->pcm_mutex);
5394 spec->active_streams &= ~(1 << STREAM_INDEP_HP);
5397 mutex_unlock(&spec->pcm_mutex);
5430 struct hda_gen_spec *spec = codec->spec;
5431 return snd_hda_multi_out_dig_open(codec, &spec->multiout);
5440 struct hda_gen_spec *spec = codec->spec;
5441 return snd_hda_multi_out_dig_prepare(codec, &spec->multiout,
5449 struct hda_gen_spec *spec = codec->spec;
5450 return snd_hda_multi_out_dig_cleanup(codec, &spec->multiout);
5457 struct hda_gen_spec *spec = codec->spec;
5458 return snd_hda_multi_out_dig_close(codec, &spec->multiout);
5473 struct hda_gen_spec *spec = codec->spec;
5475 snd_hda_codec_setup_stream(codec, spec->adc_nids[substream->number + 1],
5486 struct hda_gen_spec *spec = codec->spec;
5489 spec->adc_nids[substream->number + 1]);
5581 struct hda_gen_spec *spec = codec->spec;
5582 hda_nid_t new_adc = spec->adc_nids[spec->dyn_adc_idx[cur]];
5584 if (spec->cur_adc && spec->cur_adc != new_adc) {
5586 __snd_hda_codec_cleanup_stream(codec, spec->cur_adc, 1);
5587 spec->cur_adc = new_adc;
5589 spec->cur_adc_stream_tag, 0,
5590 spec->cur_adc_format);
5603 struct hda_gen_spec *spec = codec->spec;
5604 spec->cur_adc = spec->adc_nids[spec->dyn_adc_idx[spec->cur_mux[0]]];
5605 spec->cur_adc_stream_tag = stream_tag;
5606 spec->cur_adc_format = format;
5607 snd_hda_codec_setup_stream(codec, spec->cur_adc, stream_tag, 0, format);
5616 struct hda_gen_spec *spec = codec->spec;
5617 snd_hda_codec_cleanup_stream(codec, spec->cur_adc);
5618 spec->cur_adc = 0;
5688 struct hda_gen_spec *spec = codec->spec;
5692 if (spec->no_analog)
5695 fill_pcm_stream_name(spec->stream_name_analog,
5696 sizeof(spec->stream_name_analog),
5698 info = snd_hda_codec_pcm_new(codec, "%s", spec->stream_name_analog);
5701 spec->pcm_rec[0] = info;
5703 if (spec->multiout.num_dacs > 0) {
5706 spec->stream_analog_playback,
5707 spec->multiout.dac_nids[0]);
5709 spec->multiout.max_channels;
5710 if (spec->autocfg.line_out_type == AUTO_PIN_SPEAKER_OUT &&
5711 spec->autocfg.line_outs == 2)
5715 if (spec->num_adc_nids) {
5717 (spec->dyn_adc_switch ?
5719 spec->stream_analog_capture,
5720 spec->adc_nids[0]);
5725 if (spec->multiout.dig_out_nid || spec->dig_in_nid) {
5726 fill_pcm_stream_name(spec->stream_name_digital,
5727 sizeof(spec->stream_name_digital),
5730 spec->stream_name_digital);
5733 codec->follower_dig_outs = spec->multiout.follower_dig_outs;
5734 spec->pcm_rec[1] = info;
5735 if (spec->dig_out_type)
5736 info->pcm_type = spec->dig_out_type;
5739 if (spec->multiout.dig_out_nid)
5742 spec->stream_digital_playback,
5743 spec->multiout.dig_out_nid);
5744 if (spec->dig_in_nid)
5747 spec->stream_digital_capture,
5748 spec->dig_in_nid);
5751 if (spec->no_analog)
5757 have_multi_adcs = (spec->num_adc_nids > 1) &&
5758 !spec->dyn_adc_switch && !spec->auto_mic;
5760 if (spec->alt_dac_nid || have_multi_adcs) {
5761 fill_pcm_stream_name(spec->stream_name_alt_analog,
5762 sizeof(spec->stream_name_alt_analog),
5765 spec->stream_name_alt_analog);
5768 spec->pcm_rec[2] = info;
5769 if (spec->alt_dac_nid)
5772 spec->stream_analog_alt_playback,
5773 spec->alt_dac_nid);
5780 spec->stream_analog_alt_capture,
5781 spec->adc_nids[1]);
5783 spec->num_adc_nids - 1;
5811 aamix_default(codec->spec));
5818 struct hda_gen_spec *spec = codec->spec;
5821 for (i = 0; i < spec->autocfg.line_outs; i++)
5822 set_output_and_unmute(codec, spec->out_paths[i]);
5837 struct hda_gen_spec *spec = codec->spec;
5839 if (spec->autocfg.line_out_type != AUTO_PIN_HP_OUT)
5840 __init_extra_out(codec, spec->autocfg.hp_outs, spec->hp_paths);
5841 if (spec->autocfg.line_out_type != AUTO_PIN_SPEAKER_OUT)
5842 __init_extra_out(codec, spec->autocfg.speaker_outs,
5843 spec->speaker_paths);
5849 struct hda_gen_spec *spec = codec->spec;
5852 for (i = 0; i < spec->multi_ios; i++) {
5853 hda_nid_t pin = spec->multi_io[i].pin;
5858 if (!spec->multi_io[i].ctl_in)
5859 spec->multi_io[i].ctl_in =
5862 aamix_default(spec));
5868 struct hda_gen_spec *spec = codec->spec;
5870 if (!spec->have_aamix_ctl)
5872 if (!has_aamix_out_paths(spec))
5874 update_aamix_paths(codec, spec->aamix_mode, spec->out_paths[0],
5875 spec->aamix_out_paths[0],
5876 spec->autocfg.line_out_type);
5877 update_aamix_paths(codec, spec->aamix_mode, spec->hp_paths[0],
5878 spec->aamix_out_paths[1],
5880 update_aamix_paths(codec, spec->aamix_mode, spec->speaker_paths[0],
5881 spec->aamix_out_paths[2],
5888 struct hda_gen_spec *spec = codec->spec;
5889 struct auto_pin_cfg *cfg = &spec->autocfg;
5898 if (spec->mixer_nid) {
5899 resume_path_from_idx(codec, spec->loopback_paths[i]);
5900 resume_path_from_idx(codec, spec->loopback_merge_path);
5908 struct hda_gen_spec *spec = codec->spec;
5909 struct hda_input_mux *imux = &spec->input_mux;
5913 if (spec->dyn_adc_switch)
5916 nums = spec->num_adc_nids;
5923 if (i == spec->cur_mux[c])
5928 if (spec->hp_mic)
5932 if (spec->cap_sync_hook)
5933 spec->cap_sync_hook(codec, NULL, NULL);
5939 struct hda_gen_spec *spec = codec->spec;
5943 for (i = 0; i < spec->autocfg.dig_outs; i++)
5944 set_output_and_unmute(codec, spec->digout_paths[i]);
5945 pin = spec->autocfg.dig_in_pin;
5948 resume_path_from_idx(codec, spec->digin_path);
5970 * snd_hda_gen_init - initialize the generic spec
5977 struct hda_gen_spec *spec = codec->spec;
5979 if (spec->init_hook)
5980 spec->init_hook(codec);
5982 if (!spec->skip_verbs)
6002 if (spec->vmaster_mute.sw_kctl && spec->vmaster_mute.hook)
6003 snd_hda_sync_vmaster_hook(&spec->vmaster_mute);
6011 * snd_hda_gen_free - free the generic spec
6019 snd_hda_gen_spec_free(codec->spec);
6020 kfree(codec->spec);
6021 codec->spec = NULL;
6035 struct hda_gen_spec *spec = codec->spec;
6036 return snd_hda_check_amp_list_power(codec, &spec->loopback, nid);
6063 struct hda_gen_spec *spec;
6066 spec = kzalloc(sizeof(*spec), GFP_KERNEL);
6067 if (!spec)
6069 snd_hda_gen_spec_init(spec);
6070 codec->spec = spec;
6072 err = snd_hda_parse_pin_defcfg(codec, &spec->autocfg, NULL, 0);
6076 err = snd_hda_gen_parse_auto_config(codec, &spec->autocfg);