bk://linux-dj.bkbits.net/agpgart
davej@redhat.com|ChangeSet|20040824170428|24315 davej

# This is a BitKeeper generated diff -Nru style patch.
#
# ChangeSet
#   2004/08/28 16:13:58-07:00 akpm@bix.(none) 
#   Merge bix.(none):/usr/src/bk25 into bix.(none):/usr/src/bk-agpgart
# 
# include/linux/pci_ids.h
#   2004/08/28 16:13:54-07:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# ChangeSet
#   2004/08/27 14:50:58-07:00 akpm@bix.(none) 
#   Merge bix.(none):/usr/src/bk25 into bix.(none):/usr/src/bk-agpgart
# 
# include/linux/pci_ids.h
#   2004/08/27 14:50:54-07:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# ChangeSet
#   2004/08/27 13:06:31-07:00 akpm@bix.(none) 
#   Merge bix.(none):/usr/src/bk25 into bix.(none):/usr/src/bk-agpgart
# 
# include/linux/pci_ids.h
#   2004/08/27 13:06:28-07:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# ChangeSet
#   2004/08/24 18:04:28+01:00 davej@redhat.com 
#   [AGPGART] via-agp.c resume/suspend support
#   
#   From: Arkadiusz Miskiewicz <arekm@pld-linux.org>
#   
#   With this patch I'm able to suspend to disk (well, works even without
#   patch) and resume (without it my laptop hangs (even sysrq is not working)
#   while resuming).
#   
#   Signed-off-by: Arkadiusz Miskiewicz <arekm@pld-linux.org>
#   Signed-off-by: Andrew Morton <akpm@osdl.org>
#   Signed-off-by: Dave Jones <davej@redhat.com>
# 
# drivers/char/agp/via-agp.c
#   2004/08/24 18:04:15+01:00 davej@redhat.com +31 -0
#   [AGPGART] via-agp.c resume/suspend support
#   
#   From: Arkadiusz Miskiewicz <arekm@pld-linux.org>
#   
#   With this patch I'm able to suspend to disk (well, works even without
#   patch) and resume (without it my laptop hangs (even sysrq is not working)
#   while resuming).
#   
#   Signed-off-by: Arkadiusz Miskiewicz <arekm@pld-linux.org>
#   Signed-off-by: Andrew Morton <akpm@osdl.org>
#   Signed-off-by: Dave Jones <davej@redhat.com>
# 
# ChangeSet
#   2004/08/23 21:23:08-07:00 akpm@bix.(none) 
#   Merge bix.(none):/usr/src/bk25 into bix.(none):/usr/src/bk-agpgart
# 
# ChangeSet
#   2004/08/23 16:27:14-07:00 akpm@bix.(none) 
#   Merge bix.(none):/usr/src/bk25 into bix.(none):/usr/src/bk-agpgart
# 
# drivers/char/agp/intel-mch-agp.c
#   2004/08/23 21:23:03-07:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# drivers/char/agp/intel-agp.c
#   2004/08/23 21:23:03-07:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# include/linux/pci_ids.h
#   2004/08/23 16:27:09-07:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# ChangeSet
#   2004/08/23 13:42:56-07:00 akpm@bix.(none) 
#   Merge bix.(none):/usr/src/bk25 into bix.(none):/usr/src/bk-agpgart
# 
# include/linux/pci_ids.h
#   2004/08/23 13:42:52-07:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# ChangeSet
#   2004/08/22 21:03:23-07:00 akpm@bix.(none) 
#   Merge bix.(none):/usr/src/bk25 into bix.(none):/usr/src/bk-agpgart
# 
# include/linux/pci_ids.h
#   2004/08/22 21:03:19-07:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# ChangeSet
#   2004/08/05 12:39:41-07:00 akpm@bix.(none) 
#   Merge bk://linux-dj.bkbits.net/agpgart
#   into bix.(none):/usr/src/bk-agpgart
# 
# drivers/char/agp/intel-agp.c
#   2004/08/05 12:39:37-07:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# ChangeSet
#   2004/08/04 02:37:29-07:00 akpm@bix.(none) 
#   Merge bk://linux-dj.bkbits.net/agpgart
#   into bix.(none):/usr/src/bk-agpgart
# 
# drivers/char/agp/intel-mch-agp.c
#   2004/08/04 02:37:25-07:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# drivers/char/agp/intel-agp.c
#   2004/08/04 02:37:25-07:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# ChangeSet
#   2004/07/31 23:52:37-07:00 akpm@bix.(none) 
#   Merge bix.(none):/usr/src/bk25 into bix.(none):/usr/src/bk-agpgart
# 
# include/linux/pci_ids.h
#   2004/07/31 23:52:34-07:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# ChangeSet
#   2004/07/30 22:16:17-07:00 akpm@bix.(none) 
#   Merge bix.(none):/usr/src/bk25 into bix.(none):/usr/src/bk-agpgart
# 
# include/linux/pci_ids.h
#   2004/07/30 22:16:14-07:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# drivers/char/agp/intel-agp.c
#   2004/07/30 22:16:14-07:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# ChangeSet
#   2004/07/27 13:18:37-07:00 akpm@bix.(none) 
#   Merge bk://linux-dj.bkbits.net/agpgart
#   into bix.(none):/usr/src/bk-agpgart
# 
# include/linux/pci_ids.h
#   2004/07/27 13:18:32-07:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
# drivers/char/agp/intel-agp.c
#   2004/07/27 13:18:32-07:00 akpm@bix.(none) +0 -0
#   Auto merged
# 
diff -Nru a/drivers/char/agp/via-agp.c b/drivers/char/agp/via-agp.c
--- a/drivers/char/agp/via-agp.c	2004-08-30 17:17:15 -07:00
+++ b/drivers/char/agp/via-agp.c	2004-08-30 17:17:15 -07:00
@@ -438,6 +438,33 @@
 	agp_put_bridge(bridge);
 }
 
+#ifdef CONFIG_PM
+
+static int agp_via_suspend(struct pci_dev *pdev, u32 state)
+{
+	pci_save_state (pdev, pdev->saved_config_space);
+	pci_set_power_state (pdev, 3);
+
+	return 0;
+}
+
+static int agp_via_resume(struct pci_dev *pdev)
+{
+	struct agp_bridge_data *bridge = pci_get_drvdata(pdev);
+
+	pci_set_power_state (pdev, 0);
+	pci_restore_state(pdev, pdev->saved_config_space);
+
+	if (bridge->driver == &via_agp3_driver)
+		return via_configure_agp3();
+	else if (bridge->driver == &via_driver)
+		return via_configure();
+
+	return 0;
+}
+
+#endif /* CONFIG_PM */
+
 /* must be the same order as name table above */
 static struct pci_device_id agp_via_pci_table[] = {
 #define ID(x) \
@@ -487,6 +514,10 @@
 	.id_table	= agp_via_pci_table,
 	.probe		= agp_via_probe,
 	.remove		= agp_via_remove,
+#ifdef CONFIG_PM
+	.suspend	= agp_via_suspend,
+	.resume		= agp_via_resume,
+#endif
 };