Lines Matching defs:i915

65  * struct &i915_audio_component_audio_ops @audio_ops is called from i915 driver.
189 struct drm_i915_private *i915 = to_i915(crtc_state->uapi.crtc->dev);
199 if (DISPLAY_VER(i915) < 12 && adjusted_mode->crtc_clock > 148500)
203 drm_dbg_kms(&i915->drm,
209 drm_dbg_kms(&i915->drm,
244 static int g4x_eld_buffer_size(struct drm_i915_private *i915)
248 tmp = intel_de_read(i915, G4X_AUD_CNTL_ST);
256 struct drm_i915_private *i915 = to_i915(encoder->base.dev);
261 tmp = intel_de_read(i915, G4X_AUD_CNTL_ST);
265 intel_de_rmw(i915, G4X_AUD_CNTL_ST, G4X_ELD_ADDRESS_MASK, 0);
267 eld_buffer_size = g4x_eld_buffer_size(i915);
271 eld[i] = intel_de_read(i915, G4X_HDMIW_HDMIEDID);
278 struct drm_i915_private *i915 = to_i915(encoder->base.dev);
282 intel_de_rmw(i915, G4X_AUD_CNTL_ST,
293 struct drm_i915_private *i915 = to_i915(encoder->base.dev);
300 intel_de_rmw(i915, G4X_AUD_CNTL_ST,
303 eld_buffer_size = g4x_eld_buffer_size(i915);
307 intel_de_write(i915, G4X_HDMIW_HDMIEDID, eld[i]);
309 intel_de_write(i915, G4X_HDMIW_HDMIEDID, 0);
311 drm_WARN_ON(&i915->drm,
312 (intel_de_read(i915, G4X_AUD_CNTL_ST) & G4X_ELD_ADDRESS_MASK) != 0);
314 intel_de_rmw(i915, G4X_AUD_CNTL_ST,
322 struct drm_i915_private *i915 = to_i915(encoder->base.dev);
326 intel_de_rmw(i915, HSW_AUD_CFG(cpu_transcoder),
340 struct drm_i915_private *i915 = to_i915(encoder->base.dev);
341 struct i915_audio_component *acomp = i915->display.audio.component;
349 tmp = intel_de_read(i915, HSW_AUD_CFG(cpu_transcoder));
357 drm_dbg_kms(&i915->drm, "using N %d\n", n);
363 drm_dbg_kms(&i915->drm, "using automatic N\n");
366 intel_de_write(i915, HSW_AUD_CFG(cpu_transcoder), tmp);
372 tmp = intel_de_read(i915, HSW_AUD_M_CTS_ENABLE(cpu_transcoder));
375 intel_de_write(i915, HSW_AUD_M_CTS_ENABLE(cpu_transcoder), tmp);
392 struct drm_i915_private *i915 = to_i915(encoder->base.dev);
396 mutex_lock(&i915->display.audio.mutex);
399 intel_de_rmw(i915, HSW_AUD_CFG(cpu_transcoder),
408 intel_de_rmw(i915, HSW_AUD_PIN_ELD_CP_VLD,
415 intel_de_rmw(i915, HSW_AUD_PIN_ELD_CP_VLD,
418 mutex_unlock(&i915->display.audio.mutex);
424 struct drm_i915_private *i915 = to_i915(encoder->base.dev);
436 cdclk = i915->display.cdclk.hw.cdclk;
442 drm_dbg_kms(&i915->drm,
487 struct drm_i915_private *i915 = to_i915(encoder->base.dev);
492 if (DISPLAY_VER(i915) < 11)
495 val = intel_de_read(i915, AUD_CONFIG_BE);
497 if (DISPLAY_VER(i915) == 11)
499 else if (DISPLAY_VER(i915) >= 12)
526 intel_de_write(i915, AUD_CONFIG_BE, val);
533 struct drm_i915_private *i915 = to_i915(encoder->base.dev);
537 mutex_lock(&i915->display.audio.mutex);
544 intel_de_rmw(i915, HSW_AUD_PIN_ELD_CP_VLD,
550 intel_de_rmw(i915, HSW_AUD_PIN_ELD_CP_VLD,
561 mutex_unlock(&i915->display.audio.mutex);
568 static void ibx_audio_regs_init(struct drm_i915_private *i915,
572 if (IS_VALLEYVIEW(i915) || IS_CHERRYVIEW(i915)) {
577 } else if (HAS_PCH_CPT(i915)) {
582 } else if (HAS_PCH_IBX(i915)) {
594 struct drm_i915_private *i915 = to_i915(encoder->base.dev);
600 if (drm_WARN_ON(&i915->drm, port == PORT_A))
603 ibx_audio_regs_init(i915, pipe, &regs);
605 mutex_lock(&i915->display.audio.mutex);
608 intel_de_rmw(i915, regs.aud_config,
617 intel_de_rmw(i915, regs.aud_cntrl_st2,
620 mutex_unlock(&i915->display.audio.mutex);
630 struct drm_i915_private *i915 = to_i915(encoder->base.dev);
636 if (drm_WARN_ON(&i915->drm, port == PORT_A))
641 ibx_audio_regs_init(i915, pipe, &regs);
643 mutex_lock(&i915->display.audio.mutex);
646 intel_de_rmw(i915, regs.aud_cntrl_st2,
655 intel_de_rmw(i915, regs.aud_config,
663 mutex_unlock(&i915->display.audio.mutex);
669 struct drm_i915_private *i915 = to_i915(crtc->base.dev);
672 if (HAS_DP20(i915))
673 intel_de_rmw(i915, AUD_DP_2DOT0_CTRL(trans), AUD_ENABLE_SDP_SPLIT,
681 struct drm_i915_private *i915 = to_i915(encoder->base.dev);
687 drm_dbg_kms(&i915->drm,
714 struct drm_i915_private *i915 = to_i915(encoder->base.dev);
715 struct i915_audio_component *acomp = i915->display.audio.component;
725 drm_dbg_kms(&i915->drm, "[CONNECTOR:%d:%s][ENCODER:%d:%s] Enable audio codec on [CRTC:%d:%s], %u bytes ELD\n",
731 if (i915->display.funcs.audio)
732 i915->display.funcs.audio->audio_codec_enable(encoder,
736 mutex_lock(&i915->display.audio.mutex);
738 audio_state = &i915->display.audio.state[cpu_transcoder];
744 mutex_unlock(&i915->display.audio.mutex);
755 intel_lpe_audio_notify(i915, cpu_transcoder, port, crtc_state->eld,
773 struct drm_i915_private *i915 = to_i915(encoder->base.dev);
774 struct i915_audio_component *acomp = i915->display.audio.component;
784 drm_dbg_kms(&i915->drm, "[CONNECTOR:%d:%s][ENCODER:%d:%s] Disable audio codec on [CRTC:%d:%s]\n",
789 if (i915->display.funcs.audio)
790 i915->display.funcs.audio->audio_codec_disable(encoder,
794 mutex_lock(&i915->display.audio.mutex);
796 audio_state = &i915->display.audio.state[cpu_transcoder];
801 mutex_unlock(&i915->display.audio.mutex);
812 intel_lpe_audio_notify(i915, cpu_transcoder, port, NULL, 0, false);
818 struct drm_i915_private *i915 = to_i915(encoder->base.dev);
822 mutex_lock(&i915->display.audio.mutex);
824 audio_state = &i915->display.audio.state[cpu_transcoder];
829 mutex_unlock(&i915->display.audio.mutex);
835 struct drm_i915_private *i915 = to_i915(encoder->base.dev);
840 if (i915->display.funcs.audio)
841 i915->display.funcs.audio->audio_codec_get_config(encoder, crtc_state);
864 * @i915: device private
866 void intel_audio_hooks_init(struct drm_i915_private *i915)
868 if (IS_G4X(i915))
869 i915->display.funcs.audio = &g4x_audio_funcs;
870 else if (IS_VALLEYVIEW(i915) || IS_CHERRYVIEW(i915) ||
871 HAS_PCH_CPT(i915) || HAS_PCH_IBX(i915))
872 i915->display.funcs.audio = &ibx_audio_funcs;
873 else if (IS_HASWELL(i915) || DISPLAY_VER(i915) >= 8)
874 i915->display.funcs.audio = &hsw_audio_funcs;
882 void intel_audio_cdclk_change_pre(struct drm_i915_private *i915)
884 if (DISPLAY_VER(i915) >= 13)
885 intel_de_rmw(i915, AUD_TS_CDCLK_M, AUD_TS_CDCLK_M_EN, 0);
894 void intel_audio_cdclk_change_post(struct drm_i915_private *i915)
898 if (DISPLAY_VER(i915) >= 13) {
899 get_aud_ts_cdclk_m_n(i915->display.cdclk.hw.ref, i915->display.cdclk.hw.cdclk, &aud_ts);
901 intel_de_write(i915, AUD_TS_CDCLK_N, aud_ts.n);
902 intel_de_write(i915, AUD_TS_CDCLK_M, aud_ts.m | AUD_TS_CDCLK_M_EN);
903 drm_dbg_kms(&i915->drm, "aud_ts_cdclk set to M=%u, N=%u\n", aud_ts.m, aud_ts.n);
928 static void glk_force_audio_cdclk(struct drm_i915_private *i915,
936 crtc = intel_first_crtc(i915);
941 state = drm_atomic_state_alloc(&i915->drm);
942 if (drm_WARN_ON(&i915->drm, !state))
957 drm_WARN_ON(&i915->drm, ret);
967 struct drm_i915_private *i915 = kdev_to_i915(kdev);
973 ret = intel_display_power_get(i915, POWER_DOMAIN_AUDIO_PLAYBACK);
975 if (i915->display.audio.power_refcount++ == 0) {
976 if (DISPLAY_VER(i915) >= 9) {
977 intel_de_write(i915, AUD_FREQ_CNTRL,
978 i915->display.audio.freq_cntrl);
979 drm_dbg_kms(&i915->drm,
981 i915->display.audio.freq_cntrl);
985 if (IS_GEMINILAKE(i915))
986 glk_force_audio_cdclk(i915, true);
988 if (DISPLAY_VER(i915) >= 10)
989 intel_de_rmw(i915, AUD_PIN_BUF_CTL,
999 struct drm_i915_private *i915 = kdev_to_i915(kdev);
1002 if (--i915->display.audio.power_refcount == 0)
1003 if (IS_GEMINILAKE(i915))
1004 glk_force_audio_cdclk(i915, false);
1006 intel_display_power_put(i915, POWER_DOMAIN_AUDIO_PLAYBACK, cookie);
1012 struct drm_i915_private *i915 = kdev_to_i915(kdev);
1015 if (DISPLAY_VER(i915) < 9)
1024 intel_de_rmw(i915, HSW_AUD_CHICKENBIT,
1029 intel_de_rmw(i915, HSW_AUD_CHICKENBIT,
1040 struct drm_i915_private *i915 = kdev_to_i915(kdev);
1042 if (drm_WARN_ON_ONCE(&i915->drm, !HAS_DDI(i915)))
1045 return i915->display.cdclk.hw.cdclk;
1057 static struct intel_audio_state *find_audio_state(struct drm_i915_private *i915,
1065 if (drm_WARN_ON(&i915->drm,
1066 cpu_transcoder >= ARRAY_SIZE(i915->display.audio.state)))
1069 audio_state = &i915->display.audio.state[cpu_transcoder];
1081 for_each_cpu_transcoder(i915, cpu_transcoder) {
1085 audio_state = &i915->display.audio.state[cpu_transcoder];
1099 struct drm_i915_private *i915 = kdev_to_i915(kdev);
1100 struct i915_audio_component *acomp = i915->display.audio.component;
1107 if (!HAS_DDI(i915))
1111 mutex_lock(&i915->display.audio.mutex);
1113 audio_state = find_audio_state(i915, port, cpu_transcoder);
1115 drm_dbg_kms(&i915->drm, "Not valid for port %c\n", port_name(port));
1132 mutex_unlock(&i915->display.audio.mutex);
1141 struct drm_i915_private *i915 = kdev_to_i915(kdev);
1145 mutex_lock(&i915->display.audio.mutex);
1147 audio_state = find_audio_state(i915, port, cpu_transcoder);
1149 drm_dbg_kms(&i915->drm, "Not valid for port %c\n", port_name(port));
1150 mutex_unlock(&i915->display.audio.mutex);
1162 mutex_unlock(&i915->display.audio.mutex);
1180 struct drm_i915_private *i915 = kdev_to_i915(i915_kdev);
1183 if (drm_WARN_ON(&i915->drm, acomp->base.ops || acomp->base.dev))
1186 if (drm_WARN_ON(&i915->drm,
1191 drm_modeset_lock_all(&i915->drm);
1197 i915->display.audio.component = acomp;
1198 drm_modeset_unlock_all(&i915->drm);
1207 struct drm_i915_private *i915 = kdev_to_i915(i915_kdev);
1209 drm_modeset_lock_all(&i915->drm);
1212 i915->display.audio.component = NULL;
1213 drm_modeset_unlock_all(&i915->drm);
1217 if (i915->display.audio.power_refcount)
1218 drm_err(&i915->drm, "audio power refcount %d after unbind\n",
1219 i915->display.audio.power_refcount);
1238 * @i915: i915 device instance
1252 static void i915_audio_component_init(struct drm_i915_private *i915)
1256 if (DISPLAY_VER(i915) >= 9) {
1257 aud_freq_init = intel_de_read(i915, AUD_FREQ_CNTRL);
1259 if (DISPLAY_VER(i915) >= 12)
1265 if ((IS_TIGERLAKE(i915) || IS_ROCKETLAKE(i915)) &&
1269 drm_dbg_kms(&i915->drm, "use AUD_FREQ_CNTRL of 0x%x (init value 0x%x)\n",
1272 i915->display.audio.freq_cntrl = aud_freq;
1276 intel_audio_cdclk_change_post(i915);
1279 static void i915_audio_component_register(struct drm_i915_private *i915)
1283 ret = component_add_typed(i915->drm.dev,
1287 drm_err(&i915->drm,
1293 i915->display.audio.component_registered = true;
1298 * @i915: i915 device instance
1303 static void i915_audio_component_cleanup(struct drm_i915_private *i915)
1305 if (!i915->display.audio.component_registered)
1308 component_del(i915->drm.dev, &i915_audio_component_bind_ops);
1309 i915->display.audio.component_registered = false;
1315 * @i915: the i915 drm device private data
1318 void intel_audio_init(struct drm_i915_private *i915)
1320 if (intel_lpe_audio_init(i915) < 0)
1321 i915_audio_component_init(i915);
1324 void intel_audio_register(struct drm_i915_private *i915)
1326 if (!i915->display.audio.lpe.platdev)
1327 i915_audio_component_register(i915);
1332 * @i915: the i915 drm device private data
1335 void intel_audio_deinit(struct drm_i915_private *i915)
1337 if (i915->display.audio.lpe.platdev != NULL)
1338 intel_lpe_audio_teardown(i915);
1340 i915_audio_component_cleanup(i915);