Lines Matching full:cfg
59 /* add the found input-pin to the cfg->inputs[] table */
60 static void add_auto_cfg_input_pin(struct hda_codec *codec, struct auto_pin_cfg *cfg, in add_auto_cfg_input_pin() argument
63 if (cfg->num_inputs < AUTO_CFG_MAX_INS) { in add_auto_cfg_input_pin()
64 cfg->inputs[cfg->num_inputs].pin = nid; in add_auto_cfg_input_pin()
65 cfg->inputs[cfg->num_inputs].type = type; in add_auto_cfg_input_pin()
66 cfg->inputs[cfg->num_inputs].has_boost_on_pin = in add_auto_cfg_input_pin()
68 cfg->num_inputs++; in add_auto_cfg_input_pin()
160 * Parse all pin widgets and store the useful pin nids to cfg
177 struct auto_pin_cfg *cfg, in snd_hda_parse_pin_defcfg() argument
183 struct auto_out_pin line_out[ARRAY_SIZE(cfg->line_out_pins)]; in snd_hda_parse_pin_defcfg()
184 struct auto_out_pin speaker_out[ARRAY_SIZE(cfg->speaker_pins)]; in snd_hda_parse_pin_defcfg()
185 struct auto_out_pin hp_out[ARRAY_SIZE(cfg->hp_pins)]; in snd_hda_parse_pin_defcfg()
191 memset(cfg, 0, sizeof(*cfg)); in snd_hda_parse_pin_defcfg()
234 if (!cfg->mono_out_pin) in snd_hda_parse_pin_defcfg()
235 cfg->mono_out_pin = nid; in snd_hda_parse_pin_defcfg()
246 if (cfg->line_outs >= ARRAY_SIZE(cfg->line_out_pins)) { in snd_hda_parse_pin_defcfg()
252 line_out[cfg->line_outs].pin = nid; in snd_hda_parse_pin_defcfg()
253 line_out[cfg->line_outs].seq = seq; in snd_hda_parse_pin_defcfg()
254 cfg->line_outs++; in snd_hda_parse_pin_defcfg()
259 if (cfg->speaker_outs >= ARRAY_SIZE(cfg->speaker_pins)) { in snd_hda_parse_pin_defcfg()
265 speaker_out[cfg->speaker_outs].pin = nid; in snd_hda_parse_pin_defcfg()
266 speaker_out[cfg->speaker_outs].seq = (assoc << 4) | seq; in snd_hda_parse_pin_defcfg()
267 cfg->speaker_outs++; in snd_hda_parse_pin_defcfg()
272 if (cfg->hp_outs >= ARRAY_SIZE(cfg->hp_pins)) { in snd_hda_parse_pin_defcfg()
278 hp_out[cfg->hp_outs].pin = nid; in snd_hda_parse_pin_defcfg()
279 hp_out[cfg->hp_outs].seq = (assoc << 4) | seq; in snd_hda_parse_pin_defcfg()
280 cfg->hp_outs++; in snd_hda_parse_pin_defcfg()
283 add_auto_cfg_input_pin(codec, cfg, nid, AUTO_PIN_MIC); in snd_hda_parse_pin_defcfg()
286 add_auto_cfg_input_pin(codec, cfg, nid, AUTO_PIN_LINE_IN); in snd_hda_parse_pin_defcfg()
289 add_auto_cfg_input_pin(codec, cfg, nid, AUTO_PIN_CD); in snd_hda_parse_pin_defcfg()
292 add_auto_cfg_input_pin(codec, cfg, nid, AUTO_PIN_AUX); in snd_hda_parse_pin_defcfg()
296 if (cfg->dig_outs >= ARRAY_SIZE(cfg->dig_out_pins)) { in snd_hda_parse_pin_defcfg()
302 cfg->dig_out_pins[cfg->dig_outs] = nid; in snd_hda_parse_pin_defcfg()
303 cfg->dig_out_type[cfg->dig_outs] = in snd_hda_parse_pin_defcfg()
306 cfg->dig_outs++; in snd_hda_parse_pin_defcfg()
310 cfg->dig_in_pin = nid; in snd_hda_parse_pin_defcfg()
312 cfg->dig_in_type = HDA_PCM_TYPE_HDMI; in snd_hda_parse_pin_defcfg()
314 cfg->dig_in_type = HDA_PCM_TYPE_SPDIF; in snd_hda_parse_pin_defcfg()
323 for (i = 0; (hsmic || hpmic) && (i < cfg->num_inputs); i++) in snd_hda_parse_pin_defcfg()
324 if (hsmic && can_be_headset_mic(codec, &cfg->inputs[i], 0xc)) { in snd_hda_parse_pin_defcfg()
325 cfg->inputs[i].is_headset_mic = 1; in snd_hda_parse_pin_defcfg()
327 } else if (hpmic && can_be_headset_mic(codec, &cfg->inputs[i], 0xd)) { in snd_hda_parse_pin_defcfg()
328 cfg->inputs[i].is_headphone_mic = 1; in snd_hda_parse_pin_defcfg()
333 for (i = 0; (hsmic || hpmic) && (i < cfg->num_inputs); i++) { in snd_hda_parse_pin_defcfg()
334 if (!can_be_headset_mic(codec, &cfg->inputs[i], -1)) in snd_hda_parse_pin_defcfg()
337 cfg->inputs[i].is_headset_mic = 1; in snd_hda_parse_pin_defcfg()
340 cfg->inputs[i].is_headphone_mic = 1; in snd_hda_parse_pin_defcfg()
355 if (!cfg->line_outs && cfg->hp_outs > 1 && in snd_hda_parse_pin_defcfg()
358 while (i < cfg->hp_outs) { in snd_hda_parse_pin_defcfg()
365 line_out[cfg->line_outs++] = hp_out[i]; in snd_hda_parse_pin_defcfg()
366 cfg->hp_outs--; in snd_hda_parse_pin_defcfg()
368 sizeof(hp_out[0]) * (cfg->hp_outs - i)); in snd_hda_parse_pin_defcfg()
370 memset(hp_out + cfg->hp_outs, 0, in snd_hda_parse_pin_defcfg()
371 sizeof(hp_out[0]) * (AUTO_CFG_MAX_OUTS - cfg->hp_outs)); in snd_hda_parse_pin_defcfg()
372 if (!cfg->hp_outs) in snd_hda_parse_pin_defcfg()
373 cfg->line_out_type = AUTO_PIN_HP_OUT; in snd_hda_parse_pin_defcfg()
378 sort_pins_by_sequence(cfg->line_out_pins, line_out, cfg->line_outs); in snd_hda_parse_pin_defcfg()
379 sort_pins_by_sequence(cfg->speaker_pins, speaker_out, in snd_hda_parse_pin_defcfg()
380 cfg->speaker_outs); in snd_hda_parse_pin_defcfg()
381 sort_pins_by_sequence(cfg->hp_pins, hp_out, cfg->hp_outs); in snd_hda_parse_pin_defcfg()
387 if (!cfg->line_outs && in snd_hda_parse_pin_defcfg()
389 if (cfg->speaker_outs) { in snd_hda_parse_pin_defcfg()
390 cfg->line_outs = cfg->speaker_outs; in snd_hda_parse_pin_defcfg()
391 memcpy(cfg->line_out_pins, cfg->speaker_pins, in snd_hda_parse_pin_defcfg()
392 sizeof(cfg->speaker_pins)); in snd_hda_parse_pin_defcfg()
393 cfg->speaker_outs = 0; in snd_hda_parse_pin_defcfg()
394 memset(cfg->speaker_pins, 0, sizeof(cfg->speaker_pins)); in snd_hda_parse_pin_defcfg()
395 cfg->line_out_type = AUTO_PIN_SPEAKER_OUT; in snd_hda_parse_pin_defcfg()
396 } else if (cfg->hp_outs) { in snd_hda_parse_pin_defcfg()
397 cfg->line_outs = cfg->hp_outs; in snd_hda_parse_pin_defcfg()
398 memcpy(cfg->line_out_pins, cfg->hp_pins, in snd_hda_parse_pin_defcfg()
399 sizeof(cfg->hp_pins)); in snd_hda_parse_pin_defcfg()
400 cfg->hp_outs = 0; in snd_hda_parse_pin_defcfg()
401 memset(cfg->hp_pins, 0, sizeof(cfg->hp_pins)); in snd_hda_parse_pin_defcfg()
402 cfg->line_out_type = AUTO_PIN_HP_OUT; in snd_hda_parse_pin_defcfg()
406 reorder_outputs(cfg->line_outs, cfg->line_out_pins); in snd_hda_parse_pin_defcfg()
407 reorder_outputs(cfg->hp_outs, cfg->hp_pins); in snd_hda_parse_pin_defcfg()
408 reorder_outputs(cfg->speaker_outs, cfg->speaker_pins); in snd_hda_parse_pin_defcfg()
411 sort(cfg->inputs, cfg->num_inputs, sizeof(cfg->inputs[0]), in snd_hda_parse_pin_defcfg()
418 codec->core.chip_name, cfg->line_outs, cfg->line_out_pins[0], in snd_hda_parse_pin_defcfg()
419 cfg->line_out_pins[1], cfg->line_out_pins[2], in snd_hda_parse_pin_defcfg()
420 cfg->line_out_pins[3], cfg->line_out_pins[4], in snd_hda_parse_pin_defcfg()
421 cfg->line_out_type == AUTO_PIN_HP_OUT ? "hp" : in snd_hda_parse_pin_defcfg()
422 (cfg->line_out_type == AUTO_PIN_SPEAKER_OUT ? in snd_hda_parse_pin_defcfg()
425 cfg->speaker_outs, cfg->speaker_pins[0], in snd_hda_parse_pin_defcfg()
426 cfg->speaker_pins[1], cfg->speaker_pins[2], in snd_hda_parse_pin_defcfg()
427 cfg->speaker_pins[3], cfg->speaker_pins[4]); in snd_hda_parse_pin_defcfg()
429 cfg->hp_outs, cfg->hp_pins[0], in snd_hda_parse_pin_defcfg()
430 cfg->hp_pins[1], cfg->hp_pins[2], in snd_hda_parse_pin_defcfg()
431 cfg->hp_pins[3], cfg->hp_pins[4]); in snd_hda_parse_pin_defcfg()
432 codec_info(codec, " mono: mono_out=0x%x\n", cfg->mono_out_pin); in snd_hda_parse_pin_defcfg()
433 if (cfg->dig_outs) in snd_hda_parse_pin_defcfg()
435 cfg->dig_out_pins[0], cfg->dig_out_pins[1]); in snd_hda_parse_pin_defcfg()
437 for (i = 0; i < cfg->num_inputs; i++) { in snd_hda_parse_pin_defcfg()
439 hda_get_autocfg_input_label(codec, cfg, i), in snd_hda_parse_pin_defcfg()
440 cfg->inputs[i].pin); in snd_hda_parse_pin_defcfg()
442 if (cfg->dig_in_pin) in snd_hda_parse_pin_defcfg()
443 codec_info(codec, " dig-in=0x%x\n", cfg->dig_in_pin); in snd_hda_parse_pin_defcfg()
541 const struct auto_pin_cfg *cfg, in check_mic_location_need() argument
547 defc = snd_hda_codec_get_pincfg(codec, cfg->inputs[input].pin); in check_mic_location_need()
554 for (i = 0; i < cfg->num_inputs; i++) { in check_mic_location_need()
555 defc = snd_hda_codec_get_pincfg(codec, cfg->inputs[i].pin); in check_mic_location_need()
569 * @cfg: the parsed pin configuration
578 const struct auto_pin_cfg *cfg, in hda_get_autocfg_input_label() argument
581 int type = cfg->inputs[input].type; in hda_get_autocfg_input_label()
584 if ((input > 0 && cfg->inputs[input - 1].type == type) || in hda_get_autocfg_input_label()
585 (input < cfg->num_inputs - 1 && cfg->inputs[input + 1].type == type)) in hda_get_autocfg_input_label()
588 has_multiple_pins &= check_mic_location_need(codec, cfg, input); in hda_get_autocfg_input_label()
590 return hda_get_input_pin_label(codec, &cfg->inputs[input], in hda_get_autocfg_input_label()
591 cfg->inputs[input].pin, in hda_get_autocfg_input_label()
661 const struct auto_pin_cfg *cfg, in fill_audio_out_name() argument
674 if (cfg) { in fill_audio_out_name()
676 sfx = check_output_sfx(nid, cfg->line_out_pins, cfg->line_outs, in fill_audio_out_name()
679 sfx = check_output_sfx(nid, cfg->speaker_pins, cfg->speaker_outs, in fill_audio_out_name()
683 int idx = get_hp_label_index(codec, nid, cfg->hp_pins, in fill_audio_out_name()
684 cfg->hp_outs); in fill_audio_out_name()
701 * @cfg: the parsed pin configuration
707 * output pins. When @cfg is given as non-NULL, the function tries to get
712 * the channel suffix like "Front", "Surround", etc (only when @cfg is given).
717 const struct auto_pin_cfg *cfg, in snd_hda_get_pin_label() argument
732 return fill_audio_out_name(codec, nid, cfg, "Line Out", in snd_hda_get_pin_label()
735 return fill_audio_out_name(codec, nid, cfg, "Speaker", in snd_hda_get_pin_label()
738 return fill_audio_out_name(codec, nid, cfg, "Headphone", in snd_hda_get_pin_label()
744 if (cfg && indexp) in snd_hda_get_pin_label()
745 for (i = 0; i < cfg->dig_outs; i++) { in snd_hda_get_pin_label()
746 hda_nid_t pin = cfg->dig_out_pins[i]; in snd_hda_get_pin_label()
756 if (cfg) { in snd_hda_get_pin_label()
757 for (i = 0; i < cfg->num_inputs; i++) { in snd_hda_get_pin_label()
758 if (cfg->inputs[i].pin != nid) in snd_hda_get_pin_label()
760 name = hda_get_autocfg_input_label(codec, cfg, i); in snd_hda_get_pin_label()
813 * @cfg: NULL-terminated pin config table
816 const struct hda_pintbl *cfg) in snd_hda_apply_pincfgs() argument
818 for (; cfg->nid; cfg++) in snd_hda_apply_pincfgs()
819 snd_hda_codec_set_pincfg(codec, cfg->nid, cfg->val); in snd_hda_apply_pincfgs()
824 const struct hda_pintbl *cfg) in set_pin_targets() argument
826 for (; cfg->nid; cfg++) in set_pin_targets()
827 snd_hda_set_pin_ctl_cache(codec, cfg->nid, cfg->val); in set_pin_targets()
904 u32 cfg = pin->cfg; in pin_config_match() local
913 if ((t_pins->val & IGNORE_SEQ_ASSOC) == (cfg & IGNORE_SEQ_ASSOC)) in pin_config_match()
915 else if ((cfg & 0xf0000000) == 0x40000000 && (t_pins->val & 0xf0000000) == 0x40000000) in pin_config_match()
921 if (!found && (cfg & 0xf0000000) != 0x40000000) in pin_config_match()