monolith: fix bluetooth dongle
This commit is contained in:
parent
a4ebb60595
commit
9c8bc05856
|
@ -38,7 +38,14 @@ in
|
||||||
|
|
||||||
boot.kernelPackages = pkgs.linuxPackages_latest;
|
boot.kernelPackages = pkgs.linuxPackages_latest;
|
||||||
|
|
||||||
boot.extraModulePackages = with config.boot.kernelPackages; [ zenpower ];
|
boot.extraModulePackages = with config.boot.kernelPackages; [
|
||||||
|
zenpower
|
||||||
|
(pkgs.linux-bluetooth.override {
|
||||||
|
kernel = config.boot.kernelPackages.kernel;
|
||||||
|
patches = [ ../../patches/linux/v2-Bluetooth-btusb-Fix-regression-with-CSR-controllers.diff ];
|
||||||
|
})
|
||||||
|
];
|
||||||
|
|
||||||
boot.initrd.kernelModules = [ "amdgpu" ];
|
boot.initrd.kernelModules = [ "amdgpu" ];
|
||||||
boot.kernelModules = [
|
boot.kernelModules = [
|
||||||
"kvm-amd"
|
"kvm-amd"
|
||||||
|
|
|
@ -0,0 +1,24 @@
|
||||||
|
diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
|
||||||
|
index c0b6ef8ee5da..f72218c1037e 100644
|
||||||
|
--- a/drivers/bluetooth/btusb.c
|
||||||
|
+++ b/drivers/bluetooth/btusb.c
|
||||||
|
@@ -1366,10 +1366,15 @@ static int btusb_submit_intr_urb(struct hci_dev *hdev, gfp_t mem_flags)
|
||||||
|
if (!urb)
|
||||||
|
return -ENOMEM;
|
||||||
|
|
||||||
|
- /* Use maximum HCI Event size so the USB stack handles
|
||||||
|
- * ZPL/short-transfer automatically.
|
||||||
|
- */
|
||||||
|
- size = HCI_MAX_EVENT_SIZE;
|
||||||
|
+ if (le16_to_cpu(data->udev->descriptor.idVendor) == 0x0a12 &&
|
||||||
|
+ le16_to_cpu(data->udev->descriptor.idProduct) == 0x0001)
|
||||||
|
+ /* Fake CSR devices don't seem to support sort-transter */
|
||||||
|
+ size = le16_to_cpu(data->intr_ep->wMaxPacketSize);
|
||||||
|
+ else
|
||||||
|
+ /* Use maximum HCI Event size so the USB stack handles
|
||||||
|
+ * ZPL/short-transfer automatically.
|
||||||
|
+ */
|
||||||
|
+ size = HCI_MAX_EVENT_SIZE;
|
||||||
|
|
||||||
|
buf = kmalloc(size, mem_flags);
|
||||||
|
if (!buf) {
|
|
@ -8,4 +8,5 @@ rec {
|
||||||
emmet-cli = pkgs.callPackage ./emmet-cli.nix { };
|
emmet-cli = pkgs.callPackage ./emmet-cli.nix { };
|
||||||
material-wifi-icons = pkgs.callPackage ./material-wifi-icons.nix { };
|
material-wifi-icons = pkgs.callPackage ./material-wifi-icons.nix { };
|
||||||
gnome-pass-search-provider = pkgs.callPackage ./gnome-pass-search-provider.nix { };
|
gnome-pass-search-provider = pkgs.callPackage ./gnome-pass-search-provider.nix { };
|
||||||
|
linux-bluetooth = pkgs.callPackage ./linux-bluetooth.nix { };
|
||||||
}
|
}
|
||||||
|
|
47
pkgs/linux-bluetooth.nix
Normal file
47
pkgs/linux-bluetooth.nix
Normal file
|
@ -0,0 +1,47 @@
|
||||||
|
{
|
||||||
|
pkgs,
|
||||||
|
lib,
|
||||||
|
kernel ? pkgs.linuxPackages_latest.kernel,
|
||||||
|
patches ? [ ],
|
||||||
|
}:
|
||||||
|
|
||||||
|
pkgs.stdenv.mkDerivation {
|
||||||
|
pname = "bluetooth-kernel-module";
|
||||||
|
inherit (kernel)
|
||||||
|
src
|
||||||
|
version
|
||||||
|
postPatch
|
||||||
|
nativeBuildInputs
|
||||||
|
;
|
||||||
|
|
||||||
|
inherit patches;
|
||||||
|
|
||||||
|
kernel_dev = kernel.dev;
|
||||||
|
kernelVersion = kernel.modDirVersion;
|
||||||
|
|
||||||
|
modulePath = "drivers/bluetooth";
|
||||||
|
|
||||||
|
buildPhase = ''
|
||||||
|
BUILT_KERNEL=$kernel_dev/lib/modules/$kernelVersion/build
|
||||||
|
|
||||||
|
cp $BUILT_KERNEL/Module.symvers .
|
||||||
|
cp $BUILT_KERNEL/.config .
|
||||||
|
cp $kernel_dev/vmlinux .
|
||||||
|
|
||||||
|
make "-j$NIX_BUILD_CORES" modules_prepare
|
||||||
|
make "-j$NIX_BUILD_CORES" M=$modulePath modules
|
||||||
|
'';
|
||||||
|
|
||||||
|
installPhase = ''
|
||||||
|
make \
|
||||||
|
INSTALL_MOD_PATH="$out" \
|
||||||
|
XZ="xz -T$NIX_BUILD_CORES" \
|
||||||
|
M="$modulePath" \
|
||||||
|
modules_install
|
||||||
|
'';
|
||||||
|
|
||||||
|
meta = {
|
||||||
|
description = "Bluetooth kernel module";
|
||||||
|
license = lib.licenses.gpl3;
|
||||||
|
};
|
||||||
|
}
|
Loading…
Reference in a new issue