After registering the audio component in i915_audio_component_init() the audio driver may call i915_audio_component_get_power() via the component ops. This could program AUD_FREQ_CNTRL with an uninitialized value if the latter function is called before display.audio.freq_cntrl gets initialized. The get_power() function also does a modeset which in the above case happens too early before the initialization step and triggers the "Reject display access from task" error message added by the Fixes: commit below. Fix the above issue by registering the audio component only after the initialization step. Fixes:87c1694533
("drm/i915: save AUD_FREQ_CNTRL state at audio domain suspend") Closes: https://gitlab.freedesktop.org/drm/i915/kernel/-/issues/10291 Cc: stable@vger.kernel.org # v5.5+ Signed-off-by: Imre Deak <imre.deak@intel.com> Reviewed-by: Jani Nikula <jani.nikula@intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20240521143022.3784539-1-imre.deak@intel.com (cherry picked from commitfdd0b80172
) Signed-off-by: Jani Nikula <jani.nikula@intel.com>
35 lines
1.3 KiB
C
35 lines
1.3 KiB
C
/* SPDX-License-Identifier: MIT */
|
|
/*
|
|
* Copyright © 2019 Intel Corporation
|
|
*/
|
|
|
|
#ifndef __INTEL_AUDIO_H__
|
|
#define __INTEL_AUDIO_H__
|
|
|
|
#include <linux/types.h>
|
|
|
|
struct drm_connector_state;
|
|
struct drm_i915_private;
|
|
struct intel_crtc_state;
|
|
struct intel_encoder;
|
|
|
|
void intel_audio_hooks_init(struct drm_i915_private *dev_priv);
|
|
bool intel_audio_compute_config(struct intel_encoder *encoder,
|
|
struct intel_crtc_state *crtc_state,
|
|
struct drm_connector_state *conn_state);
|
|
void intel_audio_codec_enable(struct intel_encoder *encoder,
|
|
const struct intel_crtc_state *crtc_state,
|
|
const struct drm_connector_state *conn_state);
|
|
void intel_audio_codec_disable(struct intel_encoder *encoder,
|
|
const struct intel_crtc_state *old_crtc_state,
|
|
const struct drm_connector_state *old_conn_state);
|
|
void intel_audio_codec_get_config(struct intel_encoder *encoder,
|
|
struct intel_crtc_state *crtc_state);
|
|
void intel_audio_cdclk_change_pre(struct drm_i915_private *dev_priv);
|
|
void intel_audio_cdclk_change_post(struct drm_i915_private *dev_priv);
|
|
void intel_audio_init(struct drm_i915_private *dev_priv);
|
|
void intel_audio_register(struct drm_i915_private *i915);
|
|
void intel_audio_deinit(struct drm_i915_private *dev_priv);
|
|
void intel_audio_sdp_split_update(const struct intel_crtc_state *crtc_state);
|
|
|
|
#endif /* __INTEL_AUDIO_H__ */
|