diff options
author | Maxime Ripard <maxime@cerno.tech> | 2020-08-18 14:14:25 +0200 |
---|---|---|
committer | Maxime Ripard <maxime@cerno.tech> | 2020-08-18 14:14:25 +0200 |
commit | d85ddd1318e66c0c2665dbfcbc21a8b66c9152aa (patch) | |
tree | e49e401abd2468b398d4bc84c7e05c2c2c3b0966 /drivers/staging/rts5208/rtsx.c | |
parent | MAINTAINERS: Change maintainer for hisilicon DRM driver (diff) | |
parent | Linux 5.9-rc1 (diff) | |
download | linux-dev-d85ddd1318e66c0c2665dbfcbc21a8b66c9152aa.tar.xz linux-dev-d85ddd1318e66c0c2665dbfcbc21a8b66c9152aa.zip |
Merge v5.9-rc1 into drm-misc-next
Sam needs 5.9-rc1 to have dev_err_probe in to merge some patches.
Signed-off-by: Maxime Ripard <maxime@cerno.tech>
Diffstat (limited to 'drivers/staging/rts5208/rtsx.c')
-rw-r--r-- | drivers/staging/rts5208/rtsx.c | 43 |
1 files changed, 15 insertions, 28 deletions
diff --git a/drivers/staging/rts5208/rtsx.c b/drivers/staging/rts5208/rtsx.c index be0053c795b7..898add4d1fc8 100644 --- a/drivers/staging/rts5208/rtsx.c +++ b/drivers/staging/rts5208/rtsx.c @@ -258,12 +258,12 @@ static int rtsx_acquire_irq(struct rtsx_dev *dev) return 0; } -#ifdef CONFIG_PM /* * power management */ -static int rtsx_suspend(struct pci_dev *pci, pm_message_t state) +static int __maybe_unused rtsx_suspend(struct device *dev_d) { + struct pci_dev *pci = to_pci_dev(dev_d); struct rtsx_dev *dev = pci_get_drvdata(pci); struct rtsx_chip *chip; @@ -283,12 +283,9 @@ static int rtsx_suspend(struct pci_dev *pci, pm_message_t state) } if (chip->msi_en) - pci_disable_msi(pci); + pci_free_irq_vectors(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)); + device_wakeup_enable(dev_d); /* unlock the device pointers */ mutex_unlock(&dev->dev_mutex); @@ -296,8 +293,9 @@ static int rtsx_suspend(struct pci_dev *pci, pm_message_t state) return 0; } -static int rtsx_resume(struct pci_dev *pci) +static int __maybe_unused rtsx_resume(struct device *dev_d) { + struct pci_dev *pci = to_pci_dev(dev_d); struct rtsx_dev *dev = pci_get_drvdata(pci); struct rtsx_chip *chip; @@ -309,20 +307,10 @@ static int rtsx_resume(struct pci_dev *pci) /* lock the device pointers */ mutex_lock(&dev->dev_mutex); - pci_set_power_state(pci, PCI_D0); - pci_restore_state(pci); - if (pci_enable_device(pci) < 0) { - dev_err(&dev->pci->dev, - "%s: pci_enable_device failed, disabling device\n", - CR_DRIVER_NAME); - /* unlock the device pointers */ - mutex_unlock(&dev->dev_mutex); - return -EIO; - } pci_set_master(pci); if (chip->msi_en) { - if (pci_enable_msi(pci) < 0) + if (pci_alloc_irq_vectors(pci, 1, 1, PCI_IRQ_MSI) < 0) chip->msi_en = 0; } @@ -340,7 +328,6 @@ static int rtsx_resume(struct pci_dev *pci) return 0; } -#endif /* CONFIG_PM */ static void rtsx_shutdown(struct pci_dev *pci) { @@ -360,7 +347,7 @@ static void rtsx_shutdown(struct pci_dev *pci) } if (chip->msi_en) - pci_disable_msi(pci); + pci_free_irq_vectors(pci); pci_disable_device(pci); } @@ -607,7 +594,7 @@ static void rtsx_release_resources(struct rtsx_dev *dev) if (dev->irq > 0) free_irq(dev->irq, (void *)dev); if (dev->chip->msi_en) - pci_disable_msi(dev->pci); + pci_free_irq_vectors(dev->pci); if (dev->remap_addr) iounmap(dev->remap_addr); @@ -894,7 +881,7 @@ static int rtsx_probe(struct pci_dev *pci, dev_info(&pci->dev, "pci->irq = %d\n", pci->irq); if (dev->chip->msi_en) { - if (pci_enable_msi(pci) < 0) + if (pci_alloc_irq_vectors(pci, 1, 1, PCI_IRQ_MSI) < 0) dev->chip->msi_en = 0; } @@ -965,13 +952,14 @@ irq_acquire_fail: dev->chip->host_cmds_ptr = NULL; dev->chip->host_sg_tbl_ptr = NULL; if (dev->chip->msi_en) - pci_disable_msi(dev->pci); + pci_free_irq_vectors(dev->pci); dma_alloc_fail: iounmap(dev->remap_addr); ioremap_fail: kfree(dev->chip); chip_alloc_fail: dev_err(&pci->dev, "%s failed\n", __func__); + scsi_host_put(host); scsi_host_alloc_fail: pci_release_regions(pci); return err; @@ -999,16 +987,15 @@ static const struct pci_device_id rtsx_ids[] = { MODULE_DEVICE_TABLE(pci, rtsx_ids); +static SIMPLE_DEV_PM_OPS(rtsx_pm_ops, rtsx_suspend, rtsx_resume); + /* pci_driver definition */ static struct pci_driver rtsx_driver = { .name = CR_DRIVER_NAME, .id_table = rtsx_ids, .probe = rtsx_probe, .remove = rtsx_remove, -#ifdef CONFIG_PM - .suspend = rtsx_suspend, - .resume = rtsx_resume, -#endif + .driver.pm = &rtsx_pm_ops, .shutdown = rtsx_shutdown, }; |