{
        struct pci_dev *pci_dev = context;
 
-       if (event == ACPI_NOTIFY_DEVICE_WAKE && pci_dev) {
+       if (event != ACPI_NOTIFY_DEVICE_WAKE || !pci_dev)
+               return;
+
+       if (!pci_dev->pm_cap || !pci_dev->pme_support
+            || pci_check_pme_status(pci_dev)) {
                if (pci_dev->pme_poll)
                        pci_dev->pme_poll = false;
 
                pci_wakeup_event(pci_dev);
-               pci_check_pme_status(pci_dev);
                pm_runtime_resume(&pci_dev->dev);
-               if (pci_dev->subordinate)
-                       pci_pme_wakeup_bus(pci_dev->subordinate);
        }
+
+       if (pci_dev->subordinate)
+               pci_pme_wakeup_bus(pci_dev->subordinate);
 }
 
 /**