Merge tag 'core-rcu-2021-04-28' of git://git.kernel.org/pub/scm/linux/kernel/git...
[linux-2.6-microblaze.git] / drivers / video / fbdev / i740fb.c
index e6f35f8..52cce0d 100644 (file)
@@ -1175,16 +1175,11 @@ static void i740fb_remove(struct pci_dev *dev)
        }
 }
 
-#ifdef CONFIG_PM
-static int i740fb_suspend(struct pci_dev *dev, pm_message_t state)
+static int __maybe_unused i740fb_suspend(struct device *dev)
 {
-       struct fb_info *info = pci_get_drvdata(dev);
+       struct fb_info *info = dev_get_drvdata(dev);
        struct i740fb_par *par = info->par;
 
-       /* don't disable console during hibernation and wakeup from it */
-       if (state.event == PM_EVENT_FREEZE || state.event == PM_EVENT_PRETHAW)
-               return 0;
-
        console_lock();
        mutex_lock(&(par->open_lock));
 
@@ -1197,19 +1192,15 @@ static int i740fb_suspend(struct pci_dev *dev, pm_message_t state)
 
        fb_set_suspend(info, 1);
 
-       pci_save_state(dev);
-       pci_disable_device(dev);
-       pci_set_power_state(dev, pci_choose_state(dev, state));
-
        mutex_unlock(&(par->open_lock));
        console_unlock();
 
        return 0;
 }
 
-static int i740fb_resume(struct pci_dev *dev)
+static int __maybe_unused i740fb_resume(struct device *dev)
 {
-       struct fb_info *info = pci_get_drvdata(dev);
+       struct fb_info *info = dev_get_drvdata(dev);
        struct i740fb_par *par = info->par;
 
        console_lock();
@@ -1218,11 +1209,6 @@ static int i740fb_resume(struct pci_dev *dev)
        if (par->ref_count == 0)
                goto fail;
 
-       pci_set_power_state(dev, PCI_D0);
-       pci_restore_state(dev);
-       if (pci_enable_device(dev))
-               goto fail;
-
        i740fb_set_par(info);
        fb_set_suspend(info, 0);
 
@@ -1231,10 +1217,17 @@ fail:
        console_unlock();
        return 0;
 }
-#else
-#define i740fb_suspend NULL
-#define i740fb_resume NULL
-#endif /* CONFIG_PM */
+
+static const struct dev_pm_ops i740fb_pm_ops = {
+#ifdef CONFIG_PM_SLEEP
+       .suspend        = i740fb_suspend,
+       .resume         = i740fb_resume,
+       .freeze         = NULL,
+       .thaw           = i740fb_resume,
+       .poweroff       = i740fb_suspend,
+       .restore        = i740fb_resume,
+#endif /* CONFIG_PM_SLEEP */
+};
 
 #define I740_ID_PCI 0x00d1
 #define I740_ID_AGP 0x7800
@@ -1251,8 +1244,7 @@ static struct pci_driver i740fb_driver = {
        .id_table       = i740fb_id_table,
        .probe          = i740fb_probe,
        .remove         = i740fb_remove,
-       .suspend        = i740fb_suspend,
-       .resume         = i740fb_resume,
+       .driver.pm      = &i740fb_pm_ops,
 };
 
 #ifndef MODULE