提交 87f1faa6 编写于 作者: D Daniel Vetter

drm/i915: move output commit and crtc disabling into set_mode

It's rather pointless to compute crtc->enabled twice right away ;-)

The only thing we really have to be careful about is that we frob the
dpms state only after a successful modeset and when we've actually
haven't just disabled the crtc.

Hooray for convoluted interfaces ...
Reviewed-by: NJesse Barnes <jbarnes@virtuousgeek.org>
Signed-Off-by: NDaniel Vetter <daniel.vetter@ffwll.ch>
上级 ba1c28c9
...@@ -6653,9 +6653,13 @@ bool intel_set_mode(struct drm_crtc *crtc, ...@@ -6653,9 +6653,13 @@ bool intel_set_mode(struct drm_crtc *crtc,
struct drm_encoder *encoder; struct drm_encoder *encoder;
bool ret = true; bool ret = true;
intel_modeset_commit_output_state(dev);
crtc->enabled = drm_helper_crtc_in_use(crtc); crtc->enabled = drm_helper_crtc_in_use(crtc);
if (!crtc->enabled) if (!crtc->enabled) {
drm_helper_disable_unused_functions(dev);
return true; return true;
}
adjusted_mode = drm_mode_duplicate(dev, mode); adjusted_mode = drm_mode_duplicate(dev, mode);
if (!adjusted_mode) if (!adjusted_mode)
...@@ -7002,13 +7006,12 @@ static int intel_crtc_set_config(struct drm_mode_set *set) ...@@ -7002,13 +7006,12 @@ static int intel_crtc_set_config(struct drm_mode_set *set)
goto fail; goto fail;
if (config->mode_changed) { if (config->mode_changed) {
intel_modeset_commit_output_state(dev); if (set->mode) {
set->crtc->enabled = drm_helper_crtc_in_use(set->crtc);
if (set->crtc->enabled) {
DRM_DEBUG_KMS("attempting to set mode from" DRM_DEBUG_KMS("attempting to set mode from"
" userspace\n"); " userspace\n");
drm_mode_debug_printmodeline(set->mode); drm_mode_debug_printmodeline(set->mode);
}
if (!intel_set_mode(set->crtc, set->mode, if (!intel_set_mode(set->crtc, set->mode,
set->x, set->y, set->fb)) { set->x, set->y, set->fb)) {
DRM_ERROR("failed to set mode on [CRTC:%d]\n", DRM_ERROR("failed to set mode on [CRTC:%d]\n",
...@@ -7016,6 +7019,8 @@ static int intel_crtc_set_config(struct drm_mode_set *set) ...@@ -7016,6 +7019,8 @@ static int intel_crtc_set_config(struct drm_mode_set *set)
ret = -EINVAL; ret = -EINVAL;
goto fail; goto fail;
} }
if (set->crtc->enabled) {
DRM_DEBUG_KMS("Setting connector DPMS state to on\n"); DRM_DEBUG_KMS("Setting connector DPMS state to on\n");
for (i = 0; i < set->num_connectors; i++) { for (i = 0; i < set->num_connectors; i++) {
DRM_DEBUG_KMS("\t[CONNECTOR:%d:%s] set DPMS on\n", set->connectors[i]->base.id, DRM_DEBUG_KMS("\t[CONNECTOR:%d:%s] set DPMS on\n", set->connectors[i]->base.id,
...@@ -7023,7 +7028,6 @@ static int intel_crtc_set_config(struct drm_mode_set *set) ...@@ -7023,7 +7028,6 @@ static int intel_crtc_set_config(struct drm_mode_set *set)
set->connectors[i]->funcs->dpms(set->connectors[i], DRM_MODE_DPMS_ON); set->connectors[i]->funcs->dpms(set->connectors[i], DRM_MODE_DPMS_ON);
} }
} }
drm_helper_disable_unused_functions(dev);
} else if (config->fb_changed) { } else if (config->fb_changed) {
ret = intel_pipe_set_base(set->crtc, ret = intel_pipe_set_base(set->crtc,
set->x, set->y, set->fb); set->x, set->y, set->fb);
...@@ -7036,8 +7040,6 @@ static int intel_crtc_set_config(struct drm_mode_set *set) ...@@ -7036,8 +7040,6 @@ static int intel_crtc_set_config(struct drm_mode_set *set)
fail: fail:
intel_set_config_restore_state(dev, config); intel_set_config_restore_state(dev, config);
intel_modeset_commit_output_state(dev);
/* Try to restore the config */ /* Try to restore the config */
if (config->mode_changed && if (config->mode_changed &&
!intel_set_mode(save_set.crtc, save_set.mode, !intel_set_mode(save_set.crtc, save_set.mode,
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册