Loading drivers/net/wireless/cnss2/main.h +3 −0 Original line number Diff line number Diff line Loading @@ -84,6 +84,7 @@ struct cnss_pinctrl_info { struct pinctrl_state *wlan_en_active; struct pinctrl_state *wlan_en_sleep; int bt_en_gpio; int sw_ctrl_gpio; }; #ifdef CONFIG_MSM_SUBSYSTEM_RESTART Loading Loading @@ -481,4 +482,6 @@ unsigned int cnss_get_timeout(struct cnss_plat_data *plat_priv, enum cnss_timeout_type); int cnss_pci_update_qtime_sync_period(struct device *dev, unsigned int qtime_sync_period); int cnss_get_gpio_value(struct cnss_plat_data *plat_priv, int gpio_num); #endif /* _CNSS_MAIN_H */ drivers/net/wireless/cnss2/pci.c +6 −1 Original line number Diff line number Diff line Loading @@ -2054,7 +2054,7 @@ static int cnss_qca6290_powerup(struct cnss_pci_data *pci_priv) int ret = 0; struct cnss_plat_data *plat_priv = pci_priv->plat_priv; unsigned int timeout; int retry = 0; int retry = 0, sw_ctrl_gpio = plat_priv->pinctrl_info.sw_ctrl_gpio; if (plat_priv->ramdump_info_v2.dump_data_valid) { cnss_pci_clear_dump_info(pci_priv); Loading @@ -2071,6 +2071,8 @@ static int cnss_qca6290_powerup(struct cnss_pci_data *pci_priv) ret = cnss_resume_pci_link(pci_priv); if (ret) { cnss_pr_dbg("Value of SW_CNTRL GPIO: %d\n", cnss_get_gpio_value(plat_priv, sw_ctrl_gpio)); cnss_pr_err("Failed to resume PCI link, err = %d\n", ret); if (test_bit(IGNORE_PCI_LINK_FAILURE, &plat_priv->ctrl_params.quirks)) { Loading @@ -2081,6 +2083,9 @@ static int cnss_qca6290_powerup(struct cnss_pci_data *pci_priv) if (ret == -EAGAIN && retry++ < POWER_ON_RETRY_MAX_TIMES) { cnss_power_off_device(plat_priv); cnss_pr_dbg("Retry to resume PCI link #%d\n", retry); cnss_pr_dbg("Value of SW_CNTRL GPIO: %d\n", cnss_get_gpio_value(plat_priv, sw_ctrl_gpio)); msleep(POWER_ON_RETRY_DELAY_MS * retry); goto retry; } Loading drivers/net/wireless/cnss2/power.c +29 −1 Original line number Diff line number Diff line Loading @@ -4,10 +4,10 @@ #include <linux/clk.h> #include <linux/delay.h> #include <linux/of.h> #include <linux/of_gpio.h> #include <linux/pinctrl/consumer.h> #include <linux/regulator/consumer.h> #include <soc/qcom/cmd-db.h> #include <linux/of_gpio.h> #include "main.h" #include "debug.h" Loading Loading @@ -42,6 +42,7 @@ static struct cnss_clk_cfg cnss_clk_list[] = { #define BOOTSTRAP_GPIO "qcom,enable-bootstrap-gpio" #define BOOTSTRAP_ACTIVE "bootstrap_active" #define WLAN_EN_GPIO "wlan-en-gpio" #define SW_CTRL_GPIO "qcom,sw-ctrl-gpio" #define BT_EN_GPIO "qcom,bt-en-gpio" #define WLAN_EN_ACTIVE "wlan_en_active" #define WLAN_EN_SLEEP "wlan_en_sleep" Loading Loading @@ -712,6 +713,16 @@ int cnss_get_pinctrl(struct cnss_plat_data *plat_priv) pinctrl_info->bt_en_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; Loading Loading @@ -826,6 +837,23 @@ static int cnss_select_pinctrl_enable(struct cnss_plat_data *plat_priv) return ret; } int cnss_get_gpio_value(struct cnss_plat_data *plat_priv, int gpio_num) { int ret = 0; if (gpio_num < 0) return -EINVAL; ret = gpio_direction_input(gpio_num); if (ret) { cnss_pr_err("Failed to set direction of the GPIO(%d), err %d", gpio_num, ret); return -EINVAL; } return gpio_get_value(gpio_num); } int cnss_power_on_device(struct cnss_plat_data *plat_priv) { int ret = 0; Loading Loading
drivers/net/wireless/cnss2/main.h +3 −0 Original line number Diff line number Diff line Loading @@ -84,6 +84,7 @@ struct cnss_pinctrl_info { struct pinctrl_state *wlan_en_active; struct pinctrl_state *wlan_en_sleep; int bt_en_gpio; int sw_ctrl_gpio; }; #ifdef CONFIG_MSM_SUBSYSTEM_RESTART Loading Loading @@ -481,4 +482,6 @@ unsigned int cnss_get_timeout(struct cnss_plat_data *plat_priv, enum cnss_timeout_type); int cnss_pci_update_qtime_sync_period(struct device *dev, unsigned int qtime_sync_period); int cnss_get_gpio_value(struct cnss_plat_data *plat_priv, int gpio_num); #endif /* _CNSS_MAIN_H */
drivers/net/wireless/cnss2/pci.c +6 −1 Original line number Diff line number Diff line Loading @@ -2054,7 +2054,7 @@ static int cnss_qca6290_powerup(struct cnss_pci_data *pci_priv) int ret = 0; struct cnss_plat_data *plat_priv = pci_priv->plat_priv; unsigned int timeout; int retry = 0; int retry = 0, sw_ctrl_gpio = plat_priv->pinctrl_info.sw_ctrl_gpio; if (plat_priv->ramdump_info_v2.dump_data_valid) { cnss_pci_clear_dump_info(pci_priv); Loading @@ -2071,6 +2071,8 @@ static int cnss_qca6290_powerup(struct cnss_pci_data *pci_priv) ret = cnss_resume_pci_link(pci_priv); if (ret) { cnss_pr_dbg("Value of SW_CNTRL GPIO: %d\n", cnss_get_gpio_value(plat_priv, sw_ctrl_gpio)); cnss_pr_err("Failed to resume PCI link, err = %d\n", ret); if (test_bit(IGNORE_PCI_LINK_FAILURE, &plat_priv->ctrl_params.quirks)) { Loading @@ -2081,6 +2083,9 @@ static int cnss_qca6290_powerup(struct cnss_pci_data *pci_priv) if (ret == -EAGAIN && retry++ < POWER_ON_RETRY_MAX_TIMES) { cnss_power_off_device(plat_priv); cnss_pr_dbg("Retry to resume PCI link #%d\n", retry); cnss_pr_dbg("Value of SW_CNTRL GPIO: %d\n", cnss_get_gpio_value(plat_priv, sw_ctrl_gpio)); msleep(POWER_ON_RETRY_DELAY_MS * retry); goto retry; } Loading
drivers/net/wireless/cnss2/power.c +29 −1 Original line number Diff line number Diff line Loading @@ -4,10 +4,10 @@ #include <linux/clk.h> #include <linux/delay.h> #include <linux/of.h> #include <linux/of_gpio.h> #include <linux/pinctrl/consumer.h> #include <linux/regulator/consumer.h> #include <soc/qcom/cmd-db.h> #include <linux/of_gpio.h> #include "main.h" #include "debug.h" Loading Loading @@ -42,6 +42,7 @@ static struct cnss_clk_cfg cnss_clk_list[] = { #define BOOTSTRAP_GPIO "qcom,enable-bootstrap-gpio" #define BOOTSTRAP_ACTIVE "bootstrap_active" #define WLAN_EN_GPIO "wlan-en-gpio" #define SW_CTRL_GPIO "qcom,sw-ctrl-gpio" #define BT_EN_GPIO "qcom,bt-en-gpio" #define WLAN_EN_ACTIVE "wlan_en_active" #define WLAN_EN_SLEEP "wlan_en_sleep" Loading Loading @@ -712,6 +713,16 @@ int cnss_get_pinctrl(struct cnss_plat_data *plat_priv) pinctrl_info->bt_en_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; Loading Loading @@ -826,6 +837,23 @@ static int cnss_select_pinctrl_enable(struct cnss_plat_data *plat_priv) return ret; } int cnss_get_gpio_value(struct cnss_plat_data *plat_priv, int gpio_num) { int ret = 0; if (gpio_num < 0) return -EINVAL; ret = gpio_direction_input(gpio_num); if (ret) { cnss_pr_err("Failed to set direction of the GPIO(%d), err %d", gpio_num, ret); return -EINVAL; } return gpio_get_value(gpio_num); } int cnss_power_on_device(struct cnss_plat_data *plat_priv) { int ret = 0; Loading