* [PATCH 2/2] Bluetooth: btbcm: disable read tx power for BeagleV-Ahead
2026-10-11 13:37 [PATCH 0/2] Enable bluetooth on BeagleV-Ahead Thomas Gerner
@ 2026-10-11 13:37 ` Thomas Gerner
2026-10-11 13:37 ` [PATCH 1/2] riscv: dts: thead: Enable bluetooth on BeagleV-Ahead Thomas Gerner
1 sibling, 0 replies; 3+ messages in thread
From: Thomas Gerner @ 2026-10-11 13:37 UTC (permalink / raw)
To: Marcel Holtmann, Luiz Augusto von Dentz, Drew Fustini, Guo Ren,
Fu Wei, Rob Herring, Krzysztof Kozlowski
Cc: Conor Dooley, Paul Walmsley, Palmer Dabbelt, Albert Ou,
Alexandre Ghiti, linux-bluetooth, linux-kernel, linux-riscv,
devicetree, Thomas Gerner
The bluetooth module of the Ampak AP6203BM is identified by the btbcm
driver as BCM4362A2.
The firmware of the bluetooth module on the BeagleV-Ahead reports a
capability of reading LE tx power. However reading fails. To get
bluetooth working it is necessary to disable reading of LE tx power on
the BeagleV-Ahead board. The disable is implemented in a similar way as
for several Apple boards but uses the board compatible identification
from the DTB as there is no DMI.
Signed-off-by: Thomas Gerner <thomas.gerner@muenchen-mail.de>
---
drivers/bluetooth/btbcm.c | 19 ++++++++++++++++---
1 file changed, 16 insertions(+), 3 deletions(-)
diff --git a/drivers/bluetooth/btbcm.c b/drivers/bluetooth/btbcm.c
index 463d59890bef..2d02cc1863d0 100644
--- a/drivers/bluetooth/btbcm.c
+++ b/drivers/bluetooth/btbcm.c
@@ -436,6 +436,11 @@ static const struct dmi_system_id disable_broken_read_transmit_power[] = {
{ }
};
+static const char *board_broken_read_transmit_power[] __maybe_unused = {
+ "beagle,beaglev-ahead",
+ NULL
+};
+
static int btbcm_read_info(struct hci_dev *hdev)
{
struct sk_buff *skb;
@@ -537,12 +542,13 @@ static const struct bcm_subver_table bcm_usb_subver_table[] = {
* This currently only looks up the device tree board appendix,
* but can be expanded to other mechanisms.
*/
-static const char *btbcm_get_board_name(struct device *dev)
+static const char *btbcm_get_board_name(struct hci_dev *hdev)
{
#ifdef CONFIG_OF
struct device_node *root __free(device_node) = of_find_node_by_path("/");
char *board_type;
const char *tmp;
+ const char **s;
if (!root)
return NULL;
@@ -550,8 +556,15 @@ static const char *btbcm_get_board_name(struct device *dev)
if (of_property_read_string_index(root, "compatible", 0, &tmp))
return NULL;
+ /* disable broken Read LE Min/Max Tx Power on first board found in list */
+ for (s = board_broken_read_transmit_power; *s; s++)
+ if (!strcmp(tmp, *s)) {
+ hci_set_quirk(hdev, HCI_QUIRK_BROKEN_READ_TRANSMIT_POWER);
+ break;
+ }
+
/* get rid of any '/' in the compatible string */
- board_type = devm_kstrdup(dev, tmp, GFP_KERNEL);
+ board_type = devm_kstrdup(&hdev->dev, tmp, GFP_KERNEL);
if (!board_type)
return NULL;
@@ -577,7 +590,7 @@ int btbcm_initialize(struct hci_dev *hdev, bool *fw_load_done, bool use_autobaud
const struct firmware *fw;
int i, err;
- board_name = btbcm_get_board_name(&hdev->dev);
+ board_name = btbcm_get_board_name(hdev);
/* Reset */
err = btbcm_reset(hdev);
--
2.53.0
_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv
^ permalink raw reply related [flat|nested] 3+ messages in thread* [PATCH 1/2] riscv: dts: thead: Enable bluetooth on BeagleV-Ahead
2026-10-11 13:37 [PATCH 0/2] Enable bluetooth on BeagleV-Ahead Thomas Gerner
2026-10-11 13:37 ` [PATCH 2/2] Bluetooth: btbcm: disable read tx power for BeagleV-Ahead Thomas Gerner
@ 2026-10-11 13:37 ` Thomas Gerner
1 sibling, 0 replies; 3+ messages in thread
From: Thomas Gerner @ 2026-10-11 13:37 UTC (permalink / raw)
To: Marcel Holtmann, Luiz Augusto von Dentz, Drew Fustini, Guo Ren,
Fu Wei, Rob Herring, Krzysztof Kozlowski
Cc: Conor Dooley, Paul Walmsley, Palmer Dabbelt, Albert Ou,
Alexandre Ghiti, linux-bluetooth, linux-kernel, linux-riscv,
devicetree, Thomas Gerner
On the BeagleV-Ahead the bluetooth module of the Ampak AP6203BM is
identified by the btbcm driver as BCM4362A2. The module is connected by
UART4, several gpio pins and an I2S interface. The I2S is currently not
used as there is no driver.
Signed-off-by: Thomas Gerner <thomas.gerner@muenchen-mail.de>
---
.../boot/dts/thead/th1520-beaglev-ahead.dts | 89 +++++++++++++++++++
1 file changed, 89 insertions(+)
diff --git a/arch/riscv/boot/dts/thead/th1520-beaglev-ahead.dts b/arch/riscv/boot/dts/thead/th1520-beaglev-ahead.dts
index e16484a47653..bf64eb667745 100644
--- a/arch/riscv/boot/dts/thead/th1520-beaglev-ahead.dts
+++ b/arch/riscv/boot/dts/thead/th1520-beaglev-ahead.dts
@@ -76,6 +76,23 @@ led-5 {
};
};
+ reg_vbat_1v8: regulator-vbat-1v8 {
+ compatible = "regulator-fixed";
+ regulator-boot-on;
+ regulator-max-microvolt = <1800000>;
+ regulator-min-microvolt = <1800000>;
+ regulator-name = "vbat-1v8";
+ };
+
+ reg_vbat_3v3: regulator-vbat-3v3 {
+ compatible = "regulator-fixed";
+ enable-active-high;
+ regulator-boot-on;
+ regulator-max-microvolt = <3300000>;
+ regulator-min-microvolt = <3300000>;
+ regulator-name = "vbat-3v3";
+ };
+
hdmi-connector {
compatible = "hdmi-connector";
type = "d";
@@ -152,6 +169,31 @@ led-pins {
};
&padctrl0_apsys {
+ bluetooth_in_pins: bluetooth-0 {
+ in-pins {
+ bias-disable;
+ drive-strength = <1>;
+ function = "gpio";
+ input-enable;
+ input-schmitt-enable;
+ pins = "GPIO2_30";
+ slew-rate = <0>;
+ };
+ };
+
+ bluetooth_out_pins: bluetooth-1 {
+ out-pins {
+ bias-disable;
+ drive-strength = <3>;
+ function = "gpio";
+ input-disable;
+ input-schmitt-disable;
+ pins = "SDIO1_DETN", /* GPIO2_29 */
+ "SDIO1_WPRTN"; /* GPIO2_28 */
+ slew-rate = <0>;
+ };
+ };
+
gmac0_pins: gmac0-0 {
tx-pins {
pins = "GMAC0_TX_CLK",
@@ -268,6 +310,30 @@ reg-on-pins {
};
};
+&padctrl1_apsys {
+ uart4_pins: uart4-0 {
+ rx-pins {
+ bias-disable;
+ drive-strength = <1>;
+ function = "uart";
+ input-enable;
+ pins = "UART4_RXD", "UART4_CTSN";
+ input-schmitt-enable;
+ slew-rate = <0>;
+ };
+
+ tx-pins {
+ bias-disable;
+ drive-strength = <3>;
+ function = "uart";
+ input-disable;
+ pins = "UART4_TXD", "UART4_RTSN";
+ input-schmitt-disable;
+ slew-rate = <0>;
+ };
+ };
+};
+
&sdio0 {
bus-width = <4>;
max-frequency = <198000000>;
@@ -314,3 +380,26 @@ &uart0 {
pinctrl-0 = <&uart0_pins>;
status = "okay";
};
+
+&uart4 {
+ pinctrl-0 = <&uart4_pins>;
+ pinctrl-names = "default";
+ uart-has-rtscts;
+
+ status = "okay";
+
+ bluetooth {
+ compatible = "brcm,bcm4329-bt";
+ device-wakeup-gpios = <&gpio2 29 GPIO_ACTIVE_HIGH>;
+ interrupt-parent = <&gpio2>;
+ interrupts = <30 IRQ_TYPE_EDGE_RISING>;
+ interrupt-names = "host-wakeup";
+ max-speed = <921600>;
+ pinctrl-0 = <&bluetooth_in_pins>;
+ pinctrl-1 = <&bluetooth_out_pins>;
+ pinctrl-names = "default";
+ shutdown-gpios = <&gpio2 28 GPIO_ACTIVE_HIGH>; /* BT-REG-ON */
+ vbat-supply = <®_vbat_3v3>;
+ vddio-supply = <®_vbat_1v8>;
+ };
+};
--
2.53.0
_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv
^ permalink raw reply related [flat|nested] 3+ messages in thread