| From 9d731d77c9794bb0a264f58d35949a1ab6dcc41c Mon Sep 17 00:00:00 2001 |
| From: Rafael J. Wysocki <rjw@sisk.pl> |
| Date: Sun, 12 Oct 2008 20:59:48 -0700 |
| Subject: sky2: Fix WOL regression |
| |
| From: Rafael J. Wysocki <rjw@sisk.pl> |
| |
| commit 9d731d77c9794bb0a264f58d35949a1ab6dcc41c upstream |
| |
| Since dev->power.should_wakeup bit is used by the PCI core to |
| decide whether the device should wake up the system from sleep |
| states, set/unset this bit whenever WOL is enabled/disabled using |
| sky2_set_wol(). |
| |
| Remove an open-coded reference to the standard PCI PM registers that |
| is not used any more. |
| |
| Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl> |
| Cc: Tino Keitel <tino.keitel@gmx.de> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> |
| |
| --- |
| drivers/net/sky2.c | 19 +++++-------------- |
| 1 file changed, 5 insertions(+), 14 deletions(-) |
| |
| --- a/drivers/net/sky2.c |
| +++ b/drivers/net/sky2.c |
| @@ -3034,7 +3034,8 @@ static int sky2_set_wol(struct net_devic |
| struct sky2_port *sky2 = netdev_priv(dev); |
| struct sky2_hw *hw = sky2->hw; |
| |
| - if (wol->wolopts & ~sky2_wol_supported(sky2->hw)) |
| + if ((wol->wolopts & ~sky2_wol_supported(sky2->hw)) |
| + || !device_can_wakeup(&hw->pdev->dev)) |
| return -EOPNOTSUPP; |
| |
| sky2->wol = wol->wolopts; |
| @@ -3045,6 +3046,8 @@ static int sky2_set_wol(struct net_devic |
| sky2_write32(hw, B0_CTST, sky2->wol |
| ? Y2_HW_WOL_ON : Y2_HW_WOL_OFF); |
| |
| + device_set_wakeup_enable(&hw->pdev->dev, sky2->wol); |
| + |
| if (!netif_running(dev)) |
| sky2_wol_init(sky2); |
| return 0; |
| @@ -4166,18 +4169,6 @@ static int __devinit sky2_test_msi(struc |
| return err; |
| } |
| |
| -static int __devinit pci_wake_enabled(struct pci_dev *dev) |
| -{ |
| - int pm = pci_find_capability(dev, PCI_CAP_ID_PM); |
| - u16 value; |
| - |
| - if (!pm) |
| - return 0; |
| - if (pci_read_config_word(dev, pm + PCI_PM_CTRL, &value)) |
| - return 0; |
| - return value & PCI_PM_CTRL_PME_ENABLE; |
| -} |
| - |
| /* This driver supports yukon2 chipset only */ |
| static const char *sky2_name(u8 chipid, char *buf, int sz) |
| { |
| @@ -4238,7 +4229,7 @@ static int __devinit sky2_probe(struct p |
| } |
| } |
| |
| - wol_default = pci_wake_enabled(pdev) ? WAKE_MAGIC : 0; |
| + wol_default = device_may_wakeup(&pdev->dev) ? WAKE_MAGIC : 0; |
| |
| err = -ENOMEM; |
| hw = kzalloc(sizeof(*hw), GFP_KERNEL); |