6

I have a Lenovo Yoga 3 that apparently has a new Broadcom Bluetooth device.

The bluetooth is detected at boot and when I try to pair a something in gnome, I can see a list of devices but none of them pair.

How can I get this device to work?

lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 004: ID 048d:8386 Integrated Technology Express, Inc.
Bus 001 Device 003: ID 5986:0535 Acer, Inc
Bus 001 Device 002: ID 0489:e07a Foxconn / Hon Hai
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
usb-devices
T:  Bus=01 Lev=01 Prnt=01 Port=03 Cnt=02 Dev#=  2 Spd=12  MxCh= 0
D:  Ver= 2.00 Cls=ff(vend.) Sub=01 Prot=01 MxPS=64 #Cfgs=  1
P:  Vendor=0489 ProdID=e07a Rev=01.12
S:  Manufacturer=Broadcom Corp
S:  Product=BCM20702A0
S:  SerialNumber=38B1DBE337E4
C:  #Ifs= 4 Cfg#= 1 Atr=e0 MxPwr=0mA
I:  If#= 0 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=01 Prot=01 Driver=btusb
I:  If#= 1 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=01 Prot=01 Driver=btusb
I:  If#= 2 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=(none)
I:  If#= 3 Alt= 0 #EPs= 0 Cls=fe(app. ) Sub=01 Prot=01 Driver=(none)
11

As of version 3.19, this device is supported in the Linux kernel, but you need to manually provide the device's firmware to the kernel.

Finding the Firmware:

You can find the firmware in the device's Windows driver, which you can download from Lenovo (or your computer manufacturer's website). Many drivers can just be unzipped, but for this particular computer, the driver is an .exe file and must be extracted with wine.

wine 4ab802rf.exe

Follow the "installation" instructions. The wizard will extract the .exe file and on the last step will ask to install it. Uncheck "Install Broadcom Bluetooth Driver now":

enter image description here

The driver file has been extracted to ~/.wine/driver_c/drivers/Broadcom Bluetooth Driver/

Identifying the right file

In my case, there are 20 - 30 firmware files in the extracted package. Which one corresponds to your device is revealed in one of the driver's inf files. Find your device ID from the output of lsusb or if that's unclear, usb-devices. In this case, it's e07a. Then grep the inf files to find out which one talks about that device:

grep -c E07A -r --include \*.inf
Win32/LD/bcbtumsLD-win7x86.inf:0
Win32/bcmhidnossr.inf:0
Win32/btwl2cap.inf:0
Win32/btwavdt.inf:0
Win32/btwrchid.inf:0
Win32/bcbtums-win8x86-brcm.inf:17
Win32/btwaudio.inf:0
Win64/LD/bcbtumsLD-win7x64.inf:0
Win64/bcmhidnossr.inf:0
Win64/btwl2cap.inf:0
Win64/btwavdt.inf:0
Win64/btwrchid.inf:0
Win64/bcbtums-win8x64-brcm.inf:17
Win64/btwaudio.inf:0
Autorun.inf:0

So in this driver, you can look in either Win32/bcbtums-win8x86-brcm.inf or Win64/bcbtums-win8x64-brcm.inf. Look through the file and find the hex file that is mentioned near E07A:

;;;;;;;;;;;;;RAMUSBE07A;;;;;;;;;;;;;;;;;

[RAMUSBE07A.CopyList]
bcbtums.sys
btwampfl.sys
BCM20702A1_001.002.014.1443.1496.hex

So the fimware is in the same directory and named BCM20702A1_001.002.014.1443.1496.hex.

Converting and Placing the Firmware

Download and compile the hex2hcd tool.

git clone https://github.com/jessesung/hex2hcd.git
cd hex2hcd
make

Convert the firmware to hcd:

hex2hcd BCM20702A1_001.002.014.1443.1496.hex firmware.hcd

Rename and move the firmware to the system's firmware subdirectory:

su -c 'mv firmware.hcd /lib/firmware/brcm/BCM20702A0-0489-e07a.hcd'

The name of this file is critical. The two sets of four characters, in this case 0489-e07a, should match your device's Vendor ID and Product ID.

Loading the Firmware

The easiest way to load the firmware is to power off your computer and turn it on again. Note that the computer should be turned off; a simple reboot may not be sufficient to reload this firmware.

4

Following drs' using a shortcut, I managed to get the file and got possitive results. My bluetooth devices wasn't able to detect nearby visible devices, but now is.

The shortut I used was that since my computer has no optical drive and has Windows preinstalled, it came with a partition full of drivers. I found a directory with heaps of bluetooth drivers but looking into the INF file that drs suggested, I found that the E07A device was linked to driver file BCM20702A1_001.002.014.1483.1651.hex

After that I compiled de hex2hcd program and converted the file to HCD. I had to preserve BCM20702A1 name part as opposed to replacing it for BCM2070A0, as per the dmesg "patch not found" message.

I have not been able to pair my device, but being able to scan is definitely a step forward.

If you need the HCD file, please message me and hopefully I'll send it to you soon. I'll also send it to linux bluetooth mailing list.

EDIT. Apparently 1651 in the Windows HEX driver filename refers to the build number. Through dmesg I can see the kernel states that 1651 is the build number.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.