Skip to content

Commit

Permalink
[PATCH] fix tulip suspend/resume #2
Browse files Browse the repository at this point in the history
This patch allows the tulip driver to suspend and resume properly.  It was
originally written by Karsten Keil and then modified by Adam Belay.

Signed-off-by: Karsten Keil <kkeil@suse.de>
Signed-off-by: Adam Belay <abelay@novell.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
  • Loading branch information
Adam Belay authored and Jeff Garzik committed Jun 27, 2005
1 parent 05ab195 commit 1fe2cb3
Showing 1 changed file with 31 additions and 12 deletions.
43 changes: 31 additions & 12 deletions drivers/net/tulip/tulip_core.c
Original file line number Diff line number Diff line change
Expand Up @@ -1757,27 +1757,46 @@ static int tulip_suspend (struct pci_dev *pdev, pm_message_t state)
{
struct net_device *dev = pci_get_drvdata(pdev);

if (dev && netif_running (dev) && netif_device_present (dev)) {
netif_device_detach (dev);
tulip_down (dev);
/* pci_power_off(pdev, -1); */
}
if (!dev)
return -EINVAL;

if (netif_running(dev))
tulip_down(dev);

netif_device_detach(dev);
free_irq(dev->irq, dev);

pci_save_state(pdev);
pci_disable_device(pdev);
pci_set_power_state(pdev, pci_choose_state(pdev, state));

return 0;
}


static int tulip_resume(struct pci_dev *pdev)
{
struct net_device *dev = pci_get_drvdata(pdev);
int retval;

if (dev && netif_running (dev) && !netif_device_present (dev)) {
#if 1
pci_enable_device (pdev);
#endif
/* pci_power_on(pdev); */
tulip_up (dev);
netif_device_attach (dev);
if (!dev)
return -EINVAL;

pci_set_power_state(pdev, PCI_D0);
pci_restore_state(pdev);

pci_enable_device(pdev);

if ((retval = request_irq(dev->irq, &tulip_interrupt, SA_SHIRQ, dev->name, dev))) {
printk (KERN_ERR "tulip: request_irq failed in resume\n");
return retval;
}

netif_device_attach(dev);

if (netif_running(dev))
tulip_up(dev);

return 0;
}

Expand Down

0 comments on commit 1fe2cb3

Please sign in to comment.