summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCheney Ni <cheneyni@google.com>2020-12-11 13:33:07 +0800
committerCheney Ni <cheneyni@google.com>2020-12-22 19:52:56 +0800
commitba9cc89ce274c7c8d4c39ab86d964fa40bcecd56 (patch)
treee27eb9da1a9dcbeb002878f949fc9fe2adb6f3dc
parente0a59b9c6e6ef1dd9d491acfac91d65caf8c0286 (diff)
downloadbroadcom-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.c20
1 files changed, 20 insertions, 0 deletions
diff --git a/nitrous.c b/nitrous.c
index 823e5a9..0810a5d 100644
--- a/nitrous.c
+++ b/nitrous.c
@@ -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;