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: Jesse Barnes <jbarnes@virtuousgeek.org> Signed-Off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
This commit is contained in:
parent
ba1c28c900
commit
87f1faa630
1 changed files with 17 additions and 15 deletions
|
@ -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)
|
||||||
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)
|
||||||
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)
|
||||||
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)
|
||||||
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,
|
||||||
|
|
Loading…
Add table
Reference in a new issue