diff options
author | Hsiu-Chang Chen <hsiuchangchen@google.com> | 2021-12-24 02:07:28 +0800 |
---|---|---|
committer | Hsiu-Chang Chen <hsiuchangchen@google.com> | 2021-12-24 02:00:10 +0000 |
commit | 14b0aff36d9cbc8664b2a0bbdeb4db97e850ee9a (patch) | |
tree | ce505bce06c0030e4f6a5cd9a13f69156d3fe353 /cnss2/power.c | |
parent | 382c14c273a6df27518e102a7aad2ba6be714588 (diff) | |
download | cnss2-14b0aff36d9cbc8664b2a0bbdeb4db97e850ee9a.tar.gz |
wcn6740: Update cnss/mhi/qmi/qrtr drivers
Migrate wlan codes to Post-CS4
Bug: 211358472
Test: Basic functions
Change-Id: I4161d344a9260fb855712626048d80e5954e1ac1
Diffstat (limited to 'cnss2/power.c')
-rw-r--r-- | cnss2/power.c | 55 |
1 files changed, 46 insertions, 9 deletions
diff --git a/cnss2/power.c b/cnss2/power.c index 76698c1..64c32e2 100644 --- a/cnss2/power.c +++ b/cnss2/power.c @@ -1,5 +1,8 @@ // SPDX-License-Identifier: GPL-2.0-only -/* Copyright (c) 2016-2021, The Linux Foundation. All rights reserved. */ +/* + * Copyright (c) 2016-2021, The Linux Foundation. All rights reserved. + * Copyright (c) 2021 Qualcomm Innovation Center, Inc. All rights reserved. + */ #include <linux/clk.h> #include <linux/delay.h> @@ -18,7 +21,7 @@ #include "debug.h" #include "bus.h" -#if IS_ENABLED(CONFIG_ARCH_QCOM) +#if IS_ENABLED(CONFIG_ARCH_QCOM) && !IS_ENABLED(CONFIG_WCN_GOOGLE) static struct cnss_vreg_cfg cnss_vreg_list[] = { {"vdd-wlan-core", 1300000, 1300000, 0, 0, 0}, {"vdd-wlan-io", 1800000, 1800000, 0, 0, 0}, @@ -57,6 +60,7 @@ static struct cnss_clk_cfg cnss_clk_list[] = { #define WLAN_EN_GPIO "wlan-en-gpio" #define BT_EN_GPIO "qcom,bt-en-gpio" #define XO_CLK_GPIO "qcom,xo-clk-gpio" +#define SW_CTRL_GPIO "qcom,sw-ctrl-gpio" #define WLAN_EN_ACTIVE "wlan_en_active" #define WLAN_EN_SLEEP "wlan_en_sleep" #ifdef CONFIG_WCN_GOOGLE @@ -744,6 +748,7 @@ int cnss_get_pinctrl(struct cnss_plat_data *plat_priv) ret); goto out; } + cnss_set_feature_list(plat_priv, CNSS_WLAN_EN_SUPPORT_V01); } /* Added for QCA6490 PMU delayed WLAN_EN_GPIO */ @@ -765,6 +770,17 @@ int cnss_get_pinctrl(struct cnss_plat_data *plat_priv) } else { pinctrl_info->xo_clk_gpio = -EINVAL; } + + if (of_find_property(dev->of_node, SW_CTRL_GPIO, NULL)) { + pinctrl_info->sw_ctrl_gpio = of_get_named_gpio(dev->of_node, + SW_CTRL_GPIO, + 0); + cnss_pr_dbg("Switch control GPIO: %d\n", + pinctrl_info->sw_ctrl_gpio); + } else { + pinctrl_info->sw_ctrl_gpio = -EINVAL; + } + return 0; out: return ret; @@ -907,6 +923,23 @@ set_wlan_en: return ret; } +int cnss_get_input_gpio_value(struct cnss_plat_data *plat_priv, int gpio_num) +{ + int ret; + + if (gpio_num < 0) + return -EINVAL; + + ret = gpio_direction_input(gpio_num); + if (ret) { + cnss_pr_err("Failed to set direction of GPIO(%d), err = %d", + gpio_num, ret); + return -EINVAL; + } + + return gpio_get_value(gpio_num); +} + #ifdef CONFIG_WCN_GOOGLE static int wlan_buck_gpio=0; int wlan_buck_enable(struct cnss_plat_data *plat_priv) @@ -960,7 +993,6 @@ int cnss_power_on_device(struct cnss_plat_data *plat_priv) { int ret = 0; - cnss_pr_info("%s Enter\n",__func__); if (plat_priv->powered_on) { cnss_pr_dbg("Already powered up"); return 0; @@ -1144,12 +1176,6 @@ int cnss_aop_mbox_init(struct cnss_plat_data *plat_priv) mbox->knows_txdone = false; plat_priv->mbox_chan = NULL; - chan = mbox_request_channel(mbox, 0); - if (IS_ERR(chan)) { - cnss_pr_err("Failed to get mbox channel\n"); - return PTR_ERR(chan); - } - plat_priv->mbox_chan = chan; ret = of_property_read_string(plat_priv->plat_dev->dev.of_node, "qcom,vreg_ol_cpr", @@ -1163,7 +1189,18 @@ int cnss_aop_mbox_init(struct cnss_plat_data *plat_priv) if (ret) cnss_pr_dbg("Volt regulator for Int Power Amp not configured\n"); + if (!plat_priv->vreg_ol_cpr && !plat_priv->vreg_ipa) + return 0; + + chan = mbox_request_channel(mbox, 0); + if (IS_ERR(chan)) { + cnss_pr_err("Failed to get mbox channel\n"); + return PTR_ERR(chan); + } + + plat_priv->mbox_chan = chan; cnss_pr_dbg("Mbox channel initialized\n"); + return 0; } |