diff options
-rw-r--r-- | drivers/gpu/drm/drm_crtc_helper.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/drivers/gpu/drm/drm_crtc_helper.c b/drivers/gpu/drm/drm_crtc_helper.c index acc9c36614df..0ebaa6d79afa 100644 --- a/drivers/gpu/drm/drm_crtc_helper.c +++ b/drivers/gpu/drm/drm_crtc_helper.c | |||
@@ -405,22 +405,25 @@ bool drm_crtc_helper_set_mode(struct drm_crtc *crtc, | |||
405 | struct drm_framebuffer *old_fb) | 405 | struct drm_framebuffer *old_fb) |
406 | { | 406 | { |
407 | struct drm_device *dev = crtc->dev; | 407 | struct drm_device *dev = crtc->dev; |
408 | struct drm_display_mode *adjusted_mode, saved_mode, saved_hwmode; | 408 | struct drm_display_mode *adjusted_mode, saved_mode; |
409 | struct drm_crtc_helper_funcs *crtc_funcs = crtc->helper_private; | 409 | struct drm_crtc_helper_funcs *crtc_funcs = crtc->helper_private; |
410 | struct drm_encoder_helper_funcs *encoder_funcs; | 410 | struct drm_encoder_helper_funcs *encoder_funcs; |
411 | int saved_x, saved_y; | 411 | int saved_x, saved_y; |
412 | bool saved_enabled; | ||
412 | struct drm_encoder *encoder; | 413 | struct drm_encoder *encoder; |
413 | bool ret = true; | 414 | bool ret = true; |
414 | 415 | ||
416 | saved_enabled = crtc->enabled; | ||
415 | crtc->enabled = drm_helper_crtc_in_use(crtc); | 417 | crtc->enabled = drm_helper_crtc_in_use(crtc); |
416 | if (!crtc->enabled) | 418 | if (!crtc->enabled) |
417 | return true; | 419 | return true; |
418 | 420 | ||
419 | adjusted_mode = drm_mode_duplicate(dev, mode); | 421 | adjusted_mode = drm_mode_duplicate(dev, mode); |
420 | if (!adjusted_mode) | 422 | if (!adjusted_mode) { |
423 | crtc->enabled = saved_enabled; | ||
421 | return false; | 424 | return false; |
425 | } | ||
422 | 426 | ||
423 | saved_hwmode = crtc->hwmode; | ||
424 | saved_mode = crtc->mode; | 427 | saved_mode = crtc->mode; |
425 | saved_x = crtc->x; | 428 | saved_x = crtc->x; |
426 | saved_y = crtc->y; | 429 | saved_y = crtc->y; |
@@ -539,7 +542,7 @@ bool drm_crtc_helper_set_mode(struct drm_crtc *crtc, | |||
539 | done: | 542 | done: |
540 | drm_mode_destroy(dev, adjusted_mode); | 543 | drm_mode_destroy(dev, adjusted_mode); |
541 | if (!ret) { | 544 | if (!ret) { |
542 | crtc->hwmode = saved_hwmode; | 545 | crtc->enabled = saved_enabled; |
543 | crtc->mode = saved_mode; | 546 | crtc->mode = saved_mode; |
544 | crtc->x = saved_x; | 547 | crtc->x = saved_x; |
545 | crtc->y = saved_y; | 548 | crtc->y = saved_y; |