diff options
author | Cheney Ni <cheneyni@google.com> | 2022-02-18 00:32:25 +0800 |
---|---|---|
committer | Cheney Ni <cheneyni@google.com> | 2022-02-18 02:43:06 +0800 |
commit | da7e6b32a2f10cd5f65244678495f7a40d5e86d6 (patch) | |
tree | 5c8209bbba0cb30bf0e6a2a41d1794dd1904eeb6 | |
parent | fa9bdcb11ba229f130d8ba045621a4b7956ef7d4 (diff) | |
download | qcom-da7e6b32a2f10cd5f65244678495f7a40d5e86d6.tar.gz |
btpower: apply preferred BT pinctrl state
Configure our power GPIO pins while probing to prevent from unexpected
hardware errors.
Bug: 220142775
Signed-off-by: Cheney Ni <cheneyni@google.com>
Change-Id: I390e02c402250f7d52f7dc0188e2eecdf51154ef
-rw-r--r-- | btpower.c | 19 | ||||
-rw-r--r-- | linux/btpower.h | 5 |
2 files changed, 23 insertions, 1 deletions
@@ -937,6 +937,14 @@ static int btpower_gpios_source_initialize(struct btpower_platform_data *drvdata { int rc = 0; + if (!IS_ERR_OR_NULL(drvdata->pinctrl_default_state)) { + rc = pinctrl_select_state(drvdata->pinctrls, + drvdata->pinctrl_default_state); + if (unlikely(rc)) + pr_warn("%s: failed to set default pinctrl state rc=%d\n", + __func__, rc); + } + rc = btpower_gpio_acquire_output(drvdata->bt_gpio_sys_rst, "bt_sys_rst_n", 0); if (rc) { @@ -1000,6 +1008,17 @@ static int bt_power_populate_dt_pinfo(struct platform_device *pdev, if (rc) return rc; + drvdata->pinctrls = devm_pinctrl_get(&pdev->dev); + if (IS_ERR(drvdata->pinctrls)) { + pr_warn("%s: pinctrls not provided in device tree\n", __func__); + } else { + drvdata->pinctrl_default_state = + pinctrl_lookup_state(drvdata->pinctrls, "default"); + } + if (IS_ERR(drvdata->pinctrl_default_state)) + pr_warn("%s: default pinctrl state not provided in device tree\n", + __func__); + drvdata->bt_gpio_sys_rst = of_get_named_gpio(pdev->dev.of_node, "qcom,bt-reset-gpio", 0); if (!gpio_is_valid(drvdata->bt_gpio_sys_rst)) { diff --git a/linux/btpower.h b/linux/btpower.h index 98f30aa..48efd2f 100644 --- a/linux/btpower.h +++ b/linux/btpower.h @@ -7,9 +7,10 @@ #define __LINUX_BLUETOOTH_POWER_H #include <linux/cdev.h> -#include <linux/types.h> #include <linux/mailbox_client.h> #include <linux/mailbox/qmp.h> +#include <linux/pinctrl/consumer.h> +#include <linux/types.h> /* * voltage regulator information required for configuring the @@ -67,6 +68,8 @@ struct btpower_platform_data { char compatible[MAX_PROP_SIZE]; /*Bluetooth SoC name */ /* GPIOs */ + struct pinctrl *pinctrls; + struct pinctrl_state *pinctrl_default_state; int bt_gpio_sys_rst; /* Bluetooth reset gpio */ int wl_gpio_sys_rst; /* Wlan reset gpio */ int bt_gpio_sw_ctrl; /* Bluetooth sw_ctrl gpio */ |