PCI_DEV_FLAGS_NO_D3 should not be used outside of PCI core.

Instead, we can use pci_save_state() to hint PCI core that the device
should stay at D0 during suspend.

Signed-off-by: Kai-Heng Feng <[email protected]>
---
 drivers/hid/intel-ish-hid/ipc/pci-ish.c | 15 ++++++++++-----
 1 file changed, 10 insertions(+), 5 deletions(-)

diff --git a/drivers/hid/intel-ish-hid/ipc/pci-ish.c 
b/drivers/hid/intel-ish-hid/ipc/pci-ish.c
index f491d8b4e24c..ab588b9c8d09 100644
--- a/drivers/hid/intel-ish-hid/ipc/pci-ish.c
+++ b/drivers/hid/intel-ish-hid/ipc/pci-ish.c
@@ -106,6 +106,11 @@ static inline bool ish_should_enter_d0i3(struct pci_dev 
*pdev)
        return !pm_suspend_via_firmware() || pdev->device == CHV_DEVICE_ID;
 }
 
+static inline bool ish_should_leave_d0i3(struct pci_dev *pdev)
+{
+       return !pm_resume_via_firmware() || pdev->device == CHV_DEVICE_ID;
+}
+
 /**
  * ish_probe() - PCI driver probe callback
  * @pdev:      pci device
@@ -215,9 +220,7 @@ static void __maybe_unused ish_resume_handler(struct 
work_struct *work)
        struct ishtp_device *dev = pci_get_drvdata(pdev);
        int ret;
 
-       /* Check the NO_D3 flag to distinguish the resume paths */
-       if (pdev->dev_flags & PCI_DEV_FLAGS_NO_D3) {
-               pdev->dev_flags &= ~PCI_DEV_FLAGS_NO_D3;
+       if (ish_should_leave_d0i3(pdev) && !dev->suspend_flag) {
                disable_irq_wake(pdev->irq);
 
                ishtp_send_resume(dev);
@@ -281,8 +284,10 @@ static int __maybe_unused ish_suspend(struct device 
*device)
                         */
                        ish_disable_dma(dev);
                } else {
-                       /* Set the NO_D3 flag, the ISH would enter D0i3 */
-                       pdev->dev_flags |= PCI_DEV_FLAGS_NO_D3;
+                       /* Save state so PCI core will keep the device at D0,
+                        * the ISH would enter D0i3
+                        */
+                       pci_save_state(pdev);
 
                        enable_irq_wake(pdev->irq);
                }
-- 
2.17.1

Reply via email to