diff options
Diffstat (limited to 'drivers/gpu/drm/i915/i915_suspend.c')
-rw-r--r-- | drivers/gpu/drm/i915/i915_suspend.c | 80 |
1 files changed, 38 insertions, 42 deletions
diff --git a/drivers/gpu/drm/i915/i915_suspend.c b/drivers/gpu/drm/i915/i915_suspend.c index 7b64e7137270..db2111fc809e 100644 --- a/drivers/gpu/drm/i915/i915_suspend.c +++ b/drivers/gpu/drm/i915/i915_suspend.c @@ -32,45 +32,10 @@ #include "i915_reg.h" #include "i915_suspend.h" -static void i915_save_display(struct drm_i915_private *dev_priv) -{ - struct pci_dev *pdev = dev_priv->drm.pdev; - - /* Display arbitration control */ - if (INTEL_GEN(dev_priv) <= 4) - dev_priv->regfile.saveDSPARB = I915_READ(DSPARB); - - if (IS_GEN(dev_priv, 4)) - pci_read_config_word(pdev, GCDGMBUS, - &dev_priv->regfile.saveGCDGMBUS); -} - -static void i915_restore_display(struct drm_i915_private *dev_priv) -{ - struct pci_dev *pdev = dev_priv->drm.pdev; - - if (IS_GEN(dev_priv, 4)) - pci_write_config_word(pdev, GCDGMBUS, - dev_priv->regfile.saveGCDGMBUS); - - /* Display arbitration */ - if (INTEL_GEN(dev_priv) <= 4) - I915_WRITE(DSPARB, dev_priv->regfile.saveDSPARB); - - /* only restore FBC info on the platform that supports FBC*/ - intel_fbc_global_disable(dev_priv); - - intel_vga_redisable(dev_priv); - - intel_gmbus_reset(dev_priv); -} - -int i915_save_state(struct drm_i915_private *dev_priv) +static void intel_save_swf(struct drm_i915_private *dev_priv) { int i; - i915_save_display(dev_priv); - /* Scratch space */ if (IS_GEN(dev_priv, 2) && IS_MOBILE(dev_priv)) { for (i = 0; i < 7; i++) { @@ -90,16 +55,12 @@ int i915_save_state(struct drm_i915_private *dev_priv) for (i = 0; i < 3; i++) dev_priv->regfile.saveSWF3[i] = I915_READ(SWF3(i)); } - - return 0; } -int i915_restore_state(struct drm_i915_private *dev_priv) +static void intel_restore_swf(struct drm_i915_private *dev_priv) { int i; - i915_restore_display(dev_priv); - /* Scratch space */ if (IS_GEN(dev_priv, 2) && IS_MOBILE(dev_priv)) { for (i = 0; i < 7; i++) { @@ -119,6 +80,41 @@ int i915_restore_state(struct drm_i915_private *dev_priv) for (i = 0; i < 3; i++) I915_WRITE(SWF3(i), dev_priv->regfile.saveSWF3[i]); } +} + +void i915_save_display(struct drm_i915_private *dev_priv) +{ + struct pci_dev *pdev = dev_priv->drm.pdev; + + /* Display arbitration control */ + if (INTEL_GEN(dev_priv) <= 4) + dev_priv->regfile.saveDSPARB = I915_READ(DSPARB); - return 0; + if (IS_GEN(dev_priv, 4)) + pci_read_config_word(pdev, GCDGMBUS, + &dev_priv->regfile.saveGCDGMBUS); + + intel_save_swf(dev_priv); +} + +void i915_restore_display(struct drm_i915_private *dev_priv) +{ + struct pci_dev *pdev = dev_priv->drm.pdev; + + intel_restore_swf(dev_priv); + + if (IS_GEN(dev_priv, 4)) + pci_write_config_word(pdev, GCDGMBUS, + dev_priv->regfile.saveGCDGMBUS); + + /* Display arbitration */ + if (INTEL_GEN(dev_priv) <= 4) + I915_WRITE(DSPARB, dev_priv->regfile.saveDSPARB); + + /* only restore FBC info on the platform that supports FBC*/ + intel_fbc_global_disable(dev_priv); + + intel_vga_redisable(dev_priv); + + intel_gmbus_reset(dev_priv); } |