Bluetooth HSP/HFP not working but A2DP is

Solution 1:

I would try this:

wget https://www.dropbox.com/s/owropuric6iz898/BCM20702A0-05ac-21e1.hcd
sudo cp BCM20702A0-05ac-21e1.hcd /lib/firmware/brcm/BCM20702A0-0a5c-21e1.hcd
sudo modprobe -r btusb
sudo modprobe btusb

Then check dmesg | tail for any info:

sudo apt-get install linux-headers-$(uname -r) build-essential
wget https://www.dropbox.com/s/xu80svavlazttaf/bluetooth-3.19.tar.gz
tar xpvf bluetooth-3.19.tar.gz
cd bluetooth
cp /boot/config-$(uname -r) .config
cp /usr/src/linux-headers-$(uname -r)/Module.symvers Module.symvers
make -C /lib/modules/$(uname -r)/build M=$PWD modules
sudo cp btusb.ko /lib/modules/$(uname -r)/kernel/drivers/bluetooth/
sudo modprobe -r btusb
sudo modprobe btusb

See if it works

You will lose the HSP/HFP after a kernel update. When that happens, you should do:

cd bluetooth
make -C /lib/modules/$(uname -r)/build M=$PWD clean
cp /boot/config-$(uname -r) .config
cp /usr/src/linux-headers-$(uname -r)/Module.symvers Module.symvers
make -C /lib/modules/$(uname -r)/build M=$PWD modules
sudo cp btusb.ko /lib/modules/$(uname -r)/kernel/drivers/bluetooth/
sudo modprobe -r btusb
sudo modprobe btusb

Solution 2:

My guess is that it's a bt profile problem with pulseaudio, unless it's something more problematic.

Install and run pavucontrol (apt-get install pavucontrol) and go to the last page (configuration) check if bluetooth profile is there and try changing it.

My bt audio conf is default withoyt any changes (ubuntu 14.04) /etc/bluetooth/audio.conf

Now, Just tested these steps with a bt-headset (a2dp and hsp capabel) and got it working. Not the best way, but worked.

  1. Pair bt-device
  2. Check with pavucontrol that profile is HSP from configuration page.
  3. Start skype (I know, but it's easy to test with it)
  4. Run movesink.sh script
  5. Start test call to skype testing service
  6. Select recording tab from pavucontrol and select "Skype input from" to match your bluetooth device.
  7. Speak and see if the volume bar moves.
  8. If probles, start call again and run movesink.sh during the test call

a) Check bt-device name:

pactl list sinks|grep Name
# or
pactl list sinks|grep card:

b) Run movesinks.sh with that name

./movesink.sh bluez_sink.48_C1_AC_C1_C3_85.hsp
# or
./movesink.sh bluez_sink.48_C1_AC_C1_C3_85

And here's the movesink.sh script that I've made. It moves your program sound outputting to your bt device (this does not move mic automatically from integrated to bt-headset):

#!/bin/bash 
echo "Setting default sink to: $1";
# where new pa should output sound for new programs
pacmd set-default-sink $1
# get "active" programs and with while read
pactl list sink-inputs short |cut -f1 | while read line    
do
echo "Moving input: ";
echo $line
#| cut -f2 -d' ';
echo "to sink: $1";
#  move audio to the newly assigned output.
pacmd move-sink-input `echo $line | cut -f2 -d' '` $1

done

Hopefully this will verify that your setup works. (I used to have a keybinding, that paired the bt-headset, moved inputs to that and when I used it again, it reverted that setup.)

You should get your main audio back to default with:

./movesink.sh alsa_output.pci-0000_00_1b.0.analog-stereo
# or
./movesink.sh alsa_output.pci-0000_00_1b.0