Wednesday, April 29, 2015

Updated Steps for Enabling BCM43142 Bluetooth on Debian 8 "Jessie" Stable

UPDATE 2015-05-15: Add a script to reload btusb after suspend to "install-btusb-bcm43142a0". 

Debian 8 "Jessie" has been released recently. A lot of things have changed since a year ago when it was still in Testing, especially on the kernel side. The good news is the support for loading firmware for Broadcom bluetooth has been committed to the mainline kernel. The bad news is for the vendor ID and the device ID for BCM43142 bluetooth (105b:e065) is still not there. Therefore, we still need to patch and recompile btusb in order to get it to work. The difference is the patch is much smaller now.

Preparation

1. Make sure you have the correct device. We are talking about 105b:e065 here.

$ lsusb | grep 105b:e065
Bus 003 Device 003: ID 105b:e065

2. Make sure you already have deb-src lines on your "/etc/apt/sources.list".

deb-src http://kartolo.sby.datautama.net.id/debian/ jessie main contrib non-free
deb-src http://kartolo.sby.datautama.net.id/debian/ jessie-updates main contrib non-free
deb-src http://security.debian.org/ jessie/updates main contrib non-free

3. Install "build-essential".

# apt-get install build-essential

4. Download and install "hex2hcd" from source.

$ wget "https://github.com/jessesung/hex2hcd/archive/master.zip"
$ unzip master.zip
$ cd hex2hcd-master
$ make
# cp hex2hcd /usr/local/bin

5. Get hex firmware for BC43412 from a Windows installation under "C:\Windows\System32\Drivers". The file name should be like "BCM43142A0_*.hex".

Recompiling

1. Download the bash script that I have written here and extract it.

$ tar xvf btusb-bcm43142a0-20150515.tar.gz

2. Put your hex firmware together with the script and rename it to "BCM43142A0.hex".

$ ls
BCM43142A0.hex  
btusb-bcm43142A0.patch  
install-btusb-bcm43142a0

3. Run the script. It will download the kernel source for the running kernel, patch btusb module, and install the firmware.

# ./install-btusb-bcm43142a0

IMPORTANT: Please verify the content of the script yourself first before running. I have only tested it on my installation of Debian 8 "Jessie" i386. I won't be responsible for any damage that it caused. Use at your own risk!

4. Your bluetooth should be running on the next boot. If not, try disabling and enabling it. See whether it runs.

If you have any questions, write in the comments below.

9 comments:

  1. But aaa hm... what if
    $lsusb | grep 105b:e065
    produced... nothing?

    ReplyDelete
    Replies
    1. It means that you don't have the exact same bluetooth device. So, this post might not be for you.

      However, i have heard somewhere that there are variations of BCM43142 with different vendor ID and device ID. So, you might try to modify the script and use different hex firmware. But, there is no guarantee that it will work.

      Delete
  2. But why my lsusb does not have anything similar to bluetooth?
    $ lsusb
    Bus 004 Device 002: ID 8087:8000 Intel Corp.
    Bus 004 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
    Bus 003 Device 002: ID 8087:8008 Intel Corp.
    Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
    Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
    Bus 001 Device 003: ID 0bda:0129 Realtek Semiconductor Corp. RTS5129 Card Reader Controller
    Bus 001 Device 002: ID 174f:148d Syntek
    Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

    ReplyDelete
    Replies
    1. I am afraid you have to do your own research on your laptop model. Look at the output of lsusb on my laptop below. It also says nothing similar to bluetooth.

      $ lsusb
      Bus 004 Device 002: ID 8087:8000 Intel Corp.
      Bus 004 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
      Bus 003 Device 002: ID 8087:8008 Intel Corp.
      Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
      Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
      Bus 001 Device 003: ID 105b:e065
      Bus 001 Device 004: ID 046d:c534 Logitech, Inc.
      Bus 001 Device 002: ID 13d3:5722 IMC Networks
      Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

      Delete
  3. worked for me
    I had to change the ids to 0x0930:0x0229 and use the appropriate .hex from windows install with a little adjustment to the patch script to pick up the patch and add the 0930 0229 id where required.

    all ready for the next update so i can path again.

    Many Thanks!

    ReplyDelete
  4. I need your help

    I run

    ./install-btusb-bcm43142a0

    And I get this error

    Download complete and in download only mode
    dpkg-source: error: cannot read linux_.dsc: No such file or directory
    ./install-btusb-bcm43142a0: line 35: cd: install-btusb-bcm43142a0.ktTroAMx/linux: No such file or directory
    ./install-btusb-bcm43142a0: line 39: cd: install-btusb-bcm43142a0.ktTroAMx/linux: No such file or directory
    ./install-btusb-bcm43142a0: line 40: cd: install-btusb-bcm43142a0.ktTroAMx/linux: No such file or directory
    ./install-btusb-bcm43142a0: line 44: cd: install-btusb-bcm43142a0.ktTroAMx/linux: No such file or directory
    ./install-btusb-bcm43142a0: line 45: cd: install-btusb-bcm43142a0.ktTroAMx/linux: No such file or directory
    ./install-btusb-bcm43142a0: line 46: cd: install-btusb-bcm43142a0.ktTroAMx/linux: No such file or directory
    ./install-btusb-bcm43142a0: line 47: cd: install-btusb-bcm43142a0.ktTroAMx/linux: No such file or directory
    cp: cannot stat ‘install-btusb-bcm43142a0.ktTroAMx/build/lib/modules/*/extra/btusb.ko’: No such file or directory

    HELP ME PLEASE...

    ReplyDelete
    Replies
    1. There are few possibilities:

      1. The following command:

      apt-get --download-only source linux=$KERNEL_VERSION

      fails to get the required files.

      2. The first command works but the following command:

      dpkg-source -x "linux_$KERNEL_VERSION.dsc" "$TEMP_DIR/linux"

      fails to get the dsc file downloaded by the first command.

      Once you identify and correct the failure, the rest of the errors should be gone as they are caused by either of those 2 possibilities.

      I am on latest Debian 8.2 now and this script is still working for me.

      Delete
  5. I have a problem with step 5 (Get hex firmware for BC43412 from a Windows installation) ... I don't have windoze :/ .... can someone publish it somewhere?

    ReplyDelete