Lines Matching refs:codec
56 static void add_auto_cfg_input_pin(struct hda_codec *codec, struct auto_pin_cfg *cfg, in add_auto_cfg_input_pin() argument
63 nid_has_volume(codec, nid, HDA_INPUT); in add_auto_cfg_input_pin()
102 static bool check_pincap_validity(struct hda_codec *codec, hda_nid_t pin, in check_pincap_validity() argument
105 unsigned int pincap = snd_hda_query_pin_caps(codec, pin); in check_pincap_validity()
123 static bool can_be_headset_mic(struct hda_codec *codec, in can_be_headset_mic() argument
135 def_conf = snd_hda_codec_get_pincfg(codec, item->pin); in can_be_headset_mic()
166 int snd_hda_parse_pin_defcfg(struct hda_codec *codec, in snd_hda_parse_pin_defcfg() argument
178 if (!snd_hda_get_int_hint(codec, "parser_flags", &i)) in snd_hda_parse_pin_defcfg()
188 for_each_hda_codec_node(nid, codec) { in snd_hda_parse_pin_defcfg()
189 unsigned int wid_caps = get_wcaps(codec, nid); in snd_hda_parse_pin_defcfg()
201 def_conf = snd_hda_codec_get_pincfg(codec, nid); in snd_hda_parse_pin_defcfg()
215 if (!check_pincap_validity(codec, nid, dev)) in snd_hda_parse_pin_defcfg()
231 codec_info(codec, in snd_hda_parse_pin_defcfg()
237 codec_info(codec, in snd_hda_parse_pin_defcfg()
250 codec_info(codec, in snd_hda_parse_pin_defcfg()
263 codec_info(codec, in snd_hda_parse_pin_defcfg()
273 add_auto_cfg_input_pin(codec, cfg, nid, AUTO_PIN_MIC); in snd_hda_parse_pin_defcfg()
276 add_auto_cfg_input_pin(codec, cfg, nid, AUTO_PIN_LINE_IN); in snd_hda_parse_pin_defcfg()
279 add_auto_cfg_input_pin(codec, cfg, nid, AUTO_PIN_CD); in snd_hda_parse_pin_defcfg()
282 add_auto_cfg_input_pin(codec, cfg, nid, AUTO_PIN_AUX); in snd_hda_parse_pin_defcfg()
287 codec_info(codec, in snd_hda_parse_pin_defcfg()
314 if (hsmic && can_be_headset_mic(codec, &cfg->inputs[i], 0xc)) { in snd_hda_parse_pin_defcfg()
317 } else if (hpmic && can_be_headset_mic(codec, &cfg->inputs[i], 0xd)) { in snd_hda_parse_pin_defcfg()
324 if (!can_be_headset_mic(codec, &cfg->inputs[i], -1)) in snd_hda_parse_pin_defcfg()
336 codec_dbg(codec, "Told to look for a headset mic, but didn't find any.\n"); in snd_hda_parse_pin_defcfg()
338 codec_dbg(codec, "Told to look for a headphone mic, but didn't find any.\n"); in snd_hda_parse_pin_defcfg()
407 codec_info(codec, "autoconfig for %s: line_outs=%d (0x%x/0x%x/0x%x/0x%x/0x%x) type:%s\n", in snd_hda_parse_pin_defcfg()
408 codec->core.chip_name, cfg->line_outs, cfg->line_out_pins[0], in snd_hda_parse_pin_defcfg()
414 codec_info(codec, " speaker_outs=%d (0x%x/0x%x/0x%x/0x%x/0x%x)\n", in snd_hda_parse_pin_defcfg()
418 codec_info(codec, " hp_outs=%d (0x%x/0x%x/0x%x/0x%x/0x%x)\n", in snd_hda_parse_pin_defcfg()
422 codec_info(codec, " mono: mono_out=0x%x\n", cfg->mono_out_pin); in snd_hda_parse_pin_defcfg()
424 codec_info(codec, " dig-out=0x%x/0x%x\n", in snd_hda_parse_pin_defcfg()
426 codec_info(codec, " inputs:\n"); in snd_hda_parse_pin_defcfg()
428 codec_info(codec, " %s=0x%x\n", in snd_hda_parse_pin_defcfg()
429 hda_get_autocfg_input_label(codec, cfg, i), in snd_hda_parse_pin_defcfg()
433 codec_info(codec, " dig-in=0x%x\n", cfg->dig_in_pin); in snd_hda_parse_pin_defcfg()
478 static const char *hda_get_input_pin_label(struct hda_codec *codec, in hda_get_input_pin_label() argument
488 def_conf = snd_hda_codec_get_pincfg(codec, pin); in hda_get_input_pin_label()
530 static int check_mic_location_need(struct hda_codec *codec, in check_mic_location_need() argument
537 defc = snd_hda_codec_get_pincfg(codec, cfg->inputs[input].pin); in check_mic_location_need()
545 defc = snd_hda_codec_get_pincfg(codec, cfg->inputs[i].pin); in check_mic_location_need()
567 const char *hda_get_autocfg_input_label(struct hda_codec *codec, in hda_get_autocfg_input_label() argument
578 has_multiple_pins &= check_mic_location_need(codec, cfg, input); in hda_get_autocfg_input_label()
579 has_multiple_pins |= codec->force_pin_prefix; in hda_get_autocfg_input_label()
580 return hda_get_input_pin_label(codec, &cfg->inputs[input], in hda_get_autocfg_input_label()
618 static const char *check_output_pfx(struct hda_codec *codec, hda_nid_t nid) in check_output_pfx() argument
620 unsigned int def_conf = snd_hda_codec_get_pincfg(codec, nid); in check_output_pfx()
633 static int get_hp_label_index(struct hda_codec *codec, hda_nid_t nid, in get_hp_label_index() argument
638 const char *pfx = check_output_pfx(codec, nid); in get_hp_label_index()
644 if (pfx == check_output_pfx(codec, pins[j])) in get_hp_label_index()
650 static int fill_audio_out_name(struct hda_codec *codec, hda_nid_t nid, in fill_audio_out_name() argument
655 unsigned int def_conf = snd_hda_codec_get_pincfg(codec, nid); in fill_audio_out_name()
662 pfx = check_output_pfx(codec, nid); in fill_audio_out_name()
673 int idx = get_hp_label_index(codec, nid, cfg->hp_pins, in fill_audio_out_name()
706 int snd_hda_get_pin_label(struct hda_codec *codec, hda_nid_t nid, in snd_hda_get_pin_label() argument
710 unsigned int def_conf = snd_hda_codec_get_pincfg(codec, nid); in snd_hda_get_pin_label()
722 return fill_audio_out_name(codec, nid, cfg, "Line Out", in snd_hda_get_pin_label()
725 return fill_audio_out_name(codec, nid, cfg, "Speaker", in snd_hda_get_pin_label()
728 return fill_audio_out_name(codec, nid, cfg, "Headphone", in snd_hda_get_pin_label()
740 c = snd_hda_codec_get_pincfg(codec, pin); in snd_hda_get_pin_label()
750 name = hda_get_autocfg_input_label(codec, cfg, i); in snd_hda_get_pin_label()
756 name = hda_get_input_pin_label(codec, NULL, nid, true); in snd_hda_get_pin_label()
774 int snd_hda_add_verbs(struct hda_codec *codec, in snd_hda_add_verbs() argument
778 v = snd_array_new(&codec->verbs); in snd_hda_add_verbs()
790 void snd_hda_apply_verbs(struct hda_codec *codec) in snd_hda_apply_verbs() argument
795 snd_array_for_each(&codec->verbs, i, v) in snd_hda_apply_verbs()
796 snd_hda_sequence_write(codec, *v); in snd_hda_apply_verbs()
805 void snd_hda_apply_pincfgs(struct hda_codec *codec, in snd_hda_apply_pincfgs() argument
809 snd_hda_codec_set_pincfg(codec, cfg->nid, cfg->val); in snd_hda_apply_pincfgs()
813 static void set_pin_targets(struct hda_codec *codec, in set_pin_targets() argument
817 snd_hda_set_pin_ctl_cache(codec, cfg->nid, cfg->val); in set_pin_targets()
820 static void apply_fixup(struct hda_codec *codec, int id, int action, int depth) in apply_fixup() argument
822 const char *modelname = codec->fixup_name; in apply_fixup()
825 const struct hda_fixup *fix = codec->fixup_list + id; in apply_fixup()
830 apply_fixup(codec, fix->chain_id, action, depth + 1); in apply_fixup()
836 codec_dbg(codec, "%s: Apply pincfg for %s\n", in apply_fixup()
837 codec->core.chip_name, modelname); in apply_fixup()
838 snd_hda_apply_pincfgs(codec, fix->v.pins); in apply_fixup()
843 codec_dbg(codec, "%s: Apply fix-verbs for %s\n", in apply_fixup()
844 codec->core.chip_name, modelname); in apply_fixup()
845 snd_hda_add_verbs(codec, fix->v.verbs); in apply_fixup()
850 codec_dbg(codec, "%s: Apply fix-func for %s\n", in apply_fixup()
851 codec->core.chip_name, modelname); in apply_fixup()
852 fix->v.func(codec, fix, action); in apply_fixup()
857 codec_dbg(codec, "%s: Apply pinctl for %s\n", in apply_fixup()
858 codec->core.chip_name, modelname); in apply_fixup()
859 set_pin_targets(codec, fix->v.pins); in apply_fixup()
862 codec_err(codec, "%s: Invalid fixup type %d\n", in apply_fixup()
863 codec->core.chip_name, fix->type); in apply_fixup()
877 void snd_hda_apply_fixup(struct hda_codec *codec, int action) in snd_hda_apply_fixup() argument
879 if (codec->fixup_list) in snd_hda_apply_fixup()
880 apply_fixup(codec, codec->fixup_id, action, 0); in snd_hda_apply_fixup()
886 static bool pin_config_match(struct hda_codec *codec, in pin_config_match() argument
893 snd_array_for_each(&codec->init_pins, i, pin) { in pin_config_match()
927 void snd_hda_pick_pin_fixup(struct hda_codec *codec, in snd_hda_pick_pin_fixup() argument
934 if (codec->fixup_id != HDA_FIXUP_ID_NOT_SET) in snd_hda_pick_pin_fixup()
938 if ((codec->core.subsystem_id & 0xffff0000) != (pq->subvendor << 16)) in snd_hda_pick_pin_fixup()
940 if (codec->core.vendor_id != pq->codec) in snd_hda_pick_pin_fixup()
942 if (pin_config_match(codec, pq->pins, match_all_pins)) { in snd_hda_pick_pin_fixup()
943 codec->fixup_id = pq->value; in snd_hda_pick_pin_fixup()
945 codec->fixup_name = pq->name; in snd_hda_pick_pin_fixup()
946 codec_dbg(codec, "%s: picked fixup %s (pin match)\n", in snd_hda_pick_pin_fixup()
947 codec->core.chip_name, codec->fixup_name); in snd_hda_pick_pin_fixup()
949 codec->fixup_list = fixlist; in snd_hda_pick_pin_fixup()
971 void snd_hda_pick_fixup(struct hda_codec *codec, in snd_hda_pick_fixup() argument
980 if (codec->fixup_id != HDA_FIXUP_ID_NOT_SET) in snd_hda_pick_fixup()
984 if (codec->modelname && !strcmp(codec->modelname, "nofixup")) { in snd_hda_pick_fixup()
985 codec->fixup_list = NULL; in snd_hda_pick_fixup()
986 codec->fixup_name = NULL; in snd_hda_pick_fixup()
987 codec->fixup_id = HDA_FIXUP_ID_NO_FIXUP; in snd_hda_pick_fixup()
988 codec_dbg(codec, "%s: picked no fixup (nofixup specified)\n", in snd_hda_pick_fixup()
989 codec->core.chip_name); in snd_hda_pick_fixup()
993 if (codec->modelname && models) { in snd_hda_pick_fixup()
995 if (!strcmp(codec->modelname, models->name)) { in snd_hda_pick_fixup()
996 codec->fixup_id = models->id; in snd_hda_pick_fixup()
997 codec->fixup_name = models->name; in snd_hda_pick_fixup()
998 codec->fixup_list = fixlist; in snd_hda_pick_fixup()
999 codec_dbg(codec, "%s: picked fixup %s (model specified)\n", in snd_hda_pick_fixup()
1000 codec->core.chip_name, codec->fixup_name); in snd_hda_pick_fixup()
1007 q = snd_pci_quirk_lookup(codec->bus->pci, quirk); in snd_hda_pick_fixup()
1012 codec_dbg(codec, "%s: picked fixup %s (PCI SSID%s)\n", in snd_hda_pick_fixup()
1013 codec->core.chip_name, name, q->subdevice_mask ? "" : " - vendor generic"); in snd_hda_pick_fixup()
1022 if ((codec->core.subsystem_id & mask) == (vendorid & mask)) { in snd_hda_pick_fixup()
1026 codec_dbg(codec, "%s: picked fixup %s (codec SSID)\n", in snd_hda_pick_fixup()
1027 codec->core.chip_name, name); in snd_hda_pick_fixup()
1034 codec->fixup_id = id; in snd_hda_pick_fixup()
1036 codec->fixup_list = fixlist; in snd_hda_pick_fixup()
1037 codec->fixup_name = name; in snd_hda_pick_fixup()