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 power = snd_hda_codec_read(codec, nid, 0, in path_power_update()
861 snd_hda_codec_write(codec, nid, 0, in path_power_update()
863 changed = nid; in path_power_update()
872 snd_hdac_regmap_sync_node(&codec->core, nid); in path_power_update()
880 static void sync_power_state_change(struct hda_codec *codec, hda_nid_t nid) in sync_power_state_change() argument
882 if (nid) { in sync_power_state_change()
884 snd_hda_codec_read(codec, nid, 0, AC_VERB_GET_POWER_STATE, 0); in sync_power_state_change()
910 hda_nid_t nid = path->path[i]; in snd_hda_activate_path() local
913 snd_hda_codec_update_cache(codec, nid, 0, in snd_hda_activate_path()
1049 hda_nid_t nid = get_amp_nid_(path->ctls[type]); in get_default_ch_nums() local
1050 if (nid && (get_wcaps(codec, nid) & AC_WCAP_STEREO)) in get_default_ch_nums()
1079 hda_nid_t nid = get_amp_nid_(val); in add_sw_ctl() local
1080 int nums = snd_hda_get_num_conns(codec, nid); in add_sw_ctl()
1104 hda_nid_t nid = get_amp_nid(kcontrol); in sync_auto_mute_bits() local
1105 bool enabled = !((spec->mute_bits >> nid) & 1); in sync_auto_mute_bits()
1249 hda_nid_t nid; in assign_out_path_ctls() local
1260 nid = look_for_out_vol_nid(codec, path); in assign_out_path_ctls()
1261 if (nid) { in assign_out_path_ctls()
1262 val = HDA_COMPOSE_AMP_VAL(nid, 3, 0, HDA_OUTPUT); in assign_out_path_ctls()
1271 nid = look_for_out_mute_nid(codec, path); in assign_out_path_ctls()
1272 if (nid) { in assign_out_path_ctls()
1273 unsigned int wid_type = get_wcaps_type(get_wcaps(codec, nid)); in assign_out_path_ctls()
1275 nid_has_mute(codec, nid, HDA_OUTPUT)) in assign_out_path_ctls()
1276 val = HDA_COMPOSE_AMP_VAL(nid, 3, 0, HDA_OUTPUT); in assign_out_path_ctls()
1278 val = HDA_COMPOSE_AMP_VAL(nid, 3, 0, HDA_INPUT); in assign_out_path_ctls()
1425 hda_nid_t nid = spec->all_dacs[i]; in get_dac_if_single() local
1426 if (!nid || is_dac_already_used(codec, nid)) in get_dac_if_single()
1428 if (is_reachable_path(codec, nid, pin)) { in get_dac_if_single()
1431 nid_found = nid; in get_dac_if_single()
1439 unsigned int location, hda_nid_t nid) in can_be_multiio_pin() argument
1443 defcfg = snd_hda_codec_get_pincfg(codec, nid); in can_be_multiio_pin()
1448 caps = snd_hda_query_pin_caps(codec, nid); in can_be_multiio_pin()
1506 hda_nid_t nid = cfg->inputs[i].pin; in fill_multi_ios() local
1511 if (!can_be_multiio_pin(codec, location, nid)) in fill_multi_ios()
1514 if (nid == spec->multi_io[j].pin) in fill_multi_ios()
1521 dac = get_dac_if_single(codec, nid); in fill_multi_ios()
1523 dac = look_for_dac(codec, nid, false); in fill_multi_ios()
1528 path = snd_hda_add_new_path(codec, dac, nid, in fill_multi_ios()
1535 spec->multi_io[spec->multi_ios].pin = nid; in fill_multi_ios()
1927 hda_nid_t nid; in fill_all_dac_nids() local
1931 for_each_hda_codec_node(nid, codec) { in fill_all_dac_nids()
1932 if (get_wcaps_type(get_wcaps(codec, nid)) != AC_WID_AUD_OUT) in fill_all_dac_nids()
1938 spec->all_dacs[spec->num_all_dacs++] = nid; in fill_all_dac_nids()
2334 hda_nid_t nid = spec->multi_io[idx].pin; in set_multi_io() local
2345 set_pin_target(codec, nid, PIN_OUT, true); in set_multi_io()
2347 set_pin_eapd(codec, nid, true); in set_multi_io()
2349 set_pin_eapd(codec, nid, false); in set_multi_io()
2351 set_pin_target(codec, nid, spec->multi_io[idx].ctl_in, true); in set_multi_io()
2575 hda_nid_t nid; in create_hp_mic() local
2596 nid = 0; in create_hp_mic()
2598 nid = cfg->line_out_pins[0]; in create_hp_mic()
2600 nid = cfg->hp_pins[0]; in create_hp_mic()
2601 if (!nid) in create_hp_mic()
2604 if (!(snd_hda_query_pin_caps(codec, nid) & AC_PINCAP_IN)) in create_hp_mic()
2607 cfg->inputs[cfg->num_inputs].pin = nid; in create_hp_mic()
2612 spec->hp_mic_pin = nid; in create_hp_mic()
2615 codec_dbg(codec, "Enable shared I/O jack on NID 0x%x\n", nid); in create_hp_mic()
2639 hda_nid_t nid = kcontrol->private_value; in out_jack_mode_get() local
2640 if (snd_hda_codec_get_pin_target(codec, nid) == PIN_HP) in out_jack_mode_get()
2651 hda_nid_t nid = kcontrol->private_value; in out_jack_mode_put() local
2655 if (snd_hda_codec_get_pin_target(codec, nid) == val) in out_jack_mode_put()
2657 snd_hda_set_pin_ctl_cache(codec, nid, val); in out_jack_mode_put()
2786 hda_nid_t nid = kcontrol->private_value; in in_jack_mode_info() local
2787 unsigned int vref_caps = get_vref_caps(codec, nid); in in_jack_mode_info()
2801 hda_nid_t nid = kcontrol->private_value; in in_jack_mode_get() local
2802 unsigned int vref_caps = get_vref_caps(codec, nid); in in_jack_mode_get()
2805 idx = snd_hda_codec_get_pin_target(codec, nid) & AC_PINCTL_VREFEN; in in_jack_mode_get()
2814 hda_nid_t nid = kcontrol->private_value; in in_jack_mode_put() local
2815 unsigned int vref_caps = get_vref_caps(codec, nid); in in_jack_mode_put()
2818 val = snd_hda_codec_get_pin_target(codec, nid); in in_jack_mode_put()
2825 snd_hda_set_pin_ctl_cache(codec, nid, val); in in_jack_mode_put()
2879 hda_nid_t nid = kcontrol->private_value; in hp_mic_jack_mode_info() local
2880 int out_jacks = get_out_jack_num_items(codec, nid); in hp_mic_jack_mode_info()
2881 int in_jacks = get_in_jack_num_items(codec, nid); in hp_mic_jack_mode_info()
2899 unsigned int vref_caps = get_vref_caps(codec, nid); in hp_mic_jack_mode_info()
2909 static int get_cur_hp_mic_jack_mode(struct hda_codec *codec, hda_nid_t nid) in get_cur_hp_mic_jack_mode() argument
2911 int out_jacks = get_out_jack_num_items(codec, nid); in get_cur_hp_mic_jack_mode()
2912 int in_jacks = get_in_jack_num_items(codec, nid); in get_cur_hp_mic_jack_mode()
2913 unsigned int val = snd_hda_codec_get_pin_target(codec, nid); in get_cur_hp_mic_jack_mode()
2922 unsigned int vref_caps = get_vref_caps(codec, nid); in get_cur_hp_mic_jack_mode()
2934 hda_nid_t nid = kcontrol->private_value; in hp_mic_jack_mode_get() local
2936 get_cur_hp_mic_jack_mode(codec, nid); in hp_mic_jack_mode_get()
2944 hda_nid_t nid = kcontrol->private_value; in hp_mic_jack_mode_put() local
2945 int out_jacks = get_out_jack_num_items(codec, nid); in hp_mic_jack_mode_put()
2946 int in_jacks = get_in_jack_num_items(codec, nid); in hp_mic_jack_mode_put()
2949 oldval = get_cur_hp_mic_jack_mode(codec, nid); in hp_mic_jack_mode_put()
2962 unsigned int vref_caps = get_vref_caps(codec, nid); in hp_mic_jack_mode_put()
2963 val = snd_hda_codec_get_pin_target(codec, nid); in hp_mic_jack_mode_put()
2967 val = snd_hda_get_default_vref(codec, nid) | PIN_IN; in hp_mic_jack_mode_put()
2969 snd_hda_set_pin_ctl_cache(codec, nid, val); in hp_mic_jack_mode_put()
3008 list->nid = mix; in add_loopback_list()
3024 hda_nid_t nid; in look_for_mix_leaf_ctls() local
3042 nid = list[idx]; in look_for_mix_leaf_ctls()
3043 if (!*mix_val && nid_has_volume(codec, nid, HDA_OUTPUT) && in look_for_mix_leaf_ctls()
3044 !is_ctl_associated(codec, nid, HDA_OUTPUT, 0, NID_PATH_VOL_CTL)) in look_for_mix_leaf_ctls()
3045 *mix_val = HDA_COMPOSE_AMP_VAL(nid, 3, 0, HDA_OUTPUT); in look_for_mix_leaf_ctls()
3046 if (!*mute_val && nid_has_mute(codec, nid, HDA_OUTPUT) && in look_for_mix_leaf_ctls()
3047 !is_ctl_associated(codec, nid, HDA_OUTPUT, 0, NID_PATH_MUTE_CTL)) in look_for_mix_leaf_ctls()
3048 *mute_val = HDA_COMPOSE_AMP_VAL(nid, 3, 0, HDA_OUTPUT); in look_for_mix_leaf_ctls()
3110 static int is_input_pin(struct hda_codec *codec, hda_nid_t nid) in is_input_pin() argument
3112 unsigned int pincap = snd_hda_query_pin_caps(codec, nid); in is_input_pin()
3120 hda_nid_t nid; in fill_adc_nids() local
3125 for_each_hda_codec_node(nid, codec) { in fill_adc_nids()
3126 unsigned int caps = get_wcaps(codec, nid); in fill_adc_nids()
3131 adc_nids[nums] = nid; in fill_adc_nids()
3501 hda_nid_t nid; in parse_capvol_in_path() local
3509 nid = path->path[i]; in parse_capvol_in_path()
3511 if (nid_has_volume(codec, nid, HDA_OUTPUT)) in parse_capvol_in_path()
3513 HDA_COMPOSE_AMP_VAL(nid, 3, 0, HDA_OUTPUT); in parse_capvol_in_path()
3514 else if (nid_has_volume(codec, nid, HDA_INPUT)) { in parse_capvol_in_path()
3519 HDA_COMPOSE_AMP_VAL(nid, 3, idx, HDA_INPUT); in parse_capvol_in_path()
3523 if (nid_has_mute(codec, nid, HDA_OUTPUT)) in parse_capvol_in_path()
3525 HDA_COMPOSE_AMP_VAL(nid, 3, 0, HDA_OUTPUT); in parse_capvol_in_path()
3526 else if (nid_has_mute(codec, nid, HDA_INPUT)) { in parse_capvol_in_path()
3531 HDA_COMPOSE_AMP_VAL(nid, 3, idx, HDA_INPUT); in parse_capvol_in_path()
3538 static bool is_inv_dmic_pin(struct hda_codec *codec, hda_nid_t nid) in is_inv_dmic_pin() argument
3548 if (cfg->inputs[i].pin != nid) in is_inv_dmic_pin()
3552 val = snd_hda_codec_get_pincfg(codec, nid); in is_inv_dmic_pin()
3786 static bool check_boost_vol(struct hda_codec *codec, hda_nid_t nid, in check_boost_vol() argument
3791 if (!nid_has_volume(codec, nid, dir) || in check_boost_vol()
3792 is_ctl_associated(codec, nid, dir, idx, NID_PATH_VOL_CTL) || in check_boost_vol()
3793 is_ctl_associated(codec, nid, dir, idx, NID_PATH_BOOST_CTL)) in check_boost_vol()
3796 step = (query_amp_caps(codec, nid, dir) & AC_AMPCAP_STEP_SIZE) in check_boost_vol()
3808 hda_nid_t nid; in look_for_boost_amp() local
3814 nid = path->path[depth]; in look_for_boost_amp()
3815 if (depth && check_boost_vol(codec, nid, HDA_OUTPUT, 0)) { in look_for_boost_amp()
3816 val = HDA_COMPOSE_AMP_VAL(nid, 3, 0, HDA_OUTPUT); in look_for_boost_amp()
3818 } else if (check_boost_vol(codec, nid, HDA_INPUT, in look_for_boost_amp()
3820 val = HDA_COMPOSE_AMP_VAL(nid, 3, path->idx[depth], in look_for_boost_amp()
3987 static hda_nid_t set_path_power(struct hda_codec *codec, hda_nid_t nid, in set_path_power() argument
3997 if (path->path[0] == nid || in set_path_power()
3998 path->path[path->depth - 1] == nid) { in set_path_power()
4050 if (jack && jack->nid) in pin_power_callback()
4052 set_pin_power_jack(codec, jack->nid, on)); in pin_power_callback()
4135 static int add_fake_paths(struct hda_codec *codec, hda_nid_t nid, in add_fake_paths() argument
4145 if (get_nid_path(codec, nid, pins[i], 0)) in add_fake_paths()
4152 path->path[0] = nid; in add_fake_paths()
4164 hda_nid_t nid = spec->beep_nid; in add_fake_beep_paths() local
4167 if (!codec->power_save_node || !nid) in add_fake_beep_paths()
4169 err = add_fake_paths(codec, nid, cfg->line_outs, cfg->line_out_pins); in add_fake_beep_paths()
4173 err = add_fake_paths(codec, nid, cfg->hp_outs, cfg->hp_pins); in add_fake_beep_paths()
4178 err = add_fake_paths(codec, nid, cfg->speaker_outs, in add_fake_beep_paths()
4189 set_path_power(beep->codec, beep->nid, -1, on); in beep_power_hook()
4226 hda_nid_t nid = pins[i]; in detect_jacks() local
4227 if (!nid) in detect_jacks()
4230 if (snd_hda_codec_get_pin_target(codec, nid) & AC_PINCTL_IN_EN) in detect_jacks()
4232 if (snd_hda_jack_detect_state(codec, nid) == HDA_JACK_PRESENT) in detect_jacks()
4246 hda_nid_t nid = pins[i]; in do_automute() local
4248 if (!nid) in do_automute()
4251 oldval = snd_hda_codec_get_pin_target(codec, nid); in do_automute()
4285 update_pin_ctl(codec, nid, val); in do_automute()
4288 set_pin_eapd(codec, nid, !mute); in do_automute()
4292 on = detect_pin_state(codec, nid); in do_automute()
4293 set_path_power(codec, nid, on, -1); in do_automute()
4609 hda_nid_t nid = cfg->hp_pins[i]; in check_auto_mute_availability() local
4610 if (!is_jack_detectable(codec, nid)) in check_auto_mute_availability()
4612 codec_dbg(codec, "Enable HP auto-muting on NID 0x%x\n", nid); in check_auto_mute_availability()
4613 snd_hda_jack_detect_enable_callback(codec, nid, in check_auto_mute_availability()
4621 hda_nid_t nid = cfg->line_out_pins[i]; in check_auto_mute_availability() local
4622 if (!is_jack_detectable(codec, nid)) in check_auto_mute_availability()
4624 codec_dbg(codec, "Enable Line-Out auto-muting on NID 0x%x\n", nid); in check_auto_mute_availability()
4625 snd_hda_jack_detect_enable_callback(codec, nid, in check_auto_mute_availability()
4695 hda_nid_t nid = cfg->inputs[i].pin; in check_auto_mic_availability() local
4697 attr = snd_hda_codec_get_pincfg(codec, nid); in check_auto_mic_availability()
4714 if (!is_jack_detectable(codec, nid)) in check_auto_mic_availability()
4721 spec->am_entry[num_pins].pin = nid; in check_auto_mic_availability()
4758 hda_nid_t nid, in snd_hda_gen_path_power_filter() argument
4765 if (power_state != AC_PWRST_D0 || nid == codec->core.afg) in snd_hda_gen_path_power_filter()
4767 if (get_wcaps_type(get_wcaps(codec, nid)) >= AC_WID_POWER) in snd_hda_gen_path_power_filter()
4769 if (is_active_nid_for_any(codec, nid)) in snd_hda_gen_path_power_filter()
4802 void snd_hda_gen_stream_pm(struct hda_codec *codec, hda_nid_t nid, bool on) in snd_hda_gen_stream_pm() argument
4805 set_path_power(codec, nid, -1, on); in snd_hda_gen_stream_pm()
5192 snd_hda_codec_setup_stream(codec, hinfo->nid, stream_tag, 0, format); in capture_pcm_prepare()
5202 snd_hda_codec_cleanup_stream(codec, hinfo->nid); in capture_pcm_cleanup()
5253 snd_hda_codec_setup_stream(codec, hinfo->nid, stream_tag, 0, format); in alt_playback_pcm_prepare()
5263 snd_hda_codec_cleanup_stream(codec, hinfo->nid); in alt_playback_pcm_cleanup()
5471 .nid = 0, /* fill later */
5503 hda_nid_t nid) in setup_pcm_stream() argument
5506 if (nid) in setup_pcm_stream()
5507 str->nid = nid; in setup_pcm_stream()
5737 hda_nid_t nid = cfg->inputs[i].pin; in init_analog_input() local
5738 if (is_input_pin(codec, nid)) in init_analog_input()
5739 restore_pin_ctl(codec, nid); in init_analog_input()
5805 hda_nid_t nid = pin->nid; in clear_unsol_on_unused_pins() local
5806 if (is_jack_detectable(codec, nid) && in clear_unsol_on_unused_pins()
5807 !snd_hda_jack_tbl_get(codec, nid)) in clear_unsol_on_unused_pins()
5808 snd_hda_codec_update_cache(codec, nid, 0, in clear_unsol_on_unused_pins()
5876 int snd_hda_gen_check_power_status(struct hda_codec *codec, hda_nid_t nid) in snd_hda_gen_check_power_status() argument
5879 return snd_hda_check_amp_list_power(codec, &spec->loopback, nid); in snd_hda_gen_check_power_status()