Lines Matching full:i915
65 * struct &i915_audio_component_audio_ops @audio_ops is called from i915 driver.
256 struct drm_i915_private *i915 = to_i915(crtc_state->uapi.crtc->dev); in audio_config_hdmi_pixel_clock() local
266 if (DISPLAY_VER(i915) < 12 && adjusted_mode->crtc_clock > 148500) in audio_config_hdmi_pixel_clock()
270 drm_dbg_kms(&i915->drm, in audio_config_hdmi_pixel_clock()
276 drm_dbg_kms(&i915->drm, in audio_config_hdmi_pixel_clock()
311 static int g4x_eld_buffer_size(struct drm_i915_private *i915) in g4x_eld_buffer_size() argument
315 tmp = intel_de_read(i915, G4X_AUD_CNTL_ST); in g4x_eld_buffer_size()
323 struct drm_i915_private *i915 = to_i915(encoder->base.dev); in g4x_audio_codec_get_config() local
328 tmp = intel_de_read(i915, G4X_AUD_CNTL_ST); in g4x_audio_codec_get_config()
332 intel_de_rmw(i915, G4X_AUD_CNTL_ST, G4X_ELD_ADDRESS_MASK, 0); in g4x_audio_codec_get_config()
334 eld_buffer_size = g4x_eld_buffer_size(i915); in g4x_audio_codec_get_config()
338 eld[i] = intel_de_read(i915, G4X_HDMIW_HDMIEDID); in g4x_audio_codec_get_config()
345 struct drm_i915_private *i915 = to_i915(encoder->base.dev); in g4x_audio_codec_disable() local
349 intel_de_rmw(i915, G4X_AUD_CNTL_ST, in g4x_audio_codec_disable()
360 struct drm_i915_private *i915 = to_i915(encoder->base.dev); in g4x_audio_codec_enable() local
367 intel_de_rmw(i915, G4X_AUD_CNTL_ST, in g4x_audio_codec_enable()
370 eld_buffer_size = g4x_eld_buffer_size(i915); in g4x_audio_codec_enable()
374 intel_de_write(i915, G4X_HDMIW_HDMIEDID, eld[i]); in g4x_audio_codec_enable()
376 intel_de_write(i915, G4X_HDMIW_HDMIEDID, 0); in g4x_audio_codec_enable()
378 drm_WARN_ON(&i915->drm, in g4x_audio_codec_enable()
379 (intel_de_read(i915, G4X_AUD_CNTL_ST) & G4X_ELD_ADDRESS_MASK) != 0); in g4x_audio_codec_enable()
381 intel_de_rmw(i915, G4X_AUD_CNTL_ST, in g4x_audio_codec_enable()
389 struct drm_i915_private *i915 = to_i915(encoder->base.dev); in hsw_dp_audio_config_update() local
390 struct i915_audio_component *acomp = i915->display.audio.component; in hsw_dp_audio_config_update()
400 drm_dbg_kms(&i915->drm, "using Maud %u, Naud %u\n", nm->m, in hsw_dp_audio_config_update()
403 drm_dbg_kms(&i915->drm, "using automatic Maud, Naud\n"); in hsw_dp_audio_config_update()
405 tmp = intel_de_read(i915, HSW_AUD_CFG(cpu_transcoder)); in hsw_dp_audio_config_update()
417 intel_de_write(i915, HSW_AUD_CFG(cpu_transcoder), tmp); in hsw_dp_audio_config_update()
419 tmp = intel_de_read(i915, HSW_AUD_M_CTS_ENABLE(cpu_transcoder)); in hsw_dp_audio_config_update()
430 intel_de_write(i915, HSW_AUD_M_CTS_ENABLE(cpu_transcoder), tmp); in hsw_dp_audio_config_update()
437 struct drm_i915_private *i915 = to_i915(encoder->base.dev); in hsw_hdmi_audio_config_update() local
438 struct i915_audio_component *acomp = i915->display.audio.component; in hsw_hdmi_audio_config_update()
446 tmp = intel_de_read(i915, HSW_AUD_CFG(cpu_transcoder)); in hsw_hdmi_audio_config_update()
454 drm_dbg_kms(&i915->drm, "using N %d\n", n); in hsw_hdmi_audio_config_update()
460 drm_dbg_kms(&i915->drm, "using automatic N\n"); in hsw_hdmi_audio_config_update()
463 intel_de_write(i915, HSW_AUD_CFG(cpu_transcoder), tmp); in hsw_hdmi_audio_config_update()
469 tmp = intel_de_read(i915, HSW_AUD_M_CTS_ENABLE(cpu_transcoder)); in hsw_hdmi_audio_config_update()
472 intel_de_write(i915, HSW_AUD_M_CTS_ENABLE(cpu_transcoder), tmp); in hsw_hdmi_audio_config_update()
489 struct drm_i915_private *i915 = to_i915(encoder->base.dev); in hsw_audio_codec_disable() local
493 mutex_lock(&i915->display.audio.mutex); in hsw_audio_codec_disable()
496 intel_de_rmw(i915, HSW_AUD_CFG(cpu_transcoder), in hsw_audio_codec_disable()
505 intel_de_rmw(i915, HSW_AUD_PIN_ELD_CP_VLD, in hsw_audio_codec_disable()
512 intel_de_rmw(i915, HSW_AUD_PIN_ELD_CP_VLD, in hsw_audio_codec_disable()
515 mutex_unlock(&i915->display.audio.mutex); in hsw_audio_codec_disable()
521 struct drm_i915_private *i915 = to_i915(encoder->base.dev); in calc_hblank_early_prog() local
533 cdclk = i915->display.cdclk.hw.cdclk; in calc_hblank_early_prog()
539 drm_dbg_kms(&i915->drm, in calc_hblank_early_prog()
584 struct drm_i915_private *i915 = to_i915(encoder->base.dev); in enable_audio_dsc_wa() local
589 if (DISPLAY_VER(i915) < 11) in enable_audio_dsc_wa()
592 val = intel_de_read(i915, AUD_CONFIG_BE); in enable_audio_dsc_wa()
594 if (DISPLAY_VER(i915) == 11) in enable_audio_dsc_wa()
596 else if (DISPLAY_VER(i915) >= 12) in enable_audio_dsc_wa()
623 intel_de_write(i915, AUD_CONFIG_BE, val); in enable_audio_dsc_wa()
630 struct drm_i915_private *i915 = to_i915(encoder->base.dev); in hsw_audio_codec_enable() local
634 mutex_lock(&i915->display.audio.mutex); in hsw_audio_codec_enable()
641 intel_de_rmw(i915, HSW_AUD_PIN_ELD_CP_VLD, in hsw_audio_codec_enable()
647 intel_de_rmw(i915, HSW_AUD_PIN_ELD_CP_VLD, in hsw_audio_codec_enable()
658 mutex_unlock(&i915->display.audio.mutex); in hsw_audio_codec_enable()
665 static void ibx_audio_regs_init(struct drm_i915_private *i915, in ibx_audio_regs_init() argument
669 if (IS_VALLEYVIEW(i915) || IS_CHERRYVIEW(i915)) { in ibx_audio_regs_init()
674 } else if (HAS_PCH_CPT(i915)) { in ibx_audio_regs_init()
679 } else if (HAS_PCH_IBX(i915)) { in ibx_audio_regs_init()
691 struct drm_i915_private *i915 = to_i915(encoder->base.dev); in ibx_audio_codec_disable() local
697 if (drm_WARN_ON(&i915->drm, port == PORT_A)) in ibx_audio_codec_disable()
700 ibx_audio_regs_init(i915, pipe, ®s); in ibx_audio_codec_disable()
702 mutex_lock(&i915->display.audio.mutex); in ibx_audio_codec_disable()
705 intel_de_rmw(i915, regs.aud_config, in ibx_audio_codec_disable()
714 intel_de_rmw(i915, regs.aud_cntrl_st2, in ibx_audio_codec_disable()
717 mutex_unlock(&i915->display.audio.mutex); in ibx_audio_codec_disable()
727 struct drm_i915_private *i915 = to_i915(encoder->base.dev); in ibx_audio_codec_enable() local
733 if (drm_WARN_ON(&i915->drm, port == PORT_A)) in ibx_audio_codec_enable()
738 ibx_audio_regs_init(i915, pipe, ®s); in ibx_audio_codec_enable()
740 mutex_lock(&i915->display.audio.mutex); in ibx_audio_codec_enable()
743 intel_de_rmw(i915, regs.aud_cntrl_st2, in ibx_audio_codec_enable()
752 intel_de_rmw(i915, regs.aud_config, in ibx_audio_codec_enable()
760 mutex_unlock(&i915->display.audio.mutex); in ibx_audio_codec_enable()
766 struct drm_i915_private *i915 = to_i915(crtc->base.dev); in intel_audio_sdp_split_update() local
769 if (HAS_DP20(i915)) in intel_audio_sdp_split_update()
770 intel_de_rmw(i915, AUD_DP_2DOT0_CTRL(trans), AUD_ENABLE_SDP_SPLIT, in intel_audio_sdp_split_update()
778 struct drm_i915_private *i915 = to_i915(encoder->base.dev); in intel_audio_compute_config() local
784 drm_dbg_kms(&i915->drm, in intel_audio_compute_config()
811 struct drm_i915_private *i915 = to_i915(encoder->base.dev); in intel_audio_codec_enable() local
812 struct i915_audio_component *acomp = i915->display.audio.component; in intel_audio_codec_enable()
822 …drm_dbg_kms(&i915->drm, "[CONNECTOR:%d:%s][ENCODER:%d:%s] Enable audio codec on [CRTC:%d:%s], %u b… in intel_audio_codec_enable()
828 if (i915->display.funcs.audio) in intel_audio_codec_enable()
829 i915->display.funcs.audio->audio_codec_enable(encoder, in intel_audio_codec_enable()
833 mutex_lock(&i915->display.audio.mutex); in intel_audio_codec_enable()
835 audio_state = &i915->display.audio.state[cpu_transcoder]; in intel_audio_codec_enable()
841 mutex_unlock(&i915->display.audio.mutex); in intel_audio_codec_enable()
852 intel_lpe_audio_notify(i915, cpu_transcoder, port, crtc_state->eld, in intel_audio_codec_enable()
870 struct drm_i915_private *i915 = to_i915(encoder->base.dev); in intel_audio_codec_disable() local
871 struct i915_audio_component *acomp = i915->display.audio.component; in intel_audio_codec_disable()
881 drm_dbg_kms(&i915->drm, "[CONNECTOR:%d:%s][ENCODER:%d:%s] Disable audio codec on [CRTC:%d:%s]\n", in intel_audio_codec_disable()
886 if (i915->display.funcs.audio) in intel_audio_codec_disable()
887 i915->display.funcs.audio->audio_codec_disable(encoder, in intel_audio_codec_disable()
891 mutex_lock(&i915->display.audio.mutex); in intel_audio_codec_disable()
893 audio_state = &i915->display.audio.state[cpu_transcoder]; in intel_audio_codec_disable()
898 mutex_unlock(&i915->display.audio.mutex); in intel_audio_codec_disable()
909 intel_lpe_audio_notify(i915, cpu_transcoder, port, NULL, 0, false); in intel_audio_codec_disable()
915 struct drm_i915_private *i915 = to_i915(encoder->base.dev); in intel_acomp_get_config() local
919 mutex_lock(&i915->display.audio.mutex); in intel_acomp_get_config()
921 audio_state = &i915->display.audio.state[cpu_transcoder]; in intel_acomp_get_config()
926 mutex_unlock(&i915->display.audio.mutex); in intel_acomp_get_config()
932 struct drm_i915_private *i915 = to_i915(encoder->base.dev); in intel_audio_codec_get_config() local
937 if (i915->display.funcs.audio) in intel_audio_codec_get_config()
938 i915->display.funcs.audio->audio_codec_get_config(encoder, crtc_state); in intel_audio_codec_get_config()
961 * @i915: device private
963 void intel_audio_hooks_init(struct drm_i915_private *i915) in intel_audio_hooks_init() argument
965 if (IS_G4X(i915)) in intel_audio_hooks_init()
966 i915->display.funcs.audio = &g4x_audio_funcs; in intel_audio_hooks_init()
967 else if (IS_VALLEYVIEW(i915) || IS_CHERRYVIEW(i915) || in intel_audio_hooks_init()
968 HAS_PCH_CPT(i915) || HAS_PCH_IBX(i915)) in intel_audio_hooks_init()
969 i915->display.funcs.audio = &ibx_audio_funcs; in intel_audio_hooks_init()
970 else if (IS_HASWELL(i915) || DISPLAY_VER(i915) >= 8) in intel_audio_hooks_init()
971 i915->display.funcs.audio = &hsw_audio_funcs; in intel_audio_hooks_init()
979 void intel_audio_cdclk_change_pre(struct drm_i915_private *i915) in intel_audio_cdclk_change_pre() argument
981 if (DISPLAY_VER(i915) >= 13) in intel_audio_cdclk_change_pre()
982 intel_de_rmw(i915, AUD_TS_CDCLK_M, AUD_TS_CDCLK_M_EN, 0); in intel_audio_cdclk_change_pre()
991 void intel_audio_cdclk_change_post(struct drm_i915_private *i915) in intel_audio_cdclk_change_post() argument
995 if (DISPLAY_VER(i915) >= 13) { in intel_audio_cdclk_change_post()
996 get_aud_ts_cdclk_m_n(i915->display.cdclk.hw.ref, i915->display.cdclk.hw.cdclk, &aud_ts); in intel_audio_cdclk_change_post()
998 intel_de_write(i915, AUD_TS_CDCLK_N, aud_ts.n); in intel_audio_cdclk_change_post()
999 intel_de_write(i915, AUD_TS_CDCLK_M, aud_ts.m | AUD_TS_CDCLK_M_EN); in intel_audio_cdclk_change_post()
1000 drm_dbg_kms(&i915->drm, "aud_ts_cdclk set to M=%u, N=%u\n", aud_ts.m, aud_ts.n); in intel_audio_cdclk_change_post()
1025 static void glk_force_audio_cdclk(struct drm_i915_private *i915, in glk_force_audio_cdclk() argument
1033 crtc = intel_first_crtc(i915); in glk_force_audio_cdclk()
1038 state = drm_atomic_state_alloc(&i915->drm); in glk_force_audio_cdclk()
1039 if (drm_WARN_ON(&i915->drm, !state)) in glk_force_audio_cdclk()
1054 drm_WARN_ON(&i915->drm, ret); in glk_force_audio_cdclk()
1064 struct drm_i915_private *i915 = kdev_to_i915(kdev); in i915_audio_component_get_power() local
1070 ret = intel_display_power_get(i915, POWER_DOMAIN_AUDIO_PLAYBACK); in i915_audio_component_get_power()
1072 if (i915->display.audio.power_refcount++ == 0) { in i915_audio_component_get_power()
1073 if (DISPLAY_VER(i915) >= 9) { in i915_audio_component_get_power()
1074 intel_de_write(i915, AUD_FREQ_CNTRL, in i915_audio_component_get_power()
1075 i915->display.audio.freq_cntrl); in i915_audio_component_get_power()
1076 drm_dbg_kms(&i915->drm, in i915_audio_component_get_power()
1078 i915->display.audio.freq_cntrl); in i915_audio_component_get_power()
1082 if (IS_GEMINILAKE(i915)) in i915_audio_component_get_power()
1083 glk_force_audio_cdclk(i915, true); in i915_audio_component_get_power()
1085 if (DISPLAY_VER(i915) >= 10) in i915_audio_component_get_power()
1086 intel_de_rmw(i915, AUD_PIN_BUF_CTL, in i915_audio_component_get_power()
1096 struct drm_i915_private *i915 = kdev_to_i915(kdev); in i915_audio_component_put_power() local
1099 if (--i915->display.audio.power_refcount == 0) in i915_audio_component_put_power()
1100 if (IS_GEMINILAKE(i915)) in i915_audio_component_put_power()
1101 glk_force_audio_cdclk(i915, false); in i915_audio_component_put_power()
1103 intel_display_power_put(i915, POWER_DOMAIN_AUDIO_PLAYBACK, cookie); in i915_audio_component_put_power()
1109 struct drm_i915_private *i915 = kdev_to_i915(kdev); in i915_audio_component_codec_wake_override() local
1112 if (DISPLAY_VER(i915) < 9) in i915_audio_component_codec_wake_override()
1121 intel_de_rmw(i915, HSW_AUD_CHICKENBIT, in i915_audio_component_codec_wake_override()
1126 intel_de_rmw(i915, HSW_AUD_CHICKENBIT, in i915_audio_component_codec_wake_override()
1137 struct drm_i915_private *i915 = kdev_to_i915(kdev); in i915_audio_component_get_cdclk_freq() local
1139 if (drm_WARN_ON_ONCE(&i915->drm, !HAS_DDI(i915))) in i915_audio_component_get_cdclk_freq()
1142 return i915->display.cdclk.hw.cdclk; in i915_audio_component_get_cdclk_freq()
1154 static struct intel_audio_state *find_audio_state(struct drm_i915_private *i915, in find_audio_state() argument
1162 if (drm_WARN_ON(&i915->drm, in find_audio_state()
1163 cpu_transcoder >= ARRAY_SIZE(i915->display.audio.state))) in find_audio_state()
1166 audio_state = &i915->display.audio.state[cpu_transcoder]; in find_audio_state()
1178 for_each_cpu_transcoder(i915, cpu_transcoder) { in find_audio_state()
1182 audio_state = &i915->display.audio.state[cpu_transcoder]; in find_audio_state()
1196 struct drm_i915_private *i915 = kdev_to_i915(kdev); in i915_audio_component_sync_audio_rate() local
1197 struct i915_audio_component *acomp = i915->display.audio.component; in i915_audio_component_sync_audio_rate()
1204 if (!HAS_DDI(i915)) in i915_audio_component_sync_audio_rate()
1208 mutex_lock(&i915->display.audio.mutex); in i915_audio_component_sync_audio_rate()
1210 audio_state = find_audio_state(i915, port, cpu_transcoder); in i915_audio_component_sync_audio_rate()
1212 drm_dbg_kms(&i915->drm, "Not valid for port %c\n", port_name(port)); in i915_audio_component_sync_audio_rate()
1229 mutex_unlock(&i915->display.audio.mutex); in i915_audio_component_sync_audio_rate()
1238 struct drm_i915_private *i915 = kdev_to_i915(kdev); in i915_audio_component_get_eld() local
1242 mutex_lock(&i915->display.audio.mutex); in i915_audio_component_get_eld()
1244 audio_state = find_audio_state(i915, port, cpu_transcoder); in i915_audio_component_get_eld()
1246 drm_dbg_kms(&i915->drm, "Not valid for port %c\n", port_name(port)); in i915_audio_component_get_eld()
1247 mutex_unlock(&i915->display.audio.mutex); in i915_audio_component_get_eld()
1259 mutex_unlock(&i915->display.audio.mutex); in i915_audio_component_get_eld()
1277 struct drm_i915_private *i915 = kdev_to_i915(i915_kdev); in i915_audio_component_bind() local
1280 if (drm_WARN_ON(&i915->drm, acomp->base.ops || acomp->base.dev)) in i915_audio_component_bind()
1283 if (drm_WARN_ON(&i915->drm, in i915_audio_component_bind()
1288 drm_modeset_lock_all(&i915->drm); in i915_audio_component_bind()
1294 i915->display.audio.component = acomp; in i915_audio_component_bind()
1295 drm_modeset_unlock_all(&i915->drm); in i915_audio_component_bind()
1304 struct drm_i915_private *i915 = kdev_to_i915(i915_kdev); in i915_audio_component_unbind() local
1306 drm_modeset_lock_all(&i915->drm); in i915_audio_component_unbind()
1309 i915->display.audio.component = NULL; in i915_audio_component_unbind()
1310 drm_modeset_unlock_all(&i915->drm); in i915_audio_component_unbind()
1314 if (i915->display.audio.power_refcount) in i915_audio_component_unbind()
1315 drm_err(&i915->drm, "audio power refcount %d after unbind\n", in i915_audio_component_unbind()
1316 i915->display.audio.power_refcount); in i915_audio_component_unbind()
1335 * @i915: i915 device instance
1349 static void i915_audio_component_init(struct drm_i915_private *i915) in i915_audio_component_init() argument
1354 ret = component_add_typed(i915->drm.dev, in i915_audio_component_init()
1358 drm_err(&i915->drm, in i915_audio_component_init()
1364 if (DISPLAY_VER(i915) >= 9) { in i915_audio_component_init()
1365 aud_freq_init = intel_de_read(i915, AUD_FREQ_CNTRL); in i915_audio_component_init()
1367 if (DISPLAY_VER(i915) >= 12) in i915_audio_component_init()
1373 if ((IS_TIGERLAKE(i915) || IS_ROCKETLAKE(i915)) && in i915_audio_component_init()
1377 drm_dbg_kms(&i915->drm, "use AUD_FREQ_CNTRL of 0x%x (init value 0x%x)\n", in i915_audio_component_init()
1380 i915->display.audio.freq_cntrl = aud_freq; in i915_audio_component_init()
1384 intel_audio_cdclk_change_post(i915); in i915_audio_component_init()
1386 i915->display.audio.component_registered = true; in i915_audio_component_init()
1391 * @i915: i915 device instance
1396 static void i915_audio_component_cleanup(struct drm_i915_private *i915) in i915_audio_component_cleanup() argument
1398 if (!i915->display.audio.component_registered) in i915_audio_component_cleanup()
1401 component_del(i915->drm.dev, &i915_audio_component_bind_ops); in i915_audio_component_cleanup()
1402 i915->display.audio.component_registered = false; in i915_audio_component_cleanup()
1408 * @i915: the i915 drm device private data
1411 void intel_audio_init(struct drm_i915_private *i915) in intel_audio_init() argument
1413 if (intel_lpe_audio_init(i915) < 0) in intel_audio_init()
1414 i915_audio_component_init(i915); in intel_audio_init()
1419 * @i915: the i915 drm device private data
1422 void intel_audio_deinit(struct drm_i915_private *i915) in intel_audio_deinit() argument
1424 if (i915->display.audio.lpe.platdev != NULL) in intel_audio_deinit()
1425 intel_lpe_audio_teardown(i915); in intel_audio_deinit()
1427 i915_audio_component_cleanup(i915); in intel_audio_deinit()