diff options
author | Cheney Ni <cheneyni@google.com> | 2020-12-11 13:33:07 +0800 |
---|---|---|
committer | Cheney Ni <cheneyni@google.com> | 2020-12-22 19:52:56 +0800 |
commit | ba9cc89ce274c7c8d4c39ab86d964fa40bcecd56 (patch) | |
tree | e27eb9da1a9dcbeb002878f949fc9fe2adb6f3dc | |
parent | e0a59b9c6e6ef1dd9d491acfac91d65caf8c0286 (diff) | |
download | broadcom-ba9cc89ce274c7c8d4c39ab86d964fa40bcecd56.tar.gz |
Nitrous: Apply preferred BT pinctrl state
Change BT_REG_ON and DEV_WAKE pin settings to match the IO table.
Bug: 157051117
Bug: 168446075
Signed-off-by: Cheney Ni <cheneyni@google.com>
Change-Id: I390e02c402250f7d52f7dc0188e2eecdf51154ef
-rw-r--r-- | nitrous.c | 20 |
1 files changed, 20 insertions, 0 deletions
@@ -9,12 +9,15 @@ #include <linux/gpio/consumer.h> #include <linux/module.h> #include <linux/of.h> +#include <linux/pinctrl/consumer.h> #include <linux/platform_device.h> #include <linux/pm_runtime.h> #include <linux/property.h> #include <linux/rfkill.h> struct nitrous_bt_lpm { + struct pinctrl *pinctrls; + struct pinctrl_state *pinctrl_default_state; struct gpio_desc *gpio_dev_wake; /* Host -> Dev WAKE GPIO */ struct gpio_desc *gpio_host_wake; /* Dev -> Host WAKE GPIO */ struct gpio_desc *gpio_power; /* GPIO to control power */ @@ -134,6 +137,16 @@ static int nitrous_probe(struct platform_device *pdev) lpm->wake_polarity = 1; } + lpm->pinctrls = devm_pinctrl_get(lpm->dev); + if (IS_ERR(lpm->pinctrls)) { + pr_warn("[BT] Can't get pinctrl\n"); + } else { + lpm->pinctrl_default_state = + pinctrl_lookup_state(lpm->pinctrls, "default"); + if (IS_ERR(lpm->pinctrl_default_state)) + pr_warn("[BT] Can't get default pinctrl state\n"); + } + lpm->gpio_dev_wake = devm_gpiod_get_optional(dev, "device-wakeup", GPIOD_OUT_LOW); if (IS_ERR(lpm->gpio_dev_wake)) return PTR_ERR(lpm->gpio_dev_wake); @@ -146,6 +159,13 @@ static int nitrous_probe(struct platform_device *pdev) if (unlikely(rc)) goto err_rfkill_init; + if (!IS_ERR_OR_NULL(lpm->pinctrl_default_state)) { + rc = pinctrl_select_state(lpm->pinctrls, + lpm->pinctrl_default_state); + if (unlikely(rc)) + pr_warn("[BT] Can't set default pinctrl state\n"); + } + platform_set_drvdata(pdev, lpm); return rc; |