summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Barnes <jesse.barnes@intel.com>2008-01-28 21:05:22 -0800
committerDave Airlie <airlied@redhat.com>2008-02-20 09:45:14 +1000
commitda636ad6a0d72eb5cb99738056af0bcc3db9ef9d (patch)
treed4db29714f1f1e119be9b7a359e6d77e599547bc
parent1f84e550a870bf5f5f399b611db68f3324ea7883 (diff)
downloadlinux-da636ad6a0d72eb5cb99738056af0bcc3db9ef9d.tar.gz
linux-da636ad6a0d72eb5cb99738056af0bcc3db9ef9d.tar.bz2
linux-da636ad6a0d72eb5cb99738056af0bcc3db9ef9d.zip
drm/i915: Fix hibernate save/restore of VGA attribute regs
In hibernate, we may end up calling the VGA save regs function twice, so we need to make sure it's idempotent. That means leaving ARX in index mode after the first save operation. Fixes hibernate on 965. Signed-off-by: Dave Airlie <airlied@redhat.com>
-rw-r--r--drivers/char/drm/i915_drv.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/drivers/char/drm/i915_drv.c b/drivers/char/drm/i915_drv.c
index 5025f5b02412..35758a6c8b0d 100644
--- a/drivers/char/drm/i915_drv.c
+++ b/drivers/char/drm/i915_drv.c
@@ -160,6 +160,7 @@ static void i915_save_vga(struct drm_device *dev)
dev_priv->saveAR[i] = i915_read_ar(st01, i, 0);
inb(st01);
outb(dev_priv->saveAR_INDEX, VGA_AR_INDEX);
+ inb(st01);
/* Graphics controller registers */
for (i = 0; i < 9; i++)
@@ -225,6 +226,7 @@ static void i915_restore_vga(struct drm_device *dev)
i915_write_ar(st01, i, dev_priv->saveAR[i], 0);
inb(st01); /* switch back to index mode */
outb(dev_priv->saveAR_INDEX | 0x20, VGA_AR_INDEX);
+ inb(st01);
/* VGA color palette registers */
outb(dev_priv->saveDACMASK, VGA_DACMASK);