From: Pavel Roskin Signed-off-by: Pavel Roskin Signed-off-by: Andrew Morton --- drivers/net/wireless/orinoco_pci.c | 11 +++++++++++ 1 files changed, 11 insertions(+) diff -puN drivers/net/wireless/orinoco_pci.c~orinoco_pci-disable-device-and-free-irq-when-suspending drivers/net/wireless/orinoco_pci.c --- 25/drivers/net/wireless/orinoco_pci.c~orinoco_pci-disable-device-and-free-irq-when-suspending Fri Apr 7 15:37:40 2006 +++ 25-akpm/drivers/net/wireless/orinoco_pci.c Fri Apr 7 15:37:40 2006 @@ -304,7 +304,9 @@ static int orinoco_pci_suspend(struct pc orinoco_unlock(priv, &flags); + free_irq(pdev->irq, dev); pci_save_state(pdev); + pci_disable_device(pdev); pci_set_power_state(pdev, PCI_D3hot); return 0; @@ -320,8 +322,17 @@ static int orinoco_pci_resume(struct pci printk(KERN_DEBUG "%s: Orinoco-PCI waking up\n", dev->name); pci_set_power_state(pdev, 0); + pci_enable_device(pdev); pci_restore_state(pdev); + err = request_irq(pdev->irq, orinoco_interrupt, SA_SHIRQ, + dev->name, dev); + if (err) { + printk(KERN_ERR "%s: Cannot re-allocate IRQ\n", dev->name); + pci_disable_device(pdev); + return -EBUSY; + } + err = orinoco_reinit_firmware(dev); if (err) { printk(KERN_ERR "%s: Error %d re-initializing firmware on orinoco_pci_resume()\n", _