static void _rtl92e_pci_disconnect(struct pci_dev *pdev);
 static irqreturn_t _rtl92e_irq(int irq, void *netdev);
 
+static SIMPLE_DEV_PM_OPS(rtl92e_pm_ops, rtl92e_suspend, rtl92e_resume);
+
 static struct pci_driver rtl8192_pci_driver = {
        .name = DRV_NAME,       /* Driver name   */
        .id_table = rtl8192_pci_id_tbl, /* PCI_ID table  */
        .probe  = _rtl92e_pci_probe,    /* probe fn      */
        .remove  = _rtl92e_pci_disconnect,      /* remove fn */
-       .suspend = rtl92e_suspend,      /* PM suspend fn */
-       .resume = rtl92e_resume,                 /* PM resume fn  */
+       .driver.pm = &rtl92e_pm_ops,
 };
 
 static short _rtl92e_is_tx_queue_empty(struct net_device *dev);
 
 #include "rtl_pm.h"
 
 
-int rtl92e_suspend(struct pci_dev *pdev, pm_message_t state)
+int rtl92e_suspend(struct device *dev_d)
 {
-       struct net_device *dev = pci_get_drvdata(pdev);
+       struct net_device *dev = dev_get_drvdata(dev_d);
        struct r8192_priv *priv = rtllib_priv(dev);
        u32     ulRegRead;
 
 out_pci_suspend:
        netdev_info(dev, "WOL is %s\n", priv->rtllib->bSupportRemoteWakeUp ?
                            "Supported" : "Not supported");
-       pci_save_state(pdev);
-       pci_disable_device(pdev);
-       pci_enable_wake(pdev, pci_choose_state(pdev, state),
-                       priv->rtllib->bSupportRemoteWakeUp ? 1 : 0);
-       pci_set_power_state(pdev, pci_choose_state(pdev, state));
+       device_set_wakeup_enable(dev_d, priv->rtllib->bSupportRemoteWakeUp);
 
        mdelay(20);
 
        return 0;
 }
 
-int rtl92e_resume(struct pci_dev *pdev)
+int rtl92e_resume(struct device *dev_d)
 {
-       struct net_device *dev = pci_get_drvdata(pdev);
+       struct pci_dev *pdev = to_pci_dev(dev_d);
+       struct net_device *dev = dev_get_drvdata(dev_d);
        struct r8192_priv *priv = rtllib_priv(dev);
-       int err;
        u32 val;
 
        netdev_info(dev, "================>r8192E resume call.\n");
 
-       pci_set_power_state(pdev, PCI_D0);
-
-       err = pci_enable_device(pdev);
-       if (err) {
-               netdev_err(dev, "pci_enable_device failed on resume\n");
-               return err;
-       }
-       pci_restore_state(pdev);
 
        pci_read_config_dword(pdev, 0x40, &val);
        if ((val & 0x0000ff00) != 0)
                pci_write_config_dword(pdev, 0x40, val & 0xffff00ff);
 
-       pci_enable_wake(pdev, PCI_D0, 0);
+       device_wakeup_disable(dev_d);
 
        if (priv->polling_timer_on == 0)
                rtl92e_check_rfctrl_gpio_timer(&priv->gpio_polling_timer);