From 2fb98a4a73f01e5331e617d86510618dcc201458 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20=C4=8Cerm=C3=A1k?= Date: Wed, 2 Jul 2025 17:07:36 +0200 Subject: [PATCH] Unbind Broadcom HCI driver on RPi/CM without WiFi (#4139) Unbind the Bluetooth driver for Broadcom HCI module before the bluetooth service starts if running on board without WiFi module. This is a replacement for #2948 but using a more targeted approach for removing the particular driver and better detection of no-WiFi (thus no-Bluetooth) models. This still means the driver will be probed and couple of lines printed when it fails to set baudrate and reset the module, yet this should be benign, at least the all-zero MAC device no longers appears in Bluetooth stack. (cherry picked from commit aff1f81817c600ea4c1bec028a2b520fe17b8b42) --- .../package/pi-bluetooth/hciunbind.service | 14 ++++++++++++++ .../package/pi-bluetooth/pi-bluetooth.mk | 1 + 2 files changed, 15 insertions(+) create mode 100644 buildroot-external/package/pi-bluetooth/hciunbind.service diff --git a/buildroot-external/package/pi-bluetooth/hciunbind.service b/buildroot-external/package/pi-bluetooth/hciunbind.service new file mode 100644 index 000000000..17d6df716 --- /dev/null +++ b/buildroot-external/package/pi-bluetooth/hciunbind.service @@ -0,0 +1,14 @@ +[Unit] +Description=Unbind Broadcom HCI driver if WiFi/Bluetooth module is not present +ConditionPathExists=!/sys/bus/sdio/devices/mmc1:0001:1 +ConditionPathExists=/sys/bus/serial/drivers/hci_uart_bcm/unbind +ConditionPathExists=/proc/device-tree/chosen/rpi-boardrev-ext +Before=bluetooth.service + +[Service] +Type=oneshot +ExecCondition=/bin/sh -c 'test $((16#$(xxd -p -g4 /proc/device-tree/chosen/rpi-boardrev-ext) & 16#40000000)) -gt 0' +ExecStart=/bin/sh -c 'echo "serial0-0" > /sys/bus/serial/drivers/hci_uart_bcm/unbind' + +[Install] +WantedBy=hassos-hardware.target diff --git a/buildroot-external/package/pi-bluetooth/pi-bluetooth.mk b/buildroot-external/package/pi-bluetooth/pi-bluetooth.mk index 5b244be6b..2f2decf3d 100644 --- a/buildroot-external/package/pi-bluetooth/pi-bluetooth.mk +++ b/buildroot-external/package/pi-bluetooth/pi-bluetooth.mk @@ -12,6 +12,7 @@ PI_BLUETOOTH_LICENSE_FILES = debian/copyright define PI_BLUETOOTH_INSTALL_TARGET_CMDS $(INSTALL) -d $(TARGET_DIR)/etc/systemd/system/hassos-hardware.target.wants $(INSTALL) -m 0644 $(BR2_EXTERNAL_HASSOS_PATH)/package/pi-bluetooth/hciuart.service $(TARGET_DIR)/usr/lib/systemd/system/ + $(INSTALL) -m 0644 $(BR2_EXTERNAL_HASSOS_PATH)/package/pi-bluetooth/hciunbind.service $(TARGET_DIR)/usr/lib/systemd/system/ $(INSTALL) -m 0644 $(BR2_EXTERNAL_HASSOS_PATH)/package/pi-bluetooth/bthelper@.service $(TARGET_DIR)/usr/lib/systemd/system/ $(INSTALL) -d $(TARGET_DIR)/usr/bin