forked from Minki/linux
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>
This commit is contained in:
parent
083922fe1c
commit
3360177c62
@ -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)
|
|||||||
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 {
|
|||||||
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);
|
|||||||
/** 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)
|
|||||||
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)
|
|||||||
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 */
|
||||||
|
Loading…
Reference in New Issue
Block a user