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()
104 static bool check_pincap_validity(struct hda_codec *codec, hda_nid_t pin, in check_pincap_validity() argument
107 unsigned int pincap = snd_hda_query_pin_caps(codec, pin); in check_pincap_validity()
125 static bool can_be_headset_mic(struct hda_codec *codec, in can_be_headset_mic() argument
137 def_conf = snd_hda_codec_get_pincfg(codec, item->pin); in can_be_headset_mic()
168 int snd_hda_parse_pin_defcfg(struct hda_codec *codec, in snd_hda_parse_pin_defcfg() argument
180 if (!snd_hda_get_int_hint(codec, "parser_flags", &i)) in snd_hda_parse_pin_defcfg()
190 for_each_hda_codec_node(nid, codec) { in snd_hda_parse_pin_defcfg()
191 unsigned int wid_caps = get_wcaps(codec, nid); in snd_hda_parse_pin_defcfg()
203 def_conf = snd_hda_codec_get_pincfg(codec, nid); in snd_hda_parse_pin_defcfg()
217 if (!check_pincap_validity(codec, nid, dev)) in snd_hda_parse_pin_defcfg()
233 codec_info(codec, in snd_hda_parse_pin_defcfg()
239 codec_info(codec, in snd_hda_parse_pin_defcfg()
252 codec_info(codec, in snd_hda_parse_pin_defcfg()
265 codec_info(codec, in snd_hda_parse_pin_defcfg()
275 add_auto_cfg_input_pin(codec, cfg, nid, AUTO_PIN_MIC); in snd_hda_parse_pin_defcfg()
278 add_auto_cfg_input_pin(codec, cfg, nid, AUTO_PIN_LINE_IN); in snd_hda_parse_pin_defcfg()
281 add_auto_cfg_input_pin(codec, cfg, nid, AUTO_PIN_CD); in snd_hda_parse_pin_defcfg()
284 add_auto_cfg_input_pin(codec, cfg, nid, AUTO_PIN_AUX); in snd_hda_parse_pin_defcfg()
289 codec_info(codec, in snd_hda_parse_pin_defcfg()
316 if (hsmic && can_be_headset_mic(codec, &cfg->inputs[i], 0xc)) { in snd_hda_parse_pin_defcfg()
319 } else if (hpmic && can_be_headset_mic(codec, &cfg->inputs[i], 0xd)) { in snd_hda_parse_pin_defcfg()
326 if (!can_be_headset_mic(codec, &cfg->inputs[i], -1)) in snd_hda_parse_pin_defcfg()
338 codec_dbg(codec, "Told to look for a headset mic, but didn't find any.\n"); in snd_hda_parse_pin_defcfg()
340 codec_dbg(codec, "Told to look for a headphone mic, but didn't find any.\n"); in snd_hda_parse_pin_defcfg()
409 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()
410 codec->core.chip_name, cfg->line_outs, cfg->line_out_pins[0], in snd_hda_parse_pin_defcfg()
416 codec_info(codec, " speaker_outs=%d (0x%x/0x%x/0x%x/0x%x/0x%x)\n", in snd_hda_parse_pin_defcfg()
420 codec_info(codec, " hp_outs=%d (0x%x/0x%x/0x%x/0x%x/0x%x)\n", in snd_hda_parse_pin_defcfg()
424 codec_info(codec, " mono: mono_out=0x%x\n", cfg->mono_out_pin); in snd_hda_parse_pin_defcfg()
426 codec_info(codec, " dig-out=0x%x/0x%x\n", in snd_hda_parse_pin_defcfg()
428 codec_info(codec, " inputs:\n"); in snd_hda_parse_pin_defcfg()
430 codec_info(codec, " %s=0x%x\n", in snd_hda_parse_pin_defcfg()
431 hda_get_autocfg_input_label(codec, cfg, i), in snd_hda_parse_pin_defcfg()
435 codec_info(codec, " dig-in=0x%x\n", cfg->dig_in_pin); in snd_hda_parse_pin_defcfg()
480 static const char *hda_get_input_pin_label(struct hda_codec *codec, in hda_get_input_pin_label() argument
490 def_conf = snd_hda_codec_get_pincfg(codec, pin); in hda_get_input_pin_label()
532 static int check_mic_location_need(struct hda_codec *codec, in check_mic_location_need() argument
539 defc = snd_hda_codec_get_pincfg(codec, cfg->inputs[input].pin); in check_mic_location_need()
547 defc = snd_hda_codec_get_pincfg(codec, cfg->inputs[i].pin); in check_mic_location_need()
569 const char *hda_get_autocfg_input_label(struct hda_codec *codec, in hda_get_autocfg_input_label() argument
580 has_multiple_pins &= check_mic_location_need(codec, cfg, input); in hda_get_autocfg_input_label()
581 has_multiple_pins |= codec->force_pin_prefix; in hda_get_autocfg_input_label()
582 return hda_get_input_pin_label(codec, &cfg->inputs[input], in hda_get_autocfg_input_label()
620 static const char *check_output_pfx(struct hda_codec *codec, hda_nid_t nid) in check_output_pfx() argument
622 unsigned int def_conf = snd_hda_codec_get_pincfg(codec, nid); in check_output_pfx()
635 static int get_hp_label_index(struct hda_codec *codec, hda_nid_t nid, in get_hp_label_index() argument
640 const char *pfx = check_output_pfx(codec, nid); in get_hp_label_index()
646 if (pfx == check_output_pfx(codec, pins[j])) in get_hp_label_index()
652 static int fill_audio_out_name(struct hda_codec *codec, hda_nid_t nid, in fill_audio_out_name() argument
657 unsigned int def_conf = snd_hda_codec_get_pincfg(codec, nid); in fill_audio_out_name()
664 pfx = check_output_pfx(codec, nid); in fill_audio_out_name()
675 int idx = get_hp_label_index(codec, nid, cfg->hp_pins, in fill_audio_out_name()
708 int snd_hda_get_pin_label(struct hda_codec *codec, hda_nid_t nid, in snd_hda_get_pin_label() argument
712 unsigned int def_conf = snd_hda_codec_get_pincfg(codec, nid); in snd_hda_get_pin_label()
724 return fill_audio_out_name(codec, nid, cfg, "Line Out", in snd_hda_get_pin_label()
727 return fill_audio_out_name(codec, nid, cfg, "Speaker", in snd_hda_get_pin_label()
730 return fill_audio_out_name(codec, nid, cfg, "Headphone", in snd_hda_get_pin_label()
742 c = snd_hda_codec_get_pincfg(codec, pin); in snd_hda_get_pin_label()
752 name = hda_get_autocfg_input_label(codec, cfg, i); in snd_hda_get_pin_label()
758 name = hda_get_input_pin_label(codec, NULL, nid, true); in snd_hda_get_pin_label()
776 int snd_hda_add_verbs(struct hda_codec *codec, in snd_hda_add_verbs() argument
780 v = snd_array_new(&codec->verbs); in snd_hda_add_verbs()
792 void snd_hda_apply_verbs(struct hda_codec *codec) in snd_hda_apply_verbs() argument
797 snd_array_for_each(&codec->verbs, i, v) in snd_hda_apply_verbs()
798 snd_hda_sequence_write(codec, *v); in snd_hda_apply_verbs()
807 void snd_hda_apply_pincfgs(struct hda_codec *codec, in snd_hda_apply_pincfgs() argument
811 snd_hda_codec_set_pincfg(codec, cfg->nid, cfg->val); in snd_hda_apply_pincfgs()
815 static void set_pin_targets(struct hda_codec *codec, in set_pin_targets() argument
819 snd_hda_set_pin_ctl_cache(codec, cfg->nid, cfg->val); in set_pin_targets()
822 void __snd_hda_apply_fixup(struct hda_codec *codec, int id, int action, int depth) in __snd_hda_apply_fixup() argument
824 const char *modelname = codec->fixup_name; in __snd_hda_apply_fixup()
827 const struct hda_fixup *fix = codec->fixup_list + id; in __snd_hda_apply_fixup()
832 __snd_hda_apply_fixup(codec, fix->chain_id, action, depth + 1); in __snd_hda_apply_fixup()
838 codec_dbg(codec, "%s: Apply pincfg for %s\n", in __snd_hda_apply_fixup()
839 codec->core.chip_name, modelname); in __snd_hda_apply_fixup()
840 snd_hda_apply_pincfgs(codec, fix->v.pins); in __snd_hda_apply_fixup()
845 codec_dbg(codec, "%s: Apply fix-verbs for %s\n", in __snd_hda_apply_fixup()
846 codec->core.chip_name, modelname); in __snd_hda_apply_fixup()
847 snd_hda_add_verbs(codec, fix->v.verbs); in __snd_hda_apply_fixup()
852 codec_dbg(codec, "%s: Apply fix-func for %s\n", in __snd_hda_apply_fixup()
853 codec->core.chip_name, modelname); in __snd_hda_apply_fixup()
854 fix->v.func(codec, fix, action); in __snd_hda_apply_fixup()
859 codec_dbg(codec, "%s: Apply pinctl for %s\n", in __snd_hda_apply_fixup()
860 codec->core.chip_name, modelname); in __snd_hda_apply_fixup()
861 set_pin_targets(codec, fix->v.pins); in __snd_hda_apply_fixup()
864 codec_err(codec, "%s: Invalid fixup type %d\n", in __snd_hda_apply_fixup()
865 codec->core.chip_name, fix->type); in __snd_hda_apply_fixup()
880 void snd_hda_apply_fixup(struct hda_codec *codec, int action) in snd_hda_apply_fixup() argument
882 if (codec->fixup_list) in snd_hda_apply_fixup()
883 __snd_hda_apply_fixup(codec, codec->fixup_id, action, 0); in snd_hda_apply_fixup()
889 static bool pin_config_match(struct hda_codec *codec, in pin_config_match() argument
896 snd_array_for_each(&codec->init_pins, i, pin) { in pin_config_match()
930 void snd_hda_pick_pin_fixup(struct hda_codec *codec, in snd_hda_pick_pin_fixup() argument
937 if (codec->fixup_id != HDA_FIXUP_ID_NOT_SET) in snd_hda_pick_pin_fixup()
941 if ((codec->core.subsystem_id & 0xffff0000) != (pq->subvendor << 16)) in snd_hda_pick_pin_fixup()
943 if (codec->core.vendor_id != pq->codec) in snd_hda_pick_pin_fixup()
945 if (pin_config_match(codec, pq->pins, match_all_pins)) { in snd_hda_pick_pin_fixup()
946 codec->fixup_id = pq->value; in snd_hda_pick_pin_fixup()
948 codec->fixup_name = pq->name; in snd_hda_pick_pin_fixup()
949 codec_dbg(codec, "%s: picked fixup %s (pin match)\n", in snd_hda_pick_pin_fixup()
950 codec->core.chip_name, codec->fixup_name); in snd_hda_pick_pin_fixup()
952 codec->fixup_list = fixlist; in snd_hda_pick_pin_fixup()
976 void snd_hda_pick_fixup(struct hda_codec *codec, in snd_hda_pick_fixup() argument
987 if (codec->fixup_id != HDA_FIXUP_ID_NOT_SET) in snd_hda_pick_fixup()
991 if (codec->modelname && !strcmp(codec->modelname, "nofixup")) { in snd_hda_pick_fixup()
994 codec_dbg(codec, "%s: picked no fixup (nofixup specified)\n", in snd_hda_pick_fixup()
995 codec->core.chip_name); in snd_hda_pick_fixup()
1000 if (codec->modelname && models) { in snd_hda_pick_fixup()
1002 if (!strcmp(codec->modelname, models->name)) { in snd_hda_pick_fixup()
1005 codec_dbg(codec, "%s: picked fixup %s (model specified)\n", in snd_hda_pick_fixup()
1006 codec->core.chip_name, codec->fixup_name); in snd_hda_pick_fixup()
1017 if (codec->modelname && in snd_hda_pick_fixup()
1018 sscanf(codec->modelname, "%04x:%04x", &vendor, &device) == 2) { in snd_hda_pick_fixup()
1027 q = snd_pci_quirk_lookup(codec->bus->pci, quirk); in snd_hda_pick_fixup()
1034 q = snd_pci_quirk_lookup_id(codec->core.subsystem_id >> 16, in snd_hda_pick_fixup()
1035 codec->core.subsystem_id & 0xffff, in snd_hda_pick_fixup()
1049 codec_dbg(codec, "%s: picked fixup %s for %s %04x:%04x\n", in snd_hda_pick_fixup()
1050 codec->core.chip_name, name ? name : "", in snd_hda_pick_fixup()
1053 codec->fixup_id = id; in snd_hda_pick_fixup()
1054 codec->fixup_list = fixlist; in snd_hda_pick_fixup()
1055 codec->fixup_name = name; in snd_hda_pick_fixup()