diff options
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/net/3c59x.c | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/drivers/net/3c59x.c b/drivers/net/3c59x.c index 07746b95fd83..de0dc4ab6e54 100644 --- a/drivers/net/3c59x.c +++ b/drivers/net/3c59x.c | |||
@@ -973,6 +973,11 @@ static int vortex_suspend (struct pci_dev *pdev, pm_message_t state) | |||
973 | netif_device_detach(dev); | 973 | netif_device_detach(dev); |
974 | vortex_down(dev, 1); | 974 | vortex_down(dev, 1); |
975 | } | 975 | } |
976 | pci_save_state(pdev); | ||
977 | pci_enable_wake(pdev, pci_choose_state(pdev, state), 0); | ||
978 | free_irq(dev->irq, dev); | ||
979 | pci_disable_device(pdev); | ||
980 | pci_set_power_state(pdev, pci_choose_state(pdev, state)); | ||
976 | } | 981 | } |
977 | return 0; | 982 | return 0; |
978 | } | 983 | } |
@@ -980,8 +985,19 @@ static int vortex_suspend (struct pci_dev *pdev, pm_message_t state) | |||
980 | static int vortex_resume (struct pci_dev *pdev) | 985 | static int vortex_resume (struct pci_dev *pdev) |
981 | { | 986 | { |
982 | struct net_device *dev = pci_get_drvdata(pdev); | 987 | struct net_device *dev = pci_get_drvdata(pdev); |
988 | struct vortex_private *vp = netdev_priv(dev); | ||
983 | 989 | ||
984 | if (dev && dev->priv) { | 990 | if (dev && vp) { |
991 | pci_set_power_state(pdev, PCI_D0); | ||
992 | pci_restore_state(pdev); | ||
993 | pci_enable_device(pdev); | ||
994 | pci_set_master(pdev); | ||
995 | if (request_irq(dev->irq, vp->full_bus_master_rx ? | ||
996 | &boomerang_interrupt : &vortex_interrupt, SA_SHIRQ, dev->name, dev)) { | ||
997 | printk(KERN_WARNING "%s: Could not reserve IRQ %d\n", dev->name, dev->irq); | ||
998 | pci_disable_device(pdev); | ||
999 | return -EBUSY; | ||
1000 | } | ||
985 | if (netif_running(dev)) { | 1001 | if (netif_running(dev)) { |
986 | vortex_up(dev); | 1002 | vortex_up(dev); |
987 | netif_device_attach(dev); | 1003 | netif_device_attach(dev); |