/* * power management */ static int rtsx_suspend(struct pci_dev *pci, pm_message_t state) { struct rtsx_dev *dev = pci_get_drvdata(pci); struct rtsx_chip *chip; if (!dev) return 0; /* lock the device pointers */ mutex_lock(&(dev->dev_mutex)); chip = dev->chip; rtsx_do_before_power_down(chip, PM_S3); if (dev->irq >= 0) { free_irq(dev->irq, (void *)dev); dev->irq = -1; } if (chip->msi_en) pci_disable_msi(pci); pci_save_state(pci); pci_enable_wake(pci, pci_choose_state(pci, state), 1); pci_disable_device(pci); pci_set_power_state(pci, pci_choose_state(pci, state)); /* unlock the device pointers */ mutex_unlock(&dev->dev_mutex); return 0; }
static void rtsx_shutdown(struct pci_dev *pci) { struct rtsx_dev *dev = (struct rtsx_dev *)pci_get_drvdata(pci); struct rtsx_chip *chip; printk(KERN_INFO "Ready to shutdown\n"); if (!dev) { printk(KERN_ERR "Invalid memory\n"); return; } chip = dev->chip; rtsx_do_before_power_down(chip, PM_S1); if (dev->irq >= 0) { synchronize_irq(dev->irq); free_irq(dev->irq, (void *)dev); dev->irq = -1; } if (chip->msi_en) pci_disable_msi(pci); pci_disable_device(pci); return; }
static void rtsx_shutdown(struct pci_dev *pci) { struct rtsx_dev *dev = (struct rtsx_dev *)pci_get_drvdata(pci); struct rtsx_chip *chip; if (!dev) return; chip = dev->chip; rtsx_do_before_power_down(chip, PM_S1); if (dev->irq >= 0) { synchronize_irq(dev->irq); free_irq(dev->irq, (void *)dev); dev->irq = -1; } if (chip->msi_en) pci_disable_msi(pci); pci_disable_device(pci); return; }
/* * power management */ static int rtsx_suspend(struct pci_dev *pci, pm_message_t state) { struct rtsx_dev *dev = (struct rtsx_dev *)pci_get_drvdata(pci); struct rtsx_chip *chip; printk(KERN_INFO "Ready to suspend\n"); if (!dev) { printk(KERN_ERR "Invalid memory\n"); return 0; } mutex_lock(&(dev->dev_mutex)); chip = dev->chip; rtsx_do_before_power_down(chip, PM_S3); if (dev->irq >= 0) { synchronize_irq(dev->irq); free_irq(dev->irq, (void *)dev); dev->irq = -1; } if (chip->msi_en) { pci_disable_msi(pci); } pci_save_state(pci); pci_enable_wake(pci, pci_choose_state(pci, state), 1); pci_disable_device(pci); pci_set_power_state(pci, pci_choose_state(pci, state)); mutex_unlock(&dev->dev_mutex); return 0; }