Skip to content

Commit

Permalink
drm/i915/audio: Split "ELD valid" vs. audio PD on hsw+
Browse files Browse the repository at this point in the history
On the older platforms the audio presence detect bit is in
the port register, so it gets written outside audio codec hooks
and is this separate from the ELD valid toggling. Split the
operations into two steps on hsw+ to be more consistent with
both the other platforms and the spec. Also according to the
spec we might need some vblank waits between the two which
definitely needs them done separately.

Cc: Chaitanya Kumar Borah <chaitanya.kumar.borah@intel.com>
Cc: Kai Vehmanen <kai.vehmanen@linux.intel.com>
Cc: Takashi Iwai <tiwai@suse.de>
Reviewed-by: Jani Nikula <jani.nikula@intel.com>
Reviewed-by: Kai Vehmanen <kai.vehmanen@linux.intel.com>
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20221026170150.2654-14-ville.syrjala@linux.intel.com
  • Loading branch information
Ville Syrjälä committed Oct 27, 2022
1 parent 7c8d74e commit cbbda2f
Showing 1 changed file with 11 additions and 5 deletions.
16 changes: 11 additions & 5 deletions drivers/gpu/drm/i915/display/intel_audio.c
Original file line number Diff line number Diff line change
Expand Up @@ -481,9 +481,12 @@ static void hsw_audio_codec_disable(struct intel_encoder *encoder,
(intel_crtc_has_dp_encoder(old_crtc_state) ?
AUD_CONFIG_N_VALUE_INDEX : 0));

/* Disable audio presence detect, invalidate ELD */
/* Invalidate ELD */
intel_de_rmw(i915, HSW_AUD_PIN_ELD_CP_VLD,
AUDIO_ELD_VALID(cpu_transcoder), 0);

/* Disable audio presence detect */
intel_de_rmw(i915, HSW_AUD_PIN_ELD_CP_VLD,
AUDIO_ELD_VALID(cpu_transcoder) |
AUDIO_OUTPUT_ENABLE(cpu_transcoder), 0);

mutex_unlock(&i915->display.audio.mutex);
Expand Down Expand Up @@ -614,10 +617,13 @@ static void hsw_audio_codec_enable(struct intel_encoder *encoder,
if (intel_crtc_has_type(crtc_state, INTEL_OUTPUT_DP))
enable_audio_dsc_wa(encoder, crtc_state);

/* Enable audio presence detect, invalidate ELD */
/* Enable audio presence detect */
intel_de_rmw(i915, HSW_AUD_PIN_ELD_CP_VLD,
0, AUDIO_OUTPUT_ENABLE(cpu_transcoder));

/* Invalidate ELD */
intel_de_rmw(i915, HSW_AUD_PIN_ELD_CP_VLD,
AUDIO_ELD_VALID(cpu_transcoder),
AUDIO_OUTPUT_ENABLE(cpu_transcoder));
AUDIO_ELD_VALID(cpu_transcoder), 0);

/*
* FIXME: We're supposed to wait for vblank here, but we have vblanks
Expand Down

0 comments on commit cbbda2f

Please sign in to comment.