]> bbs.cooldavid.org Git - jme.git/commitdiff
Net / jme: Do not use legacy PCI power management
authorRafael J. Wysocki <rjw@sisk.pl>
Sat, 26 Mar 2011 01:34:06 +0000 (01:34 +0000)
committerGuo-Fu Tseng <cooldavid@cooldavid.org>
Tue, 28 Jun 2011 07:16:52 +0000 (15:16 +0800)
The jme driver uses the legacy PCI power management, so it has to do
some PCI-specific things in its ->suspend() and ->resume() callbacks,
which isn't necessary and should better be done by the PCI
sybsystem-level power management code.  It also doesn't use device
wakeup flags correctly.

Convert jme to the new PCI power management framework and make it
let the PCI subsystem take care of all the PCI-specific aspects of
device handling during system power transitions.

Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
Signed-off-by: David S. Miller <davem@davemloft.net>
Merged-by: Guo-Fu Tseng <cooldavid@cooldavid.org>
jme.c

diff --git a/jme.c b/jme.c
index c146d315ee0cf893697d73e0f56b460c2576bcda..3eb01a559309cb27ec6f2b938cde8b459cfb3c5a 100644 (file)
--- a/jme.c
+++ b/jme.c
@@ -276,7 +276,11 @@ jme_clear_pm(struct jme_adapter *jme)
 {
        jwrite32(jme, JME_PMCS, 0xFFFF0000 | jme->reg_pmcs);
        pci_set_power_state(jme->pdev, PCI_D0);
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,26)
        pci_enable_wake(jme->pdev, PCI_D0, false);
+#else
+       device_set_wakeup_enable(&jme->pdev->dev, false);
+#endif
 }
 
 static int
@@ -2630,6 +2634,10 @@ jme_set_wol(struct net_device *netdev,
 
        jwrite32(jme, JME_PMCS, jme->reg_pmcs);
 
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,26)
+       device_set_wakeup_enable(&jme->pdev->dev, jme->reg_pmcs);
+#endif
+
        return 0;
 }
 
@@ -3325,8 +3333,15 @@ jme_shutdown(struct pci_dev *pdev)
 
 #ifdef CONFIG_PM
 static int
+#if LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,38)
 jme_suspend(struct pci_dev *pdev, pm_message_t state)
+#else
+jme_suspend(struct device *dev)
+#endif
 {
+#if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,38)
+       struct pci_dev *pdev = to_pci_dev(dev);
+#endif
        struct net_device *netdev = pci_get_drvdata(pdev);
        struct jme_adapter *jme = netdev_priv(netdev);
 
@@ -3358,26 +3373,37 @@ jme_suspend(struct pci_dev *pdev, pm_message_t state)
        tasklet_hi_enable(&jme->rxclean_task);
        tasklet_hi_enable(&jme->rxempty_task);
 
-       pci_save_state(pdev);
        jme_powersave_phy(jme);
+#if LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,38)
+       pci_save_state(pdev);
 #if LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,27)
        pci_enable_wake(pdev, PCI_D3hot, true);
 #else
        pci_pme_active(pdev, true);
 #endif
        pci_set_power_state(pdev, PCI_D3hot);
+#endif
 
        return 0;
 }
 
 static int
+#if LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,38)
 jme_resume(struct pci_dev *pdev)
+#else
+jme_resume(struct device *dev)
+#endif
 {
+#if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,38)
+       struct pci_dev *pdev = to_pci_dev(dev);
+#endif
        struct net_device *netdev = pci_get_drvdata(pdev);
        struct jme_adapter *jme = netdev_priv(netdev);
 
        jme_clear_pm(jme);
+#if LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,38)
        pci_restore_state(pdev);
+#endif
 
        jme_phy_on(jme);
        if (test_bit(JME_FLAG_SSET, &jme->flags))
@@ -3394,6 +3420,17 @@ jme_resume(struct pci_dev *pdev)
 
        return 0;
 }
+
+#if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,38)
+static SIMPLE_DEV_PM_OPS(jme_pm_ops, jme_suspend, jme_resume);
+#define JME_PM_OPS (&jme_pm_ops)
+#endif
+
+#else
+
+#if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,38)
+#define JME_PM_OPS NULL
+#endif
 #endif
 
 #if LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,24)
@@ -3411,11 +3448,13 @@ static struct pci_driver jme_driver = {
        .id_table       = jme_pci_tbl,
        .probe          = jme_init_one,
        .remove         = __devexit_p(jme_remove_one),
-#ifdef CONFIG_PM
-       .suspend        = jme_suspend,
-       .resume         = jme_resume,
-#endif /* CONFIG_PM */
        .shutdown       = jme_shutdown,
+#if LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,38)
+       .suspend        = jme_suspend,
+       .resume         = jme_resume
+#else
+       .driver.pm      = JME_PM_OPS,
+#endif
 };
 
 static int __init