diff options
author | Dave Jones <davej@redhat.com> | 2006-06-20 08:44:38 +0400 |
---|---|---|
committer | Dave Jones <davej@redhat.com> | 2006-06-20 08:44:38 +0400 |
commit | c5f2f261e7a47e4c72723cdcbe99e1bd771a81ea (patch) | |
tree | 2223901dd5dd2cfc33e81d3ac820e26a814bdda8 /drivers/char/agp | |
parent | a4aec2622340e356e7dcd0e8fd05378dacb71c89 (diff) | |
download | linux-c5f2f261e7a47e4c72723cdcbe99e1bd771a81ea.tar.xz |
[AGPGART] Suspend/Resume support for nVidia nForce AGP.
Based on a patch from the Ubuntu kernel.
Signed-off-by: Ben Collins <bcollins@ubuntu.com>
Signed-off-by: Dave Jones <davej@redhat.com>
Diffstat (limited to 'drivers/char/agp')
-rw-r--r-- | drivers/char/agp/nvidia-agp.c | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/drivers/char/agp/nvidia-agp.c b/drivers/char/agp/nvidia-agp.c index 4c67135c12d8..b3a53e7f3602 100644 --- a/drivers/char/agp/nvidia-agp.c +++ b/drivers/char/agp/nvidia-agp.c @@ -376,6 +376,31 @@ static void __devexit agp_nvidia_remove(struct pci_dev *pdev) agp_put_bridge(bridge); } +#ifdef CONFIG_PM +static int agp_nvidia_suspend(struct pci_dev *pdev, pm_message_t state) +{ + pci_save_state (pdev); + pci_set_power_state (pdev, 3); + + return 0; +} + +static int agp_nvidia_resume(struct pci_dev *pdev) +{ + struct agp_bridge_data *bridge = pci_get_drvdata(pdev); + + /* set power state 0 and restore PCI space */ + pci_set_power_state (pdev, 0); + pci_restore_state(pdev); + + /* reconfigure AGP hardware again */ + nvidia_configure(); + + return 0; +} +#endif + + static struct pci_device_id agp_nvidia_pci_table[] = { { .class = (PCI_CLASS_BRIDGE_HOST << 8), @@ -403,6 +428,10 @@ static struct pci_driver agp_nvidia_pci_driver = { .id_table = agp_nvidia_pci_table, .probe = agp_nvidia_probe, .remove = agp_nvidia_remove, +#ifdef CONFIG_PM + .suspend = agp_nvidia_suspend, + .resume = agp_nvidia_resume, +#endif }; static int __init agp_nvidia_init(void) |