Lines Matching +full:hdmi +full:- +full:dp1
1 // SPDX-License-Identifier: GPL-2.0-or-later
3 * Intel HDMI codec support
19 MODULE_PARM_DESC(enable_silent_stream, "Enable Silent Stream for HDMI devices");
40 struct hdmi_spec *spec = codec->spec; in intel_haswell_enable_all_pins()
42 vendor_param = snd_hda_codec_read(codec, spec->vendor_nid, 0, in intel_haswell_enable_all_pins()
44 if (vendor_param == -1 || vendor_param & INTEL_EN_ALL_PIN_CVTS) in intel_haswell_enable_all_pins()
48 vendor_param = snd_hda_codec_read(codec, spec->vendor_nid, 0, in intel_haswell_enable_all_pins()
50 if (vendor_param == -1) in intel_haswell_enable_all_pins()
60 struct hdmi_spec *spec = codec->spec; in intel_haswell_fixup_enable_dp12()
62 vendor_param = snd_hda_codec_read(codec, spec->vendor_nid, 0, in intel_haswell_fixup_enable_dp12()
64 if (vendor_param == -1 || vendor_param & INTEL_EN_DP12) in intel_haswell_fixup_enable_dp12()
67 /* enable DP1.2 mode */ in intel_haswell_fixup_enable_dp12()
69 snd_hdac_regmap_add_vendor_verb(&codec->core, INTEL_SET_VENDOR_VERB); in intel_haswell_fixup_enable_dp12()
70 snd_hda_codec_write_cache(codec, spec->vendor_nid, 0, in intel_haswell_fixup_enable_dp12()
74 /* Haswell needs to re-issue the vendor-specific verbs before turning to D0.
80 /* check codec->spec: it can be called before the probe gets called */ in haswell_set_power_state()
81 if (codec->spec) { in haswell_set_power_state()
94 * Pin Widget 5 - PORT B (port = 1 in i915 driver)
95 * Pin Widget 6 - PORT C (port = 2 in i915 driver)
96 * Pin Widget 7 - PORT D (port = 3 in i915 driver)
99 * Pin Widget 4 - PORT B (port = 1 in i915 driver)
100 * Pin Widget 5 - PORT C (port = 2 in i915 driver)
101 * Pin Widget 6 - PORT D (port = 3 in i915 driver)
105 switch (codec->core.vendor_id) { in intel_base_nid()
118 struct hdmi_spec *spec = codec->spec; in intel_pin2port()
121 if (!spec->port_num) { in intel_pin2port()
124 return -1; in intel_pin2port()
125 return pin_nid - base_nid + 1; in intel_pin2port()
132 for (i = 0; i < spec->port_num; i++) { in intel_pin2port()
133 if (pin_nid == spec->port_map[i]) in intel_pin2port()
137 codec_info(codec, "Can't find the HDMI/DP port for pin NID 0x%x\n", pin_nid); in intel_pin2port()
138 return -1; in intel_pin2port()
143 struct hdmi_spec *spec = codec->spec; in intel_port2pin()
145 if (!spec->port_num) { in intel_port2pin()
146 /* we assume only from port-B to port-D */ in intel_port2pin()
149 return port + intel_base_nid(codec) - 1; in intel_port2pin()
152 if (port < 0 || port >= spec->port_num) in intel_port2pin()
154 return spec->port_map[port]; in intel_port2pin()
169 if (codec->core.dev.power.power_state.event == PM_EVENT_SUSPEND) in intel_pin_eld_notify()
172 snd_hdac_i915_set_bclk(&codec->bus->core); in intel_pin_eld_notify()
184 struct hdmi_spec *spec = codec->spec; in register_i915_notifier()
186 spec->use_acomp_notifier = true; in register_i915_notifier()
187 spec->port2pin = intel_port2pin; in register_i915_notifier()
189 snd_hdac_acomp_register_notifier(&codec->bus->core, in register_i915_notifier()
190 &spec->drm_audio_ops); in register_i915_notifier()
192 codec->relaxed_resume = 1; in register_i915_notifier()
205 snd_hdac_sync_audio_rate(&codec->core, per_pin->pin_nid, in silent_stream_enable_i915()
206 per_pin->dev_id, I915_SILENT_RATE); in silent_stream_enable_i915()
211 snd_hda_codec_setup_stream(codec, per_pin->cvt_nid, in silent_stream_enable_i915()
214 snd_hda_codec_setup_stream(codec, per_pin->cvt_nid, I915_SILENT_FMT_MASK, 0, format); in silent_stream_enable_i915()
216 per_pin->channels = I915_SILENT_CHANNELS; in silent_stream_enable_i915()
217 snd_hda_hdmi_setup_audio_infoframe(codec, per_pin, per_pin->non_pcm); in silent_stream_enable_i915()
226 codec_dbg(codec, "HDMI: KAE %d cvt-NID=0x%x\n", enable, per_pin->cvt_nid); in silent_stream_set_kae()
228 param = snd_hda_codec_read(codec, per_pin->cvt_nid, 0, AC_VERB_GET_DIGI_CONVERT_1, 0); in silent_stream_set_kae()
236 snd_hda_codec_write(codec, per_pin->cvt_nid, 0, AC_VERB_SET_DIGI_CONVERT_3, param); in silent_stream_set_kae()
243 struct hdmi_spec *spec = codec->spec; in i915_set_silent_stream()
245 switch (spec->silent_stream_type) { in i915_set_silent_stream()
286 codec_dbg(codec, "Haswell HDMI audio: Power for NID 0x%x is now D%d\n", nid, pwr); in haswell_verify_D0()
294 hda_nid_t pin_nid = per_pin->pin_nid; in intel_verify_pin_cvt_connect()
297 mux_idx = per_pin->mux_idx; in intel_verify_pin_cvt_connect()
314 for (i = 0; i < spec->num_cvts; i++) in intel_cvt_id_to_mux_idx()
315 if (spec->cvt_nids[i] == cvt_nid) in intel_cvt_id_to_mux_idx()
317 return -EINVAL; in intel_cvt_id_to_mux_idx()
320 /* Intel HDMI workaround to fix audio routing issue:
333 struct hdmi_spec *spec = codec->spec; in intel_not_share_assigned_cvt()
341 for (pin_idx = 0; pin_idx < spec->num_pins; pin_idx++) { in intel_not_share_assigned_cvt()
350 if (!per_pin->pcm) in intel_not_share_assigned_cvt()
353 if ((per_pin->pin_nid == pin_nid) && in intel_not_share_assigned_cvt()
354 (per_pin->dev_id == dev_id)) in intel_not_share_assigned_cvt()
358 * if per_pin->dev_id >= dev_num, in intel_not_share_assigned_cvt()
363 dev_num = snd_hda_get_num_devices(codec, per_pin->pin_nid) + 1; in intel_not_share_assigned_cvt()
364 if (per_pin->dev_id >= dev_num) in intel_not_share_assigned_cvt()
367 nid = per_pin->pin_nid; in intel_not_share_assigned_cvt()
376 snd_hda_set_dev_select(codec, nid, per_pin->dev_id); in intel_not_share_assigned_cvt()
388 for (cvt_idx = 0; cvt_idx < spec->num_cvts; cvt_idx++) { in intel_not_share_assigned_cvt()
390 if (!per_cvt->assigned) { in intel_not_share_assigned_cvt()
409 struct hdmi_spec *spec = codec->spec; in intel_not_share_assigned_cvt_nid()
426 struct hdmi_spec *spec = codec->spec; in i915_hsw_setup_stream()
438 if (spec->silent_stream_type == SILENT_STREAM_KAE && per_pin && per_pin->silent_stream) { in i915_hsw_setup_stream()
447 if (spec->silent_stream_type == SILENT_STREAM_KAE && per_pin && per_pin->silent_stream) { in i915_hsw_setup_stream()
461 haswell_verify_D0(codec, per_pin->cvt_nid, per_pin->pin_nid); in i915_pin_cvt_fixup()
462 snd_hda_set_dev_select(codec, per_pin->pin_nid, in i915_pin_cvt_fixup()
463 per_pin->dev_id); in i915_pin_cvt_fixup()
465 intel_not_share_assigned_cvt(codec, per_pin->pin_nid, in i915_pin_cvt_fixup()
466 per_pin->dev_id, per_pin->mux_idx); in i915_pin_cvt_fixup()
474 struct hdmi_spec *spec = codec->spec; in i915_hdmi_suspend()
479 if (spec->silent_stream_type != SILENT_STREAM_KAE) in i915_hdmi_suspend()
482 for (pin_idx = 0; pin_idx < spec->num_pins; pin_idx++) { in i915_hdmi_suspend()
485 if (per_pin->silent_stream) { in i915_hdmi_suspend()
493 * stream-id should remain programmed when codec goes in i915_hdmi_suspend()
496 codec->no_stream_clean_at_suspend = 1; in i915_hdmi_suspend()
499 * the system might go to S3, in which case keep-alive in i915_hdmi_suspend()
502 codec->forced_resume = 1; in i915_hdmi_suspend()
504 codec_dbg(codec, "HDMI: KAE active at suspend\n"); in i915_hdmi_suspend()
506 codec->no_stream_clean_at_suspend = 0; in i915_hdmi_suspend()
507 codec->forced_resume = 0; in i915_hdmi_suspend()
515 struct hdmi_spec *spec = codec->spec; in i915_hdmi_resume()
519 if (spec->silent_stream_type != SILENT_STREAM_KAE) in i915_hdmi_resume()
523 if (!codec->no_stream_clean_at_suspend) in i915_hdmi_resume()
526 for (pin_idx = 0; pin_idx < spec->num_pins; pin_idx++) { in i915_hdmi_resume()
531 * the codec setting may have been lost. Re-enable in i915_hdmi_resume()
532 * keep-alive. in i915_hdmi_resume()
534 if (per_pin->silent_stream) { in i915_hdmi_resume()
537 param = snd_hda_codec_read(codec, per_pin->cvt_nid, 0, in i915_hdmi_resume()
540 codec_dbg(codec, "HDMI: KAE: restore stream id\n"); in i915_hdmi_resume()
544 param = snd_hda_codec_read(codec, per_pin->cvt_nid, 0, in i915_hdmi_resume()
547 codec_dbg(codec, "HDMI: KAE: restore DIG3_KAE\n"); in i915_hdmi_resume()
560 if (!codec->bus->core.audio_component) { in alloc_intel_hdmi()
561 codec_info(codec, "No i915 binding for Intel HDMI/DP codec\n"); in alloc_intel_hdmi()
563 codec->probe_id = HDA_CODEC_ID_SKIP_PROBE; in alloc_intel_hdmi()
564 return -ENODEV; in alloc_intel_hdmi()
570 /* parse and post-process for Intel codecs */
577 } while (err < 0 && retries--); in parse_intel_hdmi()
594 spec = codec->spec; in intel_hsw_common_init()
595 codec->dp_mst = true; in intel_hsw_common_init()
596 spec->vendor_nid = vendor_nid; in intel_hsw_common_init()
597 spec->port_map = port_map; in intel_hsw_common_init()
598 spec->port_num = port_num; in intel_hsw_common_init()
599 spec->intel_hsw_fixup = true; in intel_hsw_common_init()
600 spec->dev_num = dev_num; in intel_hsw_common_init()
605 codec->display_power_control = 1; in intel_hsw_common_init()
607 codec->depop_delay = 0; in intel_hsw_common_init()
608 codec->auto_runtime_pm = 1; in intel_hsw_common_init()
610 spec->ops.setup_stream = i915_hsw_setup_stream; in intel_hsw_common_init()
611 spec->ops.pin_cvt_fixup = i915_pin_cvt_fixup; in intel_hsw_common_init()
612 spec->ops.silent_stream = i915_set_silent_stream; in intel_hsw_common_init()
619 spec->silent_stream_type = SILENT_STREAM_I915; in intel_hsw_common_init()
671 spec = codec->spec; in probe_i915_adlp_hdmi()
673 if (spec->silent_stream_type) in probe_i915_adlp_hdmi()
674 spec->silent_stream_type = SILENT_STREAM_KAE; in probe_i915_adlp_hdmi()
685 spec = codec->spec; in probe_i915_byt_hdmi()
690 codec->display_power_control = 1; in probe_i915_byt_hdmi()
692 codec->depop_delay = 0; in probe_i915_byt_hdmi()
693 codec->auto_runtime_pm = 1; in probe_i915_byt_hdmi()
695 spec->ops.pin_cvt_fixup = i915_pin_cvt_fixup; in probe_i915_byt_hdmi()
717 switch (id->driver_data) { in intelhdmi_probe()
740 err = -EINVAL; in intelhdmi_probe()
768 HDA_CODEC_ID_MODEL(0x80860054, "IbexPeak HDMI", MODEL_CPT),
769 HDA_CODEC_ID_MODEL(0x80862800, "Geminilake HDMI", MODEL_GLK),
770 HDA_CODEC_ID_MODEL(0x80862804, "IbexPeak HDMI", MODEL_CPT),
771 HDA_CODEC_ID_MODEL(0x80862805, "CougarPoint HDMI", MODEL_CPT),
772 HDA_CODEC_ID_MODEL(0x80862806, "PantherPoint HDMI", MODEL_CPT),
773 HDA_CODEC_ID_MODEL(0x80862807, "Haswell HDMI", MODEL_HSW),
774 HDA_CODEC_ID_MODEL(0x80862808, "Broadwell HDMI", MODEL_HSW),
775 HDA_CODEC_ID_MODEL(0x80862809, "Skylake HDMI", MODEL_HSW),
776 HDA_CODEC_ID_MODEL(0x8086280a, "Broxton HDMI", MODEL_HSW),
777 HDA_CODEC_ID_MODEL(0x8086280b, "Kabylake HDMI", MODEL_HSW),
778 HDA_CODEC_ID_MODEL(0x8086280c, "Cannonlake HDMI", MODEL_GLK),
779 HDA_CODEC_ID_MODEL(0x8086280d, "Geminilake HDMI", MODEL_GLK),
780 HDA_CODEC_ID_MODEL(0x8086280f, "Icelake HDMI", MODEL_ICL),
781 HDA_CODEC_ID_MODEL(0x80862812, "Tigerlake HDMI", MODEL_TGL),
782 HDA_CODEC_ID_MODEL(0x80862814, "DG1 HDMI", MODEL_TGL),
783 HDA_CODEC_ID_MODEL(0x80862815, "Alderlake HDMI", MODEL_TGL),
784 HDA_CODEC_ID_MODEL(0x80862816, "Rocketlake HDMI", MODEL_TGL),
785 HDA_CODEC_ID_MODEL(0x80862818, "Raptorlake HDMI", MODEL_TGL),
786 HDA_CODEC_ID_MODEL(0x80862819, "DG2 HDMI", MODEL_TGL),
787 HDA_CODEC_ID_MODEL(0x8086281a, "Jasperlake HDMI", MODEL_ICL),
788 HDA_CODEC_ID_MODEL(0x8086281b, "Elkhartlake HDMI", MODEL_ICL),
789 HDA_CODEC_ID_MODEL(0x8086281c, "Alderlake-P HDMI", MODEL_ADLP),
790 HDA_CODEC_ID_MODEL(0x8086281d, "Meteor Lake HDMI", MODEL_ADLP),
791 HDA_CODEC_ID_MODEL(0x8086281e, "Battlemage HDMI", MODEL_ADLP),
792 HDA_CODEC_ID_MODEL(0x8086281f, "Raptor Lake P HDMI", MODEL_ADLP),
793 HDA_CODEC_ID_MODEL(0x80862820, "Lunar Lake HDMI", MODEL_ADLP),
794 HDA_CODEC_ID_MODEL(0x80862822, "Panther Lake HDMI", MODEL_ADLP),
795 HDA_CODEC_ID_MODEL(0x80862823, "Wildcat Lake HDMI", MODEL_ADLP),
796 HDA_CODEC_ID_MODEL(0x80862882, "Valleyview2 HDMI", MODEL_BYT),
797 HDA_CODEC_ID_MODEL(0x80862883, "Braswell HDMI", MODEL_BYT),
803 MODULE_DESCRIPTION("Intel HDMI HD-audio codec");