summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYue Ma <yuem@codeaurora.org>2017-09-20 14:58:34 -0700
committerGerrit - the friendly Code Review server <code-review@localhost>2017-10-16 16:32:05 -0700
commitb15e41e07242961a07efb35155dc56a432c40895 (patch)
treed845002cef42cea87d1abd6dd23a3b21e567023b
parent5eef2bb525e761da28a5201ff04e1c152e2c4ebb (diff)
cnss2: Request runtime PM resume when shutdown happens
Request runtime PM resume in platform driver as soon as shutdown happens. This can make sure device is resumed while shutdown is proceeding. Change-Id: I0aa15b9713347288f4954bd767ec9243d22153ed CRs-fixed: 2124999 Signed-off-by: Yue Ma <yuem@codeaurora.org>
-rw-r--r--drivers/net/wireless/cnss2/main.c4
-rw-r--r--drivers/net/wireless/cnss2/pci.c14
-rw-r--r--drivers/net/wireless/cnss2/pci.h1
3 files changed, 19 insertions, 0 deletions
diff --git a/drivers/net/wireless/cnss2/main.c b/drivers/net/wireless/cnss2/main.c
index 80e2c8d7c86a..6b966c5b24fe 100644
--- a/drivers/net/wireless/cnss2/main.c
+++ b/drivers/net/wireless/cnss2/main.c
@@ -1043,6 +1043,8 @@ static int cnss_qca6174_shutdown(struct cnss_plat_data *plat_priv)
if (!pci_priv)
return -ENODEV;
+ cnss_pm_request_resume(pci_priv);
+
cnss_driver_call_remove(plat_priv);
cnss_request_bus_bandwidth(CNSS_BUS_WIDTH_NONE);
@@ -1141,6 +1143,8 @@ static int cnss_qca6290_shutdown(struct cnss_plat_data *plat_priv)
if (!pci_priv)
return -ENODEV;
+ cnss_pm_request_resume(pci_priv);
+
cnss_driver_call_remove(plat_priv);
cnss_request_bus_bandwidth(CNSS_BUS_WIDTH_NONE);
diff --git a/drivers/net/wireless/cnss2/pci.c b/drivers/net/wireless/cnss2/pci.c
index 22fad9210945..e4c35c4d664a 100644
--- a/drivers/net/wireless/cnss2/pci.c
+++ b/drivers/net/wireless/cnss2/pci.c
@@ -668,6 +668,20 @@ out:
}
EXPORT_SYMBOL(cnss_auto_resume);
+int cnss_pm_request_resume(struct cnss_pci_data *pci_priv)
+{
+ struct pci_dev *pci_dev;
+
+ if (!pci_priv)
+ return -ENODEV;
+
+ pci_dev = pci_priv->pci_dev;
+ if (!pci_dev)
+ return -ENODEV;
+
+ return pm_request_resume(&pci_dev->dev);
+}
+
int cnss_pci_alloc_fw_mem(struct cnss_pci_data *pci_priv)
{
struct cnss_plat_data *plat_priv = pci_priv->plat_priv;
diff --git a/drivers/net/wireless/cnss2/pci.h b/drivers/net/wireless/cnss2/pci.h
index e26e331e2f8a..89edc6020d35 100644
--- a/drivers/net/wireless/cnss2/pci.h
+++ b/drivers/net/wireless/cnss2/pci.h
@@ -138,5 +138,6 @@ int cnss_pci_start_mhi(struct cnss_pci_data *pci_priv);
void cnss_pci_stop_mhi(struct cnss_pci_data *pci_priv);
void cnss_pci_collect_dump_info(struct cnss_pci_data *pci_priv);
void cnss_pci_clear_dump_info(struct cnss_pci_data *pci_priv);
+int cnss_pm_request_resume(struct cnss_pci_data *pci_priv);
#endif /* _CNSS_PCI_H */