Lines Matching refs:codec

33 bool is_jack_detectable(struct hda_codec *codec, hda_nid_t nid)  in is_jack_detectable()  argument
35 if (codec->no_jack_detect) in is_jack_detectable()
37 if (!(snd_hda_query_pin_caps(codec, nid) & AC_PINCAP_PRES_DETECT)) in is_jack_detectable()
39 if (get_defcfg_misc(snd_hda_codec_get_pincfg(codec, nid)) & in is_jack_detectable()
42 if (!(get_wcaps(codec, nid) & AC_WCAP_UNSOL_CAP) && in is_jack_detectable()
43 !codec->jackpoll_interval) in is_jack_detectable()
50 static u32 read_pin_sense(struct hda_codec *codec, hda_nid_t nid) in read_pin_sense() argument
55 if (!codec->no_trigger_sense) { in read_pin_sense()
56 pincap = snd_hda_query_pin_caps(codec, nid); in read_pin_sense()
58 snd_hda_codec_read(codec, nid, 0, in read_pin_sense()
61 val = snd_hda_codec_read(codec, nid, 0, in read_pin_sense()
63 if (codec->inv_jack_detect) in read_pin_sense()
74 snd_hda_jack_tbl_get(struct hda_codec *codec, hda_nid_t nid) in snd_hda_jack_tbl_get() argument
76 struct hda_jack_tbl *jack = codec->jacktbl.list; in snd_hda_jack_tbl_get()
81 for (i = 0; i < codec->jacktbl.used; i++, jack++) in snd_hda_jack_tbl_get()
94 snd_hda_jack_tbl_get_from_tag(struct hda_codec *codec, unsigned char tag) in snd_hda_jack_tbl_get_from_tag() argument
96 struct hda_jack_tbl *jack = codec->jacktbl.list; in snd_hda_jack_tbl_get_from_tag()
101 for (i = 0; i < codec->jacktbl.used; i++, jack++) in snd_hda_jack_tbl_get_from_tag()
114 snd_hda_jack_tbl_new(struct hda_codec *codec, hda_nid_t nid) in snd_hda_jack_tbl_new() argument
116 struct hda_jack_tbl *jack = snd_hda_jack_tbl_get(codec, nid); in snd_hda_jack_tbl_new()
119 jack = snd_array_new(&codec->jacktbl); in snd_hda_jack_tbl_new()
124 jack->tag = codec->jacktbl.used; in snd_hda_jack_tbl_new()
128 void snd_hda_jack_tbl_clear(struct hda_codec *codec) in snd_hda_jack_tbl_clear() argument
130 struct hda_jack_tbl *jack = codec->jacktbl.list; in snd_hda_jack_tbl_clear()
133 for (i = 0; i < codec->jacktbl.used; i++, jack++) { in snd_hda_jack_tbl_clear()
137 if (!codec->bus->shutdown && jack->jack) in snd_hda_jack_tbl_clear()
138 snd_device_free(codec->card, jack->jack); in snd_hda_jack_tbl_clear()
145 snd_array_free(&codec->jacktbl); in snd_hda_jack_tbl_clear()
151 static void jack_detect_update(struct hda_codec *codec, in jack_detect_update() argument
160 jack->pin_sense = read_pin_sense(codec, jack->nid); in jack_detect_update()
163 if (jack->gating_jack && !snd_hda_jack_detect(codec, jack->gating_jack)) in jack_detect_update()
171 snd_hda_jack_tbl_get(codec, jack->gated_jack); in jack_detect_update()
174 jack_detect_update(codec, gated); in jack_detect_update()
186 void snd_hda_jack_set_dirty_all(struct hda_codec *codec) in snd_hda_jack_set_dirty_all() argument
188 struct hda_jack_tbl *jack = codec->jacktbl.list; in snd_hda_jack_set_dirty_all()
191 for (i = 0; i < codec->jacktbl.used; i++, jack++) in snd_hda_jack_set_dirty_all()
205 u32 snd_hda_pin_sense(struct hda_codec *codec, hda_nid_t nid) in snd_hda_pin_sense() argument
207 struct hda_jack_tbl *jack = snd_hda_jack_tbl_get(codec, nid); in snd_hda_pin_sense()
209 jack_detect_update(codec, jack); in snd_hda_pin_sense()
212 return read_pin_sense(codec, nid); in snd_hda_pin_sense()
224 int snd_hda_jack_detect_state(struct hda_codec *codec, hda_nid_t nid) in snd_hda_jack_detect_state() argument
226 struct hda_jack_tbl *jack = snd_hda_jack_tbl_get(codec, nid); in snd_hda_jack_detect_state()
229 else if (snd_hda_pin_sense(codec, nid) & AC_PINSENSE_PRESENCE) in snd_hda_jack_detect_state()
247 snd_hda_jack_detect_enable_callback(struct hda_codec *codec, hda_nid_t nid, in snd_hda_jack_detect_enable_callback() argument
254 jack = snd_hda_jack_tbl_new(codec, nid); in snd_hda_jack_detect_enable_callback()
270 if (codec->jackpoll_interval > 0) in snd_hda_jack_detect_enable_callback()
272 err = snd_hda_codec_write_cache(codec, nid, 0, in snd_hda_jack_detect_enable_callback()
289 int snd_hda_jack_detect_enable(struct hda_codec *codec, hda_nid_t nid) in snd_hda_jack_detect_enable() argument
291 return PTR_ERR_OR_ZERO(snd_hda_jack_detect_enable_callback(codec, nid, NULL)); in snd_hda_jack_detect_enable()
303 int snd_hda_jack_set_gating_jack(struct hda_codec *codec, hda_nid_t gated_nid, in snd_hda_jack_set_gating_jack() argument
306 struct hda_jack_tbl *gated = snd_hda_jack_tbl_new(codec, gated_nid); in snd_hda_jack_set_gating_jack()
307 struct hda_jack_tbl *gating = snd_hda_jack_tbl_new(codec, gating_nid); in snd_hda_jack_set_gating_jack()
323 void snd_hda_jack_report_sync(struct hda_codec *codec) in snd_hda_jack_report_sync() argument
329 jack = codec->jacktbl.list; in snd_hda_jack_report_sync()
330 for (i = 0; i < codec->jacktbl.used; i++, jack++) in snd_hda_jack_report_sync()
332 jack_detect_update(codec, jack); in snd_hda_jack_report_sync()
337 jack = codec->jacktbl.list; in snd_hda_jack_report_sync()
338 for (i = 0; i < codec->jacktbl.used; i++, jack++) in snd_hda_jack_report_sync()
350 static int get_input_jack_type(struct hda_codec *codec, hda_nid_t nid) in get_input_jack_type() argument
352 unsigned int def_conf = snd_hda_codec_get_pincfg(codec, nid); in get_input_jack_type()
386 int snd_hda_jack_add_kctl(struct hda_codec *codec, hda_nid_t nid, in snd_hda_jack_add_kctl() argument
392 jack = snd_hda_jack_tbl_new(codec, nid); in snd_hda_jack_add_kctl()
398 type = get_input_jack_type(codec, nid); in snd_hda_jack_add_kctl()
399 err = snd_jack_new(codec->card, name, type, in snd_hda_jack_add_kctl()
408 state = snd_hda_jack_detect(codec, nid); in snd_hda_jack_add_kctl()
415 static int add_jack_kctl(struct hda_codec *codec, hda_nid_t nid, in add_jack_kctl() argument
426 def_conf = snd_hda_codec_get_pincfg(codec, nid); in add_jack_kctl()
431 !is_jack_detectable(codec, nid); in add_jack_kctl()
436 snd_hda_get_pin_label(codec, nid, cfg, name, sizeof(name), NULL); in add_jack_kctl()
440 err = snd_hda_jack_add_kctl(codec, nid, name, phantom_jack); in add_jack_kctl()
445 return snd_hda_jack_detect_enable(codec, nid); in add_jack_kctl()
454 int snd_hda_jack_add_kctls(struct hda_codec *codec, in snd_hda_jack_add_kctls() argument
465 err = add_jack_kctl(codec, auto_cfg_hp_pins(cfg)[0], in snd_hda_jack_add_kctls()
468 err = add_jack_kctl(codec, cfg->inputs[i].pin, in snd_hda_jack_add_kctls()
471 err = add_jack_kctl(codec, cfg->inputs[i].pin, cfg, in snd_hda_jack_add_kctls()
478 err = add_jack_kctl(codec, *p, cfg, NULL); in snd_hda_jack_add_kctls()
485 err = add_jack_kctl(codec, *p, cfg, NULL); in snd_hda_jack_add_kctls()
492 err = add_jack_kctl(codec, *p, cfg, NULL); in snd_hda_jack_add_kctls()
497 err = add_jack_kctl(codec, *p, cfg, NULL); in snd_hda_jack_add_kctls()
501 err = add_jack_kctl(codec, cfg->dig_in_pin, cfg, NULL); in snd_hda_jack_add_kctls()
504 err = add_jack_kctl(codec, cfg->mono_out_pin, cfg, NULL); in snd_hda_jack_add_kctls()
511 static void call_jack_callback(struct hda_codec *codec, in call_jack_callback() argument
517 cb->func(codec, cb); in call_jack_callback()
520 snd_hda_jack_tbl_get(codec, jack->gated_jack); in call_jack_callback()
523 cb->func(codec, cb); in call_jack_callback()
533 void snd_hda_jack_unsol_event(struct hda_codec *codec, unsigned int res) in snd_hda_jack_unsol_event() argument
538 event = snd_hda_jack_tbl_get_from_tag(codec, tag); in snd_hda_jack_unsol_event()
543 call_jack_callback(codec, event); in snd_hda_jack_unsol_event()
544 snd_hda_jack_report_sync(codec); in snd_hda_jack_unsol_event()
555 void snd_hda_jack_poll_all(struct hda_codec *codec) in snd_hda_jack_poll_all() argument
557 struct hda_jack_tbl *jack = codec->jacktbl.list; in snd_hda_jack_poll_all()
560 for (i = 0; i < codec->jacktbl.used; i++, jack++) { in snd_hda_jack_poll_all()
565 jack_detect_update(codec, jack); in snd_hda_jack_poll_all()
569 call_jack_callback(codec, jack); in snd_hda_jack_poll_all()
572 snd_hda_jack_report_sync(codec); in snd_hda_jack_poll_all()