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: enter image description here

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


[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
  • Can 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 Apr 3 '15 at 23:22

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

| improve this answer | |
  • I edited my answer – user368507 Apr 4 '15 at 10:35
  • I 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 – Jeremy31 Apr 4 '15 at 13:42
  • I 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 ... – user368507 Apr 4 '15 at 18:51
  • The 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 – Jeremy31 Apr 4 '15 at 18:59
  • 1
    I used exactly this driver too. How come we don't have the same .hcd ? I used BCM20702A1_001.002.014.1315.1347.hex – user368507 Apr 4 '15 at 19:32

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.

| improve this answer | |
  • Nice 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 and cp /usr/src/linux-headers-$(uname -r)/Module.symvers Module.symvers then you can make your bluetooth modules with make -C /lib/modules/$(uname -r)/build M=$PWD modules If you update the kernel, then change into the bluetooth source directory and make -C /lib/modules/$(uname -r)/build M=$PWD clean – Jeremy31 Apr 4 '15 at 20:58
  • Then 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 Apr 4 '15 at 21:00
  • Thx. I missed the Module.symvers part – user368507 Apr 4 '15 at 23:01

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.