Files
build/patch/kernel/archive/sm8250-6.7/0007-mfd-qcom-qca639x-change-qca639x-to-use-gpios-rather-.patch
2023-11-26 23:20:57 +01:00

89 lines
2.8 KiB
Diff

From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Date: Sat, 26 Feb 2022 21:17:22 +0300
Subject: mfd: qcom-qca639x: change qca639x to use gpios rather than pinctrl
Use gpio interface instead of pinctrl interface to toggle enable pins.
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
---
drivers/mfd/qcom-qca639x.c | 33 ++++++----
1 file changed, 19 insertions(+), 14 deletions(-)
diff --git a/drivers/mfd/qcom-qca639x.c b/drivers/mfd/qcom-qca639x.c
index 22792561d..4de860e9b 100644
--- a/drivers/mfd/qcom-qca639x.c
+++ b/drivers/mfd/qcom-qca639x.c
@@ -47,8 +47,9 @@ static const struct qca_cfg_data qca6390_cfg_data = {
struct qca_data {
size_t num_vregs;
struct device *dev;
- struct pinctrl_state *active_state;
struct generic_pm_domain pd;
+ struct gpio_desc *wlan_en_gpio;
+ struct gpio_desc *bt_en_gpio;
struct regulator_bulk_data regulators[];
};
@@ -70,11 +71,10 @@ static int qca_power_on(struct generic_pm_domain *domain)
/* Wait for 1ms before toggling enable pins. */
msleep(1);
- ret = pinctrl_select_state(data->dev->pins->p, data->active_state);
- if (ret) {
- dev_err(data->dev, "Failed to select active state");
- return ret;
- }
+ if (data->wlan_en_gpio)
+ gpiod_set_value(data->wlan_en_gpio, 1);
+ if (data->bt_en_gpio)
+ gpiod_set_value(data->bt_en_gpio, 1);
/* Wait for all power levels to stabilize */
msleep(6);
@@ -88,7 +88,11 @@ static int qca_power_off(struct generic_pm_domain *domain)
dev_warn(&domain->dev, "DUMMY POWER OFF\n");
- pinctrl_select_default_state(data->dev);
+ if (data->wlan_en_gpio)
+ gpiod_set_value(data->wlan_en_gpio, 0);
+ if (data->bt_en_gpio)
+ gpiod_set_value(data->bt_en_gpio, 0);
+
regulator_bulk_disable(data->num_vregs, data->regulators);
return 0;
@@ -115,13 +119,6 @@ static int qca_probe(struct platform_device *pdev)
data->dev = dev;
data->num_vregs = cfg->num_vregs;
- data->active_state = pinctrl_lookup_state(dev->pins->p, "active");
- if (IS_ERR(data->active_state)) {
- ret = PTR_ERR(data->active_state);
- dev_err(dev, "Failed to get active_state: %d\n", ret);
- return ret;
- }
-
for (i = 0; i < data->num_vregs; i++)
data->regulators[i].supply = cfg->vregs[i].name;
ret = devm_regulator_bulk_get(dev, data->num_vregs, data->regulators);
@@ -134,6 +131,14 @@ static int qca_probe(struct platform_device *pdev)
return ret;
}
+ data->wlan_en_gpio = devm_gpiod_get_optional(&pdev->dev, "wlan-en", GPIOD_OUT_LOW);
+ if (IS_ERR(data->wlan_en_gpio))
+ return PTR_ERR(data->wlan_en_gpio);
+
+ data->bt_en_gpio = devm_gpiod_get_optional(&pdev->dev, "bt-en", GPIOD_OUT_LOW);
+ if (IS_ERR(data->bt_en_gpio))
+ return PTR_ERR(data->bt_en_gpio);
+
data->pd.name = dev_name(dev);
data->pd.power_on = qca_power_on;
data->pd.power_off = qca_power_off;
--
Armbian