Patch "drm/i915: always update ELD connector type after get modes" has been added to the 4.13-stable tree
Subsystems (3)
This is a note to let you know that I've just added the patch titled
drm/i915: always update ELD connector type after get modes
to the 4.13-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
drm-i915-always-update-eld-connector-type-after-get-modes.patch
and it can be found in the queue-4.13 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
2d8f63297b9f0b430c96329893667c0bfdcbd47eMon Sep 17 00:00:00 2001
From: Jani Nikula <[email protected]>
Date: Tue, 19 Sep 2017 18:38:13 +0300
Subject: drm/i915: always update ELD connector type after get modes
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
From: Jani Nikula <[email protected]>
commit 2d8f63297b9f0b430c96329893667c0bfdcbd47e upstream.
drm_edid_to_eld() initializes the connector ELD to zero, overwriting the ELD connector type initialized in intel_audio_codec_enable(). If userspace does getconnector and thus get_modes after modeset, a subsequent audio component i915_audio_component_get_eld() call will receive an ELD without the connector type properly set. It's fine for HDMI, but screws up audio for DP.
Always set the ELD connector type at intel_connector_update_modes() based on the connector type. We can drop the connector type update from intel_audio_codec_enable().
Credits to Joseph Nuzman <[email protected]> for figuring this out.
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=101583
--- drivers/gpu/drm/i915/intel_audio.c | 5 ----- drivers/gpu/drm/i915/intel_modes.c | 17 +++++++++++++++++ 2 files changed, 17 insertions(+), 5 deletions(-)
drivers/gpu/drm/i915/intel_audio.c +0 -5
@@ -606,11 +606,6 @@ void intel_audio_codec_enable(struct int connector->encoder->base.id, connector->encoder->name); -/* ELD Conn_Type */ - connector->eld[5 ] &= ~(3 <<2 ); -if (intel_crtc_has_dp_encoder (crtc_state)) - connector->eld[5 ] |= (1 <<2 ); - connector->eld[6 ] =drm_av_sync_delay (connector, adjusted_mode) /2 ;if (dev_priv->display.audio_codec_enable)
drivers/gpu/drm/i915/intel_modes.c +17 -0
@@ -30,6 +30,21 @@#include "intel_drv.h" #include "i915_drv.h" +static void intel_connector_update_eld_conn_type (struct drm_connector *connector) +{ +u8 conn_type; + +if (connector->connector_type == DRM_MODE_CONNECTOR_DisplayPort || + connector->connector_type == DRM_MODE_CONNECTOR_eDP) { + conn_type =DRM_ELD_CONN_TYPE_DP ; + }else { + conn_type =DRM_ELD_CONN_TYPE_HDMI ; + } + + connector->eld[DRM_ELD_SAD_COUNT_CONN_TYPE ] &= ~DRM_ELD_CONN_TYPE_MASK ; + connector->eld[DRM_ELD_SAD_COUNT_CONN_TYPE ] |= conn_type; +} +/** * intel_connector_update_modes - update connector from edid * @connector: DRM connector device to use
@@ -44,6 +59,8 @@ int intel_connector_update_modes(struct ret =drm_add_edid_modes (connector, edid);drm_edid_to_eld (connector, edid); +intel_connector_update_eld_conn_type (connector); +return ret; }
Patches currently in stable-queue which might be from [email protected] are
queue-4.13/drm-i915-always-update-eld-connector-type-after-get-modes.patch queue-4.13/drm-i915-bios-ignore-hdmi-on-port-a.patch