From: Rob Clark Date: Thu, 20 Nov 2014 20:40:36 +0000 (-0500) Subject: drm/atomic: shutdown *current* encoder X-Git-Tag: MMI-PSA29.97-13-9~10979^2~28^2 X-Git-Url: https://git.stricted.de/?a=commitdiff_plain;h=46df9adb2e7709e56ab8aacaff2fc997a6d17239;p=GitHub%2FMotorolaMobilityLLC%2Fkernel-slsi.git drm/atomic: shutdown *current* encoder In disable_outputs() we need to shut down the outgoing encoder, not the incoming one (we have already swapped-state at this point). Without this, we end up telling the driver to crtc->dpms(OFF) without first encoder->dpms(OFF), and that makes some hw quite unhappy. v2: missing WARN_ON() hunk and comment Reviewed-by: Daniel Vetter Signed-off-by: Rob Clark --- diff --git a/drivers/gpu/drm/drm_atomic_helper.c b/drivers/gpu/drm/drm_atomic_helper.c index 3a74e81a78df..a17b8e9c0a81 100644 --- a/drivers/gpu/drm/drm_atomic_helper.c +++ b/drivers/gpu/drm/drm_atomic_helper.c @@ -499,9 +499,12 @@ disable_outputs(struct drm_device *dev, struct drm_atomic_state *old_state) if (!old_conn_state || !old_conn_state->crtc) continue; - encoder = connector->state->best_encoder; + encoder = old_conn_state->best_encoder; - if (!encoder) + /* We shouldn't get this far if we didn't previously have + * an encoder.. but WARN_ON() rather than explode. + */ + if (WARN_ON(!encoder)) continue; funcs = encoder->helper_private;