HOWTO: Enable Toshiba Bluetooth Support in Fedora Core 4

Introduction

Being fundamentally fed up with not having Bluetooth support in my Toshiba M100 and finding plenty of patches around for older (2.4) kernels as well as official support from other distributions, I decided to go ahead and learn how to put together my own based on the current kernel.org Toshiba ACPI driver and Nicolas Bettenburg's old driver.

So, after a bit of rummaging about in Meld and a few fixes to Nicholas' stuff to comply with the new ACPI parameter passing conventions, here are my notes on the matter.

This procedure was only tested on Fedora Core 4 with the 2.6.14-1.1637_FC4 kernel, but should be valid for both (slightly) older and newer kernels, at least until it gets rolled into the kernel.org mainline (please feel free to do it if you know whom to contact and the right procedure).

Prequisites

All software prequisites can be obtained via the correct incantation of yum from the standard Fedora repositories (there is no need to compile anything but the module).

  • Get a Toshiba/M100. Without it, the rest of this HOWTO may not be of much use to you (and I can't test this with other models for obvious reasons).
  • Install Fedora Core 4 and update it to the hilt (you saw this one coming, right?)
  • Make sure you have the kernel development packages installed. I usually install both kernel-devel and kernel-smp-devel (regardless of whether I am actually running an SMP kernel).
  • Get fnfx for function key support. The current version already binds Fn+F8 to enable Bluetooth.
  • Get BlueZ and its Gnome tools.

Build Environment

Create a directory to build the module in, and a Makefile containing the following instructions:

obj-m := toshiba_acpi.o

KDIR  := /lib/modules/$(shell uname -r)/build
PWD   := $(shell pwd)

default:
        $(MAKE) -C $(KDIR) M=$(PWD) modules

Note: the last line begins with a tab character, so mind the cutting & pasting.

Grab the source code below, save it as toshiba_acpi.c and type make.

If all went well, set the right permissions and copy it to your /lib/modules folder (replace the kernel version with your own):

$ su
Password:
# cd /lib/modules/2.6.14-1.1637_FC4/kernel/drivers/acpi
# mv toshiba_acpi.ko toshiba_acpi.ko.orig
# mv /tmp/build/toshiba_acpi.ko .
# chmod 744 toshiba_acpi.ko
# chown root:root toshiba_acpi.ko

Testing

Now type modprobe toshiba_acpi as root and see if the module was correctly loaded by using lsmod:

# modprobe toshiba_acpi
# lsmod | grep toshiba_acpi
toshiba_acpi            7704  0

If you've never done this before, nevermind the actual numbers - it's loaded.

Now let's get fnfx running and enabled upon reboot:

# service fnfxd start
Starting fnfxd:       [OK]
# chkconfig --level 345 fnfxd on

And now, press Fn+F8 and see if Bluetooth is enabled via hcitool:

# hcitool dev
Devices:
        hci0    00:03:7A:F0:0B:A7

That's it, you're done. Now your Linux Bluetooth stuff should be working, and you can refer to the BlueZ documentation (and at least another of my HOWTOs) to configure Bluetooth services.

Source Code

Here is the source code for the updated module. Basically I merged Nicolas' stuff into the latest source (not too cleanly, but workable) and incremented the version number to 0.19.

Feel free to do whatever you like with this - but I won't support or maintain it beyond my own needs...