monolith: fix bluetooth dongle
This commit is contained in:
		
							parent
							
								
									a4ebb60595
								
							
						
					
					
						commit
						9c8bc05856
					
				
					 4 changed files with 80 additions and 1 deletions
				
			
		| 
						 | 
				
			
			@ -38,7 +38,14 @@ in
 | 
			
		|||
 | 
			
		||||
  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.kernelModules = [
 | 
			
		||||
    "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 { };
 | 
			
		||||
  material-wifi-icons = pkgs.callPackage ./material-wifi-icons.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…
	
	Add table
		Add a link
		
	
		Reference in a new issue