Lines Matching refs:nid
244 static int find_idx_in_nid_list(hda_nid_t nid, const hda_nid_t *list, int nums) in find_idx_in_nid_list() argument
248 if (list[i] == nid) in find_idx_in_nid_list()
254 static bool is_nid_contained(struct nid_path *path, hda_nid_t nid) in is_nid_contained() argument
256 return find_idx_in_nid_list(nid, path->path, path->depth) >= 0; in is_nid_contained()
338 static bool is_dac_already_used(struct hda_codec *codec, hda_nid_t nid) in is_dac_already_used() argument
345 if (path->path[0] == nid) in is_dac_already_used()
379 static bool is_ctl_associated(struct hda_codec *codec, hda_nid_t nid, in is_ctl_associated() argument
382 unsigned int val = HDA_COMPOSE_AMP_VAL(nid, 3, idx, dir); in is_ctl_associated()
555 hda_nid_t nid = spec->all_dacs[i]; in look_for_dac() local
556 if (!nid || is_dac_already_used(codec, nid)) in look_for_dac()
558 cap_digital = !!(get_wcaps(codec, nid) & AC_WCAP_DIGITAL); in look_for_dac()
561 if (is_reachable_path(codec, nid, pin)) in look_for_dac()
562 return nid; in look_for_dac()
608 hda_nid_t nid = path->path[i]; in look_for_out_vol_nid() local
609 if ((spec->out_vol_mask >> nid) & 1) in look_for_out_vol_nid()
611 if (nid_has_volume(codec, nid, HDA_OUTPUT)) in look_for_out_vol_nid()
612 return nid; in look_for_out_vol_nid()
624 hda_nid_t nid = path->path[idx]; in has_amp_in() local
625 unsigned int caps = get_wcaps(codec, nid); in has_amp_in()
638 hda_nid_t nid = path->path[idx]; in has_amp_out() local
639 unsigned int caps = get_wcaps(codec, nid); in has_amp_out()
650 static bool is_active_nid(struct hda_codec *codec, hda_nid_t nid, in is_active_nid() argument
654 int type = get_wcaps_type(get_wcaps(codec, nid)); in is_active_nid()
657 if (nid == codec->core.afg) in is_active_nid()
673 if (path->path[i] == nid) { in is_active_nid()
685 #define is_active_nid_for_any(codec, nid) \ argument
686 is_active_nid(codec, nid, HDA_OUTPUT, -1)
689 static int get_amp_val_to_activate(struct hda_codec *codec, hda_nid_t nid, in get_amp_val_to_activate() argument
707 static bool is_stereo_amps(struct hda_codec *codec, hda_nid_t nid, int dir) in is_stereo_amps() argument
709 unsigned int wcaps = get_wcaps(codec, nid); in is_stereo_amps()
716 if (snd_hda_get_num_conns(codec, nid) != 1) in is_stereo_amps()
718 if (snd_hda_get_connections(codec, nid, &conn, 1) < 0) in is_stereo_amps()
724 static void init_amp(struct hda_codec *codec, hda_nid_t nid, int dir, int idx) in init_amp() argument
726 unsigned int caps = query_amp_caps(codec, nid, dir); in init_amp()
727 int val = get_amp_val_to_activate(codec, nid, dir, caps, false); in init_amp()
729 if (is_stereo_amps(codec, nid, dir)) in init_amp()
730 snd_hda_codec_amp_init_stereo(codec, nid, dir, idx, 0xff, val); in init_amp()
732 snd_hda_codec_amp_init(codec, nid, 0, dir, idx, 0xff, val); in init_amp()
736 static int update_amp(struct hda_codec *codec, hda_nid_t nid, int dir, int idx, in update_amp() argument
739 if (is_stereo_amps(codec, nid, dir)) in update_amp()
740 return snd_hda_codec_amp_stereo(codec, nid, dir, idx, in update_amp()
743 return snd_hda_codec_amp_update(codec, nid, 0, dir, idx, in update_amp()
751 hda_nid_t nid, int dir, int idx, in get_amp_mask_to_modify() argument
757 if (is_ctl_associated(codec, nid, dir, idx, NID_PATH_MUTE_CTL)) in get_amp_mask_to_modify()
761 if (is_ctl_associated(codec, nid, dir, idx, NID_PATH_VOL_CTL) || in get_amp_mask_to_modify()
762 is_ctl_associated(codec, nid, dir, idx, NID_PATH_BOOST_CTL)) in get_amp_mask_to_modify()
768 static void activate_amp(struct hda_codec *codec, hda_nid_t nid, int dir, in activate_amp() argument
774 caps = query_amp_caps(codec, nid, dir); in activate_amp()
775 val = get_amp_val_to_activate(codec, nid, dir, caps, enable); in activate_amp()
776 mask = get_amp_mask_to_modify(codec, nid, dir, idx_to_check, caps); in activate_amp()
781 update_amp(codec, nid, dir, idx, mask, val); in activate_amp()
784 static void check_and_activate_amp(struct hda_codec *codec, hda_nid_t nid, in check_and_activate_amp() argument
789 if (!enable && is_active_nid(codec, nid, dir, idx_to_check)) in check_and_activate_amp()
791 activate_amp(codec, nid, dir, idx, idx_to_check, enable); in check_and_activate_amp()
797 hda_nid_t nid = path->path[i]; in activate_amp_out() local
798 init_amp(codec, nid, HDA_OUTPUT, 0); in activate_amp_out()
799 check_and_activate_amp(codec, nid, HDA_OUTPUT, 0, 0, enable); in activate_amp_out()
809 hda_nid_t nid = path->path[i]; in activate_amp_in() local
811 nums = snd_hda_get_conn_list(codec, nid, &conn); in activate_amp_in()
812 type = get_wcaps_type(get_wcaps(codec, nid)); in activate_amp_in()
821 init_amp(codec, nid, HDA_INPUT, n); in activate_amp_in()
832 activate_amp(codec, nid, HDA_INPUT, n, n, false); in activate_amp_in()
836 check_and_activate_amp(codec, nid, HDA_INPUT, n, idx, enable); in activate_amp_in()
845 hda_nid_t nid, changed = 0; in path_power_update() local
849 nid = path->path[i]; in path_power_update()
850 if (!(get_wcaps(codec, nid) & AC_WCAP_POWER)) in path_power_update()
852 if (nid == codec->core.afg) in path_power_update()
854 if (!allow_powerdown || is_active_nid_for_any(codec, nid)) in path_power_update()
858 if (!snd_hda_check_power_state(codec, nid, state)) { in path_power_update()
859 snd_hda_codec_write(codec, nid, 0, in path_power_update()
861 changed = nid; in path_power_update()
870 snd_hdac_regmap_sync_node(&codec->core, nid); in path_power_update()
878 static void sync_power_state_change(struct hda_codec *codec, hda_nid_t nid) in sync_power_state_change() argument
880 if (nid) { in sync_power_state_change()
882 snd_hda_codec_read(codec, nid, 0, AC_VERB_GET_POWER_STATE, 0); in sync_power_state_change()
908 hda_nid_t nid = path->path[i]; in snd_hda_activate_path() local
911 snd_hda_codec_update_cache(codec, nid, 0, in snd_hda_activate_path()
1047 hda_nid_t nid = get_amp_nid_(path->ctls[type]); in get_default_ch_nums() local
1048 if (nid && (get_wcaps(codec, nid) & AC_WCAP_STEREO)) in get_default_ch_nums()
1077 hda_nid_t nid = get_amp_nid_(val); in add_sw_ctl() local
1078 int nums = snd_hda_get_num_conns(codec, nid); in add_sw_ctl()
1102 hda_nid_t nid = get_amp_nid(kcontrol); in sync_auto_mute_bits() local
1103 bool enabled = !((spec->mute_bits >> nid) & 1); in sync_auto_mute_bits()
1247 hda_nid_t nid; in assign_out_path_ctls() local
1258 nid = look_for_out_vol_nid(codec, path); in assign_out_path_ctls()
1259 if (nid) { in assign_out_path_ctls()
1260 val = HDA_COMPOSE_AMP_VAL(nid, 3, 0, HDA_OUTPUT); in assign_out_path_ctls()
1269 nid = look_for_out_mute_nid(codec, path); in assign_out_path_ctls()
1270 if (nid) { in assign_out_path_ctls()
1271 unsigned int wid_type = get_wcaps_type(get_wcaps(codec, nid)); in assign_out_path_ctls()
1273 nid_has_mute(codec, nid, HDA_OUTPUT)) in assign_out_path_ctls()
1274 val = HDA_COMPOSE_AMP_VAL(nid, 3, 0, HDA_OUTPUT); in assign_out_path_ctls()
1276 val = HDA_COMPOSE_AMP_VAL(nid, 3, 0, HDA_INPUT); in assign_out_path_ctls()
1423 hda_nid_t nid = spec->all_dacs[i]; in get_dac_if_single() local
1424 if (!nid || is_dac_already_used(codec, nid)) in get_dac_if_single()
1426 if (is_reachable_path(codec, nid, pin)) { in get_dac_if_single()
1429 nid_found = nid; in get_dac_if_single()
1437 unsigned int location, hda_nid_t nid) in can_be_multiio_pin() argument
1441 defcfg = snd_hda_codec_get_pincfg(codec, nid); in can_be_multiio_pin()
1446 caps = snd_hda_query_pin_caps(codec, nid); in can_be_multiio_pin()
1504 hda_nid_t nid = cfg->inputs[i].pin; in fill_multi_ios() local
1509 if (!can_be_multiio_pin(codec, location, nid)) in fill_multi_ios()
1512 if (nid == spec->multi_io[j].pin) in fill_multi_ios()
1519 dac = get_dac_if_single(codec, nid); in fill_multi_ios()
1521 dac = look_for_dac(codec, nid, false); in fill_multi_ios()
1526 path = snd_hda_add_new_path(codec, dac, nid, in fill_multi_ios()
1533 spec->multi_io[spec->multi_ios].pin = nid; in fill_multi_ios()
1925 hda_nid_t nid; in fill_all_dac_nids() local
1929 for_each_hda_codec_node(nid, codec) { in fill_all_dac_nids()
1930 if (get_wcaps_type(get_wcaps(codec, nid)) != AC_WID_AUD_OUT) in fill_all_dac_nids()
1936 spec->all_dacs[spec->num_all_dacs++] = nid; in fill_all_dac_nids()
2332 hda_nid_t nid = spec->multi_io[idx].pin; in set_multi_io() local
2343 set_pin_target(codec, nid, PIN_OUT, true); in set_multi_io()
2345 set_pin_eapd(codec, nid, true); in set_multi_io()
2347 set_pin_eapd(codec, nid, false); in set_multi_io()
2349 set_pin_target(codec, nid, spec->multi_io[idx].ctl_in, true); in set_multi_io()
2573 hda_nid_t nid; in create_hp_mic() local
2594 nid = 0; in create_hp_mic()
2596 nid = cfg->line_out_pins[0]; in create_hp_mic()
2598 nid = cfg->hp_pins[0]; in create_hp_mic()
2599 if (!nid) in create_hp_mic()
2602 if (!(snd_hda_query_pin_caps(codec, nid) & AC_PINCAP_IN)) in create_hp_mic()
2605 cfg->inputs[cfg->num_inputs].pin = nid; in create_hp_mic()
2610 spec->hp_mic_pin = nid; in create_hp_mic()
2613 codec_dbg(codec, "Enable shared I/O jack on NID 0x%x\n", nid); in create_hp_mic()
2637 hda_nid_t nid = kcontrol->private_value; in out_jack_mode_get() local
2638 if (snd_hda_codec_get_pin_target(codec, nid) == PIN_HP) in out_jack_mode_get()
2649 hda_nid_t nid = kcontrol->private_value; in out_jack_mode_put() local
2653 if (snd_hda_codec_get_pin_target(codec, nid) == val) in out_jack_mode_put()
2655 snd_hda_set_pin_ctl_cache(codec, nid, val); in out_jack_mode_put()
2784 hda_nid_t nid = kcontrol->private_value; in in_jack_mode_info() local
2785 unsigned int vref_caps = get_vref_caps(codec, nid); in in_jack_mode_info()
2799 hda_nid_t nid = kcontrol->private_value; in in_jack_mode_get() local
2800 unsigned int vref_caps = get_vref_caps(codec, nid); in in_jack_mode_get()
2803 idx = snd_hda_codec_get_pin_target(codec, nid) & AC_PINCTL_VREFEN; in in_jack_mode_get()
2812 hda_nid_t nid = kcontrol->private_value; in in_jack_mode_put() local
2813 unsigned int vref_caps = get_vref_caps(codec, nid); in in_jack_mode_put()
2816 val = snd_hda_codec_get_pin_target(codec, nid); in in_jack_mode_put()
2823 snd_hda_set_pin_ctl_cache(codec, nid, val); in in_jack_mode_put()
2877 hda_nid_t nid = kcontrol->private_value; in hp_mic_jack_mode_info() local
2878 int out_jacks = get_out_jack_num_items(codec, nid); in hp_mic_jack_mode_info()
2879 int in_jacks = get_in_jack_num_items(codec, nid); in hp_mic_jack_mode_info()
2897 unsigned int vref_caps = get_vref_caps(codec, nid); in hp_mic_jack_mode_info()
2907 static int get_cur_hp_mic_jack_mode(struct hda_codec *codec, hda_nid_t nid) in get_cur_hp_mic_jack_mode() argument
2909 int out_jacks = get_out_jack_num_items(codec, nid); in get_cur_hp_mic_jack_mode()
2910 int in_jacks = get_in_jack_num_items(codec, nid); in get_cur_hp_mic_jack_mode()
2911 unsigned int val = snd_hda_codec_get_pin_target(codec, nid); in get_cur_hp_mic_jack_mode()
2920 unsigned int vref_caps = get_vref_caps(codec, nid); in get_cur_hp_mic_jack_mode()
2932 hda_nid_t nid = kcontrol->private_value; in hp_mic_jack_mode_get() local
2934 get_cur_hp_mic_jack_mode(codec, nid); in hp_mic_jack_mode_get()
2942 hda_nid_t nid = kcontrol->private_value; in hp_mic_jack_mode_put() local
2943 int out_jacks = get_out_jack_num_items(codec, nid); in hp_mic_jack_mode_put()
2944 int in_jacks = get_in_jack_num_items(codec, nid); in hp_mic_jack_mode_put()
2947 oldval = get_cur_hp_mic_jack_mode(codec, nid); in hp_mic_jack_mode_put()
2960 unsigned int vref_caps = get_vref_caps(codec, nid); in hp_mic_jack_mode_put()
2961 val = snd_hda_codec_get_pin_target(codec, nid); in hp_mic_jack_mode_put()
2965 val = snd_hda_get_default_vref(codec, nid) | PIN_IN; in hp_mic_jack_mode_put()
2967 snd_hda_set_pin_ctl_cache(codec, nid, val); in hp_mic_jack_mode_put()
3006 list->nid = mix; in add_loopback_list()
3022 hda_nid_t nid; in look_for_mix_leaf_ctls() local
3040 nid = list[idx]; in look_for_mix_leaf_ctls()
3041 if (!*mix_val && nid_has_volume(codec, nid, HDA_OUTPUT) && in look_for_mix_leaf_ctls()
3042 !is_ctl_associated(codec, nid, HDA_OUTPUT, 0, NID_PATH_VOL_CTL)) in look_for_mix_leaf_ctls()
3043 *mix_val = HDA_COMPOSE_AMP_VAL(nid, 3, 0, HDA_OUTPUT); in look_for_mix_leaf_ctls()
3044 if (!*mute_val && nid_has_mute(codec, nid, HDA_OUTPUT) && in look_for_mix_leaf_ctls()
3045 !is_ctl_associated(codec, nid, HDA_OUTPUT, 0, NID_PATH_MUTE_CTL)) in look_for_mix_leaf_ctls()
3046 *mute_val = HDA_COMPOSE_AMP_VAL(nid, 3, 0, HDA_OUTPUT); in look_for_mix_leaf_ctls()
3108 static int is_input_pin(struct hda_codec *codec, hda_nid_t nid) in is_input_pin() argument
3110 unsigned int pincap = snd_hda_query_pin_caps(codec, nid); in is_input_pin()
3118 hda_nid_t nid; in fill_adc_nids() local
3123 for_each_hda_codec_node(nid, codec) { in fill_adc_nids()
3124 unsigned int caps = get_wcaps(codec, nid); in fill_adc_nids()
3129 adc_nids[nums] = nid; in fill_adc_nids()
3499 hda_nid_t nid; in parse_capvol_in_path() local
3507 nid = path->path[i]; in parse_capvol_in_path()
3509 if (nid_has_volume(codec, nid, HDA_OUTPUT)) in parse_capvol_in_path()
3511 HDA_COMPOSE_AMP_VAL(nid, 3, 0, HDA_OUTPUT); in parse_capvol_in_path()
3512 else if (nid_has_volume(codec, nid, HDA_INPUT)) { in parse_capvol_in_path()
3517 HDA_COMPOSE_AMP_VAL(nid, 3, idx, HDA_INPUT); in parse_capvol_in_path()
3521 if (nid_has_mute(codec, nid, HDA_OUTPUT)) in parse_capvol_in_path()
3523 HDA_COMPOSE_AMP_VAL(nid, 3, 0, HDA_OUTPUT); in parse_capvol_in_path()
3524 else if (nid_has_mute(codec, nid, HDA_INPUT)) { in parse_capvol_in_path()
3529 HDA_COMPOSE_AMP_VAL(nid, 3, idx, HDA_INPUT); in parse_capvol_in_path()
3536 static bool is_inv_dmic_pin(struct hda_codec *codec, hda_nid_t nid) in is_inv_dmic_pin() argument
3546 if (cfg->inputs[i].pin != nid) in is_inv_dmic_pin()
3550 val = snd_hda_codec_get_pincfg(codec, nid); in is_inv_dmic_pin()
3784 static bool check_boost_vol(struct hda_codec *codec, hda_nid_t nid, in check_boost_vol() argument
3789 if (!nid_has_volume(codec, nid, dir) || in check_boost_vol()
3790 is_ctl_associated(codec, nid, dir, idx, NID_PATH_VOL_CTL) || in check_boost_vol()
3791 is_ctl_associated(codec, nid, dir, idx, NID_PATH_BOOST_CTL)) in check_boost_vol()
3794 step = (query_amp_caps(codec, nid, dir) & AC_AMPCAP_STEP_SIZE) in check_boost_vol()
3806 hda_nid_t nid; in look_for_boost_amp() local
3812 nid = path->path[depth]; in look_for_boost_amp()
3813 if (depth && check_boost_vol(codec, nid, HDA_OUTPUT, 0)) { in look_for_boost_amp()
3814 val = HDA_COMPOSE_AMP_VAL(nid, 3, 0, HDA_OUTPUT); in look_for_boost_amp()
3816 } else if (check_boost_vol(codec, nid, HDA_INPUT, in look_for_boost_amp()
3818 val = HDA_COMPOSE_AMP_VAL(nid, 3, path->idx[depth], in look_for_boost_amp()
3985 static hda_nid_t set_path_power(struct hda_codec *codec, hda_nid_t nid, in set_path_power() argument
3995 if (path->path[0] == nid || in set_path_power()
3996 path->path[path->depth - 1] == nid) { in set_path_power()
4048 if (jack && jack->nid) in pin_power_callback()
4050 set_pin_power_jack(codec, jack->nid, on)); in pin_power_callback()
4133 static int add_fake_paths(struct hda_codec *codec, hda_nid_t nid, in add_fake_paths() argument
4143 if (get_nid_path(codec, nid, pins[i], 0)) in add_fake_paths()
4150 path->path[0] = nid; in add_fake_paths()
4162 hda_nid_t nid = spec->beep_nid; in add_fake_beep_paths() local
4165 if (!codec->power_save_node || !nid) in add_fake_beep_paths()
4167 err = add_fake_paths(codec, nid, cfg->line_outs, cfg->line_out_pins); in add_fake_beep_paths()
4171 err = add_fake_paths(codec, nid, cfg->hp_outs, cfg->hp_pins); in add_fake_beep_paths()
4176 err = add_fake_paths(codec, nid, cfg->speaker_outs, in add_fake_beep_paths()
4187 set_path_power(beep->codec, beep->nid, -1, on); in beep_power_hook()
4224 hda_nid_t nid = pins[i]; in detect_jacks() local
4225 if (!nid) in detect_jacks()
4228 if (snd_hda_codec_get_pin_target(codec, nid) & AC_PINCTL_IN_EN) in detect_jacks()
4230 if (snd_hda_jack_detect_state(codec, nid) == HDA_JACK_PRESENT) in detect_jacks()
4244 hda_nid_t nid = pins[i]; in do_automute() local
4246 if (!nid) in do_automute()
4249 oldval = snd_hda_codec_get_pin_target(codec, nid); in do_automute()
4283 update_pin_ctl(codec, nid, val); in do_automute()
4286 set_pin_eapd(codec, nid, !mute); in do_automute()
4290 on = detect_pin_state(codec, nid); in do_automute()
4291 set_path_power(codec, nid, on, -1); in do_automute()
4607 hda_nid_t nid = cfg->hp_pins[i]; in check_auto_mute_availability() local
4608 if (!is_jack_detectable(codec, nid)) in check_auto_mute_availability()
4610 codec_dbg(codec, "Enable HP auto-muting on NID 0x%x\n", nid); in check_auto_mute_availability()
4611 snd_hda_jack_detect_enable_callback(codec, nid, in check_auto_mute_availability()
4619 hda_nid_t nid = cfg->line_out_pins[i]; in check_auto_mute_availability() local
4620 if (!is_jack_detectable(codec, nid)) in check_auto_mute_availability()
4622 codec_dbg(codec, "Enable Line-Out auto-muting on NID 0x%x\n", nid); in check_auto_mute_availability()
4623 snd_hda_jack_detect_enable_callback(codec, nid, in check_auto_mute_availability()
4693 hda_nid_t nid = cfg->inputs[i].pin; in check_auto_mic_availability() local
4695 attr = snd_hda_codec_get_pincfg(codec, nid); in check_auto_mic_availability()
4712 if (!is_jack_detectable(codec, nid)) in check_auto_mic_availability()
4719 spec->am_entry[num_pins].pin = nid; in check_auto_mic_availability()
4756 hda_nid_t nid, in snd_hda_gen_path_power_filter() argument
4763 if (power_state != AC_PWRST_D0 || nid == codec->core.afg) in snd_hda_gen_path_power_filter()
4765 if (get_wcaps_type(get_wcaps(codec, nid)) >= AC_WID_POWER) in snd_hda_gen_path_power_filter()
4767 if (is_active_nid_for_any(codec, nid)) in snd_hda_gen_path_power_filter()
4800 void snd_hda_gen_stream_pm(struct hda_codec *codec, hda_nid_t nid, bool on) in snd_hda_gen_stream_pm() argument
4803 set_path_power(codec, nid, -1, on); in snd_hda_gen_stream_pm()
5190 snd_hda_codec_setup_stream(codec, hinfo->nid, stream_tag, 0, format); in capture_pcm_prepare()
5200 snd_hda_codec_cleanup_stream(codec, hinfo->nid); in capture_pcm_cleanup()
5251 snd_hda_codec_setup_stream(codec, hinfo->nid, stream_tag, 0, format); in alt_playback_pcm_prepare()
5261 snd_hda_codec_cleanup_stream(codec, hinfo->nid); in alt_playback_pcm_cleanup()
5469 .nid = 0, /* fill later */
5501 hda_nid_t nid) in setup_pcm_stream() argument
5504 if (nid) in setup_pcm_stream()
5505 str->nid = nid; in setup_pcm_stream()
5735 hda_nid_t nid = cfg->inputs[i].pin; in init_analog_input() local
5736 if (is_input_pin(codec, nid)) in init_analog_input()
5737 restore_pin_ctl(codec, nid); in init_analog_input()
5803 hda_nid_t nid = pin->nid; in clear_unsol_on_unused_pins() local
5804 if (is_jack_detectable(codec, nid) && in clear_unsol_on_unused_pins()
5805 !snd_hda_jack_tbl_get(codec, nid)) in clear_unsol_on_unused_pins()
5806 snd_hda_codec_update_cache(codec, nid, 0, in clear_unsol_on_unused_pins()
5874 int snd_hda_gen_check_power_status(struct hda_codec *codec, hda_nid_t nid) in snd_hda_gen_check_power_status() argument
5877 return snd_hda_check_amp_list_power(codec, &spec->loopback, nid); in snd_hda_gen_check_power_status()