How to use a bluetooth headset mic in Ubuntu?
Solution 1
The problem is with the btusb driver and asus dongle USB-BT400. This dongle needs a firmware. To get the firmware, download the latest windows driver here (section Bluetooth): http://support.asus.com/download.aspx?SLanguage=en&p=1&s=45&m=MAXIMUS+VI+FORMULA&os=30&hashedid=Dbn0i1Jz1yusKO7u
Extract the .zip file. There is many firmwares so we have to find the right one. Edit the file bcbtums-win7x86-brcm.inf (for example), locate the section for your dongle by searching your usb product ID in the file (case insensitive). The section references a .hex file, in my case "BCM20702A1_001.002.014.1315.1347.hex".
Download hex2hcd here: https://github.com/jessesung/hex2hcd Compile it and make a .hcd file from the previously identified .hex file. Now we have the firmware.
It looks like the btusb driver does not try to load the firmware for this dongle, which is probably a bug (?). Install linux-source-3.16.0 to get the sources. In btusb.c make this little modification:
@@ -106,7 +106,7 @@ static const struct usb_device_id btusb_table[] = {
{ USB_DEVICE(0x0489, 0xe042) },
{ USB_DEVICE(0x04ca, 0x2003) },
{ USB_DEVICE(0x0b05, 0x17b5) },
- { USB_DEVICE(0x0b05, 0x17cb) },
+ { USB_DEVICE(0x0b05, 0x17cb), .driver_info = BTUSB_BCM_PATCHRAM },
{ USB_DEVICE(0x413c, 0x8197) },
/* Foxconn - Hon Hai */
Compile the modules (I had to compile the kernel before to circumvent a "Exec format error" when loading the new module). Backup the original module and overwrite it with the new btusb.ko (in my case it was in /lib/modules/3.16.0-33-generic/kernel/drivers/bluetooth/btusb.ko)
Put the .hcd file to: /lib/firmware/brcm/BCM20702A0-0b05-17cb.hcd (adapt name if needed).
Now we can reload the btusb driver:
modprobe -r btusb; modprobe btusb
dmesg should show a line like:
[ 52.121571] Bluetooth: hci0: BCM: firmware hci_ver=06 hci_rev=1543 lmp_ver=06 lmp_subver=220e
Now the HSP/HFP profile is working ! Meaning the headset can be used in input and output.
Solution 2
To get the firmware
wget https://www.dropbox.com/s/hjd2uvnkki5i0f8/fw-0b05_17cb.hcd
sudo cp fw-0b05_17cb.hcd /lib/firmware/
sudo cp fw-0b05_17cb.hcd /lib/firmware/brcm/BCM20702A0-0b05-17cb.hcd
sudo modprobe -r btusb
sudo modprobe btusb
pactl load-module module-bluetooth-discover
Then see if dmesg shows firmware being loaded
dmesg | tail
Then you should be able to try your headset
New Edit:
For a while now firmware has been uploaded to https://github.com/winterheart/broadcom-bt-firmware/tree/master/brcm
Find your firmware in the list right click on the name and choose copy link address/location, then in terminal cd /lib/firmware/brcm
then type sudo wget
then use ctrl + shift + v to paste the link address
Related videos on Youtube
user368507
Updated on September 18, 2022Comments
-
user368507 over 1 year
I have a bluetooth headset (Sennheiser MM 550-X) connected to my computer through a USB bluetooth dongle (Asus USB-BT400). I'm running Ubuntu 14.10. I would like to configure the headset both as output (headphone) and input source (the mic).
First of all, the headset pairs with the computer:
In the Ubuntu sound settings, if i configure the headset in mode "A2DP", i can send the sound from the computer to the headset. But configuring the input source as my headset switches the mode of the output to HSP/HFP and nothing works anymore (neither sound output or mic)
From my research on the internet i understand that only the HSP/HFP mode can get the mic working. Moreover the dongle uses a Broadcom BCM20702A0 chipset and i found some bug reports about it but i'm not sure whether there is still problems or not with this chipset.
How to get the mic working ?
thanks !
Edit: add output of lsusb:
Bus 002 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub Bus 003 Device 002: ID 0d3d:0040 Tangtop Technology Co., Ltd Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 001 Device 003: ID 0b05:17cb ASUSTek Computer, Inc. Bus 001 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Edit2: update to Jeremy31 answer. My headset is 00:16:94:0F:23:C6
dmesg|tail:
[35677.706802] usbcore: deregistering interface driver btusb [35677.709252] Bluetooth: hci0 urb ffff8800d5ec6840 failed to resubmit (2) [35690.999061] usbcore: registered new interface driver btusb
-
Admin about 9 yearsCan you add the result of
lsusb
to your question? I think the BCM20702A0 is one of the bluetooth devices that need patchram firmware to use HSP/HFP
-
-
Jeremy31 about 9 yearsI am able to use my Philips SHB4000 headset as an input/output device with a BCM20702A0 bluetooth and I see a message in dmesg showing firmware loaded
Bluetooth: hci0: BCM: firmware hci_ver=06 hci_rev=153a lmp_ver=06 lmp_subver=220e
with kernel 3.16.0-33 -
user368507 about 9 yearsI got it working. I will make an answer that has all the details, for other people. Just for information, where/how did you get the .hcd file ? It works but i used a different one that work too. I don't know how to thank you considering this answer is not working ...
-
Jeremy31 about 9 yearsThe answer unix.stackexchange.com/questions/189790/… is similar to what I do except I use a different driver source, a file named Bluetooth_Win7-8-8-1_V6515800_12009860 and I went through some work to make a file to find the hex file name to use. dropbox.com/s/molbtv7bohxfbez/broadcomhexnames2.ods?dl=0 but it can only be used with the driver file I listed. I think if you answer your own question, you can mark it as accepted after 2 days
-
user368507 about 9 yearsI used exactly this driver too. How come we don't have the same .hcd ? I used BCM20702A1_001.002.014.1315.1347.hex
-
Jeremy31 about 9 yearsNice catch, I missed that line in btusb.c and saw the one on line 120 that would have covered your device if it wasn't for line 109. You shouldn't have to build the entire kernel if you use terminal from the /drivers/bluetooth/ folder and
cp /boot/config-$(uname -r) .config
andcp /usr/src/linux-headers-$(uname -r)/Module.symvers Module.symvers
then you can make your bluetooth modules withmake -C /lib/modules/$(uname -r)/build M=$PWD modules
If you update the kernel, then change into the bluetooth source directory andmake -C /lib/modules/$(uname -r)/build M=$PWD clean
-
Jeremy31 about 9 yearsThen copy the config and Modules.symvers and make new modules that might work in the new kernel. Some times too many changes are made in a new kernel for it to work with older source code but many times it will work
-
Jeremy31 about 9 yearsIt looks like you used the hex from Win7 64 bit and I used the one from Win8. I would think they both would work
-
user368507 about 9 yearsThx. I missed the Module.symvers part
-
Willi Mentzel over 3 years@Jeremy31 the dropbox link does not work anymore. Pls edit your answer and provide a link to some official source.