ubuntu 18.04 LTS bluetooth [0cf3:3004] discovery not working

I have upgraded ubuntu 16.04 LTS to ubuntu 18.04 LTS and since then bluetooth is not discovering any devices.

Here are the steps I performed:

Turned bluetooth on from settings (seems lag to moving towards bluetooth option rather then other settings).

It's still not discovering any devices and also toggle of on off takes too much time to turn on device to discover but anyhow it's not discovering devices.

Before downgrading I have tried to run live ubuntu 18.04 LTS and this is what I get as in snapshot:

enter image description here

So according to bluetooth toggle it should be turned on but it still says bluetooth is off and not scanning any nearby device.

tried to run some of the below commands:

ubuntu@ubuntu:~$ bluetoothctl
Agent registered
[bluetooth]# list
[bluetooth]# devices
No default controller available
[bluetooth]# scan on
No default controller available
[bluetooth]# power on
No default controller available
[bluetooth]# 

Laptop: Lenovo Z50-70


Update

jarvis@jarvis:~$ lspci -knn | grep Net -A3; lsusb
02:00.0 Network controller [0280]: Qualcomm Atheros QCA9565 / AR9565 Wireless Network Adapter [168c:0036] (rev 01)
    Subsystem: Lenovo QCA9565 / AR9565 Wireless Network Adapter [17aa:4026]
    Kernel driver in use: ath9k
    Kernel modules: ath9k
03:00.0 3D controller [0302]: NVIDIA Corporation GM108M [GeForce 840M] [10de:1341] (rev a2)
Bus 001 Device 002: ID 8087:8000 Intel Corp. 
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 003 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 002 Device 004: ID 0cf3:3004 Atheros Communications, Inc. AR3012 Bluetooth 4.0
Bus 002 Device 003: ID 174f:14b2 Syntek 
Bus 002 Device 002: ID 0bda:0129 Realtek Semiconductor Corp. RTS5129 Card Reader Controller
Bus 002 Device 006: ID 093a:2532 Pixart Imaging, Inc. 
Bus 002 Device 005: ID 0781:5583 SanDisk Corp. 
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
jarvis@jarvis:~$ dmesg | grep -i blue
[   27.147743] Bluetooth: Core ver 2.22
[   27.147759] Bluetooth: HCI device and connection manager initialized
[   27.147761] Bluetooth: HCI socket layer initialized
[   27.147764] Bluetooth: L2CAP socket layer initialized
[   27.147769] Bluetooth: SCO socket layer initialized
[   27.160218] Bluetooth: hci0: don't support firmware rome 0x31010000
[   31.361588] Bluetooth: BNEP (Ethernet Emulation) ver 1.3
[   31.361590] Bluetooth: BNEP filters: protocol multicast
[   31.361593] Bluetooth: BNEP socket layer initialized
jarvis@jarvis:~$ 

Solution 1:

A brilliant developer named Takashi Iwai came up with a solution that I incorporated into the 4.15 kernel

sudo apt install git build-essential dkms
git clone https://github.com/jeremyb31/newbtfix-4.15.git
sudo dkms add ./newbtfix-4.15
sudo dkms install btusb/4.0
Reboot

For anyone that tried this before June 13, you may need to

sudo -H gedit /usr/src/btusb-4.0/Makefile
Change the contents to be
KVER ?= $(shell uname -r)
obj-m += btusb.o

all: make -C /lib/modules/$(KVER)/build M=$(PWD) modules

clean: make -C /lib/modules/$(KVER)/build M=$(PWD) clean

For it to build correctly with new kernels

Edit: this bug is fixed in kernel 4.15.0-31, so people that have installed this fix can remove if they wish with

sudo dkms remove btusb/4.0 -k $(uname -r)
sudo dkms remove btusb/4.0 --all

Solution 2:

The problem is that Atheros has released a new ROME device using the same VID/PID as an older AR3012 device. The codes are [0cf3:3004].

A good way to find out which device is install has not been found yet.

Kernel maintainers changed the code for the newer device here http://kernel.ubuntu.com/git/ubuntu/ubuntu-bionic.git/commit/drivers/bluetooth/btusb.c?id=c91729972ac67983a37270d0856f1ee93af54913

This means that the older device is trying to load a wrong firmware. This can be fixed by reverting this patch.

I used to build DKMS modules for older kernels and newer devices to fix it. Now it looks like we need a module for new kernels and old devices.

Solution 3:

After spending a lot of time online searching for the solution (also reinstalled 18.04) - on DELL 9550 laptop (running only Ubuntu) I came across this link

I also upgraded BIOS using a flash drive (after downloading it from official DELL drivers website link)

I think solution provided from above link did the actual trick, which is as follows (could be BIOS issue too but not 100% sure - anyway this must be done):

wget https://memcpy.io/files/2017-10-28/BCM-0a5c-6410.hcd
sudo cp BCM-0a5c-6410.hcd /lib/firmware/brcm/
sudo chmod 0644 /lib/firmware/brcm/BCM-0a5c-6410.hcd
sudo reboot

I hope it helps.

Solution 4:

I solved the problem by upgrading the Ubuntu kernel to the most current version with the UKUU tool.