diff options
Diffstat (limited to 'drivers/net/skge.c')
-rw-r--r-- | drivers/net/skge.c | 22 |
1 files changed, 18 insertions, 4 deletions
diff --git a/drivers/net/skge.c b/drivers/net/skge.c index 21afe108d3cb..776692946562 100644 --- a/drivers/net/skge.c +++ b/drivers/net/skge.c | |||
@@ -135,10 +135,13 @@ static void skge_get_regs(struct net_device *dev, struct ethtool_regs *regs, | |||
135 | /* Wake on Lan only supported on Yukon chips with rev 1 or above */ | 135 | /* Wake on Lan only supported on Yukon chips with rev 1 or above */ |
136 | static u32 wol_supported(const struct skge_hw *hw) | 136 | static u32 wol_supported(const struct skge_hw *hw) |
137 | { | 137 | { |
138 | if (hw->chip_id == CHIP_ID_YUKON && hw->chip_rev != 0) | 138 | if (hw->chip_id == CHIP_ID_GENESIS) |
139 | return WAKE_MAGIC | WAKE_PHY; | 139 | return 0; |
140 | else | 140 | |
141 | if (hw->chip_id == CHIP_ID_YUKON && hw->chip_rev == 0) | ||
141 | return 0; | 142 | return 0; |
143 | |||
144 | return WAKE_MAGIC | WAKE_PHY; | ||
142 | } | 145 | } |
143 | 146 | ||
144 | static u32 pci_wake_enabled(struct pci_dev *dev) | 147 | static u32 pci_wake_enabled(struct pci_dev *dev) |
@@ -3591,7 +3594,9 @@ static struct net_device *skge_devinit(struct skge_hw *hw, int port, | |||
3591 | skge->duplex = -1; | 3594 | skge->duplex = -1; |
3592 | skge->speed = -1; | 3595 | skge->speed = -1; |
3593 | skge->advertising = skge_supported_modes(hw); | 3596 | skge->advertising = skge_supported_modes(hw); |
3594 | skge->wol = pci_wake_enabled(hw->pdev) ? wol_supported(hw) : 0; | 3597 | |
3598 | if (pci_wake_enabled(hw->pdev)) | ||
3599 | skge->wol = wol_supported(hw) & WAKE_MAGIC; | ||
3595 | 3600 | ||
3596 | hw->dev[port] = dev; | 3601 | hw->dev[port] = dev; |
3597 | 3602 | ||
@@ -3797,6 +3802,9 @@ static int skge_suspend(struct pci_dev *pdev, pm_message_t state) | |||
3797 | struct skge_hw *hw = pci_get_drvdata(pdev); | 3802 | struct skge_hw *hw = pci_get_drvdata(pdev); |
3798 | int i, err, wol = 0; | 3803 | int i, err, wol = 0; |
3799 | 3804 | ||
3805 | if (!hw) | ||
3806 | return 0; | ||
3807 | |||
3800 | err = pci_save_state(pdev); | 3808 | err = pci_save_state(pdev); |
3801 | if (err) | 3809 | if (err) |
3802 | return err; | 3810 | return err; |
@@ -3825,6 +3833,9 @@ static int skge_resume(struct pci_dev *pdev) | |||
3825 | struct skge_hw *hw = pci_get_drvdata(pdev); | 3833 | struct skge_hw *hw = pci_get_drvdata(pdev); |
3826 | int i, err; | 3834 | int i, err; |
3827 | 3835 | ||
3836 | if (!hw) | ||
3837 | return 0; | ||
3838 | |||
3828 | err = pci_set_power_state(pdev, PCI_D0); | 3839 | err = pci_set_power_state(pdev, PCI_D0); |
3829 | if (err) | 3840 | if (err) |
3830 | goto out; | 3841 | goto out; |
@@ -3863,6 +3874,9 @@ static void skge_shutdown(struct pci_dev *pdev) | |||
3863 | struct skge_hw *hw = pci_get_drvdata(pdev); | 3874 | struct skge_hw *hw = pci_get_drvdata(pdev); |
3864 | int i, wol = 0; | 3875 | int i, wol = 0; |
3865 | 3876 | ||
3877 | if (!hw) | ||
3878 | return; | ||
3879 | |||
3866 | for (i = 0; i < hw->ports; i++) { | 3880 | for (i = 0; i < hw->ports; i++) { |
3867 | struct net_device *dev = hw->dev[i]; | 3881 | struct net_device *dev = hw->dev[i]; |
3868 | struct skge_port *skge = netdev_priv(dev); | 3882 | struct skge_port *skge = netdev_priv(dev); |