Lines Matching refs:codec

114 static enum VIA_HDA_CODEC get_codec_type(struct hda_codec *codec);
116 struct hda_codec *codec,
122 static struct via_spec *via_new_spec(struct hda_codec *codec) in via_new_spec() argument
130 codec->spec = spec; in via_new_spec()
132 spec->codec_type = get_codec_type(codec); in via_new_spec()
140 codec->power_save_node = 1; in via_new_spec()
142 codec->patch_ops = via_patch_ops; in via_new_spec()
146 static enum VIA_HDA_CODEC get_codec_type(struct hda_codec *codec) in get_codec_type() argument
148 u32 vendor_id = codec->core.vendor_id; in get_codec_type()
164 if (snd_hda_param_read(codec, 0x16, AC_PAR_CONNLIST_LEN) == 0x7) in get_codec_type()
198 static void analog_low_current_mode(struct hda_codec *codec);
199 static bool is_aa_path_mute(struct hda_codec *codec);
201 #define hp_detect_with_aa(codec) \ argument
202 (snd_hda_get_bool_hint(codec, "analog_loopback_hp_detect") == 1 && \
203 !is_aa_path_mute(codec))
205 static void vt1708_stop_hp_work(struct hda_codec *codec) in vt1708_stop_hp_work() argument
207 struct via_spec *spec = codec->spec; in vt1708_stop_hp_work()
211 snd_hda_codec_write(codec, 0x1, 0, 0xf81, 1); in vt1708_stop_hp_work()
212 codec->jackpoll_interval = 0; in vt1708_stop_hp_work()
213 cancel_delayed_work_sync(&codec->jackpoll_work); in vt1708_stop_hp_work()
218 static void vt1708_update_hp_work(struct hda_codec *codec) in vt1708_update_hp_work() argument
220 struct via_spec *spec = codec->spec; in vt1708_update_hp_work()
225 codec->jackpoll_interval = msecs_to_jiffies(100); in vt1708_update_hp_work()
226 snd_hda_codec_write(codec, 0x1, 0, 0xf81, 0); in vt1708_update_hp_work()
227 schedule_delayed_work(&codec->jackpoll_work, 0); in vt1708_update_hp_work()
230 } else if (!hp_detect_with_aa(codec)) in vt1708_update_hp_work()
231 vt1708_stop_hp_work(codec); in vt1708_update_hp_work()
243 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in via_pin_power_ctl_get() local
244 struct via_spec *spec = codec->spec; in via_pin_power_ctl_get()
253 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in via_pin_power_ctl_put() local
254 struct via_spec *spec = codec->spec; in via_pin_power_ctl_put()
261 analog_low_current_mode(codec); in via_pin_power_ctl_put()
292 static int add_beep_ctls(struct hda_codec *codec) in add_beep_ctls() argument
294 struct via_spec *spec = codec->spec; in add_beep_ctls()
301 kctl = snd_ctl_new1(knew, codec); in add_beep_ctls()
305 err = snd_hda_ctl_add(codec, 0, kctl); in add_beep_ctls()
313 static void auto_parse_beep(struct hda_codec *codec) in auto_parse_beep() argument
315 struct via_spec *spec = codec->spec; in auto_parse_beep()
318 for_each_hda_codec_node(nid, codec) in auto_parse_beep()
319 if (get_wcaps_type(get_wcaps(codec, nid)) == AC_WID_BEEP) { in auto_parse_beep()
326 #define add_beep_ctls(codec) 0 argument
327 #define auto_parse_beep(codec) argument
331 static bool is_aa_path_mute(struct hda_codec *codec) in is_aa_path_mute() argument
333 struct via_spec *spec = codec->spec; in is_aa_path_mute()
342 v = snd_hda_codec_amp_read(codec, p->nid, ch, p->dir, in is_aa_path_mute()
352 static void __analog_low_current_mode(struct hda_codec *codec, bool force) in __analog_low_current_mode() argument
354 struct via_spec *spec = codec->spec; in __analog_low_current_mode()
358 if (!codec->power_save_node) in __analog_low_current_mode()
361 enable = is_aa_path_mute(codec) && !spec->gen.active_streams; in __analog_low_current_mode()
398 snd_hda_codec_write(codec, codec->core.afg, 0, verb, parm); in __analog_low_current_mode()
401 static void analog_low_current_mode(struct hda_codec *codec) in analog_low_current_mode() argument
403 return __analog_low_current_mode(codec, false); in analog_low_current_mode()
406 static int via_build_controls(struct hda_codec *codec) in via_build_controls() argument
408 struct via_spec *spec = codec->spec; in via_build_controls()
411 err = snd_hda_gen_build_controls(codec); in via_build_controls()
415 err = add_beep_ctls(codec); in via_build_controls()
422 err = snd_hda_add_new_ctls(codec, spec->mixers[i]); in via_build_controls()
431 struct hda_codec *codec, in via_playback_pcm_hook() argument
435 analog_low_current_mode(codec); in via_playback_pcm_hook()
436 vt1708_update_hp_work(codec); in via_playback_pcm_hook()
439 static void via_free(struct hda_codec *codec) in via_free() argument
441 vt1708_stop_hp_work(codec); in via_free()
442 snd_hda_gen_free(codec); in via_free()
446 static int via_suspend(struct hda_codec *codec) in via_suspend() argument
448 struct via_spec *spec = codec->spec; in via_suspend()
449 vt1708_stop_hp_work(codec); in via_suspend()
453 snd_hda_shutup_pins(codec); in via_suspend()
458 static int via_resume(struct hda_codec *codec) in via_resume() argument
462 codec->patch_ops.init(codec); in via_resume()
463 regcache_sync(codec->core.regmap); in via_resume()
469 static int via_check_power_status(struct hda_codec *codec, hda_nid_t nid) in via_check_power_status() argument
471 struct via_spec *spec = codec->spec; in via_check_power_status()
472 analog_low_current_mode(codec); in via_check_power_status()
473 vt1708_update_hp_work(codec); in via_check_power_status()
474 return snd_hda_check_amp_list_power(codec, &spec->gen.loopback, nid); in via_check_power_status()
481 static int via_init(struct hda_codec *codec);
502 static void vt1708_set_pinconfig_connect(struct hda_codec *codec, hda_nid_t nid) in vt1708_set_pinconfig_connect() argument
507 def_conf = snd_hda_codec_get_pincfg(codec, nid); in vt1708_set_pinconfig_connect()
513 snd_hda_codec_set_pincfg(codec, nid, def_conf); in vt1708_set_pinconfig_connect()
522 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in vt1708_jack_detect_get() local
523 struct via_spec *spec = codec->spec; in vt1708_jack_detect_get()
534 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in vt1708_jack_detect_put() local
535 struct via_spec *spec = codec->spec; in vt1708_jack_detect_put()
544 vt1708_update_hp_work(codec); in vt1708_jack_detect_put()
577 static int via_parse_auto_config(struct hda_codec *codec) in via_parse_auto_config() argument
579 struct via_spec *spec = codec->spec; in via_parse_auto_config()
585 err = snd_hda_parse_pin_defcfg(codec, &spec->gen.autocfg, NULL, 0); in via_parse_auto_config()
589 auto_parse_beep(codec); in via_parse_auto_config()
591 err = snd_hda_gen_parse_auto_config(codec, &spec->gen.autocfg); in via_parse_auto_config()
596 codec->power_save_node = 0; in via_parse_auto_config()
601 static int via_init(struct hda_codec *codec) in via_init() argument
603 struct via_spec *spec = codec->spec; in via_init()
607 snd_hda_sequence_write(codec, spec->init_verbs[i]); in via_init()
610 __analog_low_current_mode(codec, true); in via_init()
612 snd_hda_gen_init(codec); in via_init()
614 vt1708_update_hp_work(codec); in via_init()
619 static int vt1708_build_controls(struct hda_codec *codec) in vt1708_build_controls() argument
624 int old_interval = codec->jackpoll_interval; in vt1708_build_controls()
625 codec->jackpoll_interval = msecs_to_jiffies(100); in vt1708_build_controls()
626 err = via_build_controls(codec); in vt1708_build_controls()
627 codec->jackpoll_interval = old_interval; in vt1708_build_controls()
631 static int vt1708_build_pcms(struct hda_codec *codec) in vt1708_build_pcms() argument
633 struct via_spec *spec = codec->spec; in vt1708_build_pcms()
636 err = snd_hda_gen_build_pcms(codec); in vt1708_build_pcms()
637 if (err < 0 || codec->core.vendor_id != 0x11061708) in vt1708_build_pcms()
658 static int patch_vt1708(struct hda_codec *codec) in patch_vt1708() argument
664 spec = via_new_spec(codec); in patch_vt1708()
669 codec->patch_ops.build_controls = vt1708_build_controls; in patch_vt1708()
670 codec->patch_ops.build_pcms = vt1708_build_pcms; in patch_vt1708()
674 codec->jackpoll_interval = msecs_to_jiffies(100); in patch_vt1708()
684 vt1708_set_pinconfig_connect(codec, VT1708_HP_PIN_NID); in patch_vt1708()
685 vt1708_set_pinconfig_connect(codec, VT1708_CD_PIN_NID); in patch_vt1708()
688 err = via_parse_auto_config(codec); in patch_vt1708()
690 via_free(codec); in patch_vt1708()
700 codec->jackpoll_interval = 0; in patch_vt1708()
705 static int patch_vt1709(struct hda_codec *codec) in patch_vt1709() argument
711 spec = via_new_spec(codec); in patch_vt1709()
717 err = via_parse_auto_config(codec); in patch_vt1709()
719 via_free(codec); in patch_vt1709()
726 static int patch_vt1708S(struct hda_codec *codec);
727 static int patch_vt1708B(struct hda_codec *codec) in patch_vt1708B() argument
732 if (get_codec_type(codec) == VT1708BCE) in patch_vt1708B()
733 return patch_vt1708S(codec); in patch_vt1708B()
736 spec = via_new_spec(codec); in patch_vt1708B()
743 err = via_parse_auto_config(codec); in patch_vt1708B()
745 via_free(codec); in patch_vt1708B()
761 static void override_mic_boost(struct hda_codec *codec, hda_nid_t pin, in override_mic_boost() argument
764 snd_hda_override_wcaps(codec, pin, in override_mic_boost()
765 get_wcaps(codec, pin) | AC_WCAP_IN_AMP); in override_mic_boost()
766 snd_hda_override_amp_caps(codec, pin, HDA_INPUT, in override_mic_boost()
773 static int patch_vt1708S(struct hda_codec *codec) in patch_vt1708S() argument
779 spec = via_new_spec(codec); in patch_vt1708S()
784 override_mic_boost(codec, 0x1a, 0, 3, 40); in patch_vt1708S()
785 override_mic_boost(codec, 0x1e, 0, 3, 40); in patch_vt1708S()
788 if (get_codec_type(codec) == VT1708BCE) in patch_vt1708S()
789 snd_hda_codec_set_name(codec, "VT1708BCE"); in patch_vt1708S()
791 if (codec->core.vendor_id == 0x11064397) in patch_vt1708S()
792 snd_hda_codec_set_name(codec, "VT1705"); in patch_vt1708S()
795 err = via_parse_auto_config(codec); in patch_vt1708S()
797 via_free(codec); in patch_vt1708S()
816 static int patch_vt1702(struct hda_codec *codec) in patch_vt1702() argument
822 spec = via_new_spec(codec); in patch_vt1702()
829 snd_hda_override_amp_caps(codec, 0x1A, HDA_INPUT, in patch_vt1702()
836 err = via_parse_auto_config(codec); in patch_vt1702()
838 via_free(codec); in patch_vt1702()
861 static int add_secret_dac_path(struct hda_codec *codec) in add_secret_dac_path() argument
863 struct via_spec *spec = codec->spec; in add_secret_dac_path()
870 nums = snd_hda_get_connections(codec, spec->gen.mixer_nid, conn, in add_secret_dac_path()
873 if (get_wcaps_type(get_wcaps(codec, conn[i])) == AC_WID_AUD_OUT) in add_secret_dac_path()
878 for_each_hda_codec_node(nid, codec) { in add_secret_dac_path()
879 unsigned int caps = get_wcaps(codec, nid); in add_secret_dac_path()
883 return snd_hda_override_conn_list(codec, in add_secret_dac_path()
892 static int patch_vt1718S(struct hda_codec *codec) in patch_vt1718S() argument
898 spec = via_new_spec(codec); in patch_vt1718S()
903 override_mic_boost(codec, 0x2b, 0, 3, 40); in patch_vt1718S()
904 override_mic_boost(codec, 0x29, 0, 3, 40); in patch_vt1718S()
905 add_secret_dac_path(codec); in patch_vt1718S()
908 err = via_parse_auto_config(codec); in patch_vt1718S()
910 via_free(codec); in patch_vt1718S()
934 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in vt1716s_dmic_get() local
937 index = snd_hda_codec_read(codec, 0x26, 0, in vt1716s_dmic_get()
948 struct hda_codec *codec = snd_kcontrol_chip(kcontrol); in vt1716s_dmic_put() local
949 struct via_spec *spec = codec->spec; in vt1716s_dmic_put()
952 snd_hda_codec_write(codec, 0x26, 0, in vt1716s_dmic_put()
989 static int patch_vt1716S(struct hda_codec *codec) in patch_vt1716S() argument
995 spec = via_new_spec(codec); in patch_vt1716S()
1000 override_mic_boost(codec, 0x1a, 0, 3, 40); in patch_vt1716S()
1001 override_mic_boost(codec, 0x1e, 0, 3, 40); in patch_vt1716S()
1004 err = via_parse_auto_config(codec); in patch_vt1716S()
1006 via_free(codec); in patch_vt1716S()
1048 static void via_fixup_intmic_boost(struct hda_codec *codec, in via_fixup_intmic_boost() argument
1052 override_mic_boost(codec, 0x30, 0, 2, 40); in via_fixup_intmic_boost()
1080 static void fix_vt1802_connections(struct hda_codec *codec) in fix_vt1802_connections() argument
1085 snd_hda_override_conn_list(codec, 0x24, ARRAY_SIZE(conn_24), conn_24); in fix_vt1802_connections()
1086 snd_hda_override_conn_list(codec, 0x33, ARRAY_SIZE(conn_33), conn_33); in fix_vt1802_connections()
1090 static int patch_vt2002P(struct hda_codec *codec) in patch_vt2002P() argument
1096 spec = via_new_spec(codec); in patch_vt2002P()
1101 override_mic_boost(codec, 0x2b, 0, 3, 40); in patch_vt2002P()
1102 override_mic_boost(codec, 0x29, 0, 3, 40); in patch_vt2002P()
1104 fix_vt1802_connections(codec); in patch_vt2002P()
1105 add_secret_dac_path(codec); in patch_vt2002P()
1107 snd_hda_pick_fixup(codec, NULL, vt2002p_fixups, via_fixups); in patch_vt2002P()
1108 snd_hda_apply_fixup(codec, HDA_FIXUP_ACT_PRE_PROBE); in patch_vt2002P()
1111 err = via_parse_auto_config(codec); in patch_vt2002P()
1113 via_free(codec); in patch_vt2002P()
1136 static int patch_vt1812(struct hda_codec *codec) in patch_vt1812() argument
1142 spec = via_new_spec(codec); in patch_vt1812()
1147 override_mic_boost(codec, 0x2b, 0, 3, 40); in patch_vt1812()
1148 override_mic_boost(codec, 0x29, 0, 3, 40); in patch_vt1812()
1149 add_secret_dac_path(codec); in patch_vt1812()
1152 err = via_parse_auto_config(codec); in patch_vt1812()
1154 via_free(codec); in patch_vt1812()
1175 static int patch_vt3476(struct hda_codec *codec) in patch_vt3476() argument
1181 spec = via_new_spec(codec); in patch_vt3476()
1186 add_secret_dac_path(codec); in patch_vt3476()
1189 err = via_parse_auto_config(codec); in patch_vt3476()
1191 via_free(codec); in patch_vt3476()