return;
 }
 
-#ifdef CONFIG_PM
-static int bttv_suspend(struct pci_dev *pci_dev, pm_message_t state)
+static int __maybe_unused bttv_suspend(struct device *dev)
 {
-       struct v4l2_device *v4l2_dev = pci_get_drvdata(pci_dev);
+       struct v4l2_device *v4l2_dev = dev_get_drvdata(dev);
        struct bttv *btv = to_bttv(v4l2_dev);
        struct bttv_buffer_set idle;
        unsigned long flags;
 
-       dprintk("%d: suspend %d\n", btv->c.nr, state.event);
+       dprintk("%d: suspend\n", btv->c.nr);
 
        /* stop dma + irqs */
        spin_lock_irqsave(&btv->s_lock,flags);
        btv->state.gpio_enable = btread(BT848_GPIO_OUT_EN);
        btv->state.gpio_data   = gpio_read();
 
-       /* save pci state */
-       pci_save_state(pci_dev);
-       if (0 != pci_set_power_state(pci_dev, pci_choose_state(pci_dev, state))) {
-               pci_disable_device(pci_dev);
-               btv->state.disabled = 1;
-       }
+       btv->state.disabled = 1;
        return 0;
 }
 
-static int bttv_resume(struct pci_dev *pci_dev)
+static int __maybe_unused bttv_resume(struct device *dev)
 {
-       struct v4l2_device *v4l2_dev = pci_get_drvdata(pci_dev);
+       struct v4l2_device *v4l2_dev = dev_get_drvdata(dev);
        struct bttv *btv = to_bttv(v4l2_dev);
        unsigned long flags;
-       int err;
 
        dprintk("%d: resume\n", btv->c.nr);
 
-       /* restore pci state */
-       if (btv->state.disabled) {
-               err=pci_enable_device(pci_dev);
-               if (err) {
-                       pr_warn("%d: Can't enable device\n", btv->c.nr);
-                       return err;
-               }
-               btv->state.disabled = 0;
-       }
-       err=pci_set_power_state(pci_dev, PCI_D0);
-       if (err) {
-               pci_disable_device(pci_dev);
-               pr_warn("%d: Can't enable device\n", btv->c.nr);
-               btv->state.disabled = 1;
-               return err;
-       }
-
-       pci_restore_state(pci_dev);
+       btv->state.disabled = 0;
 
        /* restore bt878 state */
        bttv_reinit_bt848(btv);
        spin_unlock_irqrestore(&btv->s_lock,flags);
        return 0;
 }
-#endif
 
 static const struct pci_device_id bttv_pci_tbl[] = {
        {PCI_VDEVICE(BROOKTREE, PCI_DEVICE_ID_BT848), 0},
 
 MODULE_DEVICE_TABLE(pci, bttv_pci_tbl);
 
+static SIMPLE_DEV_PM_OPS(bttv_pm_ops,
+                        bttv_suspend,
+                        bttv_resume);
+
 static struct pci_driver bttv_pci_driver = {
-       .name     = "bttv",
-       .id_table = bttv_pci_tbl,
-       .probe    = bttv_probe,
-       .remove   = bttv_remove,
-#ifdef CONFIG_PM
-       .suspend  = bttv_suspend,
-       .resume   = bttv_resume,
-#endif
+       .name      = "bttv",
+       .id_table  = bttv_pci_tbl,
+       .probe     = bttv_probe,
+       .remove    = bttv_remove,
+       .driver.pm = &bttv_pm_ops,
 };
 
 static int __init bttv_init_module(void)