..
static int suspend_count = 0;
..
static int my_suspend(struct pci_dev *dev, pm_message_t state)
{
   suspend_count++;
   printk("my_suspend(%p, %d)\n", dev, suspend_count);
   return 0;
}

static int my_resume(struct pci_dev *dev)
{
   suspend_count++;
   printk("my_resume(%p, %d)\n", dev, suspend_count);
   return 0;
}
..
static struct pci_device_id pci_drv_tbl[] = {
   {MY_VENDOR_ID, MY_DEVICE_ID, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
   {0, }
};

static struct pci_driver pci_drv = {
   name:     "pci_drv",
   id_table: pci_drv_tbl,
   probe:    pci_init_one,
   remove:   pci_remove_one,
   suspend:  my_suspend,
   resume:   my_resume,
};

static int __init pci_drv_init(void)
{
   int ret;

   if ((major = register_chrdev(0, "driver-name", &driver_fops)) != 0) {
       if ((ret = pci_register_driver(&pci_drv)) < 0 ) {
           printk(KERN_ERR "can't register PCI driver (%d)\n", ret);
           unregister_chrdev(major, "driver-name");
           return -EIO;
       }
       return 0;
   }
   return -EIO;
}

static void __exit pci_drv_exit(void)
{
   pci_unregister_driver(&pci_drv);
   unregister_chrdev(240, "driver-name");
   printk("pci_drv_exit(%d)\n", suspend_count);
}
..