diff --git a/drivers/net/wireless/cnss/cnss.c b/drivers/net/wireless/cnss/cnss.c
index dad93253cf1a66f073cd5a8ce679829b74f83555..6be665ec88198d312b000a5c544a6e5253420f4b 100644
--- a/drivers/net/wireless/cnss/cnss.c
+++ b/drivers/net/wireless/cnss/cnss.c
@@ -1057,6 +1057,20 @@ void cnss_pm_wake_lock_destroy(struct wakeup_source *ws)
 }
 EXPORT_SYMBOL(cnss_pm_wake_lock_destroy);
 
+#ifdef CONFIG_PCI_MSM
+int cnss_wlan_pm_control(bool vote)
+{
+	if (!penv || !penv->pdev)
+		return -ENODEV;
+
+	return msm_pcie_pm_control(
+		vote ? MSM_PCIE_DISABLE_PC : MSM_PCIE_ENABLE_PC,
+		cnss_get_pci_dev_bus_number(penv->pdev),
+		penv->pdev, NULL, PM_OPTIONS);
+}
+EXPORT_SYMBOL(cnss_wlan_pm_control);
+#endif
+
 void cnss_flush_work(void *work)
 {
 	struct work_struct *cnss_work = work;
diff --git a/include/net/cnss.h b/include/net/cnss.h
index 00e4c22a754f1207bfdda7fcf4085cc9d0a70284..2ffe6d9dca3f243318515c37f395fe538b48c8ac 100644
--- a/include/net/cnss.h
+++ b/include/net/cnss.h
@@ -93,6 +93,9 @@ extern void cnss_pm_wake_lock(struct wakeup_source *ws);
 extern void cnss_pm_wake_lock_timeout(struct wakeup_source *ws, ulong msec);
 extern void cnss_pm_wake_lock_release(struct wakeup_source *ws);
 extern void cnss_pm_wake_lock_destroy(struct wakeup_source *ws);
+#ifdef CONFIG_PCI_MSM
+extern int cnss_wlan_pm_control(bool vote);
+#endif
 
 extern int cnss_set_cpus_allowed_ptr(struct task_struct *task, ulong cpu);
 extern void cnss_request_pm_qos(u32 qos_val);