|
@@ -405,22 +405,25 @@ bool drm_crtc_helper_set_mode(struct drm_crtc *crtc,
|
|
|
struct drm_framebuffer *old_fb)
|
|
|
{
|
|
|
struct drm_device *dev = crtc->dev;
|
|
|
- struct drm_display_mode *adjusted_mode, saved_mode, saved_hwmode;
|
|
|
+ struct drm_display_mode *adjusted_mode, saved_mode;
|
|
|
struct drm_crtc_helper_funcs *crtc_funcs = crtc->helper_private;
|
|
|
struct drm_encoder_helper_funcs *encoder_funcs;
|
|
|
int saved_x, saved_y;
|
|
|
+ bool saved_enabled;
|
|
|
struct drm_encoder *encoder;
|
|
|
bool ret = true;
|
|
|
|
|
|
+ saved_enabled = crtc->enabled;
|
|
|
crtc->enabled = drm_helper_crtc_in_use(crtc);
|
|
|
if (!crtc->enabled)
|
|
|
return true;
|
|
|
|
|
|
adjusted_mode = drm_mode_duplicate(dev, mode);
|
|
|
- if (!adjusted_mode)
|
|
|
+ if (!adjusted_mode) {
|
|
|
+ crtc->enabled = saved_enabled;
|
|
|
return false;
|
|
|
+ }
|
|
|
|
|
|
- saved_hwmode = crtc->hwmode;
|
|
|
saved_mode = crtc->mode;
|
|
|
saved_x = crtc->x;
|
|
|
saved_y = crtc->y;
|
|
@@ -539,7 +542,7 @@ bool drm_crtc_helper_set_mode(struct drm_crtc *crtc,
|
|
|
done:
|
|
|
drm_mode_destroy(dev, adjusted_mode);
|
|
|
if (!ret) {
|
|
|
- crtc->hwmode = saved_hwmode;
|
|
|
+ crtc->enabled = saved_enabled;
|
|
|
crtc->mode = saved_mode;
|
|
|
crtc->x = saved_x;
|
|
|
crtc->y = saved_y;
|