From 6ac71f593d7c7f81831372cdeefa96236ffb7cb1 Mon Sep 17 00:00:00 2001 From: Eduard Bopp Date: Sun, 20 Dec 2020 14:36:07 +0100 Subject: [PATCH 1/2] linux: backport support for RTL8761b to 5.4 --- pkgs/os-specific/linux/kernel/patches.nix | 7 ++++ .../linux/kernel/rtl8761b-support.patch | 33 +++++++++++++++++++ pkgs/top-level/all-packages.nix | 1 + 3 files changed, 41 insertions(+) create mode 100644 pkgs/os-specific/linux/kernel/rtl8761b-support.patch diff --git a/pkgs/os-specific/linux/kernel/patches.nix b/pkgs/os-specific/linux/kernel/patches.nix index e2805c315b8..23c01d04192 100644 --- a/pkgs/os-specific/linux/kernel/patches.nix +++ b/pkgs/os-specific/linux/kernel/patches.nix @@ -76,6 +76,13 @@ }; }; + # Adapted for Linux 5.4 from: + # https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=04896832c94aae4842100cafb8d3a73e1bed3a45 + rtl8761b_support = + { name = "rtl8761b-support"; + patch = ./rtl8761b-support.patch; + }; + export_kernel_fpu_functions = { "4.14" = { name = "export_kernel_fpu_functions"; diff --git a/pkgs/os-specific/linux/kernel/rtl8761b-support.patch b/pkgs/os-specific/linux/kernel/rtl8761b-support.patch new file mode 100644 index 00000000000..b6d80d5bc8d --- /dev/null +++ b/pkgs/os-specific/linux/kernel/rtl8761b-support.patch @@ -0,0 +1,33 @@ +diff --git a/drivers/bluetooth/btrtl.c b/drivers/bluetooth/btrtl.c +index 67f4bc21e7c5..3a9afc905f24 100644 +--- a/drivers/bluetooth/btrtl.c ++++ b/drivers/bluetooth/btrtl.c +@@ -130,12 +130,19 @@ static const struct id_table ic_id_table[] = { + .cfg_name = "rtl_bt/rtl8821c_config" }, + + /* 8761A */ +- { IC_MATCH_FL_LMPSUBV, RTL_ROM_LMP_8761A, 0x0, ++ { IC_INFO(RTL_ROM_LMP_8761A, 0xa), + .config_needed = false, + .has_rom_version = true, + .fw_name = "rtl_bt/rtl8761a_fw.bin", + .cfg_name = "rtl_bt/rtl8761a_config" }, + ++ /* 8761B */ ++ { IC_INFO(RTL_ROM_LMP_8761A, 0xb), ++ .config_needed = false, ++ .has_rom_version = true, ++ .fw_name = "rtl_bt/rtl8761b_fw.bin", ++ .cfg_name = "rtl_bt/rtl8761b_config" }, ++ + /* 8822C with USB interface */ + { IC_INFO(RTL_ROM_LMP_8822B, 0xc), + .config_needed = false, +@@ -251,6 +258,7 @@ static int rtlbt_parse_firmware(struct hci_dev *hdev, + { RTL_ROM_LMP_8723B, 9 }, /* 8723D */ + { RTL_ROM_LMP_8821A, 10 }, /* 8821C */ + { RTL_ROM_LMP_8822B, 13 }, /* 8822C */ ++ { RTL_ROM_LMP_8761A, 14 }, /* 8761B */ + }; + + min_size = sizeof(struct rtl_epatch_header) + sizeof(extension_sig) + 3; diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 4cdf4ec1650..a196c24270a 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -18378,6 +18378,7 @@ in kernelPatches = [ kernelPatches.bridge_stp_helper kernelPatches.request_key_helper + kernelPatches.rtl8761b_support kernelPatches.export_kernel_fpu_functions."5.3" ]; }; From 81f4bca15c760a15bea266e8f9173d418c4455aa Mon Sep 17 00:00:00 2001 From: Eduard Bopp Date: Sun, 20 Dec 2020 16:25:55 +0100 Subject: [PATCH 2/2] rtl8761b-firmware: init at rtk1395 Also included the firmware under enableRedistributableFirmware. --- nixos/modules/hardware/all-firmware.nix | 1 + .../firmware/rtl8761b-firmware/default.nix | 29 +++++++++++++++++++ pkgs/top-level/all-packages.nix | 2 ++ 3 files changed, 32 insertions(+) create mode 100644 pkgs/os-specific/linux/firmware/rtl8761b-firmware/default.nix diff --git a/nixos/modules/hardware/all-firmware.nix b/nixos/modules/hardware/all-firmware.nix index b07edb0f6ac..8cf3e5633dc 100644 --- a/nixos/modules/hardware/all-firmware.nix +++ b/nixos/modules/hardware/all-firmware.nix @@ -48,6 +48,7 @@ in { rtl8192su-firmware rt5677-firmware rtl8723bs-firmware + rtl8761b-firmware rtlwifi_new-firmware zd1211fw alsa-firmware diff --git a/pkgs/os-specific/linux/firmware/rtl8761b-firmware/default.nix b/pkgs/os-specific/linux/firmware/rtl8761b-firmware/default.nix new file mode 100644 index 00000000000..4418722c7c4 --- /dev/null +++ b/pkgs/os-specific/linux/firmware/rtl8761b-firmware/default.nix @@ -0,0 +1,29 @@ +{ stdenv, fetchFromGitHub }: + +stdenv.mkDerivation { + name = "rtl8761b-firmware"; + + src = fetchFromGitHub { + owner = "Realtek-OpenSource"; + repo = "android_hardware_realtek"; + rev = "rtk1395"; + sha256 = "sha256-vd9sZP7PGY+cmnqVty3sZibg01w8+UNinv8X85B+dzc="; + }; + + installPhase = '' + install -D -pm644 \ + bt/rtkbt/Firmware/BT/rtl8761b_fw \ + $out/lib/firmware/rtl_bt/rtl8761b_fw.bin + + install -D -pm644 \ + bt/rtkbt/Firmware/BT/rtl8761b_config \ + $out/lib/firmware/rtl_bt/rtl8761b_config.bin + ''; + + meta = with stdenv.lib; { + description = "Firmware for Realtek RTL8761b"; + license = licenses.unfreeRedistributableFirmware; + maintainers = with maintainers; [ edibopp ]; + platforms = with platforms; linux; + }; +} diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index a196c24270a..a557ab933da 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -19135,6 +19135,8 @@ in rtl8723bs-firmware = callPackage ../os-specific/linux/firmware/rtl8723bs-firmware { }; + rtl8761b-firmware = callPackage ../os-specific/linux/firmware/rtl8761b-firmware { }; + rtlwifi_new-firmware = callPackage ../os-specific/linux/firmware/rtlwifi_new-firmware { }; s3ql = callPackage ../tools/backup/s3ql { };