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)
This commit is contained in:
Jan Čermák 2025-07-02 17:07:36 +02:00 committed by Jan Čermák
parent 3c1aa91376
commit 2fb98a4a73
No known key found for this signature in database
GPG Key ID: A78C897AA3AF012B
2 changed files with 15 additions and 0 deletions

View File

@ -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

View File

@ -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