Lines Matching +full:- +full:32000
59 * co-operation between the graphics and audio drivers is handled via audio
114 { 32000, TMDS_296M, 5824, 421875 },
115 { 32000, TMDS_297M, 3072, 222750 },
116 { 32000, TMDS_593M, 5824, 843750 },
117 { 32000, TMDS_594M, 3072, 445500 },
144 /* Appendix C - N & CTS values for deep color from HDMI 2.0 spec*/
150 { 32000, TMDS_370M, 5824, 527344 },
151 { 32000, TMDS_371M, 6144, 556875 },
171 { 32000, TMDS_445M, 5824, 632813 },
172 { 32000, TMDS_445_5M, 4096, 445500 },
203 &crtc_state->hw.adjusted_mode; in audio_config_hdmi_pixel_clock()
207 if (adjusted_mode->crtc_clock == hdmi_audio_clock[i].clock) in audio_config_hdmi_pixel_clock()
211 if (DISPLAY_VER(display) < 12 && adjusted_mode->crtc_clock > 148500) in audio_config_hdmi_pixel_clock()
215 drm_dbg_kms(display->drm, in audio_config_hdmi_pixel_clock()
217 adjusted_mode->crtc_clock); in audio_config_hdmi_pixel_clock()
221 drm_dbg_kms(display->drm, in audio_config_hdmi_pixel_clock()
235 if (crtc_state->pipe_bpp == 36) { in audio_config_hdmi_get_n()
238 } else if (crtc_state->pipe_bpp == 30) { in audio_config_hdmi_get_n()
248 crtc_state->port_clock == hdmi_ncts_table[i].clock) { in audio_config_hdmi_get_n()
269 u32 *eld = (u32 *)crtc_state->eld; in g4x_audio_codec_get_config()
280 len = min_t(int, sizeof(crtc_state->eld) / 4, eld_buffer_size); in g4x_audio_codec_get_config()
291 struct intel_crtc *crtc = to_intel_crtc(old_crtc_state->uapi.crtc); in g4x_audio_codec_disable()
306 struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc); in g4x_audio_codec_enable()
307 const u32 *eld = (const u32 *)crtc_state->eld; in g4x_audio_codec_enable()
316 len = min(drm_eld_size(crtc_state->eld) / 4, eld_buffer_size); in g4x_audio_codec_enable()
323 drm_WARN_ON(display->drm, in g4x_audio_codec_enable()
335 enum transcoder cpu_transcoder = crtc_state->cpu_transcoder; in hsw_dp_audio_config_update()
353 struct i915_audio_component *acomp = display->audio.component; in hsw_hdmi_audio_config_update()
354 enum transcoder cpu_transcoder = crtc_state->cpu_transcoder; in hsw_hdmi_audio_config_update()
355 enum port port = encoder->port; in hsw_hdmi_audio_config_update()
359 rate = acomp ? acomp->aud_sample_rate[port] : 0; in hsw_hdmi_audio_config_update()
369 drm_dbg_kms(display->drm, "using N %d\n", n); in hsw_hdmi_audio_config_update()
375 drm_dbg_kms(display->drm, "using automatic N\n"); in hsw_hdmi_audio_config_update()
404 enum transcoder trans = crtc_state->cpu_transcoder; in intel_audio_sdp_split_update()
410 enable && crtc_state->sdp_split_enable ? AUD_ENABLE_SDP_SPLIT : 0); in intel_audio_sdp_split_update()
418 struct intel_crtc *crtc = to_intel_crtc(old_crtc_state->uapi.crtc); in hsw_audio_codec_disable()
419 enum transcoder cpu_transcoder = old_crtc_state->cpu_transcoder; in hsw_audio_codec_disable()
421 mutex_lock(&display->audio.mutex); in hsw_audio_codec_disable()
448 mutex_unlock(&display->audio.mutex); in hsw_audio_codec_disable()
462 h_active = crtc_state->hw.adjusted_mode.crtc_hdisplay; in calc_hblank_early_prog()
463 h_total = crtc_state->hw.adjusted_mode.crtc_htotal; in calc_hblank_early_prog()
464 pixel_clk = crtc_state->hw.adjusted_mode.crtc_clock; in calc_hblank_early_prog()
465 vdsc_bppx16 = crtc_state->dsc.compressed_bpp_x16; in calc_hblank_early_prog()
466 cdclk = display->cdclk.hw.cdclk; in calc_hblank_early_prog()
469 link_clk = crtc_state->port_clock; in calc_hblank_early_prog()
470 lanes = crtc_state->lane_count; in calc_hblank_early_prog()
472 drm_dbg_kms(display->drm, in calc_hblank_early_prog()
479 link_clks_available = (h_total - h_active) * link_clk / pixel_clk - 28; in calc_hblank_early_prog()
492 link_clks_active = (tu_line - 1) * 64 + tu_data; in calc_hblank_early_prog()
496 return h_active - hblank_rise + hblank_delta; in calc_hblank_early_prog()
504 h_active = crtc_state->hw.adjusted_mode.hdisplay; in calc_samples_room()
505 h_total = crtc_state->hw.adjusted_mode.htotal; in calc_samples_room()
506 pixel_clk = crtc_state->hw.adjusted_mode.clock; in calc_samples_room()
507 link_clk = crtc_state->port_clock; in calc_samples_room()
508 lanes = crtc_state->lane_count; in calc_samples_room()
510 return ((h_total - h_active) * link_clk - 12 * pixel_clk) / in calc_samples_room()
518 enum transcoder cpu_transcoder = crtc_state->cpu_transcoder; in enable_audio_dsc_wa()
532 if (crtc_state->dsc.compression_enable && in enable_audio_dsc_wa()
533 crtc_state->hw.adjusted_mode.hdisplay >= 3840 && in enable_audio_dsc_wa()
534 crtc_state->hw.adjusted_mode.vdisplay >= 2160) { in enable_audio_dsc_wa()
564 struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc); in hsw_audio_codec_enable()
565 enum transcoder cpu_transcoder = crtc_state->cpu_transcoder; in hsw_audio_codec_enable()
567 mutex_lock(&display->audio.mutex); in hsw_audio_codec_enable()
596 mutex_unlock(&display->audio.mutex); in hsw_audio_codec_enable()
607 if (display->platform.valleyview || display->platform.cherryview) { in ibx_audio_regs_init()
608 regs->hdmiw_hdmiedid = VLV_HDMIW_HDMIEDID(pipe); in ibx_audio_regs_init()
609 regs->aud_config = VLV_AUD_CFG(pipe); in ibx_audio_regs_init()
610 regs->aud_cntl_st = VLV_AUD_CNTL_ST(pipe); in ibx_audio_regs_init()
611 regs->aud_cntrl_st2 = VLV_AUD_CNTL_ST2; in ibx_audio_regs_init()
613 regs->hdmiw_hdmiedid = CPT_HDMIW_HDMIEDID(pipe); in ibx_audio_regs_init()
614 regs->aud_config = CPT_AUD_CFG(pipe); in ibx_audio_regs_init()
615 regs->aud_cntl_st = CPT_AUD_CNTL_ST(pipe); in ibx_audio_regs_init()
616 regs->aud_cntrl_st2 = CPT_AUD_CNTRL_ST2; in ibx_audio_regs_init()
618 regs->hdmiw_hdmiedid = IBX_HDMIW_HDMIEDID(pipe); in ibx_audio_regs_init()
619 regs->aud_config = IBX_AUD_CFG(pipe); in ibx_audio_regs_init()
620 regs->aud_cntl_st = IBX_AUD_CNTL_ST(pipe); in ibx_audio_regs_init()
621 regs->aud_cntrl_st2 = IBX_AUD_CNTL_ST2; in ibx_audio_regs_init()
630 struct intel_crtc *crtc = to_intel_crtc(old_crtc_state->uapi.crtc); in ibx_audio_codec_disable()
631 enum port port = encoder->port; in ibx_audio_codec_disable()
632 enum pipe pipe = crtc->pipe; in ibx_audio_codec_disable()
635 if (drm_WARN_ON(display->drm, port == PORT_A)) in ibx_audio_codec_disable()
640 mutex_lock(&display->audio.mutex); in ibx_audio_codec_disable()
655 mutex_unlock(&display->audio.mutex); in ibx_audio_codec_disable()
666 struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc); in ibx_audio_codec_enable()
667 enum port port = encoder->port; in ibx_audio_codec_enable()
668 enum pipe pipe = crtc->pipe; in ibx_audio_codec_enable()
671 if (drm_WARN_ON(display->drm, port == PORT_A)) in ibx_audio_codec_enable()
678 mutex_lock(&display->audio.mutex); in ibx_audio_codec_enable()
698 mutex_unlock(&display->audio.mutex); in ibx_audio_codec_enable()
706 struct drm_connector *connector = conn_state->connector; in intel_audio_compute_config()
708 &crtc_state->hw.adjusted_mode; in intel_audio_compute_config()
710 mutex_lock(&connector->eld_mutex); in intel_audio_compute_config()
711 if (!connector->eld[0]) { in intel_audio_compute_config()
712 drm_dbg_kms(display->drm, in intel_audio_compute_config()
714 connector->base.id, connector->name); in intel_audio_compute_config()
715 mutex_unlock(&connector->eld_mutex); in intel_audio_compute_config()
719 BUILD_BUG_ON(sizeof(crtc_state->eld) != sizeof(connector->eld)); in intel_audio_compute_config()
720 memcpy(crtc_state->eld, connector->eld, sizeof(crtc_state->eld)); in intel_audio_compute_config()
722 crtc_state->eld[6] = drm_av_sync_delay(connector, adjusted_mode) / 2; in intel_audio_compute_config()
723 mutex_unlock(&connector->eld_mutex); in intel_audio_compute_config()
729 * intel_audio_codec_enable - Enable the audio codec for HD audio
742 struct i915_audio_component *acomp = display->audio.component; in intel_audio_codec_enable()
743 struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc); in intel_audio_codec_enable()
744 struct intel_connector *connector = to_intel_connector(conn_state->connector); in intel_audio_codec_enable()
745 enum transcoder cpu_transcoder = crtc_state->cpu_transcoder; in intel_audio_codec_enable()
747 enum port port = encoder->port; in intel_audio_codec_enable()
749 if (!crtc_state->has_audio) in intel_audio_codec_enable()
752 drm_dbg_kms(display->drm, in intel_audio_codec_enable()
754 connector->base.base.id, connector->base.name, in intel_audio_codec_enable()
755 encoder->base.base.id, encoder->base.name, in intel_audio_codec_enable()
756 crtc->base.base.id, crtc->base.name, in intel_audio_codec_enable()
757 drm_eld_size(crtc_state->eld)); in intel_audio_codec_enable()
759 if (display->funcs.audio) in intel_audio_codec_enable()
760 display->funcs.audio->audio_codec_enable(encoder, in intel_audio_codec_enable()
764 mutex_lock(&display->audio.mutex); in intel_audio_codec_enable()
766 audio_state = &display->audio.state[cpu_transcoder]; in intel_audio_codec_enable()
768 audio_state->encoder = encoder; in intel_audio_codec_enable()
769 BUILD_BUG_ON(sizeof(audio_state->eld) != sizeof(crtc_state->eld)); in intel_audio_codec_enable()
770 memcpy(audio_state->eld, crtc_state->eld, sizeof(audio_state->eld)); in intel_audio_codec_enable()
772 mutex_unlock(&display->audio.mutex); in intel_audio_codec_enable()
774 if (acomp && acomp->base.audio_ops && in intel_audio_codec_enable()
775 acomp->base.audio_ops->pin_eld_notify) { in intel_audio_codec_enable()
776 /* audio drivers expect cpu_transcoder = -1 to indicate Non-MST cases */ in intel_audio_codec_enable()
778 cpu_transcoder = -1; in intel_audio_codec_enable()
779 acomp->base.audio_ops->pin_eld_notify(acomp->base.audio_ops->audio_ptr, in intel_audio_codec_enable()
783 intel_lpe_audio_notify(display, cpu_transcoder, port, crtc_state->eld, in intel_audio_codec_enable()
784 crtc_state->port_clock, in intel_audio_codec_enable()
789 * intel_audio_codec_disable - Disable the audio codec for HD audio
802 struct i915_audio_component *acomp = display->audio.component; in intel_audio_codec_disable()
803 struct intel_crtc *crtc = to_intel_crtc(old_crtc_state->uapi.crtc); in intel_audio_codec_disable()
804 struct intel_connector *connector = to_intel_connector(old_conn_state->connector); in intel_audio_codec_disable()
805 enum transcoder cpu_transcoder = old_crtc_state->cpu_transcoder; in intel_audio_codec_disable()
807 enum port port = encoder->port; in intel_audio_codec_disable()
809 if (!old_crtc_state->has_audio) in intel_audio_codec_disable()
812 drm_dbg_kms(display->drm, in intel_audio_codec_disable()
814 connector->base.base.id, connector->base.name, in intel_audio_codec_disable()
815 encoder->base.base.id, encoder->base.name, in intel_audio_codec_disable()
816 crtc->base.base.id, crtc->base.name); in intel_audio_codec_disable()
818 if (display->funcs.audio) in intel_audio_codec_disable()
819 display->funcs.audio->audio_codec_disable(encoder, in intel_audio_codec_disable()
823 mutex_lock(&display->audio.mutex); in intel_audio_codec_disable()
825 audio_state = &display->audio.state[cpu_transcoder]; in intel_audio_codec_disable()
827 audio_state->encoder = NULL; in intel_audio_codec_disable()
828 memset(audio_state->eld, 0, sizeof(audio_state->eld)); in intel_audio_codec_disable()
830 mutex_unlock(&display->audio.mutex); in intel_audio_codec_disable()
832 if (acomp && acomp->base.audio_ops && in intel_audio_codec_disable()
833 acomp->base.audio_ops->pin_eld_notify) { in intel_audio_codec_disable()
834 /* audio drivers expect cpu_transcoder = -1 to indicate Non-MST cases */ in intel_audio_codec_disable()
836 cpu_transcoder = -1; in intel_audio_codec_disable()
837 acomp->base.audio_ops->pin_eld_notify(acomp->base.audio_ops->audio_ptr, in intel_audio_codec_disable()
848 enum transcoder cpu_transcoder = crtc_state->cpu_transcoder; in intel_acomp_get_config()
851 mutex_lock(&display->audio.mutex); in intel_acomp_get_config()
853 audio_state = &display->audio.state[cpu_transcoder]; in intel_acomp_get_config()
855 if (audio_state->encoder) in intel_acomp_get_config()
856 memcpy(crtc_state->eld, audio_state->eld, sizeof(audio_state->eld)); in intel_acomp_get_config()
858 mutex_unlock(&display->audio.mutex); in intel_acomp_get_config()
866 if (!crtc_state->has_audio) in intel_audio_codec_get_config()
869 if (display->funcs.audio) in intel_audio_codec_get_config()
870 display->funcs.audio->audio_codec_get_config(encoder, crtc_state); in intel_audio_codec_get_config()
892 * intel_audio_hooks_init - Set up chip specific audio hooks
897 if (display->platform.g4x) in intel_audio_hooks_init()
898 display->funcs.audio = &g4x_audio_funcs; in intel_audio_hooks_init()
899 else if (display->platform.valleyview || display->platform.cherryview || in intel_audio_hooks_init()
901 display->funcs.audio = &ibx_audio_funcs; in intel_audio_hooks_init()
902 else if (display->platform.haswell || DISPLAY_VER(display) >= 8) in intel_audio_hooks_init()
903 display->funcs.audio = &hsw_audio_funcs; in intel_audio_hooks_init()
919 aud_ts->m = 60; in get_aud_ts_cdclk_m_n()
920 aud_ts->n = cdclk * aud_ts->m / 24000; in get_aud_ts_cdclk_m_n()
928 get_aud_ts_cdclk_m_n(display->cdclk.hw.ref, in intel_audio_cdclk_change_post()
929 display->cdclk.hw.cdclk, &aud_ts); in intel_audio_cdclk_change_post()
933 drm_dbg_kms(display->drm, "aud_ts_cdclk set to M=%u, N=%u\n", in intel_audio_cdclk_change_post()
946 ret = drm_modeset_lock(&crtc->base.mutex, state->base.acquire_ctx); in glk_force_audio_cdclk_commit()
956 return drm_atomic_commit(&state->base); in glk_force_audio_cdclk_commit()
972 state = drm_atomic_state_alloc(display->drm); in glk_force_audio_cdclk()
973 if (drm_WARN_ON(display->drm, !state)) in glk_force_audio_cdclk()
976 state->acquire_ctx = &ctx; in glk_force_audio_cdclk()
977 to_intel_atomic_state(state)->internal = true; in glk_force_audio_cdclk()
982 if (ret == -EDEADLK) { in glk_force_audio_cdclk()
988 drm_WARN_ON(display->drm, ret); in glk_force_audio_cdclk()
1001 if (!crtc_state->has_audio) in intel_audio_min_cdclk()
1010 crtc_state->port_clock >= 540000 && in intel_audio_min_cdclk()
1011 crtc_state->lane_count == 4) { in intel_audio_min_cdclk()
1015 } else if (DISPLAY_VER(display) == 9 || display->platform.broadwell) { in intel_audio_min_cdclk()
1035 if ((display->platform.valleyview || display->platform.cherryview) && in intel_audio_min_cdclk()
1037 min_cdclk = max(min_cdclk, crtc_state->port_clock); in intel_audio_min_cdclk()
1052 if (display->audio.power_refcount++ == 0) { in intel_audio_component_get_power()
1055 display->audio.freq_cntrl); in intel_audio_component_get_power()
1056 drm_dbg_kms(display->drm, in intel_audio_component_get_power()
1058 display->audio.freq_cntrl); in intel_audio_component_get_power()
1062 if (display->platform.geminilake) in intel_audio_component_get_power()
1080 if (--display->audio.power_refcount == 0) in intel_audio_component_put_power()
1081 if (display->platform.geminilake) in intel_audio_component_put_power()
1120 if (drm_WARN_ON_ONCE(display->drm, !HAS_DDI(display))) in intel_audio_component_get_cdclk_freq()
1121 return -ENODEV; in intel_audio_component_get_cdclk_freq()
1123 return display->cdclk.hw.cdclk; in intel_audio_component_get_cdclk_freq()
1131 * Non-MST & (cpu_transcoder >= 0): only cpu_transcoder = 0 (the first device entry)
1133 * Non-MST & (cpu_transcoder < 0): get the right intel_encoder with port matched
1143 if (drm_WARN_ON(display->drm, in find_audio_state()
1144 cpu_transcoder >= ARRAY_SIZE(display->audio.state))) in find_audio_state()
1147 audio_state = &display->audio.state[cpu_transcoder]; in find_audio_state()
1148 encoder = audio_state->encoder; in find_audio_state()
1150 if (encoder && encoder->port == port && in find_audio_state()
1151 encoder->type == INTEL_OUTPUT_DP_MST) in find_audio_state()
1155 /* Non-MST */ in find_audio_state()
1163 audio_state = &display->audio.state[cpu_transcoder]; in find_audio_state()
1164 encoder = audio_state->encoder; in find_audio_state()
1166 if (encoder && encoder->port == port && in find_audio_state()
1167 encoder->type != INTEL_OUTPUT_DP_MST) in find_audio_state()
1178 struct i915_audio_component *acomp = display->audio.component; in intel_audio_component_sync_audio_rate()
1189 mutex_lock(&display->audio.mutex); in intel_audio_component_sync_audio_rate()
1193 drm_dbg_kms(display->drm, "Not valid for port %c\n", in intel_audio_component_sync_audio_rate()
1195 err = -ENODEV; in intel_audio_component_sync_audio_rate()
1199 encoder = audio_state->encoder; in intel_audio_component_sync_audio_rate()
1202 crtc = to_intel_crtc(encoder->base.crtc); in intel_audio_component_sync_audio_rate()
1205 acomp->aud_sample_rate[port] = rate; in intel_audio_component_sync_audio_rate()
1207 /* FIXME get rid of the crtc->config stuff */ in intel_audio_component_sync_audio_rate()
1208 hsw_audio_config_update(encoder, crtc->config); in intel_audio_component_sync_audio_rate()
1211 mutex_unlock(&display->audio.mutex); in intel_audio_component_sync_audio_rate()
1224 mutex_lock(&display->audio.mutex); in intel_audio_component_get_eld()
1228 drm_dbg_kms(display->drm, "Not valid for port %c\n", in intel_audio_component_get_eld()
1230 mutex_unlock(&display->audio.mutex); in intel_audio_component_get_eld()
1231 return -EINVAL; in intel_audio_component_get_eld()
1234 *enabled = audio_state->encoder != NULL; in intel_audio_component_get_eld()
1236 const u8 *eld = audio_state->eld; in intel_audio_component_get_eld()
1242 mutex_unlock(&display->audio.mutex); in intel_audio_component_get_eld()
1263 if (drm_WARN_ON(display->drm, acomp->base.ops || acomp->base.dev)) in intel_audio_component_bind()
1264 return -EEXIST; in intel_audio_component_bind()
1266 if (drm_WARN_ON(display->drm, in intel_audio_component_bind()
1269 return -ENOMEM; in intel_audio_component_bind()
1271 drm_modeset_lock_all(display->drm); in intel_audio_component_bind()
1272 acomp->base.ops = &intel_audio_component_ops; in intel_audio_component_bind()
1273 acomp->base.dev = drv_kdev; in intel_audio_component_bind()
1275 for (i = 0; i < ARRAY_SIZE(acomp->aud_sample_rate); i++) in intel_audio_component_bind()
1276 acomp->aud_sample_rate[i] = 0; in intel_audio_component_bind()
1277 display->audio.component = acomp; in intel_audio_component_bind()
1278 drm_modeset_unlock_all(display->drm); in intel_audio_component_bind()
1289 drm_modeset_lock_all(display->drm); in intel_audio_component_unbind()
1290 acomp->base.ops = NULL; in intel_audio_component_unbind()
1291 acomp->base.dev = NULL; in intel_audio_component_unbind()
1292 display->audio.component = NULL; in intel_audio_component_unbind()
1293 drm_modeset_unlock_all(display->drm); in intel_audio_component_unbind()
1297 if (display->audio.power_refcount) in intel_audio_component_unbind()
1298 drm_err(display->drm, in intel_audio_component_unbind()
1300 display->audio.power_refcount); in intel_audio_component_unbind()
1318 * intel_audio_component_init - initialize and register the audio component
1346 if ((display->platform.tigerlake || display->platform.rocketlake) && in intel_audio_component_init()
1350 drm_dbg_kms(display->drm, in intel_audio_component_init()
1354 display->audio.freq_cntrl = aud_freq; in intel_audio_component_init()
1365 ret = component_add_typed(display->drm->dev, in intel_audio_component_register()
1369 drm_err(display->drm, in intel_audio_component_register()
1375 display->audio.component_registered = true; in intel_audio_component_register()
1379 * intel_audio_component_cleanup - deregister the audio component
1387 if (!display->audio.component_registered) in intel_audio_component_cleanup()
1390 component_del(display->drm->dev, &intel_audio_component_bind_ops); in intel_audio_component_cleanup()
1391 display->audio.component_registered = false; in intel_audio_component_cleanup()
1395 * intel_audio_init() - Initialize the audio driver either using
1408 if (!display->audio.lpe.platdev) in intel_audio_register()
1413 * intel_audio_deinit() - deinitialize the audio driver
1418 if (display->audio.lpe.platdev) in intel_audio_deinit()