aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStefan Richter <stefanr@s5r6.in-berlin.de>2007-01-07 15:49:27 -0500
committerStefan Richter <stefanr@s5r6.in-berlin.de>2007-02-08 14:59:19 -0500
commit3360177c62e86f476c4f1a057e13163383652f7b (patch)
tree4394cb7f4cef0231e371fda119178bde552eec79
parent083922fe1c277603a03f0ca700fe5a76f11178c7 (diff)
ieee1394: restore config ROM when resuming
After PM suspend + resume, the local configuration ROM was not restored. This prevented remote nodes from recognizing the resuming machine. Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
-rw-r--r--drivers/ieee1394/hosts.c13
-rw-r--r--drivers/ieee1394/hosts.h3
-rw-r--r--drivers/ieee1394/ieee1394_core.c1
-rw-r--r--drivers/ieee1394/ohci1394.c4
4 files changed, 12 insertions, 9 deletions
diff --git a/drivers/ieee1394/hosts.c b/drivers/ieee1394/hosts.c
index ee82a5320bf7..32a130921938 100644
--- a/drivers/ieee1394/hosts.c
+++ b/drivers/ieee1394/hosts.c
@@ -190,14 +190,19 @@ int hpsb_add_host(struct hpsb_host *host)
190{ 190{
191 if (hpsb_default_host_entry(host)) 191 if (hpsb_default_host_entry(host))
192 return -ENOMEM; 192 return -ENOMEM;
193
194 hpsb_add_extra_config_roms(host); 193 hpsb_add_extra_config_roms(host);
195
196 highlevel_add_host(host); 194 highlevel_add_host(host);
197
198 return 0; 195 return 0;
199} 196}
200 197
198void hpsb_resume_host(struct hpsb_host *host)
199{
200 if (host->driver->set_hw_config_rom)
201 host->driver->set_hw_config_rom(host,
202 host->csr.rom->bus_info_data);
203 host->driver->devctl(host, RESET_BUS, SHORT_RESET);
204}
205
201void hpsb_remove_host(struct hpsb_host *host) 206void hpsb_remove_host(struct hpsb_host *host)
202{ 207{
203 host->is_shutdown = 1; 208 host->is_shutdown = 1;
@@ -206,9 +211,7 @@ void hpsb_remove_host(struct hpsb_host *host)
206 flush_scheduled_work(); 211 flush_scheduled_work();
207 212
208 host->driver = &dummy_driver; 213 host->driver = &dummy_driver;
209
210 highlevel_remove_host(host); 214 highlevel_remove_host(host);
211
212 hpsb_remove_extra_config_roms(host); 215 hpsb_remove_extra_config_roms(host);
213 216
214 class_device_unregister(&host->class_dev); 217 class_device_unregister(&host->class_dev);
diff --git a/drivers/ieee1394/hosts.h b/drivers/ieee1394/hosts.h
index d553e38c9543..3922f0e88526 100644
--- a/drivers/ieee1394/hosts.h
+++ b/drivers/ieee1394/hosts.h
@@ -200,7 +200,8 @@ struct hpsb_host_driver {
200struct hpsb_host *hpsb_alloc_host(struct hpsb_host_driver *drv, size_t extra, 200struct hpsb_host *hpsb_alloc_host(struct hpsb_host_driver *drv, size_t extra,
201 struct device *dev); 201 struct device *dev);
202int hpsb_add_host(struct hpsb_host *host); 202int hpsb_add_host(struct hpsb_host *host);
203void hpsb_remove_host(struct hpsb_host *h); 203void hpsb_resume_host(struct hpsb_host *host);
204void hpsb_remove_host(struct hpsb_host *host);
204 205
205/* Updates the configuration rom image of a host. rom_version must be the 206/* Updates the configuration rom image of a host. rom_version must be the
206 * current version, otherwise it will fail with return value -1. If this 207 * current version, otherwise it will fail with return value -1. If this
diff --git a/drivers/ieee1394/ieee1394_core.c b/drivers/ieee1394/ieee1394_core.c
index 35fbe4755a2b..1521e57e124b 100644
--- a/drivers/ieee1394/ieee1394_core.c
+++ b/drivers/ieee1394/ieee1394_core.c
@@ -1178,6 +1178,7 @@ module_exit(ieee1394_cleanup);
1178/** hosts.c **/ 1178/** hosts.c **/
1179EXPORT_SYMBOL(hpsb_alloc_host); 1179EXPORT_SYMBOL(hpsb_alloc_host);
1180EXPORT_SYMBOL(hpsb_add_host); 1180EXPORT_SYMBOL(hpsb_add_host);
1181EXPORT_SYMBOL(hpsb_resume_host);
1181EXPORT_SYMBOL(hpsb_remove_host); 1182EXPORT_SYMBOL(hpsb_remove_host);
1182EXPORT_SYMBOL(hpsb_update_config_rom_image); 1183EXPORT_SYMBOL(hpsb_update_config_rom_image);
1183 1184
diff --git a/drivers/ieee1394/ohci1394.c b/drivers/ieee1394/ohci1394.c
index b7e816683fb0..5729e412cc4a 100644
--- a/drivers/ieee1394/ohci1394.c
+++ b/drivers/ieee1394/ohci1394.c
@@ -3536,9 +3536,6 @@ static int ohci1394_pci_suspend(struct pci_dev *pdev, pm_message_t state)
3536 int err; 3536 int err;
3537 struct ti_ohci *ohci = pci_get_drvdata(pdev); 3537 struct ti_ohci *ohci = pci_get_drvdata(pdev);
3538 3538
3539 printk(KERN_INFO "%s does not fully support suspend and resume yet\n",
3540 OHCI1394_DRIVER_NAME);
3541
3542 if (!ohci) { 3539 if (!ohci) {
3543 printk(KERN_ERR "%s: tried to suspend nonexisting host\n", 3540 printk(KERN_ERR "%s: tried to suspend nonexisting host\n",
3544 OHCI1394_DRIVER_NAME); 3541 OHCI1394_DRIVER_NAME);
@@ -3625,6 +3622,7 @@ static int ohci1394_pci_resume(struct pci_dev *pdev)
3625 mdelay(50); 3622 mdelay(50);
3626 ohci_initialize(ohci); 3623 ohci_initialize(ohci);
3627 3624
3625 hpsb_resume_host(ohci->host);
3628 return 0; 3626 return 0;
3629} 3627}
3630#endif /* CONFIG_PM */ 3628#endif /* CONFIG_PM */