From e9d3bea389c82dab370e8660ab78959ac09fda49 Mon Sep 17 00:00:00 2001 From: Sandeep Singh Date: Wed, 3 Mar 2021 19:30:11 +0530 Subject: [PATCH] cnss2: Disable L7E regulator & S2E regulator vote for Lahiana+HST Add code to disable L7E & S2E regulator vote for Lahaina+HST. Change-Id: I2ea9320642f06bb65c4b1c697a8fc9c71a3b22f8 Signed-off-by: Mohammed Siddiq Signed-off-by: Sandeep Singh --- drivers/net/wireless/cnss2/main.h | 2 ++ drivers/net/wireless/cnss2/pci.c | 4 ++++ drivers/net/wireless/cnss2/power.c | 21 +++++++++++++++++++++ 3 files changed, 27 insertions(+) diff --git a/drivers/net/wireless/cnss2/main.h b/drivers/net/wireless/cnss2/main.h index 255174389fd0..ed3d6d557585 100644 --- a/drivers/net/wireless/cnss2/main.h +++ b/drivers/net/wireless/cnss2/main.h @@ -565,4 +565,6 @@ int cnss_dev_specific_power_on(struct cnss_plat_data *plat_priv); int cnss_request_firmware_direct(struct cnss_plat_data *plat_priv, const struct firmware **fw_entry, const char *filename); +void cnss_disable_redundant_vreg(struct cnss_plat_data *plat_priv); + #endif /* _CNSS_MAIN_H */ diff --git a/drivers/net/wireless/cnss2/pci.c b/drivers/net/wireless/cnss2/pci.c index fe57c6f55c32..e125b8766677 100644 --- a/drivers/net/wireless/cnss2/pci.c +++ b/drivers/net/wireless/cnss2/pci.c @@ -5729,6 +5729,10 @@ static int cnss_pci_probe(struct pci_dev *pci_dev, ret = cnss_suspend_pci_link(pci_priv); if (ret) cnss_pr_err("Failed to suspend PCI link, err = %d\n", ret); + + if (pci_dev->device == QCA6390_DEVICE_ID) + cnss_disable_redundant_vreg(plat_priv); + cnss_power_off_device(plat_priv); return 0; diff --git a/drivers/net/wireless/cnss2/power.c b/drivers/net/wireless/cnss2/power.c index 6936999a4b9c..2a125caca6c7 100644 --- a/drivers/net/wireless/cnss2/power.c +++ b/drivers/net/wireless/cnss2/power.c @@ -491,6 +491,27 @@ int cnss_vreg_unvote_type(struct cnss_plat_data *plat_priv, return ret; } +void cnss_disable_redundant_vreg(struct cnss_plat_data *plat_priv) +{ + struct cnss_vreg_info *vreg, *vreg_tmp; + struct list_head *vreg_list = &plat_priv->vreg_list; + + list_for_each_entry_safe(vreg, vreg_tmp, vreg_list, list) { + if (IS_ERR_OR_NULL(vreg->reg)) + continue; + + if ((!strcmp("wlan-ant-switch", vreg->cfg.name) || + !strcmp("vdd-wlan-aon", vreg->cfg.name)) && + vreg->enabled) { + cnss_pr_dbg("Disable Regulator %s\n", vreg->cfg.name); + + list_del(&vreg->list); + cnss_vreg_off_single(vreg); + cnss_put_vreg_single(plat_priv, vreg); + } + } +} + static int cnss_get_clk_single(struct cnss_plat_data *plat_priv, struct cnss_clk_info *clk_info) {