Created
December 17, 2019 12:42
-
-
Save lategoodbye/3d39e4b07d401f07fa9f9c2f11e1f17d to your computer and use it in GitHub Desktop.
Bluetooth: hci_bcm: Drive RTS only for BCM43438
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
From 8356446384b8e18459229363cf63755fe4e2432c Mon Sep 17 00:00:00 2001 | |
From: Stefan Wahren <[email protected]> | |
Date: Tue, 17 Dec 2019 13:26:16 +0100 | |
Subject: [PATCH] Bluetooth: hci_bcm: Drive RTS only for BCM43438 | |
MIME-Version: 1.0 | |
Content-Type: text/plain; charset=UTF-8 | |
Content-Transfer-Encoding: 8bit | |
The commit 3347a80965b3 ("Bluetooth: hci_bcm: Fix RTS handling during | |
startup") is causing at least a regression for AP6256 on Orange Pi 3. | |
So do the RTS line handing during startup only on the necessary platform. | |
Fixes: 3347a80965b3 ("Bluetooth: hci_bcm: Fix RTS handling during startup") | |
Reported-by: Ondřej Jirman <[email protected]> | |
Signed-off-by: Stefan Wahren <[email protected]> | |
--- | |
drivers/bluetooth/hci_bcm.c | 21 +++++++++++++++++---- | |
1 file changed, 17 insertions(+), 4 deletions(-) | |
diff --git a/drivers/bluetooth/hci_bcm.c b/drivers/bluetooth/hci_bcm.c | |
index bbfaf0c..769bb44 100644 | |
--- a/drivers/bluetooth/hci_bcm.c | |
+++ b/drivers/bluetooth/hci_bcm.c | |
@@ -53,6 +53,7 @@ | |
*/ | |
struct bcm_device_data { | |
bool no_early_set_baudrate; | |
+ bool drive_rts_on_open; | |
}; | |
/** | |
@@ -122,6 +123,7 @@ struct bcm_device { | |
bool is_suspended; | |
#endif | |
bool no_early_set_baudrate; | |
+ bool drive_rts_on_open; | |
u8 pcm_int_params[5]; | |
}; | |
@@ -456,7 +458,9 @@ static int bcm_open(struct hci_uart *hu) | |
out: | |
if (bcm->dev) { | |
- hci_uart_set_flow_control(hu, true); | |
+ if (bcm->dev->drive_rts_on_open) | |
+ hci_uart_set_flow_control(hu, true); | |
+ | |
hu->init_speed = bcm->dev->init_speed; | |
/* If oper_speed is set, ldisc/serdev will set the baudrate | |
@@ -466,7 +470,10 @@ static int bcm_open(struct hci_uart *hu) | |
hu->oper_speed = bcm->dev->oper_speed; | |
err = bcm_gpio_set_power(bcm->dev, true); | |
- hci_uart_set_flow_control(hu, false); | |
+ | |
+ if (bcm->dev->drive_rts_on_open) | |
+ hci_uart_set_flow_control(hu, false); | |
+ | |
if (err) | |
goto err_unset_hu; | |
} | |
@@ -1447,8 +1454,10 @@ static int bcm_serdev_probe(struct serdev_device *serdev) | |
dev_err(&serdev->dev, "Failed to power down\n"); | |
data = device_get_match_data(bcmdev->dev); | |
- if (data) | |
+ if (data) { | |
bcmdev->no_early_set_baudrate = data->no_early_set_baudrate; | |
+ bcmdev->drive_rts_on_open = data->drive_rts_on_open; | |
+ } | |
return hci_uart_register_device(&bcmdev->serdev_hu, &bcm_proto); | |
} | |
@@ -1465,12 +1474,16 @@ static struct bcm_device_data bcm4354_device_data = { | |
.no_early_set_baudrate = true, | |
}; | |
+static struct bcm_device_data bcm43438_device_data = { | |
+ .drive_rts_on_open = true, | |
+}; | |
+ | |
static const struct of_device_id bcm_bluetooth_of_match[] = { | |
{ .compatible = "brcm,bcm20702a1" }, | |
{ .compatible = "brcm,bcm4329-bt" }, | |
{ .compatible = "brcm,bcm4345c5" }, | |
{ .compatible = "brcm,bcm4330-bt" }, | |
- { .compatible = "brcm,bcm43438-bt" }, | |
+ { .compatible = "brcm,bcm43438-bt", .data = &bcm43438_device_data }, | |
{ .compatible = "brcm,bcm43540-bt", .data = &bcm4354_device_data }, | |
{ .compatible = "brcm,bcm4335a0" }, | |
{ }, | |
-- | |
2.7.4 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment