How to use a bluetooth headset mic in Ubuntu?

21,554

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

Share:
21,554

Related videos on Youtube

user368507
Author by

user368507

Updated on September 18, 2022

Comments

  • user368507
    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: 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

    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
      Admin about 9 years
      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
    Jeremy31 about 9 years
    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
  • user368507
    user368507 about 9 years
    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 ...
  • Jeremy31
    Jeremy31 about 9 years
    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
  • user368507
    user368507 about 9 years
    I used exactly this driver too. How come we don't have the same .hcd ? I used BCM20702A1_001.002.014.1315.1347.hex
  • Jeremy31
    Jeremy31 about 9 years
    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
    Jeremy31 about 9 years
    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
    Jeremy31 about 9 years
    It 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
    user368507 about 9 years
    Thx. I missed the Module.symvers part
  • Willi Mentzel
    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.