diff options
| -rw-r--r-- | core/pld/inc/pld_common.h | 3 | ||||
| -rw-r--r-- | core/pld/src/pld_common.c | 52 | ||||
| -rw-r--r-- | core/pld/src/pld_pcie.c | 24 | ||||
| -rw-r--r-- | core/pld/src/pld_pcie.h | 10 | ||||
| -rw-r--r-- | core/pld/src/pld_snoc.c | 23 | ||||
| -rw-r--r-- | core/pld/src/pld_snoc.h | 10 |
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 |
