mirror of
https://github.com/armbian/build
synced 2025-09-24 19:47:06 +07:00
89 lines
2.8 KiB
Diff
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
|
|
|