diff options
-rw-r--r-- | drivers/gpu/drm/nouveau/nv50_display.c | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/drivers/gpu/drm/nouveau/nv50_display.c b/drivers/gpu/drm/nouveau/nv50_display.c index 4c7b53fea37c..742ac7cbff55 100644 --- a/drivers/gpu/drm/nouveau/nv50_display.c +++ b/drivers/gpu/drm/nouveau/nv50_display.c @@ -3790,6 +3790,7 @@ int nv50_display_init(struct drm_device *dev) { struct nv50_disp *disp = nv50_disp(dev); + struct drm_encoder *encoder; struct drm_plane *plane; struct drm_crtc *crtc; u32 *push; @@ -3809,6 +3810,24 @@ nv50_display_init(struct drm_device *dev) evo_data(push, nv50_mast(dev)->base.sync.handle); evo_kick(push, nv50_mast(dev)); + list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) { + if (encoder->encoder_type != DRM_MODE_ENCODER_DPMST) { + const struct drm_encoder_helper_funcs *help; + struct nouveau_encoder *nv_encoder; + + nv_encoder = nouveau_encoder(encoder); + if (nv_encoder->dcb->type == DCB_OUTPUT_DP) + nv_encoder->dcb->type = DCB_OUTPUT_EOL; + + help = encoder->helper_private; + if (help && help->dpms) + help->dpms(encoder, DRM_MODE_DPMS_ON); + + if (nv_encoder->dcb->type == DCB_OUTPUT_EOL) + nv_encoder->dcb->type = DCB_OUTPUT_DP; + } + } + drm_for_each_plane(plane, dev) { struct nv50_wndw *wndw = nv50_wndw(plane); if (plane->funcs != &nv50_wndw) |