Take the 2-minute tour ×
Ask Ubuntu is a question and answer site for Ubuntu users and developers. It's 100% free, no registration required.

I've got a Broadcom BCM43228 mPCIe card which came with my motherboard (ASUS ROG Maximus V Extreme, can't seem to find a link to what the card is) which is working great for WiFi right now, but I can't detect the Bluetooth hardware onboard. In Windows, I have full Bluetooth 4.0 support.

$ lspci 
00:00.0 Host bridge: Intel Corporation 2nd Generation Core Processor Family DRAM Controller (rev 09)
00:01.0 PCI bridge: Intel Corporation Xeon E3-1200/2nd Generation Core Processor Family PCI Express Root Port (rev 09)
00:14.0 USB controller: Intel Corporation Panther Point USB xHCI Host Controller (rev 04)
00:16.0 Communication controller: Intel Corporation Panther Point MEI Controller #1 (rev 04)
00:19.0 Ethernet controller: Intel Corporation 82579V Gigabit Network Connection (rev 04)
00:1a.0 USB controller: Intel Corporation Panther Point USB Enhanced Host Controller #2 (rev 04)
00:1b.0 Audio device: Intel Corporation Panther Point High Definition Audio Controller (rev 04)
00:1c.0 PCI bridge: Intel Corporation Panther Point PCI Express Root Port 1 (rev c4)
00:1c.4 PCI bridge: Intel Corporation Panther Point PCI Express Root Port 5 (rev c4)
00:1c.6 PCI bridge: Intel Corporation Panther Point PCI Express Root Port 7 (rev c4)
00:1c.7 PCI bridge: Intel Corporation Panther Point PCI Express Root Port 8 (rev c4)
00:1d.0 USB controller: Intel Corporation Panther Point USB Enhanced Host Controller #1 (rev 04)
00:1f.0 ISA bridge: Intel Corporation Panther Point LPC Controller (rev 04)
00:1f.2 SATA controller: Intel Corporation Panther Point 6 port SATA Controller [AHCI mode] (rev 04)
00:1f.3 SMBus: Intel Corporation Panther Point SMBus Controller (rev 04)
01:00.0 VGA compatible controller: NVIDIA Corporation Device 1189 (rev a1)
01:00.1 Audio device: NVIDIA Corporation Device 0e0a (rev a1)
0d:00.0 USB controller: ASMedia Technology Inc. ASM1042 SuperSpeed USB Host Controller
0e:00.0 PCI bridge: PLX Technology, Inc. PEX 8608 8-lane, 8-Port PCI Express Gen 2 (5.0 GT/s) Switch (rev ba)
0f:01.0 PCI bridge: PLX Technology, Inc. PEX 8608 8-lane, 8-Port PCI Express Gen 2 (5.0 GT/s) Switch (rev ba)
0f:04.0 PCI bridge: PLX Technology, Inc. PEX 8608 8-lane, 8-Port PCI Express Gen 2 (5.0 GT/s) Switch (rev ba)
0f:05.0 PCI bridge: PLX Technology, Inc. PEX 8608 8-lane, 8-Port PCI Express Gen 2 (5.0 GT/s) Switch (rev ba)
0f:06.0 PCI bridge: PLX Technology, Inc. PEX 8608 8-lane, 8-Port PCI Express Gen 2 (5.0 GT/s) Switch (rev ba)
0f:07.0 PCI bridge: PLX Technology, Inc. PEX 8608 8-lane, 8-Port PCI Express Gen 2 (5.0 GT/s) Switch (rev ba)
0f:08.0 PCI bridge: PLX Technology, Inc. PEX 8608 8-lane, 8-Port PCI Express Gen 2 (5.0 GT/s) Switch (rev ba)
0f:09.0 PCI bridge: PLX Technology, Inc. PEX 8608 8-lane, 8-Port PCI Express Gen 2 (5.0 GT/s) Switch (rev ba)
10:00.0 USB controller: ASMedia Technology Inc. ASM1042 SuperSpeed USB Host Controller
12:00.0 SATA controller: ASMedia Technology Inc. ASM1062 Serial ATA Controller (rev 01)
15:00.0 Network controller: Broadcom Corporation BCM43228 802.11a/b/g/n
17:00.0 SATA controller: ASMedia Technology Inc. ASM1062 Serial ATA Controller (rev 01)

The key line seems to be:

15:00.0 Network controller: Broadcom Corporation BCM43228 802.11a/b/g/n

If I try to detect the Bluetooth card, I don't see anything:

$ hcitool dev
Devices:

$ rfkill list all

Output

$ lspci 

Output

$ lsusb

Output

I finally found the card with usb-devices:

T:  Bus=01 Lev=02 Prnt=02 Port=00 Cnt=01 Dev#=  3 Spd=12  MxCh= 0
D:  Ver= 2.00 Cls=ff(vend.) Sub=01 Prot=01 MxPS=64 #Cfgs=  1
P:  Vendor=0b05 ProdID=17b5 Rev=01.12
S:  Manufacturer=Broadcom Corp
S:  Product=BCM20702A0
S:  SerialNumber=############
C:  #Ifs= 4 Cfg#= 1 Atr=e0 MxPwr=0mA
I:  If#= 0 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=01 Prot=01 Driver=(none)
I:  If#= 1 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=01 Prot=01 Driver=(none)
I:  If#= 2 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=(none)
I:  If#= 3 Alt= 0 #EPs= 0 Cls=fe(app. ) Sub=01 Prot=01 Driver=(none)

I'm running kernel 3.2.0-34-generic.

I've heard that this card needs to have firmware injected into it in order to function. If that's the case, how do I do it?

share|improve this question
add comment

3 Answers 3

up vote 5 down vote accepted
+200

patching your kernel

According to this post your particular bluetooth module is not recognised by the current precise kernel.

You command usb-devices reveals the particular bluetooth device - the vendor and ProdID values - 0b05:17b5

A patch was submitted to the main Git repository. It is likely (but not certain) that this patch would be included in the next kernel - v3.8. However, it could be a later module if this goes though staging.

Thus, for the moment, to get you bluetooth device to be recognised, you should file a bug-report on launchpad asking if it is possible to backport this patch - give as much detail as possible to the patch and if possible submit the patch as well.

If you want to patch this yourself, here are some notes you can follow.

patching your kernel

  • download the build environment, kernel source & headers
sudo apt-get install build-essential 
apt-get source linux-source-3.2.0
sudo apt-get install linux-headers-$(uname -r)

i.e. DO NOT use sudo apt-get source linux-source-3.2.0 since this will download the source as root - this will cause compilation issues later if you download as root.

  • copy the current kernel config and source headers Module Versions file
cd linux-3.2.0
cp /boot/config-$(uname -r) .config
cp /usr/src/linux-headers-$(uname -r)/Module.symvers . 
  • patch the bluetooth module

The linux above indicated the patch should be applied to btusb.c

Using your favourite editor open this kernel module

gedit drivers/bluetooth/btusb.c

Search & find the line containing the text BCM20702A0

It will look like:

/* Broadcom BCM20702A0 */
{ USB_DEVICE(0x0489, 0xe042) },
{ USB_DEVICE(0x13d3, 0x3388), .driver_info = BTUSB_BCM_PATCHRAM },
{ USB_DEVICE(0x13d3, 0x3389), .driver_info = BTUSB_BCM_PATCHRAM },
{ USB_DEVICE(0x413c, 0x8197), .driver_info = BTUSB_BCM_PATCHRAM },

Add the following your new bluetooth device - that is your vendor and ProdID { USB_DEVICE(0x0b05, 0x17b5) }, i.e.

/* Broadcom BCM20702A0 */
{ USB_DEVICE(0x0b05, 0x17b5) },
{ USB_DEVICE(0x0489, 0xe042) },
{ USB_DEVICE(0x13d3, 0x3388), .driver_info = BTUSB_BCM_PATCHRAM },
{ USB_DEVICE(0x13d3, 0x3389), .driver_info = BTUSB_BCM_PATCHRAM },
{ USB_DEVICE(0x413c, 0x8197), .driver_info = BTUSB_BCM_PATCHRAM },
  • Now compile
make M=drivers/bluetooth modules
  • This should successfully compile the kernel modules including your newly patched file.

  • Finally add the kernel module to your current kernel drivers folder:

cd drivers/bluetooth
sudo cp btusb.ko /lib/modules/$(uname -r)/kernel/drivers/bluetooth
sudo service bluetooth stop
sudo modprobe -r btusb
sudo modprobe btusb
sudo service bluetooth start

Hopefully now your bluetooth device is recognised - it should be visible when you run rfkill list all as well as lsusb

and finally...

Each time your kernel is updated by Canonical you will need to re-run through the above procedure because your new bluetooth module will be overwritten - if you are luck you may be able to use run the sudo modprobe commands with minor kernel updates.

share|improve this answer
    
Awesome! That worked! All I need to do now is find a way to automatically patch the kernel using a postinst script if possible. I'm fighting on Launchpad right now to see if we can backport the simple patch into the kernel. –  Naftuli Tzvi Kay Dec 11 '12 at 22:54
    
@TKKocheran - excellent. That sounds like a great question. Can you create it (link back to this one as well)? –  fossfreedom Dec 11 '12 at 23:16
    
Did so on unix.stackexchange as it seemed more of a generic Unix/Linux question. –  Naftuli Tzvi Kay Dec 11 '12 at 23:22
    
For all those finding this page, you can check out a write up I made on how to include this patch in a DKMS module so you won't break it when a kernel update occurs: j.mp/TVxHA9 –  Naftuli Tzvi Kay Dec 13 '12 at 0:28
    
This patch was added in kernel 3.7.2, so if you're on it or a later kernel, no patch should by necessary. –  Naftuli Tzvi Kay Jan 13 '13 at 19:25
add comment

Refer to WifiDocs/Driver/bcm43xx in the Ubuntu wiki for info on how to install the correct drivers for your chipset.

share|improve this answer
add comment

I have the same problem with BCM20702A0 on my Acer Aspire R7 and just found another permanent solution (without recompiling the driver on updates):

sudo echo btusb >> /etc/modules - this will force loading btusb driver;

add the line echo 0b05 17b5 > /sys/bus/usb/drivers/btusb/new_id to the /etc/rc.local just before exit 0 - this will force driver to be used with the specified device on boot (which is 04ca 2004 in my system, and also works).

share|improve this answer
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.