X-Git-Url: http://plrg.eecs.uci.edu/git/?p=firefly-linux-kernel-4.4.55.git;a=blobdiff_plain;f=drivers%2Fgpu%2Fdrm%2Fdrm_atomic_helper.c;h=d5524917e7c4de36e24961d9285447e494e4dcc2;hp=40a67eb373fa071639fcd626413899e67fe845e7;hb=e0881ef2dc3694b0cf2c5207dd92c4c8e7305214;hpb=77bab04357900ac51406698753fbcdca95caa01e diff --git a/drivers/gpu/drm/drm_atomic_helper.c b/drivers/gpu/drm/drm_atomic_helper.c index 40a67eb373fa..d5524917e7c4 100644 --- a/drivers/gpu/drm/drm_atomic_helper.c +++ b/drivers/gpu/drm/drm_atomic_helper.c @@ -579,6 +579,7 @@ disable_outputs(struct drm_device *dev, struct drm_atomic_state *old_state) for_each_connector_in_state(old_state, connector, old_conn_state, i) { const struct drm_encoder_helper_funcs *funcs; + const struct drm_connector_helper_funcs *conn_funcs; struct drm_encoder *encoder; struct drm_crtc_state *old_crtc_state; @@ -606,6 +607,21 @@ disable_outputs(struct drm_device *dev, struct drm_atomic_state *old_state) DRM_DEBUG_ATOMIC("disabling [ENCODER:%d:%s]\n", encoder->base.id, encoder->name); + conn_funcs = connector->helper_private; + if (connector->loader_protect) { + drm_bridge_pre_enable(encoder->bridge); + + if (funcs->enable) + funcs->enable(encoder); + else + funcs->commit(encoder); + + drm_bridge_enable(encoder->bridge); + + if (conn_funcs->loader_protect) + conn_funcs->loader_protect(connector, false); + connector->loader_protect = false; + } /* * Each encoder has at most one connector (since we always steal * it away), so we won't call disable hooks twice.