Lines Matching full:display

43  * DOC: High Definition Audio over HDMI and Display Port
46 * HDMI and Display Port. The audio programming sequences are divided into audio
191 static bool needs_wa_14020863754(struct intel_display *display) in needs_wa_14020863754() argument
193 return DISPLAY_VERx100(display) == 3000 || in needs_wa_14020863754()
194 DISPLAY_VERx100(display) == 2000 || in needs_wa_14020863754()
195 DISPLAY_VERx100(display) == 1401; in needs_wa_14020863754()
201 struct intel_display *display = to_intel_display(crtc_state); in audio_config_hdmi_pixel_clock() local
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()
221 drm_dbg_kms(display->drm, in audio_config_hdmi_pixel_clock()
256 static int g4x_eld_buffer_size(struct intel_display *display) in g4x_eld_buffer_size() argument
260 tmp = intel_de_read(display, G4X_AUD_CNTL_ST); in g4x_eld_buffer_size()
268 struct intel_display *display = to_intel_display(encoder); in g4x_audio_codec_get_config() local
273 tmp = intel_de_read(display, G4X_AUD_CNTL_ST); in g4x_audio_codec_get_config()
277 intel_de_rmw(display, G4X_AUD_CNTL_ST, G4X_ELD_ADDRESS_MASK, 0); in g4x_audio_codec_get_config()
279 eld_buffer_size = g4x_eld_buffer_size(display); in g4x_audio_codec_get_config()
283 eld[i] = intel_de_read(display, G4X_HDMIW_HDMIEDID); in g4x_audio_codec_get_config()
290 struct intel_display *display = to_intel_display(encoder); in g4x_audio_codec_disable() local
294 intel_de_rmw(display, G4X_AUD_CNTL_ST, in g4x_audio_codec_disable()
305 struct intel_display *display = to_intel_display(encoder); in g4x_audio_codec_enable() local
312 intel_de_rmw(display, G4X_AUD_CNTL_ST, in g4x_audio_codec_enable()
315 eld_buffer_size = g4x_eld_buffer_size(display); in g4x_audio_codec_enable()
319 intel_de_write(display, G4X_HDMIW_HDMIEDID, eld[i]); in g4x_audio_codec_enable()
321 intel_de_write(display, G4X_HDMIW_HDMIEDID, 0); in g4x_audio_codec_enable()
323 drm_WARN_ON(display->drm, in g4x_audio_codec_enable()
324 (intel_de_read(display, G4X_AUD_CNTL_ST) & G4X_ELD_ADDRESS_MASK) != 0); in g4x_audio_codec_enable()
326 intel_de_rmw(display, G4X_AUD_CNTL_ST, in g4x_audio_codec_enable()
334 struct intel_display *display = to_intel_display(encoder); in hsw_dp_audio_config_update() local
338 intel_de_rmw(display, HSW_AUD_CFG(cpu_transcoder), in hsw_dp_audio_config_update()
352 struct intel_display *display = to_intel_display(encoder); in hsw_hdmi_audio_config_update() local
353 struct i915_audio_component *acomp = display->audio.component; in hsw_hdmi_audio_config_update()
361 tmp = intel_de_read(display, HSW_AUD_CFG(cpu_transcoder)); 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()
378 intel_de_write(display, HSW_AUD_CFG(cpu_transcoder), tmp); in hsw_hdmi_audio_config_update()
384 tmp = intel_de_read(display, HSW_AUD_M_CTS_ENABLE(cpu_transcoder)); in hsw_hdmi_audio_config_update()
387 intel_de_write(display, HSW_AUD_M_CTS_ENABLE(cpu_transcoder), tmp); in hsw_hdmi_audio_config_update()
404 struct intel_display *display = to_intel_display(encoder); in hsw_audio_codec_disable() local
408 mutex_lock(&display->audio.mutex); in hsw_audio_codec_disable()
411 intel_de_rmw(display, HSW_AUD_CFG(cpu_transcoder), in hsw_audio_codec_disable()
420 intel_de_rmw(display, HSW_AUD_PIN_ELD_CP_VLD, in hsw_audio_codec_disable()
427 intel_de_rmw(display, HSW_AUD_PIN_ELD_CP_VLD, in hsw_audio_codec_disable()
430 if (needs_wa_14020863754(display)) in hsw_audio_codec_disable()
431 intel_de_rmw(display, AUD_CHICKENBIT_REG3, DACBE_DISABLE_MIN_HBLANK_FIX, 0); in hsw_audio_codec_disable()
433 mutex_unlock(&display->audio.mutex); in hsw_audio_codec_disable()
439 struct intel_display *display = to_intel_display(encoder); in calc_hblank_early_prog() local
451 cdclk = display->cdclk.hw.cdclk; in calc_hblank_early_prog()
457 drm_dbg_kms(display->drm, in calc_hblank_early_prog()
502 struct intel_display *display = to_intel_display(encoder); in enable_audio_dsc_wa() local
507 if (DISPLAY_VER(display) < 11) in enable_audio_dsc_wa()
510 val = intel_de_read(display, AUD_CONFIG_BE); in enable_audio_dsc_wa()
512 if (DISPLAY_VER(display) == 11) in enable_audio_dsc_wa()
514 else if (DISPLAY_VER(display) >= 12) in enable_audio_dsc_wa()
541 intel_de_write(display, AUD_CONFIG_BE, val); in enable_audio_dsc_wa()
548 struct intel_display *display = to_intel_display(encoder); in hsw_audio_codec_enable() local
552 mutex_lock(&display->audio.mutex); in hsw_audio_codec_enable()
558 if (needs_wa_14020863754(display)) in hsw_audio_codec_enable()
559 intel_de_rmw(display, AUD_CHICKENBIT_REG3, 0, DACBE_DISABLE_MIN_HBLANK_FIX); in hsw_audio_codec_enable()
562 intel_de_rmw(display, HSW_AUD_PIN_ELD_CP_VLD, in hsw_audio_codec_enable()
568 intel_de_rmw(display, HSW_AUD_PIN_ELD_CP_VLD, in hsw_audio_codec_enable()
579 mutex_unlock(&display->audio.mutex); in hsw_audio_codec_enable()
586 static void ibx_audio_regs_init(struct intel_display *display, in ibx_audio_regs_init() argument
590 struct drm_i915_private *i915 = to_i915(display->drm); in ibx_audio_regs_init()
592 if (display->platform.valleyview || display->platform.cherryview) { in ibx_audio_regs_init()
614 struct intel_display *display = to_intel_display(encoder); in ibx_audio_codec_disable() local
620 if (drm_WARN_ON(display->drm, port == PORT_A)) in ibx_audio_codec_disable()
623 ibx_audio_regs_init(display, pipe, &regs); in ibx_audio_codec_disable()
625 mutex_lock(&display->audio.mutex); in ibx_audio_codec_disable()
628 intel_de_rmw(display, regs.aud_config, in ibx_audio_codec_disable()
637 intel_de_rmw(display, regs.aud_cntrl_st2, in ibx_audio_codec_disable()
640 mutex_unlock(&display->audio.mutex); in ibx_audio_codec_disable()
650 struct intel_display *display = to_intel_display(encoder); in ibx_audio_codec_enable() local
656 if (drm_WARN_ON(display->drm, port == PORT_A)) in ibx_audio_codec_enable()
661 ibx_audio_regs_init(display, pipe, &regs); in ibx_audio_codec_enable()
663 mutex_lock(&display->audio.mutex); in ibx_audio_codec_enable()
666 intel_de_rmw(display, regs.aud_cntrl_st2, in ibx_audio_codec_enable()
675 intel_de_rmw(display, regs.aud_config, in ibx_audio_codec_enable()
683 mutex_unlock(&display->audio.mutex); in ibx_audio_codec_enable()
688 struct intel_display *display = to_intel_display(crtc_state); in intel_audio_sdp_split_update() local
691 if (HAS_DP20(display)) in intel_audio_sdp_split_update()
692 intel_de_rmw(display, AUD_DP_2DOT0_CTRL(trans), AUD_ENABLE_SDP_SPLIT, in intel_audio_sdp_split_update()
700 struct intel_display *display = to_intel_display(encoder); in intel_audio_compute_config() local
707 drm_dbg_kms(display->drm, in intel_audio_compute_config()
736 struct intel_display *display = to_intel_display(encoder); in intel_audio_codec_enable() local
737 struct i915_audio_component *acomp = display->audio.component; in intel_audio_codec_enable()
747 drm_dbg_kms(display->drm, in intel_audio_codec_enable()
754 if (display->funcs.audio) in intel_audio_codec_enable()
755 display->funcs.audio->audio_codec_enable(encoder, in intel_audio_codec_enable()
759 mutex_lock(&display->audio.mutex); in intel_audio_codec_enable()
761 audio_state = &display->audio.state[cpu_transcoder]; in intel_audio_codec_enable()
767 mutex_unlock(&display->audio.mutex); in intel_audio_codec_enable()
778 intel_lpe_audio_notify(display, cpu_transcoder, port, crtc_state->eld, in intel_audio_codec_enable()
796 struct intel_display *display = to_intel_display(encoder); in intel_audio_codec_disable() local
797 struct i915_audio_component *acomp = display->audio.component; in intel_audio_codec_disable()
807 drm_dbg_kms(display->drm, in intel_audio_codec_disable()
813 if (display->funcs.audio) in intel_audio_codec_disable()
814 display->funcs.audio->audio_codec_disable(encoder, in intel_audio_codec_disable()
818 mutex_lock(&display->audio.mutex); in intel_audio_codec_disable()
820 audio_state = &display->audio.state[cpu_transcoder]; in intel_audio_codec_disable()
825 mutex_unlock(&display->audio.mutex); in intel_audio_codec_disable()
836 intel_lpe_audio_notify(display, cpu_transcoder, port, NULL, 0, false); in intel_audio_codec_disable()
842 struct intel_display *display = to_intel_display(encoder); in intel_acomp_get_config() local
846 mutex_lock(&display->audio.mutex); in intel_acomp_get_config()
848 audio_state = &display->audio.state[cpu_transcoder]; in intel_acomp_get_config()
853 mutex_unlock(&display->audio.mutex); in intel_acomp_get_config()
859 struct intel_display *display = to_intel_display(encoder); in intel_audio_codec_get_config() local
864 if (display->funcs.audio) in intel_audio_codec_get_config()
865 display->funcs.audio->audio_codec_get_config(encoder, crtc_state); in intel_audio_codec_get_config()
888 * @display: display device
890 void intel_audio_hooks_init(struct intel_display *display) in intel_audio_hooks_init() argument
892 struct drm_i915_private *i915 = to_i915(display->drm); in intel_audio_hooks_init()
894 if (display->platform.g4x) in intel_audio_hooks_init()
895 display->funcs.audio = &g4x_audio_funcs; in intel_audio_hooks_init()
896 else if (display->platform.valleyview || display->platform.cherryview || in intel_audio_hooks_init()
898 display->funcs.audio = &ibx_audio_funcs; in intel_audio_hooks_init()
899 else if (display->platform.haswell || DISPLAY_VER(display) >= 8) in intel_audio_hooks_init()
900 display->funcs.audio = &hsw_audio_funcs; in intel_audio_hooks_init()
908 void intel_audio_cdclk_change_pre(struct intel_display *display) in intel_audio_cdclk_change_pre() argument
910 if (DISPLAY_VER(display) >= 13) in intel_audio_cdclk_change_pre()
911 intel_de_rmw(display, AUD_TS_CDCLK_M, AUD_TS_CDCLK_M_EN, 0); in intel_audio_cdclk_change_pre()
920 void intel_audio_cdclk_change_post(struct intel_display *display) in intel_audio_cdclk_change_post() argument
924 if (DISPLAY_VER(display) >= 13) { in intel_audio_cdclk_change_post()
925 get_aud_ts_cdclk_m_n(display->cdclk.hw.ref, in intel_audio_cdclk_change_post()
926 display->cdclk.hw.cdclk, &aud_ts); in intel_audio_cdclk_change_post()
928 intel_de_write(display, AUD_TS_CDCLK_N, aud_ts.n); in intel_audio_cdclk_change_post()
929 intel_de_write(display, AUD_TS_CDCLK_M, aud_ts.m | AUD_TS_CDCLK_M_EN); in intel_audio_cdclk_change_post()
930 drm_dbg_kms(display->drm, "aud_ts_cdclk set to M=%u, N=%u\n", in intel_audio_cdclk_change_post()
956 static void glk_force_audio_cdclk(struct intel_display *display, in glk_force_audio_cdclk() argument
964 crtc = intel_first_crtc(display); in glk_force_audio_cdclk()
969 state = drm_atomic_state_alloc(display->drm); in glk_force_audio_cdclk()
970 if (drm_WARN_ON(display->drm, !state)) in glk_force_audio_cdclk()
985 drm_WARN_ON(display->drm, ret); in glk_force_audio_cdclk()
995 struct intel_display *display = to_intel_display(crtc_state); in intel_audio_min_cdclk() local
1009 if (DISPLAY_VER(display) == 10) { in intel_audio_min_cdclk()
1010 /* Display WA #1145: glk */ in intel_audio_min_cdclk()
1012 } else if (DISPLAY_VER(display) == 9 || display->platform.broadwell) { in intel_audio_min_cdclk()
1013 /* Display WA #1144: skl,bxt */ in intel_audio_min_cdclk()
1022 if (DISPLAY_VER(display) >= 9) in intel_audio_min_cdclk()
1032 if ((display->platform.valleyview || display->platform.cherryview) && in intel_audio_min_cdclk()
1041 struct intel_display *display = to_intel_display(kdev); in intel_audio_component_get_power() local
1047 wakeref = intel_display_power_get(display, POWER_DOMAIN_AUDIO_PLAYBACK); in intel_audio_component_get_power()
1049 if (display->audio.power_refcount++ == 0) { in intel_audio_component_get_power()
1050 if (DISPLAY_VER(display) >= 9) { in intel_audio_component_get_power()
1051 intel_de_write(display, AUD_FREQ_CNTRL, in intel_audio_component_get_power()
1052 display->audio.freq_cntrl); in intel_audio_component_get_power()
1053 drm_dbg_kms(display->drm, in intel_audio_component_get_power()
1055 display->audio.freq_cntrl); in intel_audio_component_get_power()
1059 if (display->platform.geminilake) in intel_audio_component_get_power()
1060 glk_force_audio_cdclk(display, true); in intel_audio_component_get_power()
1062 if (DISPLAY_VER(display) >= 10) in intel_audio_component_get_power()
1063 intel_de_rmw(display, AUD_PIN_BUF_CTL, in intel_audio_component_get_power()
1073 struct intel_display *display = to_intel_display(kdev); in intel_audio_component_put_power() local
1077 if (--display->audio.power_refcount == 0) in intel_audio_component_put_power()
1078 if (display->platform.geminilake) in intel_audio_component_put_power()
1079 glk_force_audio_cdclk(display, false); in intel_audio_component_put_power()
1081 intel_display_power_put(display, POWER_DOMAIN_AUDIO_PLAYBACK, wakeref); in intel_audio_component_put_power()
1087 struct intel_display *display = to_intel_display(kdev); in intel_audio_component_codec_wake_override() local
1090 if (DISPLAY_VER(display) < 9) in intel_audio_component_codec_wake_override()
1099 intel_de_rmw(display, HSW_AUD_CHICKENBIT, in intel_audio_component_codec_wake_override()
1104 intel_de_rmw(display, HSW_AUD_CHICKENBIT, in intel_audio_component_codec_wake_override()
1115 struct intel_display *display = to_intel_display(kdev); in intel_audio_component_get_cdclk_freq() local
1117 if (drm_WARN_ON_ONCE(display->drm, !HAS_DDI(display))) in intel_audio_component_get_cdclk_freq()
1120 return display->cdclk.hw.cdclk; in intel_audio_component_get_cdclk_freq()
1132 static struct intel_audio_state *find_audio_state(struct intel_display *display, in find_audio_state() argument
1140 if (drm_WARN_ON(display->drm, in find_audio_state()
1141 cpu_transcoder >= ARRAY_SIZE(display->audio.state))) in find_audio_state()
1144 audio_state = &display->audio.state[cpu_transcoder]; in find_audio_state()
1156 for_each_cpu_transcoder(display, cpu_transcoder) { in find_audio_state()
1160 audio_state = &display->audio.state[cpu_transcoder]; in find_audio_state()
1174 struct intel_display *display = to_intel_display(kdev); in intel_audio_component_sync_audio_rate() local
1175 struct i915_audio_component *acomp = display->audio.component; in intel_audio_component_sync_audio_rate()
1182 if (!HAS_DDI(display)) in intel_audio_component_sync_audio_rate()
1186 mutex_lock(&display->audio.mutex); in intel_audio_component_sync_audio_rate()
1188 audio_state = find_audio_state(display, port, cpu_transcoder); in intel_audio_component_sync_audio_rate()
1190 drm_dbg_kms(display->drm, "Not valid for port %c\n", in intel_audio_component_sync_audio_rate()
1208 mutex_unlock(&display->audio.mutex); in intel_audio_component_sync_audio_rate()
1217 struct intel_display *display = to_intel_display(kdev); in intel_audio_component_get_eld() local
1221 mutex_lock(&display->audio.mutex); in intel_audio_component_get_eld()
1223 audio_state = find_audio_state(display, port, cpu_transcoder); in intel_audio_component_get_eld()
1225 drm_dbg_kms(display->drm, "Not valid for port %c\n", in intel_audio_component_get_eld()
1227 mutex_unlock(&display->audio.mutex); in intel_audio_component_get_eld()
1239 mutex_unlock(&display->audio.mutex); in intel_audio_component_get_eld()
1256 struct intel_display *display = to_intel_display(drv_kdev); in intel_audio_component_bind() local
1260 if (drm_WARN_ON(display->drm, acomp->base.ops || acomp->base.dev)) in intel_audio_component_bind()
1263 if (drm_WARN_ON(display->drm, in intel_audio_component_bind()
1268 drm_modeset_lock_all(display->drm); in intel_audio_component_bind()
1274 display->audio.component = acomp; in intel_audio_component_bind()
1275 drm_modeset_unlock_all(display->drm); in intel_audio_component_bind()
1283 struct intel_display *display = to_intel_display(drv_kdev); in intel_audio_component_unbind() local
1286 drm_modeset_lock_all(display->drm); in intel_audio_component_unbind()
1289 display->audio.component = NULL; in intel_audio_component_unbind()
1290 drm_modeset_unlock_all(display->drm); in intel_audio_component_unbind()
1294 if (display->audio.power_refcount) in intel_audio_component_unbind()
1295 drm_err(display->drm, in intel_audio_component_unbind()
1297 display->audio.power_refcount); in intel_audio_component_unbind()
1316 * @display: display device
1330 static void intel_audio_component_init(struct intel_display *display) in intel_audio_component_init() argument
1334 if (DISPLAY_VER(display) >= 9) { in intel_audio_component_init()
1335 aud_freq_init = intel_de_read(display, AUD_FREQ_CNTRL); in intel_audio_component_init()
1337 if (DISPLAY_VER(display) >= 12) in intel_audio_component_init()
1343 if ((display->platform.tigerlake || display->platform.rocketlake) && in intel_audio_component_init()
1347 drm_dbg_kms(display->drm, in intel_audio_component_init()
1351 display->audio.freq_cntrl = aud_freq; in intel_audio_component_init()
1355 intel_audio_cdclk_change_post(display); in intel_audio_component_init()
1358 static void intel_audio_component_register(struct intel_display *display) in intel_audio_component_register() argument
1362 ret = component_add_typed(display->drm->dev, in intel_audio_component_register()
1366 drm_err(display->drm, in intel_audio_component_register()
1372 display->audio.component_registered = true; in intel_audio_component_register()
1377 * @display: display device
1382 static void intel_audio_component_cleanup(struct intel_display *display) in intel_audio_component_cleanup() argument
1384 if (!display->audio.component_registered) in intel_audio_component_cleanup()
1387 component_del(display->drm->dev, &intel_audio_component_bind_ops); in intel_audio_component_cleanup()
1388 display->audio.component_registered = false; in intel_audio_component_cleanup()
1394 * @display: display device
1397 void intel_audio_init(struct intel_display *display) in intel_audio_init() argument
1399 if (intel_lpe_audio_init(display) < 0) in intel_audio_init()
1400 intel_audio_component_init(display); in intel_audio_init()
1403 void intel_audio_register(struct intel_display *display) in intel_audio_register() argument
1405 if (!display->audio.lpe.platdev) in intel_audio_register()
1406 intel_audio_component_register(display); in intel_audio_register()
1411 * @display: display device
1413 void intel_audio_deinit(struct intel_display *display) in intel_audio_deinit() argument
1415 if (display->audio.lpe.platdev) in intel_audio_deinit()
1416 intel_lpe_audio_teardown(display); in intel_audio_deinit()
1418 intel_audio_component_cleanup(display); in intel_audio_deinit()