tl;dr
You need a blob for the driver BCM20702A0-0a5c-216f.hcd
Update 2015-09-28: some success is reported
Whereas
Bluetooth is not working on the Dell M3800 under Fedora 21.
Question
But does it work with the Ubuntu shipped from the factory by Dell? TBD.
Previously
Experiences with the Dell M3800, The Good, The Bad (no Ugly, it’s a beautiful machine)
Evidences
- Fedora 21
- Kernel 4.0.7
Linux devbox.example.com 4.0.7-200.fc21.x86_64 #1 SMP Mon Jun 29 22:11:52 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
linux-firmware-20150521-48.git3161bfa4.fc21.noarch
Recipe
Recipe #1
Via: Dell XPS 13 (2015); staff; In Arch Linux Forums; 2015-07-25
<quote>
The Broadcom Bluetooth firmware is not available in the kernel (source), so you will have to retrieve it from the Windows driver. You need to extract the .cab
file with cabextract and then convert it to a .hcd
file with hex2hcd from bluez-utils:
$ cabextract 20662520_6c535fbfa9dca0d07ab069e8918896086e2af0a7.cab $ hex2hcd BCM20702A1_001.002.014.1443.1572.hex # mv BCM20702A1_001.002.014.1443.1572.hcd /lib/firmware/brcm/BCM20702A1-0a5c-216f.hcd # ln -rs /lib/firmware/brcm/BCM20702A1-0a5c-216f.hcd /lib/firmware/brcm/BCM20702A0-0a5c-216f.hcd
After reboot, the firmware should be available for your Bluetooth interface.
</quote>
Recipe #2
Via: Bluetooth not connecting to devices even though it recognizes them; Aaron Weinberg, some dude using the self-asserted identity token Jeremy31, Ian Mackinnon; In Ask Ubuntu; 2015-05-01 → 2015-07-01.
Recipe #2(a)
<quote>
wget https://www.dropbox.com/s/r2pb41rhx65t9zi/BCM20702A0-0a5c-216f.hcd sudo cp BCM20702A0-0a5c-216f.hcd /lib/firmware/brcm/ sudo modprobe -r btusb sudo modprobe btusb
</quote>
And as recovered by me from the dropbox site. Proven to work on my Dell M3800 <paranoid>but who knows what I recovered?</paranoid>
$ for i in md5sum sha1sum sha256sum ; do $i BCM20702A0-0a5c-216f.hcd; done 356ecc4d52b344109b55b3c96d6ec4d0 BCM20702A0-0a5c-216f.hcd 6ab9dde1e010bacfd57d371f832477d819fd671a BCM20702A0-0a5c-216f.hcd 42677905be180547d4c6f3e670884f6b5bcaf003c1a7c156e2dfc6fdc0397364 BCM20702A0-0a5c-216f.hcd
Recipe #2(b)
<quote>
Get 20662520_6c535fbfa9dca0d07ab069e8918896086e2af0a7.cab
from Microsoft at Broadcom Corporation Bluetooth Controller.
Acquire cabextract
via yum (dnf).
Run cabextract 20662520_6c535fbfa9dca0d07ab069e8918896086e2af0a7.cab
to recover BCM20702A1_001.002.014.1443.1572.hex
.
git clone https://github.com/jessesung/hex2hcd.git make -C hex2hcd ./hex2hcd/hex2hcd BCM20702A1_001.002.014.1443.1572.hex BCM20702A0-0a5c-216f.hcd sudo cp BCM20702A0-0a5c-216f.hcd /lib/firmware/brcm/ sudo modprobe -r btusb sudo modprobe btusb
Folklore
In archaeological order, newer on top, older below.
And recall that the Dell M3800 is “alot like” the Dell XPS 13.
- Dell XPS 13 (2015); staff; In Arch Linux Forums; 2015-07-25
tl;dr → see recipe above. You must to extract the blog out of the Windows driver package yourself, convert the encoding and place the file appropriiately. Yourself. No packaging is available at this time. Construction recipe for:/usr/lib/firmware/brcm/BCM20702A0-0a5c-216f.hcd
/usr/lib/firmware/brcm/
BCM20702A1-0a5c-216f.hcd
- Bluetooth not connecting to devices even though it recognizes them; Aaron Weinberg, some dude using the self-asserted identity token Jeremy31, Ian Mackinnon; In Ask Ubuntu; 2015-05-01 → 2015-07-01.
tl;dr → good compendium of the recipes; those being recited above.- Concept
<quote>hex2hcd utility by Jesse Sung that converts Broadcom hex files to hcd for use in newer kernels but you have to use Windows drivers and search the inf files to find the correct hex file to convert.</quote> - Resources
- BCM20702A0-0a5c-216f.hcd; at DropBox; prepared by whom? (perhaps en Jeremy31?); no checksum or signature is published nearby.
- jessesung/hex2hcd at GitHub
- Broadcom Corporation Bluetooth Controller, software update, At Microsoft; released 2014-06.
20662520_6c535fbfa9dca0d07ab069e8918896086e2af0a7.cab
→ some Windows blob you have to use cabstract upon; no checksum or signature is available to you (maybe Microsoft has access to such in their API, who knows).
- References
- Dell XPS 13 (9343 Developer Edition – Bluetooth Firmware; The dude using the self-asserted identity token Beowulf; In His Blog; 2015-06-23.
- XPS 13 (9343) Ubuntu Linux; Some Dude; In Sybian Linux; 2015-03-15.
tl;dr → <quote>whole lot of complaints about the compatibility of this laptop with Linux.</quote> but enumerates the remediations.- BIOS update from A0 to A1
- Ubuntu LTS 14.04.2 with UEFI enabled
- Broadcom 4352 WiFi (use USB dongle networking to bootstrap it)
- Broadcom 216F Bluetooth (acquiring
BCM20702A0-0a5c-216f.hcd
- Touchpad requires kernel parameters
- (Analog) Audio requires kernel parameters
- How can I get the Bluetooth working on my Lenovo Yoga 3; Some dude using the self-asserted identity token drs; In Stack Exchange; 2015-03-12.
tl;dr → complete procedure for BroadcomBCM20702A0
including fishing around in the Broadcom Windows Driver Installer to discoverBCM20702A1_001.002.014.1443.1496.hex
- Concept
- Dell XPS 13 (9343) Developer Edition – Bluetooth Firmware; Some Dude, using the self-asserted identity token Beowulf; In His Blog; 2015-06-23.
this advice is unrelated ot the Plugable advice (last item)
tl;dr → asserts a recipe for manually acquiring & installing the module- The module is
bfusb
- That the appropriate firmware is available in
bt-dw1560-firmware_1.0_all.deb
- Gives a recipe for copying it into place, manually.
- The module is
- Dell XPS 13 (9343) – No Bluetooth; Some dude using the self-asserted identity token red-lichtie; In Arch Linux Forums; 2015-06-20.
tl;dr → cites the difference in hardware version number in the firmware blob that must be loaded
brcm/BCM20702A1-0a5c-216f.hcd
is what? (possible?)
brcm/BCM20702A0-0a5c-216f.hcd
is expected but not found. - THIS IS A DIFFERENT DEVICE ENTIRELY
Plugable USB Bluetooth Adapter: Solving HFP/HSP and A2DP Profiles Issues on Linux; Ivan Fossa Ferrari (Plugable); In their Blog; 2014-06-23.
tl;dr → recommends downloading & installing some unspecified binary blob sourced out of Amazon S3; not even a checksum was uttered to know what was to be expected.
wget https://s3.amazonaws.com/plugable/bin/fw-0a5c_21e8.hcd
sudo mv fw-0a5c_21e8.hcd /lib/firmware/brcm/BCM20702A0-0a5c-21e8.hcd
Actualities
Jul 24 19:52:10 devbox.example.com kernel: bluetooth hci0: firmware: brcm/BCM20702A0-0a5c-216f.hcd will not be loaded Jul 24 19:52:10 devbox.example.com kernel: Bluetooth: hci0: BCM: patch brcm/BCM20702A0-0a5c-216f.hcd not found
$ find /usr/lib/firmware/brcm -print | while read file ; do echo "$file $(rpm -q -f $file)" ; done $ find /usr/lib/firmware/brcm -print | while read file ; do rpm=$(rpm -q -f $file); echo "$rpm $file" ; done linux-firmware-20150521-48.git3161bfa4.fc21.noarch /usr/lib/firmware/brcm linux-firmware-20150521-48.git3161bfa4.fc21.noarch /usr/lib/firmware/brcm/brcmfmac43570-pcie.bin linux-firmware-20150521-48.git3161bfa4.fc21.noarch /usr/lib/firmware/brcm/brcmfmac43362-sdio.bin linux-firmware-20150521-48.git3161bfa4.fc21.noarch /usr/lib/firmware/brcm/bcm4329-fullmac-4.bin linux-firmware-20150521-48.git3161bfa4.fc21.noarch /usr/lib/firmware/brcm/brcmfmac4354-sdio.bin linux-firmware-20150521-48.git3161bfa4.fc21.noarch /usr/lib/firmware/brcm/brcmfmac43143.bin linux-firmware-20150521-48.git3161bfa4.fc21.noarch /usr/lib/firmware/brcm/brcmfmac43340-sdio.bin linux-firmware-20150521-48.git3161bfa4.fc21.noarch /usr/lib/firmware/brcm/brcmfmac43236b.bin linux-firmware-20150521-48.git3161bfa4.fc21.noarch /usr/lib/firmware/brcm/brcmfmac43602-pcie.bin linux-firmware-20150521-48.git3161bfa4.fc21.noarch /usr/lib/firmware/brcm/brcmfmac4334-sdio.bin linux-firmware-20150521-48.git3161bfa4.fc21.noarch /usr/lib/firmware/brcm/bcm43xx-0.fw linux-firmware-20150521-48.git3161bfa4.fc21.noarch /usr/lib/firmware/brcm/brcmfmac43241b5-sdio.bin linux-firmware-20150521-48.git3161bfa4.fc21.noarch /usr/lib/firmware/brcm/bcm43xx_hdr-0.fw linux-firmware-20150521-48.git3161bfa4.fc21.noarch /usr/lib/firmware/brcm/brcmfmac4330-sdio.bin linux-firmware-20150521-48.git3161bfa4.fc21.noarch /usr/lib/firmware/brcm/brcmfmac43569.bin linux-firmware-20150521-48.git3161bfa4.fc21.noarch /usr/lib/firmware/brcm/brcmfmac43143-sdio.bin linux-firmware-20150521-48.git3161bfa4.fc21.noarch /usr/lib/firmware/brcm/brcmfmac43455-sdio.bin linux-firmware-20150521-48.git3161bfa4.fc21.noarch /usr/lib/firmware/brcm/brcmfmac4335-sdio.bin linux-firmware-20150521-48.git3161bfa4.fc21.noarch /usr/lib/firmware/brcm/brcmfmac43602-pcie.ap.bin linux-firmware-20150521-48.git3161bfa4.fc21.noarch /usr/lib/firmware/brcm/brcmfmac4356-pcie.bin linux-firmware-20150521-48.git3161bfa4.fc21.noarch /usr/lib/firmware/brcm/brcmfmac4329-sdio.bin linux-firmware-20150521-48.git3161bfa4.fc21.noarch /usr/lib/firmware/brcm/brcmfmac43241b4-sdio.bin linux-firmware-20150521-48.git3161bfa4.fc21.noarch /usr/lib/firmware/brcm/brcmfmac43241b0-sdio.bin linux-firmware-20150521-48.git3161bfa4.fc21.noarch /usr/lib/firmware/brcm/brcmfmac43242a.bin linux-firmware-20150521-48.git3161bfa4.fc21.noarch /usr/lib/firmware/brcm/brcmfmac4339-sdio.bin
$ lsusb
Bus 004 Device 002: ID 8087:8000 Intel Corp.
Bus 004 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 003 Device 002: ID 8087:8008 Intel Corp.
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 002: ID 0bda:8153 Realtek Semiconductor Corp.
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 003: ID 0a5c:216f Broadcom Corp.
Bus 001 Device 002: ID 04f3:21f9 Elan Microelectronics Corp.
Bus 001 Device 004: ID 0bda:573c Realtek Semiconductor Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Couldn't open device, some information will be missing
Couldn't open device, some information will be missing
Couldn't open device, some information will be missing
$ lsusb -t /: Bus 04.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/2p, 480M |__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/8p, 480M /: Bus 03.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/2p, 480M |__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/6p, 480M /: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/6p, 5000M |__ Port 2: Dev 2, If 0, Class=Vendor Specific Class, Driver=r8152, 5000M /: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/14p, 480M |__ Port 6: Dev 2, If 0, Class=Human Interface Device, Driver=usbhid, 12M |__Port 9: Dev 3, If 0, Class=Vendor Specific Class, Driver=btusb, 12M
|__Port 9: Dev 3, If 1, Class=Vendor Specific Class, Driver=btusb, 12M
|__Port 9: Dev 3, If 2, Class=Vendor Specific Class, Driver=, 12M
|__Port 9: Dev 3, If 3, Class=Application Specific Interface, Driver=, 12M
|__ Port 11: Dev 4, If 0, Class=Video, Driver=uvcvideo, 480M |__ Port 11: Dev 4, If 1, Class=Video, Driver=uvcvideo, 480M
$ lsusb --verbose <snip/> Bus 001 Device 003: ID 0a5c:216f Broadcom Corp. Device Descriptor: bLength 18 bDescriptorType 1 bcdUSB 2.00 bDeviceClass 255 Vendor Specific Class bDeviceSubClass 1 bDeviceProtocol 1 bMaxPacketSize0 64 idVendor 0x0a5c Broadcom Corp. idProduct 0x216f bcdDevice 1.12 iManufacturer 1 iProduct 2 iSerial 3 bNumConfigurations 1 Configuration Descriptor: bLength 9 bDescriptorType 2 wTotalLength 218 bNumInterfaces 4 bConfigurationValue 1 iConfiguration 0 bmAttributes 0xe0 Self Powered Remote Wakeup MaxPower 0mA Interface Descriptor: bLength 9 bDescriptorType 4 bInterfaceNumber 0 bAlternateSetting 0 bNumEndpoints 3 bInterfaceClass 255 Vendor Specific Class bInterfaceSubClass 1 bInterfaceProtocol 1 iInterface 0 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x81 EP 1 IN bmAttributes 3 Transfer Type Interrupt Synch Type None Usage Type Data wMaxPacketSize 0x0010 1x 16 bytes bInterval 1 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x82 EP 2 IN bmAttributes 2 Transfer Type Bulk Synch Type None Usage Type Data wMaxPacketSize 0x0040 1x 64 bytes bInterval 1 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x02 EP 2 OUT bmAttributes 2 Transfer Type Bulk Synch Type None Usage Type Data wMaxPacketSize 0x0040 1x 64 bytes bInterval 1 Interface Descriptor: bLength 9 bDescriptorType 4 bInterfaceNumber 1 bAlternateSetting 0 bNumEndpoints 2 bInterfaceClass 255 Vendor Specific Class bInterfaceSubClass 1 bInterfaceProtocol 1 iInterface 0 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x83 EP 3 IN bmAttributes 1 Transfer Type Isochronous Synch Type None Usage Type Data wMaxPacketSize 0x0000 1x 0 bytes bInterval 1 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x03 EP 3 OUT bmAttributes 1 Transfer Type Isochronous Synch Type None Usage Type Data wMaxPacketSize 0x0000 1x 0 bytes bInterval 1 Interface Descriptor: bLength 9 bDescriptorType 4 bInterfaceNumber 1 bAlternateSetting 1 bNumEndpoints 2 bInterfaceClass 255 Vendor Specific Class bInterfaceSubClass 1 bInterfaceProtocol 1 iInterface 0 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x83 EP 3 IN bmAttributes 1 Transfer Type Isochronous Synch Type None Usage Type Data wMaxPacketSize 0x0009 1x 9 bytes bInterval 1 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x03 EP 3 OUT bmAttributes 1 Transfer Type Isochronous Synch Type None Usage Type Data wMaxPacketSize 0x0009 1x 9 bytes bInterval 1 Interface Descriptor: bLength 9 bDescriptorType 4 bInterfaceNumber 1 bAlternateSetting 2 bNumEndpoints 2 bInterfaceClass 255 Vendor Specific Class bInterfaceSubClass 1 bInterfaceProtocol 1 iInterface 0 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x83 EP 3 IN bmAttributes 1 Transfer Type Isochronous Synch Type None Usage Type Data wMaxPacketSize 0x0011 1x 17 bytes bInterval 1 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x03 EP 3 OUT bmAttributes 1 Transfer Type Isochronous Synch Type None Usage Type Data wMaxPacketSize 0x0011 1x 17 bytes bInterval 1 Interface Descriptor: bLength 9 bDescriptorType 4 bInterfaceNumber 1 bAlternateSetting 3 bNumEndpoints 2 bInterfaceClass 255 Vendor Specific Class bInterfaceSubClass 1 bInterfaceProtocol 1 iInterface 0 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x83 EP 3 IN bmAttributes 1 Transfer Type Isochronous Synch Type None Usage Type Data wMaxPacketSize 0x0019 1x 25 bytes bInterval 1 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x03 EP 3 OUT bmAttributes 1 Transfer Type Isochronous Synch Type None Usage Type Data wMaxPacketSize 0x0019 1x 25 bytes bInterval 1 Interface Descriptor: bLength 9 bDescriptorType 4 bInterfaceNumber 1 bAlternateSetting 4 bNumEndpoints 2 bInterfaceClass 255 Vendor Specific Class bInterfaceSubClass 1 bInterfaceProtocol 1 iInterface 0 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x83 EP 3 IN bmAttributes 1 Transfer Type Isochronous Synch Type None Couldn't open device, some information will be missing Usage Type Data wMaxPacketSize 0x0021 1x 33 bytes bInterval 1 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x03 EP 3 OUT bmAttributes 1 Transfer Type Isochronous Synch Type None Usage Type Data wMaxPacketSize 0x0021 1x 33 bytes bInterval 1 Interface Descriptor: bLength 9 bDescriptorType 4 bInterfaceNumber 1 bAlternateSetting 5 bNumEndpoints 2 bInterfaceClass 255 Vendor Specific Class bInterfaceSubClass 1 bInterfaceProtocol 1 iInterface 0 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x83 EP 3 IN bmAttributes 1 Transfer Type Isochronous Synch Type None Usage Type Data wMaxPacketSize 0x0031 1x 49 bytes bInterval 1 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x03 EP 3 OUT bmAttributes 1 Transfer Type Isochronous Synch Type None Usage Type Data wMaxPacketSize 0x0031 1x 49 bytes bInterval 1 Interface Descriptor: bLength 9 bDescriptorType 4 bInterfaceNumber 2 bAlternateSetting 0 bNumEndpoints 2 bInterfaceClass 255 Vendor Specific Class bInterfaceSubClass 255 Vendor Specific Subclass bInterfaceProtocol 255 Vendor Specific Protocol iInterface 0 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x84 EP 4 IN bmAttributes 2 Transfer Type Bulk Synch Type None Usage Type Data wMaxPacketSize 0x0020 1x 32 bytes bInterval 1 Endpoint Descriptor: bLength 7 bDescriptorType 5 bEndpointAddress 0x04 EP 4 OUT bmAttributes 2 Transfer Type Bulk Synch Type None Usage Type Data wMaxPacketSize 0x0020 1x 32 bytes bInterval 1 Interface Descriptor: bLength 9 bDescriptorType 4 bInterfaceNumber 3 bAlternateSetting 0 bNumEndpoints 0 bInterfaceClass 254 Application Specific Interface bInterfaceSubClass 1 Device Firmware Update bInterfaceProtocol 1 iInterface 0 Device Firmware Upgrade Interface Descriptor: bLength 9 bDescriptorType 33 bmAttributes 5 Will Not Detach Manifestation Tolerant Upload Unsupported Download Supported wDetachTimeout 5000 milliseconds wTransferSize 64 bytes bcdDFUVersion 1.10 <snip/>