aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/i915/intel_fb.c
diff options
context:
space:
mode:
authorDave Airlie <airlied@redhat.com>2012-03-28 05:48:49 -0400
committerLuis Henriques <luis.henriques@canonical.com>2012-04-05 11:17:32 -0400
commitc66a891c5ad8bcc7eb440863facebe09ba9b8875 (patch)
tree321fcfbbf360e0cbd0e134729639aecef45683d2 /drivers/gpu/drm/i915/intel_fb.c
parent2c915d9f068f33906b742807806a3a19f70df3c1 (diff)
drm/i915: suspend fbdev device around suspend/hibernate
BugLink: http://bugs.launchpad.net/bugs/971808 commit 3fa016a0b5c5237e9c387fc3249592b2cb5391c6 upstream. Looking at hibernate overwriting I though it looked like a cursor, so I tracked down this missing piece to stop the cursor blink timer. I've no idea if this is sufficient to fix the hibernate problems people are seeing, but please test it. Both radeon and nouveau have done this for a long time. I've run this personally all night hib/resume cycles with no fails. Reviewed-by: Keith Packard <keithp@keithp.com> Reported-by: Petr Tesarik <kernel@tesarici.cz> Reported-by: Stanislaw Gruszka <sgruszka@redhat.com> Reported-by: Lots of misc segfaults after hibernate across the world. Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=37142 Tested-by: Dave Airlie <airlied@redhat.com> Tested-by: Bojan Smojver <bojan@rexursive.com> Tested-by: Andreas Hartmann <andihartmann@01019freenet.de> Signed-off-by: Dave Airlie <airlied@redhat.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/gpu/drm/i915/intel_fb.c')
-rw-r--r--drivers/gpu/drm/i915/intel_fb.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/drivers/gpu/drm/i915/intel_fb.c b/drivers/gpu/drm/i915/intel_fb.c
index ec49bae7338..d0ce34b78cc 100644
--- a/drivers/gpu/drm/i915/intel_fb.c
+++ b/drivers/gpu/drm/i915/intel_fb.c
@@ -257,6 +257,16 @@ void intel_fbdev_fini(struct drm_device *dev)
257 kfree(dev_priv->fbdev); 257 kfree(dev_priv->fbdev);
258 dev_priv->fbdev = NULL; 258 dev_priv->fbdev = NULL;
259} 259}
260
261void intel_fbdev_set_suspend(struct drm_device *dev, int state)
262{
263 drm_i915_private_t *dev_priv = dev->dev_private;
264 if (!dev_priv->fbdev)
265 return;
266
267 fb_set_suspend(dev_priv->fbdev->helper.fbdev, state);
268}
269
260MODULE_LICENSE("GPL and additional rights"); 270MODULE_LICENSE("GPL and additional rights");
261 271
262void intel_fb_output_poll_changed(struct drm_device *dev) 272void intel_fb_output_poll_changed(struct drm_device *dev)