Lines Matching full:spec
33 * @spec: hda_gen_spec object to initialize
37 int snd_hda_gen_spec_init(struct hda_gen_spec *spec) in snd_hda_gen_spec_init() argument
39 snd_array_init(&spec->kctls, sizeof(struct snd_kcontrol_new), 32); in snd_hda_gen_spec_init()
40 snd_array_init(&spec->paths, sizeof(struct nid_path), 8); in snd_hda_gen_spec_init()
41 snd_array_init(&spec->loopback_list, sizeof(struct hda_amp_list), 8); in snd_hda_gen_spec_init()
42 mutex_init(&spec->pcm_mutex); in snd_hda_gen_spec_init()
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, in snd_hda_gen_add_kctl() argument
62 struct snd_kcontrol_new *knew = snd_array_new(&spec->kctls); in snd_hda_gen_add_kctl()
76 static void free_kctls(struct hda_gen_spec *spec) in free_kctls() argument
78 if (spec->kctls.list) { in free_kctls()
79 struct snd_kcontrol_new *kctl = spec->kctls.list; in free_kctls()
81 for (i = 0; i < spec->kctls.used; i++) in free_kctls()
84 snd_array_free(&spec->kctls); in free_kctls()
87 static void snd_hda_gen_spec_free(struct hda_gen_spec *spec) in snd_hda_gen_spec_free() argument
89 if (!spec) in snd_hda_gen_spec_free()
91 free_kctls(spec); in snd_hda_gen_spec_free()
92 snd_array_free(&spec->paths); in snd_hda_gen_spec_free()
93 snd_array_free(&spec->loopback_list); in snd_hda_gen_spec_free()
95 if (spec->led_cdevs[LED_AUDIO_MUTE]) in snd_hda_gen_spec_free()
96 led_classdev_unregister(spec->led_cdevs[LED_AUDIO_MUTE]); in snd_hda_gen_spec_free()
97 if (spec->led_cdevs[LED_AUDIO_MICMUTE]) in snd_hda_gen_spec_free()
98 led_classdev_unregister(spec->led_cdevs[LED_AUDIO_MICMUTE]); in snd_hda_gen_spec_free()
107 struct hda_gen_spec *spec = codec->spec; in parse_user_hints() local
143 spec->suppress_auto_mute = !val; in parse_user_hints()
146 spec->suppress_auto_mic = !val; in parse_user_hints()
149 spec->line_in_auto_switch = !!val; in parse_user_hints()
152 spec->auto_mute_via_amp = !!val; in parse_user_hints()
155 spec->need_dac_fix = !!val; in parse_user_hints()
158 spec->no_primary_hp = !val; in parse_user_hints()
161 spec->no_multi_io = !val; in parse_user_hints()
164 spec->multi_cap_vol = !!val; in parse_user_hints()
167 spec->inv_dmic_split = !!val; in parse_user_hints()
170 spec->indep_hp = !!val; in parse_user_hints()
173 spec->add_stereo_mix_input = !!val; in parse_user_hints()
177 spec->add_jack_modes = !!val; in parse_user_hints()
180 spec->add_jack_modes = !!val; in parse_user_hints()
183 spec->add_jack_modes = !!val; in parse_user_hints()
186 spec->power_down_unused = !!val; in parse_user_hints()
189 spec->hp_mic = !!val; in parse_user_hints()
192 spec->suppress_hp_mic_detect = !val; in parse_user_hints()
195 spec->suppress_vmaster = !val; in parse_user_hints()
198 spec->mixer_nid = val; in parse_user_hints()
260 struct hda_gen_spec *spec = codec->spec; in get_nid_path() local
264 snd_array_for_each(&spec->paths, i, path) { in get_nid_path()
289 struct hda_gen_spec *spec = codec->spec; in snd_hda_get_path_idx() local
290 struct nid_path *array = spec->paths.list; in snd_hda_get_path_idx()
293 if (!spec->paths.used) in snd_hda_get_path_idx()
296 if (idx < 0 || idx >= spec->paths.used) in snd_hda_get_path_idx()
310 struct hda_gen_spec *spec = codec->spec; in snd_hda_get_path_from_idx() local
312 if (idx <= 0 || idx > spec->paths.used) in snd_hda_get_path_from_idx()
314 return snd_array_elem(&spec->paths, idx - 1); in snd_hda_get_path_from_idx()
321 struct hda_gen_spec *spec = codec->spec; in is_dac_already_used() local
325 snd_array_for_each(&spec->paths, i, path) { in is_dac_already_used()
347 struct hda_gen_spec *spec = codec->spec; in is_ctl_used() local
352 snd_array_for_each(&spec->paths, i, path) { in is_ctl_used()
480 struct hda_gen_spec *spec = codec->spec; in snd_hda_add_new_path() local
491 path = snd_array_new(&spec->paths); in snd_hda_add_new_path()
498 spec->paths.used--; in snd_hda_add_new_path()
515 struct hda_gen_spec *spec = codec->spec; in get_preferred_dac() local
516 const hda_nid_t *list = spec->preferred_dacs; in get_preferred_dac()
530 struct hda_gen_spec *spec = codec->spec; in look_for_dac() local
534 for (i = 0; i < spec->num_all_dacs; i++) { in look_for_dac()
535 hda_nid_t nid = spec->all_dacs[i]; in look_for_dac()
584 struct hda_gen_spec *spec = codec->spec; in look_for_out_vol_nid() local
589 if ((spec->out_vol_mask >> nid) & 1) in look_for_out_vol_nid()
633 struct hda_gen_spec *spec = codec->spec; in is_active_nid() local
641 snd_array_for_each(&spec->paths, n, path) { in is_active_nid()
785 struct hda_gen_spec *spec = codec->spec; in activate_amp_in() local
810 if (conn[n] != spec->mixer_merge_nid) in activate_amp_in()
882 struct hda_gen_spec *spec = codec->spec; in snd_hda_activate_path() local
888 if (enable && (spec->power_down_unused || codec->power_save_node)) in snd_hda_activate_path()
909 struct hda_gen_spec *spec = codec->spec; in path_power_down_sync() local
911 if (!(spec->power_down_unused || codec->power_save_node) || path->active) in path_power_down_sync()
919 struct hda_gen_spec *spec = codec->spec; in set_pin_eapd() local
920 if (spec->own_eapd_ctl || in set_pin_eapd()
923 if (spec->keep_eapd_on && !enable) in set_pin_eapd()
979 add_control(struct hda_gen_spec *spec, int type, const char *name, in add_control() argument
984 knew = snd_hda_gen_add_kctl(spec, name, &control_templates[type]); in add_control()
994 static int add_control_with_pfx(struct hda_gen_spec *spec, int type, in add_control_with_pfx() argument
1000 if (!add_control(spec, type, name, cidx, val)) in add_control_with_pfx()
1005 #define add_pb_vol_ctrl(spec, type, pfx, val) \ argument
1006 add_control_with_pfx(spec, type, pfx, "Playback", "Volume", 0, val)
1007 #define add_pb_sw_ctrl(spec, type, pfx, val) \ argument
1008 add_control_with_pfx(spec, type, pfx, "Playback", "Switch", 0, val)
1009 #define __add_pb_vol_ctrl(spec, type, pfx, cidx, val) \ argument
1010 add_control_with_pfx(spec, type, pfx, "Playback", "Volume", cidx, val)
1011 #define __add_pb_sw_ctrl(spec, type, pfx, cidx, val) \ argument
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); in add_vol_ctl()
1070 return __add_pb_sw_ctrl(codec->spec, type, pfx, cidx, val); in add_sw_ctl()
1085 struct hda_gen_spec *spec = codec->spec; in sync_auto_mute_bits() local
1087 if (spec->auto_mute_via_amp) { in sync_auto_mute_bits()
1089 bool enabled = !((spec->mute_bits >> nid) & 1); in sync_auto_mute_bits()
1164 struct hda_gen_spec *spec = codec->spec; in get_line_out_pfx() local
1165 struct auto_pin_cfg *cfg = &spec->autocfg; in get_line_out_pfx()
1168 if (cfg->line_outs == 1 && !spec->multi_ios && in get_line_out_pfx()
1171 return spec->vmaster_mute.hook ? "PCM" : "Master"; in get_line_out_pfx()
1176 if (spec->multiout.num_dacs == 1 && !spec->mixer_nid && in get_line_out_pfx()
1178 !spec->multiout.hp_out_nid[0] && !spec->multiout.extra_out_nid[0]) in get_line_out_pfx()
1179 return spec->vmaster_mute.hook ? "PCM" : "Master"; in get_line_out_pfx()
1191 !path_has_mixer(codec, spec->hp_paths[0], ctl_type)) in get_line_out_pfx()
1203 !path_has_mixer(codec, spec->speaker_paths[0], ctl_type)) in get_line_out_pfx()
1206 if (ch && spec->multi_ios) in get_line_out_pfx()
1219 spec->speaker_paths[0], ctl_type); in get_line_out_pfx()
1221 hp_lo_shared = !path_has_mixer(codec, spec->hp_paths[0], ctl_type); in get_line_out_pfx()
1223 return spec->vmaster_mute.hook ? "PCM" : "Master"; in get_line_out_pfx()
1232 if (cfg->line_outs == 1 && !spec->multi_ios) in get_line_out_pfx()
1280 struct hda_gen_spec *spec = codec->spec; in assign_out_path_ctls() local
1295 if (spec->dac_min_mute) in assign_out_path_ctls()
1343 struct hda_gen_spec *spec = codec->spec; in get_primary_out() local
1344 struct auto_pin_cfg *cfg = &spec->autocfg; in get_primary_out()
1347 return spec->private_dac_nids[idx]; in get_primary_out()
1349 if (spec->multi_ios > idx) in get_primary_out()
1350 return spec->multi_io[idx].dac; in get_primary_out()
1367 struct hda_gen_spec *spec = codec->spec; in try_assign_dacs() local
1379 if (!spec->obey_preferred_dacs) { in try_assign_dacs()
1391 } else if (spec->obey_preferred_dacs) { in try_assign_dacs()
1424 } else if (is_reachable_path(codec, spec->private_dac_nids[0], pin)) { in try_assign_dacs()
1425 dac = spec->private_dac_nids[0]; in try_assign_dacs()
1434 path = snd_hda_add_new_path(codec, dac, pin, -spec->mixer_nid); in try_assign_dacs()
1435 if (!path && !i && spec->mixer_nid) { in try_assign_dacs()
1456 struct hda_gen_spec *spec = codec->spec; in get_dac_if_single() local
1460 for (i = 0; i < spec->num_all_dacs; i++) { in get_dac_if_single()
1461 hda_nid_t nid = spec->all_dacs[i]; in get_dac_if_single()
1493 struct hda_gen_spec *spec = codec->spec; in count_multiio_pins() local
1494 struct auto_pin_cfg *cfg = &spec->autocfg; in count_multiio_pins()
1524 struct hda_gen_spec *spec = codec->spec; in fill_multi_ios() local
1525 struct auto_pin_cfg *cfg = &spec->autocfg; in fill_multi_ios()
1532 old_pins = spec->multi_ios; in fill_multi_ios()
1549 for (j = 0; j < spec->multi_ios; j++) { in fill_multi_ios()
1550 if (nid == spec->multi_io[j].pin) in fill_multi_ios()
1553 if (j < spec->multi_ios) in fill_multi_ios()
1565 -spec->mixer_nid); in fill_multi_ios()
1571 spec->multi_io[spec->multi_ios].pin = nid; in fill_multi_ios()
1572 spec->multi_io[spec->multi_ios].dac = dac; in fill_multi_ios()
1573 spec->out_paths[cfg->line_outs + spec->multi_ios] = in fill_multi_ios()
1575 spec->multi_ios++; in fill_multi_ios()
1576 if (spec->multi_ios >= 2) in fill_multi_ios()
1583 if (old_pins == spec->multi_ios) { in fill_multi_ios()
1589 if (!hardwired && spec->multi_ios < 2) { in fill_multi_ios()
1591 spec->paths.used -= spec->multi_ios - old_pins; in fill_multi_ios()
1592 spec->multi_ios = old_pins; in fill_multi_ios()
1597 for (i = old_pins; i < spec->multi_ios; i++) { in fill_multi_ios()
1598 path = snd_hda_get_path_from_idx(codec, spec->out_paths[cfg->line_outs + i]); in fill_multi_ios()
1609 struct hda_gen_spec *spec = codec->spec; in map_singles() local
1621 -spec->mixer_nid); in map_singles()
1622 if (!path && !i && spec->mixer_nid) in map_singles()
1635 static inline bool has_aamix_out_paths(struct hda_gen_spec *spec) in has_aamix_out_paths() argument
1637 return spec->aamix_out_paths[0] || spec->aamix_out_paths[1] || in has_aamix_out_paths()
1638 spec->aamix_out_paths[2]; in has_aamix_out_paths()
1644 struct hda_gen_spec *spec = codec->spec; in check_aamix_out_path() local
1650 is_nid_contained(path, spec->mixer_nid)) in check_aamix_out_path()
1653 dac = spec->private_dac_nids[0]; in check_aamix_out_path()
1655 path = snd_hda_add_new_path(codec, dac, pin, spec->mixer_nid); in check_aamix_out_path()
1659 else if (spec->multiout.hp_out_nid[0]) in check_aamix_out_path()
1660 dac = spec->multiout.hp_out_nid[0]; in check_aamix_out_path()
1661 else if (spec->multiout.extra_out_nid[0]) in check_aamix_out_path()
1662 dac = spec->multiout.extra_out_nid[0]; in check_aamix_out_path()
1667 spec->mixer_nid); in check_aamix_out_path()
1680 struct hda_gen_spec *spec = codec->spec; in indep_hp_possible() local
1681 struct auto_pin_cfg *cfg = &spec->autocfg; in indep_hp_possible()
1686 idx = spec->out_paths[0]; in indep_hp_possible()
1688 idx = spec->hp_paths[0]; in indep_hp_possible()
1694 if (!spec->mixer_nid || !is_nid_contained(path, spec->mixer_nid)) in indep_hp_possible()
1699 if (spec->out_paths[i] == idx) in indep_hp_possible()
1701 path = snd_hda_get_path_from_idx(codec, spec->out_paths[i]); in indep_hp_possible()
1702 if (path && is_nid_contained(path, spec->mixer_nid)) in indep_hp_possible()
1706 path = snd_hda_get_path_from_idx(codec, spec->speaker_paths[i]); in indep_hp_possible()
1707 if (path && is_nid_contained(path, spec->mixer_nid)) in indep_hp_possible()
1738 struct hda_gen_spec *spec = codec->spec; in fill_and_eval_dacs() local
1739 struct auto_pin_cfg *cfg = &spec->autocfg; in fill_and_eval_dacs()
1743 spec->multiout.num_dacs = cfg->line_outs; in fill_and_eval_dacs()
1744 spec->multiout.dac_nids = spec->private_dac_nids; in fill_and_eval_dacs()
1745 memset(spec->private_dac_nids, 0, sizeof(spec->private_dac_nids)); in fill_and_eval_dacs()
1746 memset(spec->multiout.hp_out_nid, 0, sizeof(spec->multiout.hp_out_nid)); in fill_and_eval_dacs()
1747 memset(spec->multiout.extra_out_nid, 0, sizeof(spec->multiout.extra_out_nid)); in fill_and_eval_dacs()
1748 spec->multi_ios = 0; in fill_and_eval_dacs()
1749 snd_array_free(&spec->paths); in fill_and_eval_dacs()
1752 memset(spec->out_paths, 0, sizeof(spec->out_paths)); in fill_and_eval_dacs()
1753 memset(spec->hp_paths, 0, sizeof(spec->hp_paths)); in fill_and_eval_dacs()
1754 memset(spec->speaker_paths, 0, sizeof(spec->speaker_paths)); in fill_and_eval_dacs()
1755 memset(spec->aamix_out_paths, 0, sizeof(spec->aamix_out_paths)); in fill_and_eval_dacs()
1756 memset(spec->digout_paths, 0, sizeof(spec->digout_paths)); in fill_and_eval_dacs()
1757 memset(spec->input_paths, 0, sizeof(spec->input_paths)); in fill_and_eval_dacs()
1758 memset(spec->loopback_paths, 0, sizeof(spec->loopback_paths)); in fill_and_eval_dacs()
1759 memset(&spec->digin_path, 0, sizeof(spec->digin_path)); in fill_and_eval_dacs()
1769 spec->private_dac_nids, in fill_and_eval_dacs()
1770 spec->out_paths); in fill_and_eval_dacs()
1773 spec->multiout.hp_out_nid, in fill_and_eval_dacs()
1774 spec->hp_paths); in fill_and_eval_dacs()
1777 spec->multiout.extra_out_nid, in fill_and_eval_dacs()
1778 spec->speaker_paths); in fill_and_eval_dacs()
1779 if (!spec->no_multi_io && in fill_and_eval_dacs()
1790 spec->private_dac_nids, spec->out_paths, in fill_and_eval_dacs()
1791 spec->main_out_badness); in fill_and_eval_dacs()
1793 if (!spec->no_multi_io && fill_mio_first && in fill_and_eval_dacs()
1804 spec->multiout.hp_out_nid, in fill_and_eval_dacs()
1805 spec->hp_paths, in fill_and_eval_dacs()
1806 spec->extra_out_badness); in fill_and_eval_dacs()
1814 spec->multiout.extra_out_nid, in fill_and_eval_dacs()
1815 spec->speaker_paths, in fill_and_eval_dacs()
1816 spec->extra_out_badness); in fill_and_eval_dacs()
1821 if (!spec->no_multi_io && in fill_and_eval_dacs()
1829 if (spec->mixer_nid) { in fill_and_eval_dacs()
1830 spec->aamix_out_paths[0] = in fill_and_eval_dacs()
1831 check_aamix_out_path(codec, spec->out_paths[0]); in fill_and_eval_dacs()
1833 spec->aamix_out_paths[1] = in fill_and_eval_dacs()
1834 check_aamix_out_path(codec, spec->hp_paths[0]); in fill_and_eval_dacs()
1836 spec->aamix_out_paths[2] = in fill_and_eval_dacs()
1837 check_aamix_out_path(codec, spec->speaker_paths[0]); in fill_and_eval_dacs()
1840 if (!spec->no_multi_io && in fill_and_eval_dacs()
1843 spec->multi_ios = 1; /* give badness */ in fill_and_eval_dacs()
1846 spec->multiout.num_dacs = 0; in fill_and_eval_dacs()
1848 if (spec->private_dac_nids[i]) in fill_and_eval_dacs()
1849 spec->multiout.num_dacs++; in fill_and_eval_dacs()
1851 memmove(spec->private_dac_nids + i, in fill_and_eval_dacs()
1852 spec->private_dac_nids + i + 1, in fill_and_eval_dacs()
1854 spec->private_dac_nids[cfg->line_outs - 1] = 0; in fill_and_eval_dacs()
1858 spec->ext_channel_count = spec->min_channel_count = in fill_and_eval_dacs()
1859 spec->multiout.num_dacs * 2; in fill_and_eval_dacs()
1861 if (spec->multi_ios == 2) { in fill_and_eval_dacs()
1863 spec->private_dac_nids[spec->multiout.num_dacs++] = in fill_and_eval_dacs()
1864 spec->multi_io[i].dac; in fill_and_eval_dacs()
1865 } else if (spec->multi_ios) { in fill_and_eval_dacs()
1866 spec->multi_ios = 0; in fill_and_eval_dacs()
1870 if (spec->indep_hp && !indep_hp_possible(codec)) in fill_and_eval_dacs()
1876 spec->multiout.hp_out_nid, in fill_and_eval_dacs()
1877 spec->hp_paths); in fill_and_eval_dacs()
1880 spec->multiout.extra_out_nid, in fill_and_eval_dacs()
1881 spec->speaker_paths); in fill_and_eval_dacs()
1910 struct hda_gen_spec *spec = codec->spec; in debug_show_configs() local
1917 spec->multiout.dac_nids[0], in debug_show_configs()
1918 spec->multiout.dac_nids[1], in debug_show_configs()
1919 spec->multiout.dac_nids[2], in debug_show_configs()
1920 spec->multiout.dac_nids[3], in debug_show_configs()
1923 print_nid_path_idx(codec, " out", spec->out_paths[i]); in debug_show_configs()
1924 if (spec->multi_ios > 0) in debug_show_configs()
1926 spec->multi_ios, in debug_show_configs()
1927 spec->multi_io[0].pin, spec->multi_io[1].pin, in debug_show_configs()
1928 spec->multi_io[0].dac, spec->multi_io[1].dac); in debug_show_configs()
1929 for (i = 0; i < spec->multi_ios; i++) in debug_show_configs()
1931 spec->out_paths[cfg->line_outs + i]); in debug_show_configs()
1936 spec->multiout.hp_out_nid[0], in debug_show_configs()
1937 spec->multiout.hp_out_nid[1], in debug_show_configs()
1938 spec->multiout.hp_out_nid[2], in debug_show_configs()
1939 spec->multiout.hp_out_nid[3]); in debug_show_configs()
1941 print_nid_path_idx(codec, " hp ", spec->hp_paths[i]); in debug_show_configs()
1946 spec->multiout.extra_out_nid[0], in debug_show_configs()
1947 spec->multiout.extra_out_nid[1], in debug_show_configs()
1948 spec->multiout.extra_out_nid[2], in debug_show_configs()
1949 spec->multiout.extra_out_nid[3]); in debug_show_configs()
1951 print_nid_path_idx(codec, " spk", spec->speaker_paths[i]); in debug_show_configs()
1953 print_nid_path_idx(codec, " mix", spec->aamix_out_paths[i]); in debug_show_configs()
1962 struct hda_gen_spec *spec = codec->spec; in fill_all_dac_nids() local
1965 spec->num_all_dacs = 0; in fill_all_dac_nids()
1966 memset(spec->all_dacs, 0, sizeof(spec->all_dacs)); in fill_all_dac_nids()
1970 if (spec->num_all_dacs >= ARRAY_SIZE(spec->all_dacs)) { in fill_all_dac_nids()
1974 spec->all_dacs[spec->num_all_dacs++] = nid; in fill_all_dac_nids()
1980 struct hda_gen_spec *spec = codec->spec; in parse_output_paths() local
1981 struct auto_pin_cfg *cfg = &spec->autocfg; in parse_output_paths()
2065 path = snd_hda_get_path_from_idx(codec, spec->out_paths[0]); in parse_output_paths()
2067 spec->vmaster_nid = look_for_out_vol_nid(codec, path); in parse_output_paths()
2068 if (spec->vmaster_nid) { in parse_output_paths()
2069 snd_hda_set_vmaster_tlv(codec, spec->vmaster_nid, in parse_output_paths()
2070 HDA_OUTPUT, spec->vmaster_tlv); in parse_output_paths()
2071 if (spec->dac_min_mute) in parse_output_paths()
2072 spec->vmaster_tlv[SNDRV_CTL_TLVO_DB_SCALE_MUTE_AND_STEP] |= TLV_DB_SCALE_MUTE; in parse_output_paths()
2077 if (spec->prefer_hp_amp || cfg->line_out_type == AUTO_PIN_HP_OUT) in parse_output_paths()
2085 val = spec->prefer_hp_amp ? PIN_HP : PIN_OUT; in parse_output_paths()
2091 if (spec->indep_hp && !indep_hp_possible(codec)) in parse_output_paths()
2092 spec->indep_hp = 0; in parse_output_paths()
2102 struct hda_gen_spec *spec = codec->spec; in create_multi_out_ctls() local
2106 if (spec->multi_ios > 0 && cfg->line_outs < 3) in create_multi_out_ctls()
2107 noutputs += spec->multi_ios; in create_multi_out_ctls()
2114 path = snd_hda_get_path_from_idx(codec, spec->out_paths[i]); in create_multi_out_ctls()
2198 struct hda_gen_spec *spec = codec->spec; in create_hp_out_ctls() local
2199 return create_extra_outs(codec, spec->autocfg.hp_outs, in create_hp_out_ctls()
2200 spec->hp_paths, in create_hp_out_ctls()
2206 struct hda_gen_spec *spec = codec->spec; in create_speaker_out_ctls() local
2207 return create_extra_outs(codec, spec->autocfg.speaker_outs, in create_speaker_out_ctls()
2208 spec->speaker_paths, in create_speaker_out_ctls()
2228 struct hda_gen_spec *spec = codec->spec; in indep_hp_get() local
2229 ucontrol->value.enumerated.item[0] = spec->indep_hp_enabled; in indep_hp_get()
2241 struct hda_gen_spec *spec = codec->spec; in indep_hp_put() local
2245 mutex_lock(&spec->pcm_mutex); in indep_hp_put()
2246 if (spec->active_streams) { in indep_hp_put()
2251 if (spec->indep_hp_enabled != select) { in indep_hp_put()
2253 if (spec->autocfg.line_out_type == AUTO_PIN_HP_OUT) in indep_hp_put()
2254 dacp = &spec->private_dac_nids[0]; in indep_hp_put()
2256 dacp = &spec->multiout.hp_out_nid[0]; in indep_hp_put()
2259 if (spec->have_aamix_ctl) { in indep_hp_put()
2260 if (spec->autocfg.line_out_type == AUTO_PIN_HP_OUT) in indep_hp_put()
2261 update_aamix_paths(codec, spec->aamix_mode, in indep_hp_put()
2262 spec->out_paths[0], in indep_hp_put()
2263 spec->aamix_out_paths[0], in indep_hp_put()
2264 spec->autocfg.line_out_type); in indep_hp_put()
2266 update_aamix_paths(codec, spec->aamix_mode, in indep_hp_put()
2267 spec->hp_paths[0], in indep_hp_put()
2268 spec->aamix_out_paths[1], in indep_hp_put()
2272 spec->indep_hp_enabled = select; in indep_hp_put()
2273 if (spec->indep_hp_enabled) in indep_hp_put()
2276 *dacp = spec->alt_dac_nid; in indep_hp_put()
2282 mutex_unlock(&spec->pcm_mutex); in indep_hp_put()
2297 struct hda_gen_spec *spec = codec->spec; in create_indep_hp_ctls() local
2300 if (!spec->indep_hp) in create_indep_hp_ctls()
2302 if (spec->autocfg.line_out_type == AUTO_PIN_HP_OUT) in create_indep_hp_ctls()
2303 dac = spec->multiout.dac_nids[0]; in create_indep_hp_ctls()
2305 dac = spec->multiout.hp_out_nid[0]; in create_indep_hp_ctls()
2307 spec->indep_hp = 0; in create_indep_hp_ctls()
2311 spec->indep_hp_enabled = false; in create_indep_hp_ctls()
2312 spec->alt_dac_nid = dac; in create_indep_hp_ctls()
2313 if (!snd_hda_gen_add_kctl(spec, NULL, &indep_hp_ctl)) in create_indep_hp_ctls()
2326 struct hda_gen_spec *spec = codec->spec; in ch_mode_info() local
2331 uinfo->value.enumerated.items = spec->multi_ios + 1; in ch_mode_info()
2332 if (uinfo->value.enumerated.item > spec->multi_ios) in ch_mode_info()
2333 uinfo->value.enumerated.item = spec->multi_ios; in ch_mode_info()
2334 chs = uinfo->value.enumerated.item * 2 + spec->min_channel_count; in ch_mode_info()
2343 struct hda_gen_spec *spec = codec->spec; in ch_mode_get() local
2345 (spec->ext_channel_count - spec->min_channel_count) / 2; in ch_mode_get()
2352 struct hda_gen_spec *spec = codec->spec; in get_multiio_path() local
2354 spec->out_paths[spec->autocfg.line_outs + idx]); in get_multiio_path()
2362 static bool aamix_default(struct hda_gen_spec *spec) in aamix_default() argument
2364 return !spec->have_aamix_ctl || spec->aamix_mode; in aamix_default()
2369 struct hda_gen_spec *spec = codec->spec; in set_multi_io() local
2370 hda_nid_t nid = spec->multi_io[idx].pin; in set_multi_io()
2382 snd_hda_activate_path(codec, path, true, aamix_default(spec)); in set_multi_io()
2386 snd_hda_activate_path(codec, path, false, aamix_default(spec)); in set_multi_io()
2387 set_pin_target(codec, nid, spec->multi_io[idx].ctl_in, true); in set_multi_io()
2401 struct hda_gen_spec *spec = codec->spec; in ch_mode_put() local
2405 if (ch < 0 || ch > spec->multi_ios) in ch_mode_put()
2407 if (ch == (spec->ext_channel_count - spec->min_channel_count) / 2) in ch_mode_put()
2409 spec->ext_channel_count = ch * 2 + spec->min_channel_count; in ch_mode_put()
2410 for (i = 0; i < spec->multi_ios; i++) in ch_mode_put()
2412 spec->multiout.max_channels = max(spec->ext_channel_count, in ch_mode_put()
2413 spec->const_channel_count); in ch_mode_put()
2414 if (spec->need_dac_fix) in ch_mode_put()
2415 spec->multiout.num_dacs = spec->multiout.max_channels / 2; in ch_mode_put()
2429 struct hda_gen_spec *spec = codec->spec; in create_multi_channel_mode() local
2431 if (spec->multi_ios > 0) { in create_multi_channel_mode()
2432 if (!snd_hda_gen_add_kctl(spec, NULL, &channel_mode_enum)) in create_multi_channel_mode()
2448 struct hda_gen_spec *spec = codec->spec; in loopback_mixing_get() local
2449 ucontrol->value.enumerated.item[0] = spec->aamix_mode; in loopback_mixing_get()
2457 struct hda_gen_spec *spec = codec->spec; in update_aamix_paths() local
2468 if (out_type == AUTO_PIN_HP_OUT && spec->indep_hp_enabled && in update_aamix_paths()
2469 mix_path->path[0] != spec->alt_dac_nid) in update_aamix_paths()
2487 struct hda_gen_spec *spec = codec->spec; in update_output_paths() local
2495 spec->aamix_mode); in update_output_paths()
2503 struct hda_gen_spec *spec = codec->spec; in loopback_mixing_put() local
2504 const struct auto_pin_cfg *cfg = &spec->autocfg; in loopback_mixing_put()
2507 if (val == spec->aamix_mode) in loopback_mixing_put()
2509 spec->aamix_mode = val; in loopback_mixing_put()
2510 if (has_aamix_out_paths(spec)) { in loopback_mixing_put()
2511 update_aamix_paths(codec, val, spec->out_paths[0], in loopback_mixing_put()
2512 spec->aamix_out_paths[0], in loopback_mixing_put()
2514 update_aamix_paths(codec, val, spec->hp_paths[0], in loopback_mixing_put()
2515 spec->aamix_out_paths[1], in loopback_mixing_put()
2517 update_aamix_paths(codec, val, spec->speaker_paths[0], in loopback_mixing_put()
2518 spec->aamix_out_paths[2], in loopback_mixing_put()
2521 update_output_paths(codec, cfg->line_outs, spec->out_paths); in loopback_mixing_put()
2523 update_output_paths(codec, cfg->hp_outs, spec->hp_paths); in loopback_mixing_put()
2526 spec->speaker_paths); in loopback_mixing_put()
2541 struct hda_gen_spec *spec = codec->spec; in create_loopback_mixing_ctl() local
2543 if (!spec->mixer_nid) in create_loopback_mixing_ctl()
2545 if (!snd_hda_gen_add_kctl(spec, NULL, &loopback_mixing_enum)) in create_loopback_mixing_ctl()
2547 spec->have_aamix_ctl = 1; in create_loopback_mixing_ctl()
2560 struct hda_gen_spec *spec = codec->spec; in update_hp_mic() local
2565 pin = spec->hp_mic_pin; in update_hp_mic()
2566 as_mic = spec->cur_mux[adc_mux] == spec->hp_mic_mux_idx; in update_hp_mic()
2583 if (val == AC_PINCTL_VREF_HIZ && spec->shared_mic_vref_pin) { in update_hp_mic()
2584 const hda_nid_t vref_pin = spec->shared_mic_vref_pin; in update_hp_mic()
2591 if (!spec->hp_mic_jack_modes) { in update_hp_mic()
2604 struct hda_gen_spec *spec = codec->spec; in create_hp_mic() local
2605 struct auto_pin_cfg *cfg = &spec->autocfg; in create_hp_mic()
2609 if (!spec->hp_mic) { in create_hp_mic()
2610 if (spec->suppress_hp_mic_detect) in create_hp_mic()
2624 spec->hp_mic = 0; /* clear once */ in create_hp_mic()
2643 spec->hp_mic = 1; in create_hp_mic()
2644 spec->hp_mic_pin = nid; in create_hp_mic()
2646 spec->suppress_auto_mic = 1; in create_hp_mic()
2702 struct hda_gen_spec *spec = codec->spec; in find_kctl_name() local
2706 snd_array_for_each(&spec->kctls, i, kctl) { in find_kctl_name()
2716 struct hda_gen_spec *spec = codec->spec; in get_jack_mode_name() local
2719 snd_hda_get_pin_label(codec, pin, &spec->autocfg, name, name_len, &idx); in get_jack_mode_name()
2728 struct hda_gen_spec *spec = codec->spec; in get_out_jack_num_items() local
2729 if (spec->add_jack_modes) { in get_out_jack_num_items()
2740 struct hda_gen_spec *spec = codec->spec; in create_out_jack_modes() local
2745 if (pin == spec->hp_mic_pin) in create_out_jack_modes()
2751 knew = snd_hda_gen_add_kctl(spec, name, in create_out_jack_modes()
2870 struct hda_gen_spec *spec = codec->spec; in get_in_jack_num_items() local
2872 if (spec->add_jack_modes) in get_in_jack_num_items()
2879 struct hda_gen_spec *spec = codec->spec; in create_in_jack_mode() local
2884 if (pin == spec->hp_mic_pin) in create_in_jack_mode()
2897 knew = snd_hda_gen_add_kctl(spec, name, &in_jack_mode_enum); in create_in_jack_mode()
3016 struct hda_gen_spec *spec = codec->spec; in create_hp_mic_jack_mode() local
3019 knew = snd_hda_gen_add_kctl(spec, "Headphone Mic Jack Mode", in create_hp_mic_jack_mode()
3024 spec->hp_mic_jack_modes = 1; in create_hp_mic_jack_mode()
3033 static int add_loopback_list(struct hda_gen_spec *spec, hda_nid_t mix, int idx) in add_loopback_list() argument
3037 list = snd_array_new(&spec->loopback_list); in add_loopback_list()
3043 spec->loopback.amplist = spec->loopback_list.list; in add_loopback_list()
3090 struct hda_gen_spec *spec = codec->spec; in new_analog_input() local
3102 spec->loopback_paths[input_idx] = snd_hda_get_path_idx(codec, path); in new_analog_input()
3106 err = __add_pb_vol_ctrl(spec, HDA_CTL_WIDGET_VOL, ctlname, ctlidx, mix_val); in new_analog_input()
3113 err = __add_pb_sw_ctrl(spec, HDA_CTL_WIDGET_MUTE, ctlname, ctlidx, mute_val); in new_analog_input()
3121 err = add_loopback_list(spec, mix_nid, idx); in new_analog_input()
3125 if (spec->mixer_nid != spec->mixer_merge_nid && in new_analog_input()
3126 !spec->loopback_merge_path) { in new_analog_input()
3127 path = snd_hda_add_new_path(codec, spec->mixer_nid, in new_analog_input()
3128 spec->mixer_merge_nid, 0); in new_analog_input()
3134 spec->loopback_merge_path = in new_analog_input()
3151 struct hda_gen_spec *spec = codec->spec; in fill_adc_nids() local
3153 hda_nid_t *adc_nids = spec->adc_nids; in fill_adc_nids()
3154 int max_nums = ARRAY_SIZE(spec->adc_nids); in fill_adc_nids()
3167 spec->num_adc_nids = nums; in fill_adc_nids()
3170 spec->num_all_adcs = nums; in fill_adc_nids()
3171 memcpy(spec->all_adcs, spec->adc_nids, nums * sizeof(hda_nid_t)); in fill_adc_nids()
3181 struct hda_gen_spec *spec = codec->spec; in check_dyn_adc_switch() local
3182 struct hda_input_mux *imux = &spec->input_mux; in check_dyn_adc_switch()
3188 for (n = 0; n < spec->num_adc_nids; n++) { in check_dyn_adc_switch()
3190 if (!spec->input_paths[i][n]) in check_dyn_adc_switch()
3202 for (n = 0; n < spec->num_adc_nids; n++) { in check_dyn_adc_switch()
3203 if (spec->input_paths[i][n]) { in check_dyn_adc_switch()
3204 spec->dyn_adc_idx[i] = n; in check_dyn_adc_switch()
3211 spec->dyn_adc_switch = 1; in check_dyn_adc_switch()
3212 } else if (nums != spec->num_adc_nids) { in check_dyn_adc_switch()
3215 for (n = 0; n < spec->num_adc_nids; n++) { in check_dyn_adc_switch()
3219 spec->adc_nids[nums] = spec->adc_nids[n]; in check_dyn_adc_switch()
3222 spec->input_paths[i][nums]); in check_dyn_adc_switch()
3223 spec->input_paths[i][nums] = in check_dyn_adc_switch()
3224 spec->input_paths[i][n]; in check_dyn_adc_switch()
3225 spec->input_paths[i][n] = 0; in check_dyn_adc_switch()
3230 spec->num_adc_nids = nums; in check_dyn_adc_switch()
3234 (imux->num_items == 2 && spec->hp_mic)) { in check_dyn_adc_switch()
3236 spec->num_adc_nids = 1; /* reduce to a single ADC */ in check_dyn_adc_switch()
3240 if (!spec->dyn_adc_switch && spec->multi_cap_vol) in check_dyn_adc_switch()
3241 spec->num_adc_nids = 1; in check_dyn_adc_switch()
3251 struct hda_gen_spec *spec = codec->spec; in parse_capture_source() local
3252 struct hda_input_mux *imux = &spec->input_mux; in parse_capture_source()
3259 hda_nid_t adc = spec->adc_nids[c]; in parse_capture_source()
3267 spec->input_paths[imux_idx][c] = in parse_capture_source()
3271 if (spec->hp_mic_pin == pin) in parse_capture_source()
3272 spec->hp_mic_mux_idx = imux->num_items; in parse_capture_source()
3273 spec->imux_pins[imux->num_items] = pin; in parse_capture_source()
3276 if (spec->dyn_adc_switch) in parse_capture_source()
3277 spec->dyn_adc_idx[imux_idx] = c; in parse_capture_source()
3291 struct hda_gen_spec *spec = codec->spec; in fill_input_pin_labels() local
3292 const struct auto_pin_cfg *cfg = &spec->autocfg; in fill_input_pin_labels()
3306 if (spec->input_labels[j] && in fill_input_pin_labels()
3307 !strcmp(spec->input_labels[j], label)) { in fill_input_pin_labels()
3308 idx = spec->input_label_idxs[j] + 1; in fill_input_pin_labels()
3313 spec->input_labels[i] = label; in fill_input_pin_labels()
3314 spec->input_label_idxs[i] = idx; in fill_input_pin_labels()
3324 struct hda_gen_spec *spec = codec->spec; in create_input_ctls() local
3325 const struct auto_pin_cfg *cfg = &spec->autocfg; in create_input_ctls()
3326 hda_nid_t mixer = spec->mixer_nid; in create_input_ctls()
3349 if (pin != spec->hp_mic_pin && in create_input_ctls()
3356 spec->input_labels[i], in create_input_ctls()
3357 spec->input_label_idxs[i], in create_input_ctls()
3365 spec->input_labels[i], -mixer); in create_input_ctls()
3369 if (spec->add_jack_modes) { in create_input_ctls()
3377 if (mixer && spec->add_stereo_mix_input == HDA_HINT_STEREO_MIX_ENABLE) { in create_input_ctls()
3383 spec->suppress_auto_mic = 1; in create_input_ctls()
3397 struct hda_gen_spec *spec = codec->spec; in get_input_path() local
3402 if (spec->dyn_adc_switch) in get_input_path()
3403 adc_idx = spec->dyn_adc_idx[imux_idx]; in get_input_path()
3408 return snd_hda_get_path_from_idx(codec, spec->input_paths[imux_idx][adc_idx]); in get_input_path()
3418 struct hda_gen_spec *spec = codec->spec; in mux_enum_info() local
3419 return snd_hda_input_mux_info(&spec->input_mux, uinfo); in mux_enum_info()
3426 struct hda_gen_spec *spec = codec->spec; in mux_enum_get() local
3430 ucontrol->value.enumerated.item[0] = spec->cur_mux[adc_idx]; in mux_enum_get()
3464 struct hda_gen_spec *spec = codec->spec; in cap_put_caller() local
3469 imux = &spec->input_mux; in cap_put_caller()
3486 if (err >= 0 && spec->cap_sync_hook) in cap_put_caller()
3487 spec->cap_sync_hook(codec, kcontrol, ucontrol); in cap_put_caller()
3577 struct hda_gen_spec *spec = codec->spec; in is_inv_dmic_pin() local
3578 struct auto_pin_cfg *cfg = &spec->autocfg; in is_inv_dmic_pin()
3582 if (!spec->inv_dmic_split) in is_inv_dmic_pin()
3600 struct hda_gen_spec *spec = codec->spec; in cap_single_sw_put() local
3607 if (spec->cap_sync_hook) in cap_single_sw_put()
3608 spec->cap_sync_hook(codec, kcontrol, ucontrol); in cap_single_sw_put()
3617 struct hda_gen_spec *spec = codec->spec; in add_single_cap_ctl() local
3633 knew = add_control(spec, type, tmpname, idx, in add_single_cap_ctl()
3649 knew = add_control(spec, type, tmpname, idx, in add_single_cap_ctl()
3677 struct hda_gen_spec *spec = codec->spec; in create_bind_cap_vol_ctl() local
3681 knew = snd_hda_gen_add_kctl(spec, NULL, &cap_vol_temp); in create_bind_cap_vol_ctl()
3689 knew = snd_hda_gen_add_kctl(spec, NULL, &cap_sw_temp); in create_bind_cap_vol_ctl()
3723 struct hda_gen_spec *spec = codec->spec; in create_multi_cap_vol_ctl() local
3724 struct hda_input_mux *imux = &spec->input_mux; in create_multi_cap_vol_ctl()
3732 if (idx >= spec->autocfg.num_inputs) in create_multi_cap_vol_ctl()
3734 inv_dmic = is_inv_dmic_pin(codec, spec->imux_pins[i]); in create_multi_cap_vol_ctl()
3738 spec->input_labels[idx], in create_multi_cap_vol_ctl()
3739 spec->input_label_idxs[idx], in create_multi_cap_vol_ctl()
3752 struct hda_gen_spec *spec = codec->spec; in create_capture_mixers() local
3753 struct hda_input_mux *imux = &spec->input_mux; in create_capture_mixers()
3756 if (spec->dyn_adc_switch) in create_capture_mixers()
3759 nums = spec->num_adc_nids; in create_capture_mixers()
3761 if (!spec->auto_mic && imux->num_items > 1) { in create_capture_mixers()
3765 knew = snd_hda_gen_add_kctl(spec, name, &cap_src_temp); in create_capture_mixers()
3773 bool multi_cap_vol = spec->multi_cap_vol; in create_capture_mixers()
3800 if (is_inv_dmic_pin(codec, spec->imux_pins[i])) in create_capture_mixers()
3868 struct hda_gen_spec *spec = codec->spec; in parse_mic_boost() local
3869 struct auto_pin_cfg *cfg = &spec->autocfg; in parse_mic_boost()
3870 struct hda_input_mux *imux = &spec->input_mux; in parse_mic_boost()
3873 if (!spec->num_adc_nids) in parse_mic_boost()
3900 "%s Boost Volume", spec->input_labels[idx]); in parse_mic_boost()
3901 if (!add_control(spec, HDA_CTL_WIDGET_VOL, boost_label, in parse_mic_boost()
3902 spec->input_label_idxs[idx], val)) in parse_mic_boost()
3920 struct hda_gen_spec *spec = codec->spec; in create_mute_led_cdev() local
3939 spec->led_cdevs[idx] = cdev; in create_mute_led_cdev()
3957 struct hda_gen_spec *spec = codec->spec; in snd_hda_gen_add_mute_led_cdev() local
3968 if (spec->vmaster_mute.hook) in snd_hda_gen_add_mute_led_cdev()
3971 spec->vmaster_mute.hook = vmaster_update_mute_led; in snd_hda_gen_add_mute_led_cdev()
3972 spec->vmaster_mute_enum = 1; in snd_hda_gen_add_mute_led_cdev()
3989 struct hda_gen_spec *spec = codec->spec; in call_micmute_led_update() local
3992 switch (spec->micmute_led.led_mode) { in call_micmute_led_update()
4000 val = !!spec->micmute_led.capture; in call_micmute_led_update()
4004 val = !spec->micmute_led.capture; in call_micmute_led_update()
4008 if (val == spec->micmute_led.led_value) in call_micmute_led_update()
4010 spec->micmute_led.led_value = val; in call_micmute_led_update()
4012 spec->micmute_led.led_value ? LED_ON : LED_OFF); in call_micmute_led_update()
4019 struct hda_gen_spec *spec = codec->spec; in update_micmute_led() local
4022 if (spec->micmute_led.old_hook) in update_micmute_led()
4023 spec->micmute_led.old_hook(codec, kcontrol, ucontrol); in update_micmute_led()
4032 spec->micmute_led.capture |= mask; in update_micmute_led()
4034 spec->micmute_led.capture &= ~mask; in update_micmute_led()
4053 struct hda_gen_spec *spec = codec->spec; in micmute_led_mode_get() local
4055 ucontrol->value.enumerated.item[0] = spec->micmute_led.led_mode; in micmute_led_mode_get()
4063 struct hda_gen_spec *spec = codec->spec; in micmute_led_mode_put() local
4069 if (mode == spec->micmute_led.led_mode) in micmute_led_mode_put()
4071 spec->micmute_led.led_mode = mode; in micmute_led_mode_put()
4087 struct hda_gen_spec *spec = codec->spec; in add_micmute_led_hook() local
4089 spec->micmute_led.led_mode = MICMUTE_LED_FOLLOW_MUTE; in add_micmute_led_hook()
4090 spec->micmute_led.capture = 0; in add_micmute_led_hook()
4091 spec->micmute_led.led_value = -1; in add_micmute_led_hook()
4092 spec->micmute_led.old_hook = spec->cap_sync_hook; in add_micmute_led_hook()
4093 spec->cap_sync_hook = update_micmute_led; in add_micmute_led_hook()
4094 if (!snd_hda_gen_add_kctl(spec, NULL, &micmute_led_mode_ctl)) in add_micmute_led_hook()
4137 struct hda_gen_spec *spec = codec->spec; in parse_digital() local
4144 for (i = 0; i < spec->autocfg.dig_outs; i++) { in parse_digital()
4145 pin = spec->autocfg.dig_out_pins[i]; in parse_digital()
4155 spec->digout_paths[i] = snd_hda_get_path_idx(codec, path); in parse_digital()
4158 spec->multiout.dig_out_nid = dig_nid; in parse_digital()
4159 spec->dig_out_type = spec->autocfg.dig_out_type[0]; in parse_digital()
4161 spec->multiout.follower_dig_outs = spec->follower_dig_outs; in parse_digital()
4162 if (nums >= ARRAY_SIZE(spec->follower_dig_outs) - 1) in parse_digital()
4164 spec->follower_dig_outs[nums - 1] = dig_nid; in parse_digital()
4169 if (spec->autocfg.dig_in_pin) { in parse_digital()
4170 pin = spec->autocfg.dig_in_pin; in parse_digital()
4182 spec->dig_in_nid = dig_nid; in parse_digital()
4183 spec->digin_path = snd_hda_get_path_idx(codec, path); in parse_digital()
4202 struct hda_gen_spec *spec = codec->spec; in mux_select() local
4206 imux = &spec->input_mux; in mux_select()
4212 if (spec->cur_mux[adc_idx] == idx) in mux_select()
4215 old_path = get_input_path(codec, adc_idx, spec->cur_mux[adc_idx]); in mux_select()
4221 spec->cur_mux[adc_idx] = idx; in mux_select()
4223 if (spec->hp_mic) in mux_select()
4226 if (spec->dyn_adc_switch) in mux_select()
4235 if (spec->cap_sync_hook) in mux_select()
4236 spec->cap_sync_hook(codec, NULL, NULL); in mux_select()
4249 struct hda_gen_spec *spec = codec->spec; in set_path_power() local
4254 snd_array_for_each(&spec->paths, n, path) { in set_path_power()
4350 struct hda_gen_spec *spec = codec->spec; in add_all_pin_power_ctls() local
4351 struct auto_pin_cfg *cfg = &spec->autocfg; in add_all_pin_power_ctls()
4379 struct hda_gen_spec *spec = codec->spec; in sync_all_pin_power_ctls() local
4380 struct auto_pin_cfg *cfg = &spec->autocfg; in sync_all_pin_power_ctls()
4398 struct hda_gen_spec *spec = codec->spec; in add_fake_paths() local
4407 path = snd_array_new(&spec->paths); in add_fake_paths()
4422 struct hda_gen_spec *spec = codec->spec; in add_fake_beep_paths() local
4423 struct auto_pin_cfg *cfg = &spec->autocfg; in add_fake_beep_paths()
4424 hda_nid_t nid = spec->beep_nid; in add_fake_beep_paths()
4459 struct hda_gen_spec *spec = codec->spec; in snd_hda_gen_fix_pin_power() local
4462 path = snd_array_new(&spec->paths); in snd_hda_gen_fix_pin_power()
4502 struct hda_gen_spec *spec = codec->spec; in do_automute() local
4515 if (spec->auto_mute_via_amp) { in do_automute()
4526 spec->mute_bits |= (1ULL << mute_nid); in do_automute()
4528 spec->mute_bits &= ~(1ULL << mute_nid); in do_automute()
4534 if (spec->keep_vref_in_automute) in do_automute()
4566 struct hda_gen_spec *spec = codec->spec; in snd_hda_gen_update_outputs() local
4574 if (spec->autocfg.line_out_type == AUTO_PIN_HP_OUT) in snd_hda_gen_update_outputs()
4575 paths = spec->out_paths; in snd_hda_gen_update_outputs()
4577 paths = spec->hp_paths; in snd_hda_gen_update_outputs()
4578 do_automute(codec, ARRAY_SIZE(spec->autocfg.hp_pins), in snd_hda_gen_update_outputs()
4579 spec->autocfg.hp_pins, paths, spec->master_mute); in snd_hda_gen_update_outputs()
4581 if (!spec->automute_speaker) in snd_hda_gen_update_outputs()
4584 on = spec->hp_jack_present | spec->line_jack_present; in snd_hda_gen_update_outputs()
4585 on |= spec->master_mute; in snd_hda_gen_update_outputs()
4586 spec->speaker_muted = on; in snd_hda_gen_update_outputs()
4587 if (spec->autocfg.line_out_type == AUTO_PIN_SPEAKER_OUT) in snd_hda_gen_update_outputs()
4588 paths = spec->out_paths; in snd_hda_gen_update_outputs()
4590 paths = spec->speaker_paths; in snd_hda_gen_update_outputs()
4591 do_automute(codec, ARRAY_SIZE(spec->autocfg.speaker_pins), in snd_hda_gen_update_outputs()
4592 spec->autocfg.speaker_pins, paths, on); in snd_hda_gen_update_outputs()
4596 if (spec->autocfg.line_out_pins[0] == spec->autocfg.hp_pins[0] || in snd_hda_gen_update_outputs()
4597 spec->autocfg.line_out_pins[0] == spec->autocfg.speaker_pins[0]) in snd_hda_gen_update_outputs()
4599 if (!spec->automute_lo) in snd_hda_gen_update_outputs()
4602 on = spec->hp_jack_present; in snd_hda_gen_update_outputs()
4603 on |= spec->master_mute; in snd_hda_gen_update_outputs()
4604 spec->line_out_muted = on; in snd_hda_gen_update_outputs()
4605 paths = spec->out_paths; in snd_hda_gen_update_outputs()
4606 do_automute(codec, ARRAY_SIZE(spec->autocfg.line_out_pins), in snd_hda_gen_update_outputs()
4607 spec->autocfg.line_out_pins, paths, on); in snd_hda_gen_update_outputs()
4613 struct hda_gen_spec *spec = codec->spec; in call_update_outputs() local
4614 if (spec->automute_hook) in call_update_outputs()
4615 spec->automute_hook(codec); in call_update_outputs()
4620 if (spec->auto_mute_via_amp && !codec->bus->shutdown) in call_update_outputs()
4621 snd_ctl_sync_vmaster(spec->vmaster_mute.sw_kctl, false); in call_update_outputs()
4632 struct hda_gen_spec *spec = codec->spec; in snd_hda_gen_hp_automute() local
4633 hda_nid_t *pins = spec->autocfg.hp_pins; in snd_hda_gen_hp_automute()
4634 int num_pins = ARRAY_SIZE(spec->autocfg.hp_pins); in snd_hda_gen_hp_automute()
4637 if (spec->indep_hp_enabled) { in snd_hda_gen_hp_automute()
4642 spec->hp_jack_present = detect_jacks(codec, num_pins, pins); in snd_hda_gen_hp_automute()
4643 if (!spec->detect_hp || (!spec->automute_speaker && !spec->automute_lo)) in snd_hda_gen_hp_automute()
4657 struct hda_gen_spec *spec = codec->spec; in snd_hda_gen_line_automute() local
4659 if (spec->autocfg.line_out_type == AUTO_PIN_SPEAKER_OUT) in snd_hda_gen_line_automute()
4662 if (spec->autocfg.line_out_pins[0] == spec->autocfg.hp_pins[0]) in snd_hda_gen_line_automute()
4665 spec->line_jack_present = in snd_hda_gen_line_automute()
4666 detect_jacks(codec, ARRAY_SIZE(spec->autocfg.line_out_pins), in snd_hda_gen_line_automute()
4667 spec->autocfg.line_out_pins); in snd_hda_gen_line_automute()
4668 if (!spec->automute_speaker || !spec->detect_lo) in snd_hda_gen_line_automute()
4682 struct hda_gen_spec *spec = codec->spec; in snd_hda_gen_mic_autoswitch() local
4685 if (!spec->auto_mic) in snd_hda_gen_mic_autoswitch()
4688 for (i = spec->am_num_entries - 1; i > 0; i--) { in snd_hda_gen_mic_autoswitch()
4689 hda_nid_t pin = spec->am_entry[i].pin; in snd_hda_gen_mic_autoswitch()
4694 mux_select(codec, 0, spec->am_entry[i].idx); in snd_hda_gen_mic_autoswitch()
4698 mux_select(codec, 0, spec->am_entry[0].idx); in snd_hda_gen_mic_autoswitch()
4706 struct hda_gen_spec *spec = codec->spec; in call_hp_automute() local
4707 if (spec->hp_automute_hook) in call_hp_automute()
4708 spec->hp_automute_hook(codec, jack); in call_hp_automute()
4716 struct hda_gen_spec *spec = codec->spec; in call_line_automute() local
4717 if (spec->line_automute_hook) in call_line_automute()
4718 spec->line_automute_hook(codec, jack); in call_line_automute()
4726 struct hda_gen_spec *spec = codec->spec; in call_mic_autoswitch() local
4727 if (spec->mic_autoswitch_hook) in call_mic_autoswitch()
4728 spec->mic_autoswitch_hook(codec, jack); in call_mic_autoswitch()
4748 struct hda_gen_spec *spec = codec->spec; in automute_mode_info() local
4753 if (spec->automute_speaker_possible && spec->automute_lo_possible) in automute_mode_info()
4762 struct hda_gen_spec *spec = codec->spec; in automute_mode_get() local
4764 if (spec->automute_speaker) in automute_mode_get()
4766 if (spec->automute_lo) in automute_mode_get()
4777 struct hda_gen_spec *spec = codec->spec; in automute_mode_put() local
4781 if (!spec->automute_speaker && !spec->automute_lo) in automute_mode_put()
4783 spec->automute_speaker = 0; in automute_mode_put()
4784 spec->automute_lo = 0; in automute_mode_put()
4787 if (spec->automute_speaker_possible) { in automute_mode_put()
4788 if (!spec->automute_lo && spec->automute_speaker) in automute_mode_put()
4790 spec->automute_speaker = 1; in automute_mode_put()
4791 spec->automute_lo = 0; in automute_mode_put()
4792 } else if (spec->automute_lo_possible) { in automute_mode_put()
4793 if (spec->automute_lo) in automute_mode_put()
4795 spec->automute_lo = 1; in automute_mode_put()
4800 if (!spec->automute_lo_possible || !spec->automute_speaker_possible) in automute_mode_put()
4802 if (spec->automute_speaker && spec->automute_lo) in automute_mode_put()
4804 spec->automute_speaker = 1; in automute_mode_put()
4805 spec->automute_lo = 1; in automute_mode_put()
4824 struct hda_gen_spec *spec = codec->spec; in add_automute_mode_enum() local
4826 if (!snd_hda_gen_add_kctl(spec, NULL, &automute_mode_enum)) in add_automute_mode_enum()
4837 struct hda_gen_spec *spec = codec->spec; in check_auto_mute_availability() local
4838 struct auto_pin_cfg *cfg = &spec->autocfg; in check_auto_mute_availability()
4842 if (spec->suppress_auto_mute) in check_auto_mute_availability()
4875 spec->detect_hp = 1; in check_auto_mute_availability()
4887 spec->detect_lo = 1; in check_auto_mute_availability()
4889 spec->automute_lo_possible = spec->detect_hp; in check_auto_mute_availability()
4892 spec->automute_speaker_possible = cfg->speaker_outs && in check_auto_mute_availability()
4893 (spec->detect_hp || spec->detect_lo); in check_auto_mute_availability()
4895 spec->automute_lo = spec->automute_lo_possible; in check_auto_mute_availability()
4896 spec->automute_speaker = spec->automute_speaker_possible; in check_auto_mute_availability()
4898 if (spec->automute_speaker_possible || spec->automute_lo_possible) { in check_auto_mute_availability()
4910 struct hda_gen_spec *spec = codec->spec; in auto_mic_check_imux() local
4914 imux = &spec->input_mux; in auto_mic_check_imux()
4915 for (i = 0; i < spec->am_num_entries; i++) { in auto_mic_check_imux()
4916 spec->am_entry[i].idx = in auto_mic_check_imux()
4917 find_idx_in_nid_list(spec->am_entry[i].pin, in auto_mic_check_imux()
4918 spec->imux_pins, imux->num_items); in auto_mic_check_imux()
4919 if (spec->am_entry[i].idx < 0) in auto_mic_check_imux()
4924 for (i = 1; i < spec->am_num_entries; i++) in auto_mic_check_imux()
4926 spec->am_entry[i].pin, in auto_mic_check_imux()
4944 struct hda_gen_spec *spec = codec->spec; in check_auto_mic_availability() local
4945 struct auto_pin_cfg *cfg = &spec->autocfg; in check_auto_mic_availability()
4949 if (spec->suppress_auto_mic) in check_auto_mic_availability()
4971 if (!spec->line_in_auto_switch && in check_auto_mic_availability()
4981 spec->am_entry[num_pins].pin = nid; in check_auto_mic_availability()
4982 spec->am_entry[num_pins].attr = attr; in check_auto_mic_availability()
4989 spec->am_num_entries = num_pins; in check_auto_mic_availability()
4993 sort(spec->am_entry, num_pins, sizeof(spec->am_entry[0]), in check_auto_mic_availability()
4999 spec->auto_mic = 1; in check_auto_mic_availability()
5000 spec->num_adc_nids = 1; in check_auto_mic_availability()
5001 spec->cur_mux[0] = spec->am_entry[0].idx; in check_auto_mic_availability()
5003 spec->am_entry[0].pin, in check_auto_mic_availability()
5004 spec->am_entry[1].pin, in check_auto_mic_availability()
5005 spec->am_entry[2].pin); in check_auto_mic_availability()
5021 struct hda_gen_spec *spec = codec->spec; in snd_hda_gen_path_power_filter() local
5023 if (!spec->power_down_unused && !codec->power_save_node) in snd_hda_gen_path_power_filter()
5081 struct hda_gen_spec *spec = codec->spec; in snd_hda_gen_parse_auto_config() local
5086 if (spec->mixer_nid && !spec->mixer_merge_nid) in snd_hda_gen_parse_auto_config()
5087 spec->mixer_merge_nid = spec->mixer_nid; in snd_hda_gen_parse_auto_config()
5089 if (cfg != &spec->autocfg) { in snd_hda_gen_parse_auto_config()
5090 spec->autocfg = *cfg; in snd_hda_gen_parse_auto_config()
5091 cfg = &spec->autocfg; in snd_hda_gen_parse_auto_config()
5094 if (!spec->main_out_badness) in snd_hda_gen_parse_auto_config()
5095 spec->main_out_badness = &hda_main_out_badness; in snd_hda_gen_parse_auto_config()
5096 if (!spec->extra_out_badness) in snd_hda_gen_parse_auto_config()
5097 spec->extra_out_badness = &hda_extra_out_badness; in snd_hda_gen_parse_auto_config()
5103 spec->multiout.max_channels = 2; in snd_hda_gen_parse_auto_config()
5104 spec->no_analog = 1; in snd_hda_gen_parse_auto_config()
5111 if (!spec->no_primary_hp && in snd_hda_gen_parse_auto_config()
5156 spec->const_channel_count = spec->ext_channel_count; in snd_hda_gen_parse_auto_config()
5159 spec->const_channel_count = max(spec->const_channel_count, in snd_hda_gen_parse_auto_config()
5162 spec->const_channel_count = max(spec->const_channel_count, in snd_hda_gen_parse_auto_config()
5164 spec->multiout.max_channels = max(spec->ext_channel_count, in snd_hda_gen_parse_auto_config()
5165 spec->const_channel_count); in snd_hda_gen_parse_auto_config()
5180 if (!spec->auto_mic && spec->mixer_nid && in snd_hda_gen_parse_auto_config()
5181 spec->add_stereo_mix_input == HDA_HINT_STEREO_MIX_AUTO && in snd_hda_gen_parse_auto_config()
5182 spec->input_mux.num_items > 1) { in snd_hda_gen_parse_auto_config()
5183 err = parse_capture_source(codec, spec->mixer_nid, in snd_hda_gen_parse_auto_config()
5184 CFG_IDX_MIX, spec->num_all_adcs, in snd_hda_gen_parse_auto_config()
5202 if (spec->hp_mic_pin && in snd_hda_gen_parse_auto_config()
5203 (spec->auto_mic || spec->input_mux.num_items == 1 || in snd_hda_gen_parse_auto_config()
5204 spec->add_jack_modes)) { in snd_hda_gen_parse_auto_config()
5205 err = create_hp_mic_jack_mode(codec, spec->hp_mic_pin); in snd_hda_gen_parse_auto_config()
5210 if (spec->add_jack_modes) { in snd_hda_gen_parse_auto_config()
5229 if (spec->mixer_nid) in snd_hda_gen_parse_auto_config()
5230 mute_all_mixer_nid(codec, spec->mixer_nid); in snd_hda_gen_parse_auto_config()
5235 if (spec->power_down_unused || codec->power_save_node) { in snd_hda_gen_parse_auto_config()
5242 if (!spec->no_analog && spec->beep_nid) { in snd_hda_gen_parse_auto_config()
5243 err = snd_hda_attach_beep_device(codec, spec->beep_nid); in snd_hda_gen_parse_auto_config()
5282 struct hda_gen_spec *spec = codec->spec; in snd_hda_gen_build_controls() local
5285 if (spec->kctls.used) { in snd_hda_gen_build_controls()
5286 err = snd_hda_add_new_ctls(codec, spec->kctls.list); in snd_hda_gen_build_controls()
5291 if (spec->multiout.dig_out_nid) { in snd_hda_gen_build_controls()
5293 spec->multiout.dig_out_nid, in snd_hda_gen_build_controls()
5294 spec->multiout.dig_out_nid, in snd_hda_gen_build_controls()
5295 spec->pcm_rec[1]->pcm_type); in snd_hda_gen_build_controls()
5298 if (!spec->no_analog) { in snd_hda_gen_build_controls()
5300 &spec->multiout); in snd_hda_gen_build_controls()
5303 spec->multiout.share_spdif = 1; in snd_hda_gen_build_controls()
5306 if (spec->dig_in_nid) { in snd_hda_gen_build_controls()
5307 err = snd_hda_create_spdif_in_ctls(codec, spec->dig_in_nid); in snd_hda_gen_build_controls()
5313 if (!spec->no_analog && !spec->suppress_vmaster && in snd_hda_gen_build_controls()
5316 spec->vmaster_tlv, follower_pfxs, in snd_hda_gen_build_controls()
5321 if (!spec->no_analog && !spec->suppress_vmaster && in snd_hda_gen_build_controls()
5326 true, &spec->vmaster_mute.sw_kctl); in snd_hda_gen_build_controls()
5329 if (spec->vmaster_mute.hook) { in snd_hda_gen_build_controls()
5330 snd_hda_add_vmaster_hook(codec, &spec->vmaster_mute, in snd_hda_gen_build_controls()
5331 spec->vmaster_mute_enum); in snd_hda_gen_build_controls()
5332 snd_hda_sync_vmaster_hook(&spec->vmaster_mute); in snd_hda_gen_build_controls()
5336 free_kctls(spec); /* no longer needed */ in snd_hda_gen_build_controls()
5338 err = snd_hda_jack_add_kctls(codec, &spec->autocfg); in snd_hda_gen_build_controls()
5356 struct hda_gen_spec *spec = codec->spec; in call_pcm_playback_hook() local
5357 if (spec->pcm_playback_hook) in call_pcm_playback_hook()
5358 spec->pcm_playback_hook(hinfo, codec, substream, action); in call_pcm_playback_hook()
5366 struct hda_gen_spec *spec = codec->spec; in call_pcm_capture_hook() local
5367 if (spec->pcm_capture_hook) in call_pcm_capture_hook()
5368 spec->pcm_capture_hook(hinfo, codec, substream, action); in call_pcm_capture_hook()
5378 struct hda_gen_spec *spec = codec->spec; in playback_pcm_open() local
5381 mutex_lock(&spec->pcm_mutex); in playback_pcm_open()
5383 &spec->multiout, substream, in playback_pcm_open()
5386 spec->active_streams |= 1 << STREAM_MULTI_OUT; in playback_pcm_open()
5390 mutex_unlock(&spec->pcm_mutex); in playback_pcm_open()
5400 struct hda_gen_spec *spec = codec->spec; in playback_pcm_prepare() local
5403 err = snd_hda_multi_out_analog_prepare(codec, &spec->multiout, in playback_pcm_prepare()
5415 struct hda_gen_spec *spec = codec->spec; in playback_pcm_cleanup() local
5418 err = snd_hda_multi_out_analog_cleanup(codec, &spec->multiout); in playback_pcm_cleanup()
5429 struct hda_gen_spec *spec = codec->spec; in playback_pcm_close() local
5430 mutex_lock(&spec->pcm_mutex); in playback_pcm_close()
5431 spec->active_streams &= ~(1 << STREAM_MULTI_OUT); in playback_pcm_close()
5434 mutex_unlock(&spec->pcm_mutex); in playback_pcm_close()
5480 struct hda_gen_spec *spec = codec->spec; in alt_playback_pcm_open() local
5483 mutex_lock(&spec->pcm_mutex); in alt_playback_pcm_open()
5484 if (spec->indep_hp && !spec->indep_hp_enabled) in alt_playback_pcm_open()
5487 spec->active_streams |= 1 << STREAM_INDEP_HP; in alt_playback_pcm_open()
5490 mutex_unlock(&spec->pcm_mutex); in alt_playback_pcm_open()
5498 struct hda_gen_spec *spec = codec->spec; in alt_playback_pcm_close() local
5499 mutex_lock(&spec->pcm_mutex); in alt_playback_pcm_close()
5500 spec->active_streams &= ~(1 << STREAM_INDEP_HP); in alt_playback_pcm_close()
5503 mutex_unlock(&spec->pcm_mutex); in alt_playback_pcm_close()
5536 struct hda_gen_spec *spec = codec->spec; in dig_playback_pcm_open() local
5537 return snd_hda_multi_out_dig_open(codec, &spec->multiout); in dig_playback_pcm_open()
5546 struct hda_gen_spec *spec = codec->spec; in dig_playback_pcm_prepare() local
5547 return snd_hda_multi_out_dig_prepare(codec, &spec->multiout, in dig_playback_pcm_prepare()
5555 struct hda_gen_spec *spec = codec->spec; in dig_playback_pcm_cleanup() local
5556 return snd_hda_multi_out_dig_cleanup(codec, &spec->multiout); in dig_playback_pcm_cleanup()
5563 struct hda_gen_spec *spec = codec->spec; in dig_playback_pcm_close() local
5564 return snd_hda_multi_out_dig_close(codec, &spec->multiout); in dig_playback_pcm_close()
5579 struct hda_gen_spec *spec = codec->spec; in alt_capture_pcm_prepare() local
5581 snd_hda_codec_setup_stream(codec, spec->adc_nids[substream->number + 1], in alt_capture_pcm_prepare()
5592 struct hda_gen_spec *spec = codec->spec; in alt_capture_pcm_cleanup() local
5595 spec->adc_nids[substream->number + 1]); in alt_capture_pcm_cleanup()
5687 struct hda_gen_spec *spec = codec->spec; in dyn_adc_pcm_resetup() local
5688 hda_nid_t new_adc = spec->adc_nids[spec->dyn_adc_idx[cur]]; in dyn_adc_pcm_resetup()
5690 if (spec->cur_adc && spec->cur_adc != new_adc) { in dyn_adc_pcm_resetup()
5692 __snd_hda_codec_cleanup_stream(codec, spec->cur_adc, 1); in dyn_adc_pcm_resetup()
5693 spec->cur_adc = new_adc; in dyn_adc_pcm_resetup()
5695 spec->cur_adc_stream_tag, 0, in dyn_adc_pcm_resetup()
5696 spec->cur_adc_format); in dyn_adc_pcm_resetup()
5709 struct hda_gen_spec *spec = codec->spec; in dyn_adc_capture_pcm_prepare() local
5710 spec->cur_adc = spec->adc_nids[spec->dyn_adc_idx[spec->cur_mux[0]]]; in dyn_adc_capture_pcm_prepare()
5711 spec->cur_adc_stream_tag = stream_tag; in dyn_adc_capture_pcm_prepare()
5712 spec->cur_adc_format = format; in dyn_adc_capture_pcm_prepare()
5713 snd_hda_codec_setup_stream(codec, spec->cur_adc, stream_tag, 0, format); in dyn_adc_capture_pcm_prepare()
5722 struct hda_gen_spec *spec = codec->spec; in dyn_adc_capture_pcm_cleanup() local
5723 snd_hda_codec_cleanup_stream(codec, spec->cur_adc); in dyn_adc_capture_pcm_cleanup()
5724 spec->cur_adc = 0; in dyn_adc_capture_pcm_cleanup()
5794 struct hda_gen_spec *spec = codec->spec; in snd_hda_gen_build_pcms() local
5798 if (spec->no_analog) in snd_hda_gen_build_pcms()
5801 fill_pcm_stream_name(spec->stream_name_analog, in snd_hda_gen_build_pcms()
5802 sizeof(spec->stream_name_analog), in snd_hda_gen_build_pcms()
5804 info = snd_hda_codec_pcm_new(codec, "%s", spec->stream_name_analog); in snd_hda_gen_build_pcms()
5807 spec->pcm_rec[0] = info; in snd_hda_gen_build_pcms()
5809 if (spec->multiout.num_dacs > 0) { in snd_hda_gen_build_pcms()
5812 spec->stream_analog_playback, in snd_hda_gen_build_pcms()
5813 spec->multiout.dac_nids[0]); in snd_hda_gen_build_pcms()
5815 spec->multiout.max_channels; in snd_hda_gen_build_pcms()
5816 if (spec->autocfg.line_out_type == AUTO_PIN_SPEAKER_OUT && in snd_hda_gen_build_pcms()
5817 spec->autocfg.line_outs == 2) in snd_hda_gen_build_pcms()
5821 if (spec->num_adc_nids) { in snd_hda_gen_build_pcms()
5823 (spec->dyn_adc_switch ? in snd_hda_gen_build_pcms()
5825 spec->stream_analog_capture, in snd_hda_gen_build_pcms()
5826 spec->adc_nids[0]); in snd_hda_gen_build_pcms()
5831 if (spec->multiout.dig_out_nid || spec->dig_in_nid) { in snd_hda_gen_build_pcms()
5832 fill_pcm_stream_name(spec->stream_name_digital, in snd_hda_gen_build_pcms()
5833 sizeof(spec->stream_name_digital), in snd_hda_gen_build_pcms()
5836 spec->stream_name_digital); in snd_hda_gen_build_pcms()
5839 codec->follower_dig_outs = spec->multiout.follower_dig_outs; in snd_hda_gen_build_pcms()
5840 spec->pcm_rec[1] = info; in snd_hda_gen_build_pcms()
5841 if (spec->dig_out_type) in snd_hda_gen_build_pcms()
5842 info->pcm_type = spec->dig_out_type; in snd_hda_gen_build_pcms()
5845 if (spec->multiout.dig_out_nid) in snd_hda_gen_build_pcms()
5848 spec->stream_digital_playback, in snd_hda_gen_build_pcms()
5849 spec->multiout.dig_out_nid); in snd_hda_gen_build_pcms()
5850 if (spec->dig_in_nid) in snd_hda_gen_build_pcms()
5853 spec->stream_digital_capture, in snd_hda_gen_build_pcms()
5854 spec->dig_in_nid); in snd_hda_gen_build_pcms()
5857 if (spec->no_analog) in snd_hda_gen_build_pcms()
5863 have_multi_adcs = (spec->num_adc_nids > 1) && in snd_hda_gen_build_pcms()
5864 !spec->dyn_adc_switch && !spec->auto_mic; in snd_hda_gen_build_pcms()
5866 if (spec->alt_dac_nid || have_multi_adcs) { in snd_hda_gen_build_pcms()
5867 fill_pcm_stream_name(spec->stream_name_alt_analog, in snd_hda_gen_build_pcms()
5868 sizeof(spec->stream_name_alt_analog), in snd_hda_gen_build_pcms()
5871 spec->stream_name_alt_analog); in snd_hda_gen_build_pcms()
5874 spec->pcm_rec[2] = info; in snd_hda_gen_build_pcms()
5875 if (spec->alt_dac_nid) in snd_hda_gen_build_pcms()
5878 spec->stream_analog_alt_playback, in snd_hda_gen_build_pcms()
5879 spec->alt_dac_nid); in snd_hda_gen_build_pcms()
5886 spec->stream_analog_alt_capture, in snd_hda_gen_build_pcms()
5887 spec->adc_nids[1]); in snd_hda_gen_build_pcms()
5889 spec->num_adc_nids - 1; in snd_hda_gen_build_pcms()
5917 aamix_default(codec->spec)); in set_output_and_unmute()
5924 struct hda_gen_spec *spec = codec->spec; in init_multi_out() local
5927 for (i = 0; i < spec->autocfg.line_outs; i++) in init_multi_out()
5928 set_output_and_unmute(codec, spec->out_paths[i]); in init_multi_out()
5943 struct hda_gen_spec *spec = codec->spec; in init_extra_out() local
5945 if (spec->autocfg.line_out_type != AUTO_PIN_HP_OUT) in init_extra_out()
5946 __init_extra_out(codec, spec->autocfg.hp_outs, spec->hp_paths); in init_extra_out()
5947 if (spec->autocfg.line_out_type != AUTO_PIN_SPEAKER_OUT) in init_extra_out()
5948 __init_extra_out(codec, spec->autocfg.speaker_outs, in init_extra_out()
5949 spec->speaker_paths); in init_extra_out()
5955 struct hda_gen_spec *spec = codec->spec; in init_multi_io() local
5958 for (i = 0; i < spec->multi_ios; i++) { in init_multi_io()
5959 hda_nid_t pin = spec->multi_io[i].pin; in init_multi_io()
5964 if (!spec->multi_io[i].ctl_in) in init_multi_io()
5965 spec->multi_io[i].ctl_in = in init_multi_io()
5968 aamix_default(spec)); in init_multi_io()
5974 struct hda_gen_spec *spec = codec->spec; in init_aamix_paths() local
5976 if (!spec->have_aamix_ctl) in init_aamix_paths()
5978 if (!has_aamix_out_paths(spec)) in init_aamix_paths()
5980 update_aamix_paths(codec, spec->aamix_mode, spec->out_paths[0], in init_aamix_paths()
5981 spec->aamix_out_paths[0], in init_aamix_paths()
5982 spec->autocfg.line_out_type); in init_aamix_paths()
5983 update_aamix_paths(codec, spec->aamix_mode, spec->hp_paths[0], in init_aamix_paths()
5984 spec->aamix_out_paths[1], in init_aamix_paths()
5986 update_aamix_paths(codec, spec->aamix_mode, spec->speaker_paths[0], in init_aamix_paths()
5987 spec->aamix_out_paths[2], in init_aamix_paths()
5994 struct hda_gen_spec *spec = codec->spec; in init_analog_input() local
5995 struct auto_pin_cfg *cfg = &spec->autocfg; in init_analog_input()
6004 if (spec->mixer_nid) { in init_analog_input()
6005 resume_path_from_idx(codec, spec->loopback_paths[i]); in init_analog_input()
6006 resume_path_from_idx(codec, spec->loopback_merge_path); in init_analog_input()
6014 struct hda_gen_spec *spec = codec->spec; in init_input_src() local
6015 struct hda_input_mux *imux = &spec->input_mux; in init_input_src()
6019 if (spec->dyn_adc_switch) in init_input_src()
6022 nums = spec->num_adc_nids; in init_input_src()
6029 if (i == spec->cur_mux[c]) in init_input_src()
6034 if (spec->hp_mic) in init_input_src()
6038 if (spec->cap_sync_hook) in init_input_src()
6039 spec->cap_sync_hook(codec, NULL, NULL); in init_input_src()
6045 struct hda_gen_spec *spec = codec->spec; in init_digital() local
6049 for (i = 0; i < spec->autocfg.dig_outs; i++) in init_digital()
6050 set_output_and_unmute(codec, spec->digout_paths[i]); in init_digital()
6051 pin = spec->autocfg.dig_in_pin; in init_digital()
6054 resume_path_from_idx(codec, spec->digin_path); in init_digital()
6076 * snd_hda_gen_init - initialize the generic spec
6083 struct hda_gen_spec *spec = codec->spec; in snd_hda_gen_init() local
6085 if (spec->init_hook) in snd_hda_gen_init()
6086 spec->init_hook(codec); in snd_hda_gen_init()
6088 if (!spec->skip_verbs) in snd_hda_gen_init()
6108 if (spec->vmaster_mute.sw_kctl && spec->vmaster_mute.hook) in snd_hda_gen_init()
6109 snd_hda_sync_vmaster_hook(&spec->vmaster_mute); in snd_hda_gen_init()
6117 * snd_hda_gen_free - free the generic spec
6125 snd_hda_gen_spec_free(codec->spec); in snd_hda_gen_free()
6126 kfree(codec->spec); in snd_hda_gen_free()
6127 codec->spec = NULL; in snd_hda_gen_free()
6159 struct hda_gen_spec *spec = codec->spec; in snd_hda_gen_check_power_status() local
6160 return snd_hda_check_amp_list_power(codec, &spec->loopback, nid); in snd_hda_gen_check_power_status()
6188 struct hda_gen_spec *spec; in snd_hda_parse_generic_codec() local
6191 spec = kzalloc(sizeof(*spec), GFP_KERNEL); in snd_hda_parse_generic_codec()
6192 if (!spec) in snd_hda_parse_generic_codec()
6194 snd_hda_gen_spec_init(spec); in snd_hda_parse_generic_codec()
6195 codec->spec = spec; in snd_hda_parse_generic_codec()
6197 err = snd_hda_parse_pin_defcfg(codec, &spec->autocfg, NULL, 0); in snd_hda_parse_generic_codec()
6201 err = snd_hda_gen_parse_auto_config(codec, &spec->autocfg); in snd_hda_parse_generic_codec()