And to add to that, I have developed a kernel patch that prevents loading of the AR3k Bluetooth firmware while still initializing the BT properly using the chip’s built in ROM firmware. I am using this for some time now and do not experience and regressions. The only problem remaining is that one still needs the config file which is part of the non free firmware (the “ramps…” file). This file does not contain actual firmware but only some settings, one of which enables the Wifi - Bluetooth coexistence in the Bluetooth chip so that it can share the antennas with the WiFi card. So without this config file the Bluetooth would work but would be be deaf. I am working with the FSF now if such a binary only config file would be OK to have / ship. If it is this would be the suggested solution to enable Bluetooth in the Librem laptops and I would work on upstreaming the kernel patch.
For everyone interested, this patch looks like this:
--- linux-4.18/drivers/bluetooth/ath3k.c 2018-09-26 08:39:43.000000000 +0200
+++ linux-4.19/drivers/bluetooth/ath3k.c 2018-11-05 07:59:24.739931449 +0100
@@ -528,18 +528,20 @@
/* load patch and sysconfig files for AR3012 */
if (id->driver_info & BTUSB_ATH3012) {
/* New firmware with patch and sysconfig files already loaded */
- if (le16_to_cpu(udev->descriptor.bcdDevice) > 0x0001)
+ if (le16_to_cpu(udev->descriptor.bcdDevice) > 0x0001) {
+ BT_ERR("ath3k patch already loaded");
return -ENODEV;
+ }
ret = ath3k_load_patch(udev);
if (ret < 0) {
- BT_ERR("Loading patch file failed");
- return ret;
+ BT_ERR("Loading patch file failed, ignoring");
+ // return ret;
}
ret = ath3k_load_syscfg(udev);
if (ret < 0) {
- BT_ERR("Loading sysconfig file failed");
- return ret;
+ BT_ERR("Loading sysconfig file failed, ignoring");
+ // return ret;
}
ret = ath3k_set_normal_mode(udev);
if (ret < 0) {
Cheers
nicole