From: Libin Yang <libin.yang@xxxxxxxxxxxxxxx> For DP MST, use enc_to_mst(encoder)->primary to get intel_digital_port, instead of using enc_to_dig_port(encoder). Signed-off-by: Libin Yang <libin.yang@xxxxxxxxxxxxxxx> --- drivers/gpu/drm/i915/intel_audio.c | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/drivers/gpu/drm/i915/intel_audio.c b/drivers/gpu/drm/i915/intel_audio.c index 31f6d21..431487a0 100644 --- a/drivers/gpu/drm/i915/intel_audio.c +++ b/drivers/gpu/drm/i915/intel_audio.c @@ -187,6 +187,16 @@ static bool intel_eld_uptodate(struct drm_connector *connector, return true; } +static struct intel_digital_port * +intel_encoder_to_dig_port(struct intel_encoder *intel_encoder) +{ + struct drm_encoder *encoder = &intel_encoder->base; + + if (intel_encoder->type == INTEL_OUTPUT_DP_MST) + return enc_to_mst(encoder)->primary; + return enc_to_dig_port(encoder); +} + static void g4x_audio_codec_disable(struct intel_encoder *encoder) { struct drm_i915_private *dev_priv = encoder->base.dev->dev_private; @@ -286,7 +296,7 @@ static void hsw_audio_codec_enable(struct drm_connector *connector, struct i915_audio_component *acomp = dev_priv->audio_component; const uint8_t *eld = connector->eld; struct intel_digital_port *intel_dig_port = - enc_to_dig_port(&encoder->base); + intel_encoder_to_dig_port(encoder); enum port port = intel_dig_port->port; uint32_t tmp; int len, i; @@ -500,7 +510,8 @@ void intel_audio_codec_enable(struct intel_encoder *intel_encoder) struct drm_device *dev = encoder->dev; struct drm_i915_private *dev_priv = dev->dev_private; struct i915_audio_component *acomp = dev_priv->audio_component; - struct intel_digital_port *intel_dig_port = enc_to_dig_port(encoder); + struct intel_digital_port *intel_dig_port = + intel_encoder_to_dig_port(intel_encoder); enum port port = intel_dig_port->port; connector = drm_select_eld(encoder); @@ -546,7 +557,8 @@ void intel_audio_codec_disable(struct intel_encoder *intel_encoder) struct drm_device *dev = encoder->dev; struct drm_i915_private *dev_priv = dev->dev_private; struct i915_audio_component *acomp = dev_priv->audio_component; - struct intel_digital_port *intel_dig_port = enc_to_dig_port(encoder); + struct intel_digital_port *intel_dig_port = + intel_encoder_to_dig_port(intel_encoder); enum port port = intel_dig_port->port; if (dev_priv->display.audio_codec_disable) @@ -724,7 +736,8 @@ static int i915_audio_component_get_eld(struct device *dev, int port, /* intel_encoder might be NULL for DP MST */ if (intel_encoder) { ret = 0; - intel_dig_port = enc_to_dig_port(&intel_encoder->base); + intel_dig_port = + intel_encoder_to_dig_port(intel_encoder); *enabled = intel_dig_port->audio_connector != NULL; if (*enabled) { eld = intel_dig_port->audio_connector->eld; -- 1.9.1 _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/intel-gfx