aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/i915/intel_dp_mst.c
diff options
context:
space:
mode:
authorMaarten Lankhorst <maarten.lankhorst@linux.intel.com>2015-08-27 07:13:31 -0400
committerJani Nikula <jani.nikula@intel.com>2015-09-08 09:16:50 -0400
commite85376cbd23299e4d40bace0cb5ab867b270fdbd (patch)
tree8d171cd1a671c290e2b7f22162048fd6ef37ac02 /drivers/gpu/drm/i915/intel_dp_mst.c
parent4e3d1e26c2b2c40ebff69f2825fa862bfcf082d1 (diff)
drm/i915: Fix broken mst get_hw_state.
connector->encoder is initialized as NULL. Fix this by setting it in during pre enable. MST connectors are not read out during initial hw readout, and have no fixed encoder mappings. So it's harmless to return false when the connector has never been assigned to an encoder. Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com> Reviewed-by: Ander Conselvan de Oliveira <conselvan2@gmail.com> Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Diffstat (limited to 'drivers/gpu/drm/i915/intel_dp_mst.c')
-rw-r--r--drivers/gpu/drm/i915/intel_dp_mst.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/drivers/gpu/drm/i915/intel_dp_mst.c b/drivers/gpu/drm/i915/intel_dp_mst.c
index 983553cf8b74..3e4be5a3becd 100644
--- a/drivers/gpu/drm/i915/intel_dp_mst.c
+++ b/drivers/gpu/drm/i915/intel_dp_mst.c
@@ -173,6 +173,11 @@ static void intel_mst_pre_enable_dp(struct intel_encoder *encoder)
173 return; 173 return;
174 } 174 }
175 175
176 /* MST encoders are bound to a crtc, not to a connector,
177 * force the mapping here for get_hw_state.
178 */
179 found->encoder = encoder;
180
176 DRM_DEBUG_KMS("%d\n", intel_dp->active_mst_links); 181 DRM_DEBUG_KMS("%d\n", intel_dp->active_mst_links);
177 intel_mst->port = found->port; 182 intel_mst->port = found->port;
178 183
@@ -400,7 +405,7 @@ static const struct drm_encoder_funcs intel_dp_mst_enc_funcs = {
400 405
401static bool intel_dp_mst_get_hw_state(struct intel_connector *connector) 406static bool intel_dp_mst_get_hw_state(struct intel_connector *connector)
402{ 407{
403 if (connector->encoder) { 408 if (connector->encoder && connector->base.state->crtc) {
404 enum pipe pipe; 409 enum pipe pipe;
405 if (!connector->encoder->get_hw_state(connector->encoder, &pipe)) 410 if (!connector->encoder->get_hw_state(connector->encoder, &pipe))
406 return false; 411 return false;