Lines Matching full:spec
53 struct hdmi_spec *spec = codec->spec; in snd_hda_hdmi_pin_id_to_pin_index() local
64 for (pin_idx = 0; pin_idx < spec->num_pins; pin_idx++) { in snd_hda_hdmi_pin_id_to_pin_index()
65 per_pin = get_pin(spec, pin_idx); in snd_hda_hdmi_pin_id_to_pin_index()
79 struct hdmi_spec *spec = codec->spec; in hinfo_to_pcm_index() local
82 for (pcm_idx = 0; pcm_idx < spec->pcm_used; pcm_idx++) in hinfo_to_pcm_index()
83 if (get_pcm_rec(spec, pcm_idx)->stream == hinfo) in hinfo_to_pcm_index()
93 struct hdmi_spec *spec = codec->spec; in hinfo_to_pin_index() local
97 for (pin_idx = 0; pin_idx < spec->num_pins; pin_idx++) { in hinfo_to_pin_index()
98 per_pin = get_pin(spec, pin_idx); in hinfo_to_pin_index()
109 static struct hdmi_spec_per_pin *pcm_idx_to_pin(struct hdmi_spec *spec, in pcm_idx_to_pin() argument
115 for (i = 0; i < spec->num_pins; i++) { in pcm_idx_to_pin()
116 per_pin = get_pin(spec, i); in pcm_idx_to_pin()
125 struct hdmi_spec *spec = codec->spec; in cvt_nid_to_cvt_index() local
128 for (cvt_idx = 0; cvt_idx < spec->num_cvts; cvt_idx++) in cvt_nid_to_cvt_index()
129 if (get_cvt(spec, cvt_idx)->cvt_nid == cvt_nid) in cvt_nid_to_cvt_index()
140 struct hdmi_spec *spec = codec->spec; in hdmi_eld_ctl_info() local
148 guard(mutex)(&spec->pcm_lock); in hdmi_eld_ctl_info()
149 per_pin = pcm_idx_to_pin(spec, pcm_idx); in hdmi_eld_ctl_info()
164 struct hdmi_spec *spec = codec->spec; in hdmi_eld_ctl_get() local
170 guard(mutex)(&spec->pcm_lock); in hdmi_eld_ctl_get()
171 per_pin = pcm_idx_to_pin(spec, pcm_idx); in hdmi_eld_ctl_get()
207 struct hdmi_spec *spec = codec->spec; in hdmi_create_eld_ctl() local
223 get_hdmi_pcm(spec, pcm_idx)->eld_ctl = kctl; in hdmi_create_eld_ctl()
259 struct hdmi_spec *spec = codec->spec; in hdmi_init_pin() local
267 if (spec->dyn_pin_out) in hdmi_init_pin()
476 struct hdmi_spec *spec = codec->spec; in hdmi_pin_setup_infoframe() local
482 (conn_type == 1 && spec->nv_dp_workaround)) { in hdmi_pin_setup_infoframe()
532 struct hdmi_spec *spec = codec->spec; in snd_hda_hdmi_setup_audio_infoframe() local
533 struct hdac_chmap *chmap = &spec->chmap; in snd_hda_hdmi_setup_audio_infoframe()
567 snd_hdac_setup_channel_mapping(&spec->chmap, in snd_hda_hdmi_setup_audio_infoframe()
571 spec->ops.pin_setup_infoframe(codec, pin_nid, dev_id, in snd_hda_hdmi_setup_audio_infoframe()
587 struct hdmi_spec *spec = codec->spec; in snd_hda_hdmi_check_presence_and_report() local
592 guard(mutex)(&spec->pcm_lock); in snd_hda_hdmi_check_presence_and_report()
593 hdmi_present_sense(get_pin(spec, pin_idx), 1); in snd_hda_hdmi_check_presence_and_report()
723 struct hdmi_spec *spec = codec->spec; in snd_hda_hdmi_setup_stream() local
727 err = spec->ops.pin_hbr_setup(codec, pin_nid, dev_id, in snd_hda_hdmi_setup_stream()
735 if (spec->intel_hsw_fixup) { in snd_hda_hdmi_setup_stream()
769 struct hdmi_spec *spec = codec->spec; in hdmi_choose_cvt() local
778 per_pin = get_pin(spec, pin_idx); in hdmi_choose_cvt()
782 per_cvt = get_cvt(spec, cvt_idx); in hdmi_choose_cvt()
791 for (cvt_idx = 0; cvt_idx < spec->num_cvts; cvt_idx++) { in hdmi_choose_cvt()
792 per_cvt = get_cvt(spec, cvt_idx); in hdmi_choose_cvt()
810 if (cvt_idx == spec->num_cvts) in hdmi_choose_cvt()
827 struct hdmi_spec *spec = codec->spec; in pin_cvt_fixup() local
829 if (spec->ops.pin_cvt_fixup) in pin_cvt_fixup()
830 spec->ops.pin_cvt_fixup(codec, per_pin, cvt_nid); in pin_cvt_fixup()
838 struct hdmi_spec *spec = codec->spec; in hdmi_pcm_open_no_pin() local
852 per_cvt = get_cvt(spec, cvt_idx); in hdmi_pcm_open_no_pin()
858 set_bit(pcm_idx, &spec->pcm_in_use); in hdmi_pcm_open_no_pin()
886 struct hdmi_spec *spec = codec->spec; in hdmi_pcm_open() local
899 guard(mutex)(&spec->pcm_lock); in hdmi_pcm_open()
911 per_cvt = get_cvt(spec, cvt_idx); in hdmi_pcm_open()
915 set_bit(pcm_idx, &spec->pcm_in_use); in hdmi_pcm_open()
916 per_pin = get_pin(spec, pin_idx); in hdmi_pcm_open()
970 struct hdmi_spec *spec = codec->spec; in hdmi_read_pin_conn() local
971 struct hdmi_spec_per_pin *per_pin = get_pin(spec, pin_idx); in hdmi_read_pin_conn()
985 if (spec->intel_hsw_fixup) { in hdmi_read_pin_conn()
986 conns = spec->num_cvts; in hdmi_read_pin_conn()
987 memcpy(per_pin->mux_nids, spec->cvt_nids, in hdmi_read_pin_conn()
1001 static int hdmi_find_pcm_slot(struct hdmi_spec *spec, in hdmi_find_pcm_slot() argument
1006 for (i = 0; i < spec->pcm_used; i++) { in hdmi_find_pcm_slot()
1007 if (!test_bit(i, &spec->pcm_bitmap)) in hdmi_find_pcm_slot()
1013 static void hdmi_attach_hda_pcm(struct hdmi_spec *spec, in hdmi_attach_hda_pcm() argument
1024 if (!test_bit(idx, &spec->pcm_bitmap)) in hdmi_attach_hda_pcm()
1028 idx = hdmi_find_pcm_slot(spec, per_pin); in hdmi_attach_hda_pcm()
1033 per_pin->pcm = get_hdmi_pcm(spec, idx); in hdmi_attach_hda_pcm()
1034 set_bit(idx, &spec->pcm_bitmap); in hdmi_attach_hda_pcm()
1037 static void hdmi_detach_hda_pcm(struct hdmi_spec *spec, in hdmi_detach_hda_pcm() argument
1049 if (idx >= 0 && idx < spec->pcm_used) in hdmi_detach_hda_pcm()
1050 clear_bit(idx, &spec->pcm_bitmap); in hdmi_detach_hda_pcm()
1053 static int hdmi_get_pin_cvt_mux(struct hdmi_spec *spec, in hdmi_get_pin_cvt_mux() argument
1066 static void hdmi_pcm_setup_pin(struct hdmi_spec *spec, in hdmi_pcm_setup_pin() argument
1076 if (per_pin->pcm_idx < 0 || per_pin->pcm_idx >= spec->pcm_used) in hdmi_pcm_setup_pin()
1078 pcm = get_pcm_rec(spec, per_pin->pcm_idx); in hdmi_pcm_setup_pin()
1081 if (!test_bit(per_pin->pcm_idx, &spec->pcm_in_use)) in hdmi_pcm_setup_pin()
1090 mux_idx = hdmi_get_pin_cvt_mux(spec, per_pin, hinfo->nid); in hdmi_pcm_setup_pin()
1109 static void hdmi_pcm_reset_pin(struct hdmi_spec *spec, in hdmi_pcm_reset_pin() argument
1112 if (per_pin->pcm_idx >= 0 && per_pin->pcm_idx < spec->pcm_used) in hdmi_pcm_reset_pin()
1125 struct hdmi_spec *spec = codec->spec; in pin_idx_to_pcm_jack() local
1128 return spec->pcm_rec[per_pin->pcm_idx].jack; in pin_idx_to_pcm_jack()
1143 struct hdmi_spec *spec = codec->spec; in update_eld() local
1176 if (!spec->static_pcm_mapping) { in update_eld()
1178 hdmi_attach_hda_pcm(spec, per_pin); in update_eld()
1179 hdmi_pcm_setup_pin(spec, per_pin); in update_eld()
1181 hdmi_pcm_reset_pin(spec, per_pin); in update_eld()
1182 hdmi_detach_hda_pcm(spec, per_pin); in update_eld()
1230 &get_hdmi_pcm(spec, pcm_idx)->eld_ctl->id); in update_eld()
1243 struct hdmi_spec *spec = codec->spec; in hdmi_present_sense_via_verbs() local
1244 struct hdmi_eld *eld = &spec->temp_eld; in hdmi_present_sense_via_verbs()
1281 if (spec->ops.pin_get_eld(codec, pin_nid, dev_id, in hdmi_present_sense_via_verbs()
1292 struct hdmi_spec *spec = codec->spec; in silent_stream_enable() local
1322 per_cvt = get_cvt(spec, cvt_idx); in silent_stream_enable()
1338 spec->ops.silent_stream(codec, per_pin, true); in silent_stream_enable()
1344 struct hdmi_spec *spec = codec->spec; in silent_stream_disable() local
1364 if (cvt_idx >= 0 && cvt_idx < spec->num_cvts) { in silent_stream_disable()
1365 per_cvt = get_cvt(spec, cvt_idx); in silent_stream_disable()
1369 spec->ops.silent_stream(codec, per_pin, false); in silent_stream_disable()
1379 struct hdmi_spec *spec = codec->spec; in sync_eld_via_acomp() local
1380 struct hdmi_eld *eld = &spec->temp_eld; in sync_eld_via_acomp()
1394 if (spec->silent_stream_type) { in sync_eld_via_acomp()
1417 struct hdmi_spec *spec = codec->spec; in hdmi_repoll_eld() local
1428 guard(mutex)(&spec->pcm_lock); in hdmi_repoll_eld()
1434 struct hdmi_spec *spec = codec->spec; in hdmi_add_pin() local
1451 !spec->force_connect) in hdmi_add_pin()
1458 if (spec->intel_hsw_fixup) { in hdmi_add_pin()
1465 dev_num = spec->dev_num; in hdmi_add_pin()
1469 * spec->dev_num is the maxinum number of device entries in hdmi_add_pin()
1472 spec->dev_num = (spec->dev_num > dev_num) ? in hdmi_add_pin()
1473 spec->dev_num : dev_num; in hdmi_add_pin()
1481 spec->dev_num = 1; in hdmi_add_pin()
1485 pin_idx = spec->num_pins; in hdmi_add_pin()
1486 per_pin = snd_array_new(&spec->pins); in hdmi_add_pin()
1495 per_pin->pin_nid_idx = spec->num_nids; in hdmi_add_pin()
1504 spec->num_pins++; in hdmi_add_pin()
1506 spec->num_nids++; in hdmi_add_pin()
1513 struct hdmi_spec *spec = codec->spec; in hdmi_add_cvt() local
1521 per_cvt = snd_array_new(&spec->cvts); in hdmi_add_cvt()
1529 if (chans > spec->chmap.channels_max) in hdmi_add_cvt()
1530 spec->chmap.channels_max = chans; in hdmi_add_cvt()
1541 if (spec->num_cvts < ARRAY_SIZE(spec->cvt_nids)) in hdmi_add_cvt()
1542 spec->cvt_nids[spec->num_cvts] = cvt_nid; in hdmi_add_cvt()
1543 spec->num_cvts++; in hdmi_add_cvt()
1567 struct hdmi_spec *spec = codec->spec; in snd_hda_hdmi_parse_codec() local
1580 spec->force_connect = true; in snd_hda_hdmi_parse_codec()
1585 spec->force_connect = true; in snd_hda_hdmi_parse_codec()
1647 struct hdmi_spec *spec = codec->spec; in snd_hda_hdmi_generic_pcm_prepare() local
1654 guard(mutex)(&spec->pcm_lock); in snd_hda_hdmi_generic_pcm_prepare()
1666 per_pin = get_pin(spec, pin_idx); in snd_hda_hdmi_generic_pcm_prepare()
1699 if (spec->dyn_pin_out) { in snd_hda_hdmi_generic_pcm_prepare()
1710 return spec->ops.setup_stream(codec, cvt_nid, per_pin->pin_nid, in snd_hda_hdmi_generic_pcm_prepare()
1728 struct hdmi_spec *spec = codec->spec; in hdmi_pcm_close() local
1734 guard(mutex)(&spec->pcm_lock); in hdmi_pcm_close()
1742 per_cvt = get_cvt(spec, cvt_idx); in hdmi_pcm_close()
1749 clear_bit(pcm_idx, &spec->pcm_in_use); in hdmi_pcm_close()
1758 per_pin = get_pin(spec, pin_idx); in hdmi_pcm_close()
1760 if (spec->dyn_pin_out) { in hdmi_pcm_close()
1791 struct hdmi_spec *spec = codec->spec; in hdmi_get_spk_alloc() local
1792 struct hdmi_spec_per_pin *per_pin = pcm_idx_to_pin(spec, pcm_idx); in hdmi_get_spk_alloc()
1804 struct hdmi_spec *spec = codec->spec; in hdmi_get_chmap() local
1805 struct hdmi_spec_per_pin *per_pin = pcm_idx_to_pin(spec, pcm_idx); in hdmi_get_chmap()
1818 struct hdmi_spec *spec = codec->spec; in hdmi_set_chmap() local
1819 struct hdmi_spec_per_pin *per_pin = pcm_idx_to_pin(spec, pcm_idx); in hdmi_set_chmap()
1833 struct hdmi_spec *spec = codec->spec; in is_hdmi_pcm_attached() local
1834 struct hdmi_spec_per_pin *per_pin = pcm_idx_to_pin(spec, pcm_idx); in is_hdmi_pcm_attached()
1841 struct hdmi_spec *spec = codec->spec; in snd_hda_hdmi_generic_build_pcms() local
1845 pcm_num = min(spec->num_cvts, spec->num_pins); in snd_hda_hdmi_generic_build_pcms()
1857 spec->pcm_rec[idx].pcm = info; in snd_hda_hdmi_generic_build_pcms()
1858 spec->pcm_used++; in snd_hda_hdmi_generic_build_pcms()
1866 per_cvt = get_cvt(spec, 0); in snd_hda_hdmi_generic_build_pcms()
1871 if (spec->pcm_used >= ARRAY_SIZE(spec->pcm_rec)) in snd_hda_hdmi_generic_build_pcms()
1890 struct hdmi_spec *spec = codec->spec; in generic_hdmi_build_jack() local
1892 int pcmdev = get_pcm_rec(spec, pcm_idx)->device; in generic_hdmi_build_jack()
1903 spec->pcm_rec[pcm_idx].jack = jack; in generic_hdmi_build_jack()
1904 jack->private_data = &spec->pcm_rec[pcm_idx]; in generic_hdmi_build_jack()
1911 struct hdmi_spec *spec = codec->spec; in snd_hda_hdmi_generic_build_controls() local
1915 for (pcm_idx = 0; pcm_idx < spec->pcm_used; pcm_idx++) { in snd_hda_hdmi_generic_build_controls()
1916 if (!get_pcm_rec(spec, pcm_idx)->pcm) { in snd_hda_hdmi_generic_build_controls()
1918 set_bit(pcm_idx, &spec->pcm_bitmap); in snd_hda_hdmi_generic_build_controls()
1930 0, spec->cvt_nids[0], in snd_hda_hdmi_generic_build_controls()
1936 dev = get_pcm_rec(spec, pcm_idx)->device; in snd_hda_hdmi_generic_build_controls()
1945 for (pin_idx = 0; pin_idx < spec->num_pins; pin_idx++) { in snd_hda_hdmi_generic_build_controls()
1946 struct hdmi_spec_per_pin *per_pin = get_pin(spec, pin_idx); in snd_hda_hdmi_generic_build_controls()
1949 if (spec->static_pcm_mapping) { in snd_hda_hdmi_generic_build_controls()
1950 hdmi_attach_hda_pcm(spec, per_pin); in snd_hda_hdmi_generic_build_controls()
1951 hdmi_pcm_setup_pin(spec, per_pin); in snd_hda_hdmi_generic_build_controls()
1959 for (pcm_idx = 0; pcm_idx < spec->pcm_used; pcm_idx++) { in snd_hda_hdmi_generic_build_controls()
1962 pcm = get_pcm_rec(spec, pcm_idx); in snd_hda_hdmi_generic_build_controls()
1965 err = snd_hdac_add_chmap_ctls(pcm->pcm, pcm_idx, &spec->chmap); in snd_hda_hdmi_generic_build_controls()
1976 struct hdmi_spec *spec = codec->spec; in snd_hda_hdmi_generic_init_per_pins() local
1979 for (pin_idx = 0; pin_idx < spec->num_pins; pin_idx++) { in snd_hda_hdmi_generic_init_per_pins()
1980 struct hdmi_spec_per_pin *per_pin = get_pin(spec, pin_idx); in snd_hda_hdmi_generic_init_per_pins()
1993 struct hdmi_spec *spec = codec->spec; in snd_hda_hdmi_generic_init() local
1996 guard(mutex)(&spec->bind_lock); in snd_hda_hdmi_generic_init()
1997 for (pin_idx = 0; pin_idx < spec->num_pins; pin_idx++) { in snd_hda_hdmi_generic_init()
1998 struct hdmi_spec_per_pin *per_pin = get_pin(spec, pin_idx); in snd_hda_hdmi_generic_init()
2013 static void hdmi_array_init(struct hdmi_spec *spec, int nums) in hdmi_array_init() argument
2015 snd_array_init(&spec->pins, sizeof(struct hdmi_spec_per_pin), nums); in hdmi_array_init()
2016 snd_array_init(&spec->cvts, sizeof(struct hdmi_spec_per_cvt), nums); in hdmi_array_init()
2019 static void hdmi_array_free(struct hdmi_spec *spec) in hdmi_array_free() argument
2021 snd_array_free(&spec->pins); in hdmi_array_free()
2022 snd_array_free(&spec->cvts); in hdmi_array_free()
2027 struct hdmi_spec *spec = codec->spec; in snd_hda_hdmi_generic_spec_free() local
2029 if (spec) { in snd_hda_hdmi_generic_spec_free()
2030 hdmi_array_free(spec); in snd_hda_hdmi_generic_spec_free()
2031 kfree(spec); in snd_hda_hdmi_generic_spec_free()
2032 codec->spec = NULL; in snd_hda_hdmi_generic_spec_free()
2040 struct hdmi_spec *spec = codec->spec; in snd_hda_hdmi_generic_remove() local
2043 if (spec->acomp_registered) { in snd_hda_hdmi_generic_remove()
2050 for (pin_idx = 0; pin_idx < spec->num_pins; pin_idx++) { in snd_hda_hdmi_generic_remove()
2051 struct hdmi_spec_per_pin *per_pin = get_pin(spec, pin_idx); in snd_hda_hdmi_generic_remove()
2056 for (pcm_idx = 0; pcm_idx < spec->pcm_used; pcm_idx++) { in snd_hda_hdmi_generic_remove()
2057 if (spec->pcm_rec[pcm_idx].jack == NULL) in snd_hda_hdmi_generic_remove()
2059 snd_device_free(codec->card, spec->pcm_rec[pcm_idx].jack); in snd_hda_hdmi_generic_remove()
2068 struct hdmi_spec *spec = codec->spec; in snd_hda_hdmi_generic_suspend() local
2071 for (pin_idx = 0; pin_idx < spec->num_pins; pin_idx++) { in snd_hda_hdmi_generic_suspend()
2072 struct hdmi_spec_per_pin *per_pin = get_pin(spec, pin_idx); in snd_hda_hdmi_generic_suspend()
2081 struct hdmi_spec *spec = codec->spec; in snd_hda_hdmi_generic_resume() local
2087 for (pin_idx = 0; pin_idx < spec->num_pins; pin_idx++) { in snd_hda_hdmi_generic_resume()
2088 struct hdmi_spec_per_pin *per_pin = get_pin(spec, pin_idx); in snd_hda_hdmi_generic_resume()
2102 /* allocate codec->spec and assign/initialize generic parser ops */
2105 struct hdmi_spec *spec; in snd_hda_hdmi_generic_alloc() local
2107 spec = kzalloc(sizeof(*spec), GFP_KERNEL); in snd_hda_hdmi_generic_alloc()
2108 if (!spec) in snd_hda_hdmi_generic_alloc()
2111 spec->codec = codec; in snd_hda_hdmi_generic_alloc()
2112 spec->ops = generic_standard_hdmi_ops; in snd_hda_hdmi_generic_alloc()
2113 spec->dev_num = 1; /* initialize to 1 */ in snd_hda_hdmi_generic_alloc()
2114 mutex_init(&spec->pcm_lock); in snd_hda_hdmi_generic_alloc()
2115 mutex_init(&spec->bind_lock); in snd_hda_hdmi_generic_alloc()
2116 snd_hdac_register_chmap_ops(&codec->core, &spec->chmap); in snd_hda_hdmi_generic_alloc()
2118 spec->chmap.ops.get_chmap = hdmi_get_chmap; in snd_hda_hdmi_generic_alloc()
2119 spec->chmap.ops.set_chmap = hdmi_set_chmap; in snd_hda_hdmi_generic_alloc()
2120 spec->chmap.ops.is_pcm_attached = is_hdmi_pcm_attached; in snd_hda_hdmi_generic_alloc()
2121 spec->chmap.ops.get_spk_alloc = hdmi_get_spk_alloc; in snd_hda_hdmi_generic_alloc()
2123 codec->spec = spec; in snd_hda_hdmi_generic_alloc()
2124 hdmi_array_init(spec, 4); in snd_hda_hdmi_generic_alloc()
2175 struct hdmi_spec *spec; in generic_acomp_notifier_set() local
2178 spec = container_of(acomp->audio_ops, struct hdmi_spec, drm_audio_ops); in generic_acomp_notifier_set()
2179 guard(mutex)(&spec->bind_lock); in generic_acomp_notifier_set()
2180 spec->use_acomp_notifier = use_acomp; in generic_acomp_notifier_set()
2181 spec->codec->relaxed_resume = use_acomp; in generic_acomp_notifier_set()
2182 spec->codec->bus->keep_power = 0; in generic_acomp_notifier_set()
2184 for (i = 0; i < spec->num_pins; i++) in generic_acomp_notifier_set()
2185 reprogram_jack_detect(spec->codec, in generic_acomp_notifier_set()
2186 get_pin(spec, i)->pin_nid, in generic_acomp_notifier_set()
2187 get_pin(spec, i)->dev_id, in generic_acomp_notifier_set()
2224 struct hdmi_spec *spec = codec->spec; in snd_hda_hdmi_acomp_pin_eld_notify() local
2225 hda_nid_t pin_nid = spec->port2pin(codec, port); in snd_hda_hdmi_acomp_pin_eld_notify()
2245 struct hdmi_spec *spec = codec->spec; in snd_hda_hdmi_setup_drm_audio_ops() local
2247 spec->drm_audio_ops.audio_ptr = codec; in snd_hda_hdmi_setup_drm_audio_ops()
2253 spec->drm_audio_ops.pin2port = ops->pin2port; in snd_hda_hdmi_setup_drm_audio_ops()
2254 spec->drm_audio_ops.pin_eld_notify = ops->pin_eld_notify; in snd_hda_hdmi_setup_drm_audio_ops()
2255 spec->drm_audio_ops.master_bind = ops->master_bind; in snd_hda_hdmi_setup_drm_audio_ops()
2256 spec->drm_audio_ops.master_unbind = ops->master_unbind; in snd_hda_hdmi_setup_drm_audio_ops()
2265 struct hdmi_spec *spec = codec->spec; in snd_hda_hdmi_acomp_init() local
2272 spec->port2pin = port2pin; in snd_hda_hdmi_acomp_init()
2274 if (!snd_hdac_acomp_init(&codec->bus->core, &spec->drm_audio_ops, in snd_hda_hdmi_acomp_init()
2276 spec->acomp_registered = true; in snd_hda_hdmi_acomp_init()