|
@@ -396,7 +396,7 @@ static int pcie_pme_suspend(struct pcie_device *srv)
|
|
|
{
|
|
|
struct pcie_pme_service_data *data = get_service_data(srv);
|
|
|
struct pci_dev *port = srv->port;
|
|
|
- bool wakeup;
|
|
|
+ bool wakeup, wake_irq_enabled = false;
|
|
|
int ret;
|
|
|
|
|
|
if (device_may_wakeup(&port->dev)) {
|
|
@@ -409,9 +409,12 @@ static int pcie_pme_suspend(struct pcie_device *srv)
|
|
|
spin_lock_irq(&data->lock);
|
|
|
if (wakeup) {
|
|
|
ret = enable_irq_wake(srv->irq);
|
|
|
- data->suspend_level = PME_SUSPEND_WAKEUP;
|
|
|
+ if (ret == 0) {
|
|
|
+ data->suspend_level = PME_SUSPEND_WAKEUP;
|
|
|
+ wake_irq_enabled = true;
|
|
|
+ }
|
|
|
}
|
|
|
- if (!wakeup || ret) {
|
|
|
+ if (!wake_irq_enabled) {
|
|
|
pcie_pme_interrupt_enable(port, false);
|
|
|
pcie_clear_root_pme_status(port);
|
|
|
data->suspend_level = PME_SUSPEND_NOIRQ;
|