diff options
author | Stefan Richter <stefanr@s5r6.in-berlin.de> | 2007-01-07 15:49:27 -0500 |
---|---|---|
committer | Stefan Richter <stefanr@s5r6.in-berlin.de> | 2007-02-08 14:59:19 -0500 |
commit | 3360177c62e86f476c4f1a057e13163383652f7b (patch) | |
tree | 4394cb7f4cef0231e371fda119178bde552eec79 | |
parent | 083922fe1c277603a03f0ca700fe5a76f11178c7 (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.c | 13 | ||||
-rw-r--r-- | drivers/ieee1394/hosts.h | 3 | ||||
-rw-r--r-- | drivers/ieee1394/ieee1394_core.c | 1 | ||||
-rw-r--r-- | drivers/ieee1394/ohci1394.c | 4 |
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 | ||
198 | void 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 | |||
201 | void hpsb_remove_host(struct hpsb_host *host) | 206 | void 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 { | |||
200 | struct hpsb_host *hpsb_alloc_host(struct hpsb_host_driver *drv, size_t extra, | 200 | struct hpsb_host *hpsb_alloc_host(struct hpsb_host_driver *drv, size_t extra, |
201 | struct device *dev); | 201 | struct device *dev); |
202 | int hpsb_add_host(struct hpsb_host *host); | 202 | int hpsb_add_host(struct hpsb_host *host); |
203 | void hpsb_remove_host(struct hpsb_host *h); | 203 | void hpsb_resume_host(struct hpsb_host *host); |
204 | void 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 **/ |
1179 | EXPORT_SYMBOL(hpsb_alloc_host); | 1179 | EXPORT_SYMBOL(hpsb_alloc_host); |
1180 | EXPORT_SYMBOL(hpsb_add_host); | 1180 | EXPORT_SYMBOL(hpsb_add_host); |
1181 | EXPORT_SYMBOL(hpsb_resume_host); | ||
1181 | EXPORT_SYMBOL(hpsb_remove_host); | 1182 | EXPORT_SYMBOL(hpsb_remove_host); |
1182 | EXPORT_SYMBOL(hpsb_update_config_rom_image); | 1183 | EXPORT_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 */ |