summary refs log tree commit diff
path: root/pkgs/os-specific
diff options
context:
space:
mode:
author牧瀬紅莉栖 <MakiseKurisu@users.noreply.github.com>2023-03-06 15:59:57 +0800
committer牧瀬紅莉栖 <MakiseKurisu@users.noreply.github.com>2023-03-18 14:20:28 +0800
commit924887fec4b1eb69d3c8c166d4730caa51444454 (patch)
tree2f7549c4ffc8d3b21975965d46446f44650c821e /pkgs/os-specific
parent3c4ae7bde99db0d585e40bd8942ae67d4edc3d25 (diff)
downloadnixpkgs-924887fec4b1eb69d3c8c166d4730caa51444454.tar
nixpkgs-924887fec4b1eb69d3c8c166d4730caa51444454.tar.gz
nixpkgs-924887fec4b1eb69d3c8c166d4730caa51444454.tar.bz2
nixpkgs-924887fec4b1eb69d3c8c166d4730caa51444454.tar.lz
nixpkgs-924887fec4b1eb69d3c8c166d4730caa51444454.tar.xz
nixpkgs-924887fec4b1eb69d3c8c166d4730caa51444454.tar.zst
nixpkgs-924887fec4b1eb69d3c8c166d4730caa51444454.zip
ch9344: init at 1.9
Diffstat (limited to 'pkgs/os-specific')
-rw-r--r--pkgs/os-specific/linux/ch9344/default.nix48
-rw-r--r--pkgs/os-specific/linux/ch9344/fix-incompatible-pointer-types.patch22
2 files changed, 70 insertions, 0 deletions
diff --git a/pkgs/os-specific/linux/ch9344/default.nix b/pkgs/os-specific/linux/ch9344/default.nix
new file mode 100644
index 00000000000..25d7ecf0255
--- /dev/null
+++ b/pkgs/os-specific/linux/ch9344/default.nix
@@ -0,0 +1,48 @@
+{ stdenv, lib, fetchzip, kernel }:
+
+stdenv.mkDerivation rec {
+  pname = "ch9344";
+  version = "1.9";
+
+  src = fetchzip {
+    name = "CH9344SER_LINUX.zip";
+    url = "https://www.wch.cn/downloads/file/386.html#CH9344SER_LINUX.zip";
+    hash = "sha256-g55ftAfjKKlUFzGhI1a/O7Eqbz6rkGf1vWuEJjBZxBE=";
+  };
+
+  patches = lib.optionals (lib.versionAtLeast kernel.modDirVersion "6.1") [
+    # https://github.com/torvalds/linux/commit/a8c11c1520347be74b02312d10ef686b01b525f1
+    ./fix-incompatible-pointer-types.patch
+  ];
+
+  sourceRoot = "${src.name}/driver";
+  hardeningDisable = [ "pic" ];
+  nativeBuildInputs = kernel.moduleBuildDependencies;
+
+  preBuild = ''
+    substituteInPlace Makefile --replace "KERNELDIR :=" "KERNELDIR ?="
+  '';
+
+  makeFlags = [
+    "KERNELDIR=${kernel.dev}/lib/modules/${kernel.modDirVersion}/build"
+  ];
+
+  installPhase = ''
+    runHook preInstall
+    install -D ch9344.ko $out/lib/modules/${kernel.modDirVersion}/usb/serial/ch9344.ko
+    runHook postInstall
+  '';
+
+  meta = with lib; {
+    homepage = "http://www.wch-ic.com/";
+    downloadPage = "https://www.wch.cn/downloads/CH9344SER_LINUX_ZIP.html";
+    description = "WCH CH9344/CH348 UART driver";
+    longDescription = ''
+      A kernel module for WinChipHead CH9344/CH348 USB To Multi Serial Ports controller.
+    '';
+    # Archive contains no license.
+    license = licenses.unfree;
+    platforms = platforms.linux;
+    maintainers = with maintainers; [ MakiseKurisu ];
+  };
+}
diff --git a/pkgs/os-specific/linux/ch9344/fix-incompatible-pointer-types.patch b/pkgs/os-specific/linux/ch9344/fix-incompatible-pointer-types.patch
new file mode 100644
index 00000000000..31088538733
--- /dev/null
+++ b/pkgs/os-specific/linux/ch9344/fix-incompatible-pointer-types.patch
@@ -0,0 +1,22 @@
+diff --git a/ch9344.c b/ch9344.c
+index 1e37293..a16af82 100644
+--- a/ch9344.c
++++ b/ch9344.c
+@@ -79,7 +79,7 @@ static DEFINE_IDR(ch9344_minors);
+ static DEFINE_MUTEX(ch9344_minors_lock);
+ 
+ static void ch9344_tty_set_termios(struct tty_struct *tty,
+-                                   struct ktermios *termios_old);
++                                   const struct ktermios *termios_old);
+ 
+ static int ch9344_get_portnum(int index);
+ 
+@@ -1597,7 +1597,7 @@ u8 cal_recv_tmt(__le32 bd)
+ }
+ 
+ static void ch9344_tty_set_termios(struct tty_struct *tty,
+-                                   struct ktermios *termios_old)
++                                   const struct ktermios *termios_old)
+ {
+     struct ch9344 *ch9344 = tty->driver_data;
+     struct ktermios *termios = &tty->termios;