diff --git a/drivers/net/r8169.c b/drivers/net/r8169.c index 1f647b9..ce49fbf 100644 --- a/drivers/net/r8169.c +++ b/drivers/net/r8169.c @@ -3182,6 +3188,19 @@ out: #endif /* CONFIG_PM */ +static void rtl8169_shutdown(struct pci_dev *pdev) +{ + struct net_device *dev = pci_get_drvdata(pdev); + struct rtl8169_private *tp = netdev_priv(dev); + int wol = !!(tp->features & RTL_FEATURE_WOL); + + pci_enable_wake(pdev, PCI_D3hot, wol); + pci_enable_wake(pdev, PCI_D3cold, wol); + + pci_disable_device(pdev); + pci_set_power_state(pdev, PCI_D3hot); +} + static struct pci_driver rtl8169_pci_driver = { .name = MODULENAME, .id_table = rtl8169_pci_tbl, @@ -3191,6 +3210,7 @@ static struct pci_driver rtl8169_pci_driver = { .suspend = rtl8169_suspend, .resume = rtl8169_resume, #endif + .shutdown = rtl8169_shutdown, }; static int __init rtl8169_init_module(void) -- 1.5.3.3