summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/pld/inc/pld_common.h3
-rw-r--r--core/pld/src/pld_common.c52
-rw-r--r--core/pld/src/pld_pcie.c24
-rw-r--r--core/pld/src/pld_pcie.h10
-rw-r--r--core/pld/src/pld_snoc.c23
-rw-r--r--core/pld/src/pld_snoc.h10
6 files changed, 121 insertions, 1 deletions
diff --git a/core/pld/inc/pld_common.h b/core/pld/inc/pld_common.h
index 86789903720a..0e680504755c 100644
--- a/core/pld/inc/pld_common.h
+++ b/core/pld/inc/pld_common.h
@@ -366,5 +366,6 @@ int pld_get_soc_info(struct device *dev, struct pld_soc_info *info);
int pld_get_ce_id(struct device *dev, int irq);
void pld_lock_pm_sem(struct device *dev);
void pld_release_pm_sem(struct device *dev);
-
+int pld_power_on(struct device *dev);
+int pld_power_off(struct device *dev);
#endif
diff --git a/core/pld/src/pld_common.c b/core/pld/src/pld_common.c
index 7b0fc45c8f3b..29458eb7853d 100644
--- a/core/pld/src/pld_common.c
+++ b/core/pld/src/pld_common.c
@@ -1314,3 +1314,55 @@ void pld_release_pm_sem(struct device *dev)
break;
}
}
+
+/**
+ * pld_power_on() - Power on WLAN hardware
+ * @dev: device
+ *
+ * Return: 0 for success
+ * Non zero failure code for errors
+ */
+int pld_power_on(struct device *dev)
+{
+ int ret = 0;
+
+ switch (pld_get_bus_type(dev)) {
+ case PLD_BUS_TYPE_PCIE:
+ ret = pld_pcie_power_on(dev);
+ break;
+ case PLD_BUS_TYPE_SNOC:
+ ret = pld_snoc_power_on(dev);
+ break;
+ default:
+ pr_err("Invalid device type\n");
+ break;
+ }
+
+ return ret;
+}
+
+/**
+ * pld_power_off() - Power off WLAN hardware
+ * @dev: device
+ *
+ * Return: 0 for success
+ * Non zero failure code for errors
+ */
+int pld_power_off(struct device *dev)
+{
+ int ret = 0;
+
+ switch (pld_get_bus_type(dev)) {
+ case PLD_BUS_TYPE_PCIE:
+ ret = pld_pcie_power_on(dev);
+ break;
+ case PLD_BUS_TYPE_SNOC:
+ ret = pld_snoc_power_off(dev);
+ break;
+ default:
+ pr_err("Invalid device type\n");
+ break;
+ }
+
+ return ret;
+}
diff --git a/core/pld/src/pld_pcie.c b/core/pld/src/pld_pcie.c
index 0022f660dd3c..3acde4291cff 100644
--- a/core/pld/src/pld_pcie.c
+++ b/core/pld/src/pld_pcie.c
@@ -846,6 +846,30 @@ void pld_pcie_release_pm_sem(void)
{
cnss_release_pm_sem();
}
+
+/**
+ * pld_pcie_power_on() - Power on WLAN hardware
+ * @dev: device
+ *
+ * Return: 0 for success
+ * Non zero failure code for errors
+ */
+int pld_pcie_power_on(struct device *dev)
+{
+ return cnss_power_up(dev);
+}
+
+/**
+ * pld_pcie_power_off() - Power off WLAN hardware
+ * @dev: device
+ *
+ * Return: 0 for success
+ * Non zero failure code for errors
+ */
+int pld_pcie_power_off(struct device *dev)
+{
+ return cnss_power_down(dev);
+}
#endif
#endif
diff --git a/core/pld/src/pld_pcie.h b/core/pld/src/pld_pcie.h
index a36c316ccd76..f689b9898a17 100644
--- a/core/pld/src/pld_pcie.h
+++ b/core/pld/src/pld_pcie.h
@@ -199,6 +199,14 @@ static void pld_pcie_release_pm_sem(void)
{
return;
}
+static inline int pld_pcie_power_on(struct device *dev)
+{
+ return 0;
+}
+static inline int pld_pcie_power_off(struct device *dev)
+{
+ return 0;
+}
#else
int pld_pcie_get_fw_files_for_target(struct pld_fw_files *pfw_files,
u32 target_type, u32 target_version);
@@ -224,6 +232,8 @@ int pld_pcie_auto_suspend(void);
int pld_pcie_auto_resume(void);
void pld_pcie_lock_pm_sem(void);
void pld_pcie_release_pm_sem(void);
+int pld_pcie_power_on(struct device *dev);
+int pld_pcie_power_off(struct device *dev);
#endif
#endif
diff --git a/core/pld/src/pld_snoc.c b/core/pld/src/pld_snoc.c
index 2551469f219c..22297b4e7944 100644
--- a/core/pld/src/pld_snoc.c
+++ b/core/pld/src/pld_snoc.c
@@ -358,4 +358,27 @@ int pld_snoc_get_ce_id(int irq)
return icnss_get_ce_id(irq);
}
+/**
+ * pld_snoc_power_on() - Power on WLAN hardware
+ * @dev: device
+ *
+ * Return: 0 for success
+ * Non zero failure code for errors
+ */
+int pld_snoc_power_on(struct device *dev)
+{
+ return icnss_power_on(dev);
+}
+
+/**
+ * pld_snoc_power_off() - Power off WLAN hardware
+ * @dev: device
+ *
+ * Return: 0 for success
+ * Non zero failure code for errors
+ */
+int pld_snoc_power_off(struct device *dev)
+{
+ return icnss_power_off(dev);
+}
#endif
diff --git a/core/pld/src/pld_snoc.h b/core/pld/src/pld_snoc.h
index 3123bd1f83fa..75f3f1036f37 100644
--- a/core/pld/src/pld_snoc.h
+++ b/core/pld/src/pld_snoc.h
@@ -75,6 +75,14 @@ static inline int pld_snoc_get_ce_id(int irq)
{
return 0;
}
+static inline int pld_snoc_power_on(struct device *dev)
+{
+ return 0;
+}
+static inline int pld_snoc_power_off(struct device *dev)
+{
+ return 0;
+}
#else
int pld_snoc_register_driver(void);
void pld_snoc_unregister_driver(void);
@@ -89,6 +97,8 @@ int pld_snoc_ce_free_irq(unsigned int ce_id, void *ctx);
void pld_snoc_enable_irq(unsigned int ce_id);
void pld_snoc_disable_irq(unsigned int ce_id);
int pld_snoc_get_ce_id(int irq);
+int pld_snoc_power_on(struct device *dev);
+int pld_snoc_power_off(struct device *dev);
#endif
#endif