Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 357911
b: refs/heads/master
c: 3ac1823
h: refs/heads/master
i:
  357909: bb30606
  357907: 0f6481c
  357903: 0fc44dd
v: v3
  • Loading branch information
Tim Gardner authored and Daniel Vetter committed Dec 10, 2012
1 parent fb82bda commit 989c9ca
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 7 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 378a6a77ae59d3312627b996ded94e23166d9e63
refs/heads/master: 3ac18232946aacf0a9807c3143f8449ed4aa68f4
22 changes: 16 additions & 6 deletions trunk/drivers/gpu/drm/i915/intel_display.c
Original file line number Diff line number Diff line change
Expand Up @@ -7398,11 +7398,18 @@ bool intel_set_mode(struct drm_crtc *crtc,
{
struct drm_device *dev = crtc->dev;
drm_i915_private_t *dev_priv = dev->dev_private;
struct drm_display_mode *adjusted_mode, saved_mode, saved_hwmode;
struct drm_display_mode *adjusted_mode, *saved_mode, *saved_hwmode;
struct intel_crtc *intel_crtc;
unsigned disable_pipes, prepare_pipes, modeset_pipes;
bool ret = true;

saved_mode = kmalloc(2 * sizeof(*saved_mode), GFP_KERNEL);
if (!saved_mode) {
DRM_ERROR("i915: Could not allocate saved display mode.\n");
return false;
}
saved_hwmode = saved_mode + 1;

intel_modeset_affected_pipes(crtc, &modeset_pipes,
&prepare_pipes, &disable_pipes);

Expand All @@ -7412,8 +7419,8 @@ bool intel_set_mode(struct drm_crtc *crtc,
for_each_intel_crtc_masked(dev, disable_pipes, intel_crtc)
intel_crtc_disable(&intel_crtc->base);

saved_hwmode = crtc->hwmode;
saved_mode = crtc->mode;
*saved_hwmode = crtc->hwmode;
*saved_mode = crtc->mode;

/* Hack: Because we don't (yet) support global modeset on multiple
* crtcs, we don't keep track of the new mode for more than one crtc.
Expand All @@ -7424,7 +7431,8 @@ bool intel_set_mode(struct drm_crtc *crtc,
if (modeset_pipes) {
adjusted_mode = intel_modeset_adjusted_mode(crtc, mode);
if (IS_ERR(adjusted_mode)) {
return false;
ret = false;
goto out;
}
}

Expand Down Expand Up @@ -7476,12 +7484,14 @@ bool intel_set_mode(struct drm_crtc *crtc,
done:
drm_mode_destroy(dev, adjusted_mode);
if (!ret && crtc->enabled) {
crtc->hwmode = saved_hwmode;
crtc->mode = saved_mode;
crtc->hwmode = *saved_hwmode;
crtc->mode = *saved_mode;
} else {
intel_modeset_check_state(dev);
}

out:
kfree(saved_mode);
return ret;
}

Expand Down

0 comments on commit 989c9ca

Please sign in to comment.