Commit 3360177c authored by Stefan Richter's avatar Stefan Richter

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: default avatarStefan Richter <stefanr@s5r6.in-berlin.de>
parent 083922fe
...@@ -190,14 +190,19 @@ int hpsb_add_host(struct hpsb_host *host) ...@@ -190,14 +190,19 @@ int hpsb_add_host(struct hpsb_host *host)
{ {
if (hpsb_default_host_entry(host)) if (hpsb_default_host_entry(host))
return -ENOMEM; return -ENOMEM;
hpsb_add_extra_config_roms(host); hpsb_add_extra_config_roms(host);
highlevel_add_host(host); highlevel_add_host(host);
return 0; return 0;
} }
void hpsb_resume_host(struct hpsb_host *host)
{
if (host->driver->set_hw_config_rom)
host->driver->set_hw_config_rom(host,
host->csr.rom->bus_info_data);
host->driver->devctl(host, RESET_BUS, SHORT_RESET);
}
void hpsb_remove_host(struct hpsb_host *host) void hpsb_remove_host(struct hpsb_host *host)
{ {
host->is_shutdown = 1; host->is_shutdown = 1;
...@@ -206,9 +211,7 @@ void hpsb_remove_host(struct hpsb_host *host) ...@@ -206,9 +211,7 @@ void hpsb_remove_host(struct hpsb_host *host)
flush_scheduled_work(); flush_scheduled_work();
host->driver = &dummy_driver; host->driver = &dummy_driver;
highlevel_remove_host(host); highlevel_remove_host(host);
hpsb_remove_extra_config_roms(host); hpsb_remove_extra_config_roms(host);
class_device_unregister(&host->class_dev); class_device_unregister(&host->class_dev);
......
...@@ -200,7 +200,8 @@ struct hpsb_host_driver { ...@@ -200,7 +200,8 @@ struct hpsb_host_driver {
struct hpsb_host *hpsb_alloc_host(struct hpsb_host_driver *drv, size_t extra, struct hpsb_host *hpsb_alloc_host(struct hpsb_host_driver *drv, size_t extra,
struct device *dev); struct device *dev);
int hpsb_add_host(struct hpsb_host *host); int hpsb_add_host(struct hpsb_host *host);
void hpsb_remove_host(struct hpsb_host *h); void hpsb_resume_host(struct hpsb_host *host);
void hpsb_remove_host(struct hpsb_host *host);
/* Updates the configuration rom image of a host. rom_version must be the /* Updates the configuration rom image of a host. rom_version must be the
* current version, otherwise it will fail with return value -1. If this * current version, otherwise it will fail with return value -1. If this
......
...@@ -1178,6 +1178,7 @@ module_exit(ieee1394_cleanup); ...@@ -1178,6 +1178,7 @@ module_exit(ieee1394_cleanup);
/** hosts.c **/ /** hosts.c **/
EXPORT_SYMBOL(hpsb_alloc_host); EXPORT_SYMBOL(hpsb_alloc_host);
EXPORT_SYMBOL(hpsb_add_host); EXPORT_SYMBOL(hpsb_add_host);
EXPORT_SYMBOL(hpsb_resume_host);
EXPORT_SYMBOL(hpsb_remove_host); EXPORT_SYMBOL(hpsb_remove_host);
EXPORT_SYMBOL(hpsb_update_config_rom_image); EXPORT_SYMBOL(hpsb_update_config_rom_image);
......
...@@ -3536,9 +3536,6 @@ static int ohci1394_pci_suspend(struct pci_dev *pdev, pm_message_t state) ...@@ -3536,9 +3536,6 @@ static int ohci1394_pci_suspend(struct pci_dev *pdev, pm_message_t state)
int err; int err;
struct ti_ohci *ohci = pci_get_drvdata(pdev); struct ti_ohci *ohci = pci_get_drvdata(pdev);
printk(KERN_INFO "%s does not fully support suspend and resume yet\n",
OHCI1394_DRIVER_NAME);
if (!ohci) { if (!ohci) {
printk(KERN_ERR "%s: tried to suspend nonexisting host\n", printk(KERN_ERR "%s: tried to suspend nonexisting host\n",
OHCI1394_DRIVER_NAME); OHCI1394_DRIVER_NAME);
...@@ -3625,6 +3622,7 @@ static int ohci1394_pci_resume(struct pci_dev *pdev) ...@@ -3625,6 +3622,7 @@ static int ohci1394_pci_resume(struct pci_dev *pdev)
mdelay(50); mdelay(50);
ohci_initialize(ohci); ohci_initialize(ohci);
hpsb_resume_host(ohci->host);
return 0; return 0;
} }
#endif /* CONFIG_PM */ #endif /* CONFIG_PM */
......
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