Commit b932ccb5 authored by Dave Airlie's avatar Dave Airlie

drm: add support for passing state into the suspend hooks.

fix i915 driver to use state for hibernate save avoidance.
Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
parent da636ad6
...@@ -568,7 +568,7 @@ struct drm_driver { ...@@ -568,7 +568,7 @@ struct drm_driver {
void (*postclose) (struct drm_device *, struct drm_file *); void (*postclose) (struct drm_device *, struct drm_file *);
void (*lastclose) (struct drm_device *); void (*lastclose) (struct drm_device *);
int (*unload) (struct drm_device *); int (*unload) (struct drm_device *);
int (*suspend) (struct drm_device *); int (*suspend) (struct drm_device *, pm_message_t state);
int (*resume) (struct drm_device *); int (*resume) (struct drm_device *);
int (*dma_ioctl) (struct drm_device *dev, void *data, struct drm_file *file_priv); int (*dma_ioctl) (struct drm_device *dev, void *data, struct drm_file *file_priv);
void (*dma_ready) (struct drm_device *); void (*dma_ready) (struct drm_device *);
......
...@@ -36,7 +36,7 @@ static int drm_sysfs_suspend(struct device *dev, pm_message_t state) ...@@ -36,7 +36,7 @@ static int drm_sysfs_suspend(struct device *dev, pm_message_t state)
printk(KERN_ERR "%s\n", __FUNCTION__); printk(KERN_ERR "%s\n", __FUNCTION__);
if (drm_dev->driver->suspend) if (drm_dev->driver->suspend)
return drm_dev->driver->suspend(drm_dev); return drm_dev->driver->suspend(drm_dev, state);
return 0; return 0;
} }
......
...@@ -238,7 +238,7 @@ static void i915_restore_vga(struct drm_device *dev) ...@@ -238,7 +238,7 @@ static void i915_restore_vga(struct drm_device *dev)
} }
static int i915_suspend(struct drm_device *dev) static int i915_suspend(struct drm_device *dev, pm_message_t state)
{ {
struct drm_i915_private *dev_priv = dev->dev_private; struct drm_i915_private *dev_priv = dev->dev_private;
int i; int i;
...@@ -249,6 +249,9 @@ static int i915_suspend(struct drm_device *dev) ...@@ -249,6 +249,9 @@ static int i915_suspend(struct drm_device *dev)
return -ENODEV; return -ENODEV;
} }
if (state.event == PM_EVENT_PRETHAW)
return 0;
pci_save_state(dev->pdev); pci_save_state(dev->pdev);
pci_read_config_byte(dev->pdev, LBB, &dev_priv->saveLBB); pci_read_config_byte(dev->pdev, LBB, &dev_priv->saveLBB);
...@@ -363,9 +366,11 @@ static int i915_suspend(struct drm_device *dev) ...@@ -363,9 +366,11 @@ static int i915_suspend(struct drm_device *dev)
i915_save_vga(dev); i915_save_vga(dev);
/* Shut down the device */ if (state.event == PM_EVENT_SUSPEND) {
pci_disable_device(dev->pdev); /* Shut down the device */
pci_set_power_state(dev->pdev, PCI_D3hot); pci_disable_device(dev->pdev);
pci_set_power_state(dev->pdev, PCI_D3hot);
}
return 0; return 0;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment