diff --git a/drivers/net/wireless/cnss/cnss.c b/drivers/net/wireless/cnss/cnss.c index 031b151e69ab9b113c4e6ed7b732886c446ea158..3529029295e5280215866a157c6973e85b625e47 100644 --- a/drivers/net/wireless/cnss/cnss.c +++ b/drivers/net/wireless/cnss/cnss.c @@ -677,9 +677,15 @@ static int cnss_wlan_pci_suspend(struct pci_dev *pdev, pm_message_t state) if (!wdriver) goto out; - if (wdriver->suspend) + if (wdriver->suspend) { ret = wdriver->suspend(pdev, state); + if (penv->pcie_link_state) { + pci_save_state(pdev); + penv->saved_state = pci_store_saved_state(pdev); + } + } + out: return ret; } @@ -696,8 +702,14 @@ static int cnss_wlan_pci_resume(struct pci_dev *pdev) if (!wdriver) goto out; - if (wdriver->resume && !penv->pcie_link_down_ind) + if (wdriver->resume && !penv->pcie_link_down_ind) { + if (penv->saved_state) + pci_load_and_free_saved_state(pdev, + &penv->saved_state); + pci_restore_state(pdev); + ret = wdriver->resume(pdev); + } out: return ret;