Lines Matching refs:per_pin
115 struct hdmi_spec_per_pin *per_pin,
256 struct hdmi_spec_per_pin *per_pin;
266 per_pin = get_pin(spec, pin_idx);
267 if ((per_pin->pin_nid == pin_nid) &&
268 (per_pin->dev_id == dev_id))
294 struct hdmi_spec_per_pin *per_pin;
298 per_pin = get_pin(spec, pin_idx);
299 if (per_pin->pcm &&
300 per_pin->pcm->pcm->stream == hinfo)
313 struct hdmi_spec_per_pin *per_pin;
316 per_pin = get_pin(spec, i);
317 if (per_pin->pcm_idx == pcm_idx)
318 return per_pin;
341 struct hdmi_spec_per_pin *per_pin;
349 per_pin = pcm_idx_to_pin(spec, pcm_idx);
350 if (!per_pin) {
355 eld = &per_pin->sink_eld;
368 struct hdmi_spec_per_pin *per_pin;
375 per_pin = pcm_idx_to_pin(spec, pcm_idx);
376 if (!per_pin) {
383 eld = &per_pin->sink_eld;
496 struct hdmi_spec_per_pin *per_pin = entry->private_data;
498 mutex_lock(&per_pin->lock);
499 snd_hdmi_print_eld_info(&per_pin->sink_eld, buffer, per_pin->pin_nid,
500 per_pin->dev_id, per_pin->cvt_nid);
501 mutex_unlock(&per_pin->lock);
507 struct hdmi_spec_per_pin *per_pin = entry->private_data;
509 mutex_lock(&per_pin->lock);
510 snd_hdmi_write_eld_info(&per_pin->sink_eld, buffer);
511 mutex_unlock(&per_pin->lock);
514 static int eld_proc_new(struct hdmi_spec_per_pin *per_pin, int index)
517 struct hda_codec *codec = per_pin->codec;
526 snd_info_set_text_ops(entry, per_pin, print_eld_info);
529 per_pin->proc_entry = entry;
534 static void eld_proc_free(struct hdmi_spec_per_pin *per_pin)
536 if (!per_pin->codec->bus->shutdown) {
537 snd_info_free_entry(per_pin->proc_entry);
538 per_pin->proc_entry = NULL;
542 static inline int eld_proc_new(struct hdmi_spec_per_pin *per_pin,
547 static inline void eld_proc_free(struct hdmi_spec_per_pin *per_pin)
739 struct hdmi_spec_per_pin *per_pin,
744 hda_nid_t pin_nid = per_pin->pin_nid;
745 int dev_id = per_pin->dev_id;
746 int channels = per_pin->channels;
762 eld = &per_pin->sink_eld;
766 per_pin->chmap_set, non_pcm, per_pin->chmap);
770 chmap->ops.set_channel_count(&codec->core, per_pin->cvt_nid,
779 per_pin->chmap, per_pin->chmap_set);
784 per_pin->non_pcm = non_pcm;
791 static void hdmi_present_sense(struct hdmi_spec_per_pin *per_pin, int repoll);
997 struct hdmi_spec_per_pin *per_pin;
1003 per_pin = NULL;
1005 per_pin = get_pin(spec, pin_idx);
1007 if (per_pin && per_pin->silent_stream) {
1008 cvt_idx = cvt_nid_to_cvt_index(codec, per_pin->cvt_nid);
1024 if (per_pin == NULL)
1027 for (mux_idx = 0; mux_idx < per_pin->num_mux_nids; mux_idx++)
1028 if (per_pin->mux_nids[mux_idx] == per_cvt->cvt_nid)
1031 if (mux_idx == per_pin->num_mux_nids)
1040 if (per_pin != NULL)
1041 per_pin->mux_idx = mux_idx;
1051 struct hdmi_spec_per_pin *per_pin)
1053 hda_nid_t pin_nid = per_pin->pin_nid;
1056 mux_idx = per_pin->mux_idx;
1096 struct hdmi_spec_per_pin *per_pin;
1104 per_pin = get_pin(spec, pin_idx);
1109 if (!per_pin->pcm)
1112 if ((per_pin->pin_nid == pin_nid) &&
1113 (per_pin->dev_id == dev_id))
1117 * if per_pin->dev_id >= dev_num,
1122 dev_num = snd_hda_get_num_devices(codec, per_pin->pin_nid) + 1;
1123 if (per_pin->dev_id >= dev_num)
1126 nid = per_pin->pin_nid;
1135 snd_hda_set_dev_select(codec, nid, per_pin->dev_id);
1182 struct hdmi_spec_per_pin *per_pin,
1188 spec->ops.pin_cvt_fixup(codec, per_pin, cvt_nid);
1247 struct hdmi_spec_per_pin *per_pin;
1276 per_pin = get_pin(spec, pin_idx);
1277 per_pin->cvt_nid = per_cvt->cvt_nid;
1284 snd_hda_set_dev_select(codec, per_pin->pin_nid, per_pin->dev_id);
1285 snd_hda_codec_write_cache(codec, per_pin->pin_nid, 0,
1287 per_pin->mux_idx);
1290 pin_cvt_fixup(codec, per_pin, 0);
1301 eld = &per_pin->sink_eld;
1334 struct hdmi_spec_per_pin *per_pin = get_pin(spec, pin_idx);
1335 hda_nid_t pin_nid = per_pin->pin_nid;
1336 int dev_id = per_pin->dev_id;
1350 memcpy(per_pin->mux_nids, spec->cvt_nids,
1354 per_pin->mux_nids,
1359 per_pin->num_mux_nids = conns;
1365 struct hdmi_spec_per_pin *per_pin)
1377 struct hdmi_spec_per_pin *per_pin)
1382 if (per_pin->pcm)
1385 idx = per_pin->prev_pcm_idx;
1389 per_pin->prev_pcm_idx = -1; /* no longer valid, clear it */
1391 idx = hdmi_find_pcm_slot(spec, per_pin);
1395 per_pin->pcm_idx = idx;
1396 per_pin->pcm = get_hdmi_pcm(spec, idx);
1401 struct hdmi_spec_per_pin *per_pin)
1406 if (!per_pin->pcm)
1408 idx = per_pin->pcm_idx;
1409 per_pin->pcm_idx = -1;
1410 per_pin->prev_pcm_idx = idx; /* remember the previous index */
1411 per_pin->pcm = NULL;
1417 struct hdmi_spec_per_pin *per_pin, hda_nid_t cvt_nid)
1421 for (mux_idx = 0; mux_idx < per_pin->num_mux_nids; mux_idx++)
1422 if (per_pin->mux_nids[mux_idx] == cvt_nid)
1430 struct hdmi_spec_per_pin *per_pin)
1432 struct hda_codec *codec = per_pin->codec;
1439 if (per_pin->pcm_idx < 0 || per_pin->pcm_idx >= spec->pcm_used)
1441 pcm = get_pcm_rec(spec, per_pin->pcm_idx);
1444 if (!test_bit(per_pin->pcm_idx, &spec->pcm_in_use))
1451 per_pin->cvt_nid = hinfo->nid;
1453 mux_idx = hdmi_get_pin_cvt_mux(spec, per_pin, hinfo->nid);
1454 if (mux_idx < per_pin->num_mux_nids) {
1455 snd_hda_set_dev_select(codec, per_pin->pin_nid,
1456 per_pin->dev_id);
1457 snd_hda_codec_write_cache(codec, per_pin->pin_nid, 0,
1461 snd_hda_spdif_ctls_assign(codec, per_pin->pcm_idx, hinfo->nid);
1465 per_pin->channels = substream->runtime->channels;
1466 per_pin->setup = true;
1467 per_pin->mux_idx = mux_idx;
1469 hdmi_setup_audio_infoframe(codec, per_pin, non_pcm);
1473 struct hdmi_spec_per_pin *per_pin)
1475 if (per_pin->pcm_idx >= 0 && per_pin->pcm_idx < spec->pcm_used)
1476 snd_hda_spdif_ctls_unassign(per_pin->codec, per_pin->pcm_idx);
1478 per_pin->chmap_set = false;
1479 memset(per_pin->chmap, 0, sizeof(per_pin->chmap));
1481 per_pin->setup = false;
1482 per_pin->channels = 0;
1486 struct hdmi_spec_per_pin *per_pin)
1490 if (per_pin->pcm_idx >= 0)
1491 return spec->pcm_rec[per_pin->pcm_idx].jack;
1496 /* update per_pin ELD from the given new ELD;
1501 struct hdmi_spec_per_pin *per_pin,
1505 struct hdmi_eld *pin_eld = &per_pin->sink_eld;
1518 schedule_delayed_work(&per_pin->work,
1531 pcm_idx = per_pin->pcm_idx;
1537 pcm_jack = pin_idx_to_pcm_jack(codec, per_pin);
1541 hdmi_attach_hda_pcm(spec, per_pin);
1542 hdmi_pcm_setup_pin(spec, per_pin);
1544 hdmi_pcm_reset_pin(spec, per_pin);
1545 hdmi_detach_hda_pcm(spec, per_pin);
1553 pcm_idx = per_pin->pcm_idx;
1555 pcm_jack = pin_idx_to_pcm_jack(codec, per_pin);
1584 if (eld->eld_valid && !old_eld_valid && per_pin->setup) {
1585 pin_cvt_fixup(codec, per_pin, 0);
1586 hdmi_setup_audio_infoframe(codec, per_pin, per_pin->non_pcm);
1602 static void hdmi_present_sense_via_verbs(struct hdmi_spec_per_pin *per_pin,
1605 struct hda_codec *codec = per_pin->codec;
1609 hda_nid_t pin_nid = per_pin->pin_nid;
1610 int dev_id = per_pin->dev_id;
1633 mutex_lock(&per_pin->lock);
1650 update_eld(codec, per_pin, eld, repoll);
1651 mutex_unlock(&per_pin->lock);
1663 struct hdmi_spec_per_pin *per_pin)
1667 snd_hdac_sync_audio_rate(&codec->core, per_pin->pin_nid,
1668 per_pin->dev_id, I915_SILENT_RATE);
1673 snd_hda_codec_setup_stream(codec, per_pin->cvt_nid,
1676 snd_hda_codec_setup_stream(codec, per_pin->cvt_nid, I915_SILENT_FMT_MASK, 0, format);
1678 per_pin->channels = I915_SILENT_CHANNELS;
1679 hdmi_setup_audio_infoframe(codec, per_pin, per_pin->non_pcm);
1683 struct hdmi_spec_per_pin *per_pin,
1688 codec_dbg(codec, "HDMI: KAE %d cvt-NID=0x%x\n", enable, per_pin->cvt_nid);
1690 param = snd_hda_codec_read(codec, per_pin->cvt_nid, 0, AC_VERB_GET_DIGI_CONVERT_1, 0);
1698 snd_hda_codec_write(codec, per_pin->cvt_nid, 0, AC_VERB_SET_DIGI_CONVERT_3, param);
1702 struct hdmi_spec_per_pin *per_pin)
1722 mutex_lock(&per_pin->lock);
1724 if (per_pin->setup) {
1730 pin_idx = pin_id_to_pin_index(codec, per_pin->pin_nid, per_pin->dev_id);
1739 per_pin->cvt_nid = per_cvt->cvt_nid;
1740 per_pin->silent_stream = true;
1743 per_pin->pin_nid, per_cvt->cvt_nid);
1745 snd_hda_set_dev_select(codec, per_pin->pin_nid, per_pin->dev_id);
1746 snd_hda_codec_write_cache(codec, per_pin->pin_nid, 0,
1748 per_pin->mux_idx);
1751 pin_cvt_fixup(codec, per_pin, 0);
1755 silent_stream_enable_i915(codec, per_pin);
1756 silent_stream_set_kae(codec, per_pin, true);
1759 silent_stream_enable_i915(codec, per_pin);
1767 mutex_unlock(&per_pin->lock);
1774 struct hdmi_spec_per_pin *per_pin)
1789 mutex_lock(&per_pin->lock);
1790 if (!per_pin->silent_stream)
1794 per_pin->pin_nid, per_pin->cvt_nid);
1796 cvt_idx = cvt_nid_to_cvt_index(codec, per_pin->cvt_nid);
1806 silent_stream_set_kae(codec, per_pin, false);
1809 per_pin->cvt_nid = 0;
1810 per_pin->silent_stream = false;
1813 mutex_unlock(&per_pin->lock);
1820 struct hdmi_spec_per_pin *per_pin)
1826 mutex_lock(&per_pin->lock);
1828 monitor_prev = per_pin->sink_eld.monitor_present;
1829 eld->eld_size = snd_hdac_acomp_get_eld(&codec->core, per_pin->pin_nid,
1830 per_pin->dev_id, &eld->monitor_present,
1833 update_eld(codec, per_pin, eld, 0);
1834 monitor_next = per_pin->sink_eld.monitor_present;
1835 mutex_unlock(&per_pin->lock);
1839 silent_stream_enable(codec, per_pin);
1841 silent_stream_disable(codec, per_pin);
1845 static void hdmi_present_sense(struct hdmi_spec_per_pin *per_pin, int repoll)
1847 struct hda_codec *codec = per_pin->codec;
1850 hdmi_present_sense_via_verbs(per_pin, repoll);
1852 sync_eld_via_acomp(codec, per_pin);
1857 struct hdmi_spec_per_pin *per_pin =
1859 struct hda_codec *codec = per_pin->codec;
1863 jack = snd_hda_jack_tbl_get_mst(codec, per_pin->pin_nid,
1864 per_pin->dev_id);
1868 if (per_pin->repoll_count++ > 6)
1869 per_pin->repoll_count = 0;
1872 hdmi_present_sense(per_pin, per_pin->repoll_count);
1881 struct hdmi_spec_per_pin *per_pin;
1930 per_pin = snd_array_new(&spec->pins);
1932 if (!per_pin)
1935 per_pin->pcm = NULL;
1936 per_pin->pcm_idx = -1;
1937 per_pin->prev_pcm_idx = -1;
1938 per_pin->pin_nid = pin_nid;
1939 per_pin->pin_nid_idx = spec->num_nids;
1940 per_pin->dev_id = i;
1941 per_pin->non_pcm = false;
2092 struct hdmi_spec_per_pin *per_pin;
2110 per_pin = get_pin(spec, pin_idx);
2120 pin_cvt_fixup(codec, per_pin, 0);
2125 snd_hdac_sync_audio_rate(&codec->core, per_pin->pin_nid,
2126 per_pin->dev_id, runtime->rate);
2129 mutex_lock(&per_pin->lock);
2130 per_pin->channels = substream->runtime->channels;
2131 per_pin->setup = true;
2141 hdmi_setup_audio_infoframe(codec, per_pin, non_pcm);
2142 mutex_unlock(&per_pin->lock);
2144 snd_hda_set_dev_select(codec, per_pin->pin_nid,
2145 per_pin->dev_id);
2146 pinctl = snd_hda_codec_read(codec, per_pin->pin_nid, 0,
2148 snd_hda_codec_write(codec, per_pin->pin_nid, 0,
2154 err = spec->ops.setup_stream(codec, cvt_nid, per_pin->pin_nid,
2155 per_pin->dev_id, stream_tag, format);
2176 struct hdmi_spec_per_pin *per_pin;
2208 per_pin = get_pin(spec, pin_idx);
2211 snd_hda_set_dev_select(codec, per_pin->pin_nid,
2212 per_pin->dev_id);
2213 pinctl = snd_hda_codec_read(codec, per_pin->pin_nid, 0,
2215 snd_hda_codec_write(codec, per_pin->pin_nid, 0,
2220 mutex_lock(&per_pin->lock);
2221 per_pin->chmap_set = false;
2222 memset(per_pin->chmap, 0, sizeof(per_pin->chmap));
2224 per_pin->setup = false;
2225 per_pin->channels = 0;
2226 mutex_unlock(&per_pin->lock);
2246 struct hdmi_spec_per_pin *per_pin = pcm_idx_to_pin(spec, pcm_idx);
2248 if (!per_pin)
2251 return per_pin->sink_eld.info.spk_alloc;
2259 struct hdmi_spec_per_pin *per_pin = pcm_idx_to_pin(spec, pcm_idx);
2262 if (!per_pin)
2265 memcpy(chmap, per_pin->chmap, ARRAY_SIZE(per_pin->chmap));
2273 struct hdmi_spec_per_pin *per_pin = pcm_idx_to_pin(spec, pcm_idx);
2275 if (!per_pin)
2277 mutex_lock(&per_pin->lock);
2278 per_pin->chmap_set = true;
2279 memcpy(per_pin->chmap, chmap, ARRAY_SIZE(per_pin->chmap));
2281 hdmi_setup_audio_infoframe(codec, per_pin, per_pin->non_pcm);
2282 mutex_unlock(&per_pin->lock);
2289 struct hdmi_spec_per_pin *per_pin = pcm_idx_to_pin(spec, pcm_idx);
2291 return per_pin ? true:false;
2400 struct hdmi_spec_per_pin *per_pin = get_pin(spec, pin_idx);
2401 struct hdmi_eld *pin_eld = &per_pin->sink_eld;
2404 hdmi_attach_hda_pcm(spec, per_pin);
2405 hdmi_pcm_setup_pin(spec, per_pin);
2409 hdmi_present_sense(per_pin, 0);
2433 struct hdmi_spec_per_pin *per_pin = get_pin(spec, pin_idx);
2435 per_pin->codec = codec;
2436 mutex_init(&per_pin->lock);
2437 INIT_DELAYED_WORK(&per_pin->work, hdmi_repoll_eld);
2438 eld_proc_new(per_pin, pin_idx);
2450 struct hdmi_spec_per_pin *per_pin = get_pin(spec, pin_idx);
2451 hda_nid_t pin_nid = per_pin->pin_nid;
2452 int dev_id = per_pin->dev_id;
2502 struct hdmi_spec_per_pin *per_pin = get_pin(spec, pin_idx);
2503 cancel_delayed_work_sync(&per_pin->work);
2504 eld_proc_free(per_pin);
2523 struct hdmi_spec_per_pin *per_pin = get_pin(spec, pin_idx);
2524 cancel_delayed_work_sync(&per_pin->work);
2538 struct hdmi_spec_per_pin *per_pin = get_pin(spec, pin_idx);
2539 hdmi_present_sense(per_pin, 1);
2911 struct hdmi_spec_per_pin *per_pin;
2915 per_pin = NULL;
2917 per_pin = get_pin(spec, pin_idx);
2921 if (spec->silent_stream_type == SILENT_STREAM_KAE && per_pin && per_pin->silent_stream) {
2922 silent_stream_set_kae(codec, per_pin, false);
2930 if (spec->silent_stream_type == SILENT_STREAM_KAE && per_pin && per_pin->silent_stream) {
2932 silent_stream_set_kae(codec, per_pin, true);
2940 struct hdmi_spec_per_pin *per_pin,
2943 if (per_pin) {
2944 haswell_verify_D0(codec, per_pin->cvt_nid, per_pin->pin_nid);
2945 snd_hda_set_dev_select(codec, per_pin->pin_nid,
2946 per_pin->dev_id);
2947 intel_verify_pin_cvt_connect(codec, per_pin);
2948 intel_not_share_assigned_cvt(codec, per_pin->pin_nid,
2949 per_pin->dev_id, per_pin->mux_idx);
2965 struct hdmi_spec_per_pin *per_pin = get_pin(spec, pin_idx);
2967 if (per_pin->silent_stream) {
3007 struct hdmi_spec_per_pin *per_pin = get_pin(spec, pin_idx);
3014 if (per_pin->silent_stream) {
3017 param = snd_hda_codec_read(codec, per_pin->cvt_nid, 0,
3021 silent_stream_enable_i915(codec, per_pin);
3024 param = snd_hda_codec_read(codec, per_pin->cvt_nid, 0,
3028 silent_stream_set_kae(codec, per_pin, true);
3276 struct hdmi_spec_per_pin *per_pin = get_pin(spec, 0);
3277 hda_nid_t pin = per_pin->pin_nid;
3285 snd_hda_jack_detect_enable(codec, pin, per_pin->dev_id);
3458 struct hdmi_spec_per_pin *per_pin;
3473 per_pin = snd_array_new(&spec->pins);
3475 if (!per_pin || !per_cvt) {
3480 per_pin->pin_nid = pin_nid;
4397 struct hdmi_spec_per_pin *per_pin = get_pin(spec, pin_idx);
4400 snd_hda_codec_write(codec, per_pin->pin_nid, 0, ATI_VERB_SET_DOWNMIX_INFO, 0);
4404 snd_hda_codec_write(codec, per_pin->pin_nid, 0,