diff options
author | Victor Hsu <hsuvictor@google.com> | 2022-03-01 12:44:14 +0800 |
---|---|---|
committer | Victor Hsu <hsuvictor@google.com> | 2022-03-01 12:44:14 +0800 |
commit | 7426ff58b389698b477c9b5e146a6bbe8b8571ce (patch) | |
tree | b6458025fd35ac611f41ea30becfb14376927a5f | |
parent | ef22de835ccf8c7c394dbd601c0ca1d7a4ab1681 (diff) | |
download | cnss2-7426ff58b389698b477c9b5e146a6bbe8b8571ce.tar.gz |
wlan: Configure states of BUCK pinctrl
Configure the buck gpio pin to prevent from unexpected hardware errors
during suspend/resume.
Bug: 216250741
Test: Manunally check buck gpio pin not dropped.
Signed-off-by: Victor Hsu <hsuvictor@google.com>
Change-Id: I9b7aa702fee0ad2eaf88f727ca9b3e032b557278
-rw-r--r-- | cnss2/power.c | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/cnss2/power.c b/cnss2/power.c index 64c32e2..a057e18 100644 --- a/cnss2/power.c +++ b/cnss2/power.c @@ -941,13 +941,18 @@ int cnss_get_input_gpio_value(struct cnss_plat_data *plat_priv, int gpio_num) } #ifdef CONFIG_WCN_GOOGLE +#define WLAN_BUCK "wlan_buck" static int wlan_buck_gpio=0; int wlan_buck_enable(struct cnss_plat_data *plat_priv) { int ret = 0; struct device *dev; int wlan_buck_gpio_val; + struct cnss_pinctrl_info *pinctrl_info; + struct pinctrl_state *wlan_buck_en; + dev = &plat_priv->plat_dev->dev; + pinctrl_info = &plat_priv->pinctrl_info; cnss_pr_info("%s Enter\n",__func__); if (!wlan_buck_gpio) { @@ -959,6 +964,20 @@ int wlan_buck_enable(struct cnss_plat_data *plat_priv) return -ENODEV; } cnss_pr_info("BUCK GPIO: %d\n", wlan_buck_gpio); + //configure wlan_buck GPIO + wlan_buck_en = pinctrl_lookup_state(pinctrl_info->pinctrl, + WLAN_BUCK); + if (IS_ERR_OR_NULL(wlan_buck_en)) { + ret = PTR_ERR(wlan_buck_en); + cnss_pr_info("Failed to get wlan_buck state, err = %d\n", + ret); + } else { + ret = pinctrl_select_state(pinctrl_info->pinctrl, + wlan_buck_en); + if (ret) + cnss_pr_info("Failed to select wlan_buck state, err = %d\n", + ret); + } } else { cnss_pr_err("No BUCK GPIO\n"); } |