update kernel to 6.15 and use acer-wmi-ext module
This commit is contained in:
+3
-3
@@ -17,7 +17,7 @@ rec {
|
||||
|
||||
# Kernel
|
||||
# boot.initrd.availableKernelModules = [ "xhci_pci" "ahci" "usb_storage" "sd_mod" "rtsx_pci_sdmmc" ];
|
||||
boot.kernelPackages = pkgs.linuxKernel.packages.linux_6_12;
|
||||
boot.kernelPackages = pkgs.linuxKernel.packages.linux_6_15;
|
||||
|
||||
# Swap
|
||||
zramSwap = {
|
||||
@@ -96,11 +96,11 @@ rec {
|
||||
boot.extraModulePackages = [
|
||||
# Super ugly hack, for some reason it's not included in pkgs.linuxKernel.packages.linux_6_12
|
||||
# Despite being in overlays, something's not working
|
||||
(pkgs.linuxPackages.acer-wmi-battery.override {
|
||||
(pkgs.linuxPackages.acer-wmi-ext.override {
|
||||
kernel = boot.kernelPackages.kernel;
|
||||
})
|
||||
];
|
||||
boot.kernelModules = [ "acer-wmi-battery" ];
|
||||
boot.kernelModules = [ "acer-wmi-ext" ];
|
||||
|
||||
|
||||
# This value determines the NixOS release from which the default
|
||||
|
||||
@@ -12,6 +12,7 @@ self: super:
|
||||
# });
|
||||
# });
|
||||
linuxPackages = super.linuxPackages.extend (lpself: lpsuper: {
|
||||
acer-wmi-ext = lpsuper.callPackage ../pkgs/acer-wmi-ext {};
|
||||
acer-wmi-battery = lpsuper.callPackage ../pkgs/acer-wmi-battery {};
|
||||
});
|
||||
}
|
||||
@@ -19,24 +19,26 @@ stdenv.mkDerivation {
|
||||
|
||||
nativeBuildInputs = [ kernel.moduleBuildDependencies ];
|
||||
|
||||
makeFlags = kernel.makeFlags ++ [
|
||||
"INSTALL_MOD_PATH=$(out)"
|
||||
# Makefile provided in repo is useless, hardcoded paths, not using it
|
||||
|
||||
setSourceRoot = ''
|
||||
export sourceRoot=$(pwd)/source
|
||||
'';
|
||||
|
||||
makeFlags = [
|
||||
"-C"
|
||||
"${kernel.dev}/lib/modules/${kernel.modDirVersion}/build"
|
||||
"M=$(sourceRoot)"
|
||||
];
|
||||
|
||||
# Makefile provided in repo is useless, hardcoded paths, overwriting it
|
||||
patchPhase = ''
|
||||
cat > Makefile <<EOF
|
||||
obj-m += acer-wmi-battery.o
|
||||
|
||||
all:
|
||||
$(printf '\t')make -C ${kernel.dev}/lib/modules/${kernel.modDirVersion}/build M=\$(PWD) modules
|
||||
|
||||
modules_install:
|
||||
$(printf '\t')make -C ${kernel.dev}/lib/modules/${kernel.modDirVersion}/build M=\$(PWD) modules_install
|
||||
cat > Kbuild <<EOF
|
||||
obj-m := acer-wmi-battery.o
|
||||
EOF
|
||||
'';
|
||||
|
||||
buildFlags = [ "all" ];
|
||||
buildFlags = [ "modules" ];
|
||||
installFlags = [ "INSTALL_MOD_PATH=${placeholder "out"}" ];
|
||||
installTargets = [ "modules_install" ];
|
||||
|
||||
meta = {
|
||||
|
||||
@@ -0,0 +1,57 @@
|
||||
# Custom module for Acer WMI features, like battery charge limit and fan control
|
||||
{
|
||||
lib,
|
||||
stdenv,
|
||||
fetchFromGitHub,
|
||||
kernel
|
||||
}:
|
||||
|
||||
stdenv.mkDerivation {
|
||||
pname = "acer-wmi-ext";
|
||||
version = "0.0.0";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "TenSeventy7";
|
||||
repo = "acer-wmi-ext";
|
||||
rev = "78aaf9392e1fbdd62c3ec9944e9615505485ec04";
|
||||
sha256 = "sha256-AmhBnZiy7llYqHB9gD6T7lK4L2qhtl5pBWAf+H+V8hE=";
|
||||
};
|
||||
|
||||
nativeBuildInputs = [ kernel.moduleBuildDependencies ];
|
||||
|
||||
# Makefile provided in repo is useless, hardcoded paths, not using it
|
||||
|
||||
setSourceRoot = ''
|
||||
export sourceRoot=$(pwd)/source
|
||||
'';
|
||||
|
||||
makeFlags = [
|
||||
"-C"
|
||||
"${kernel.dev}/lib/modules/${kernel.modDirVersion}/build"
|
||||
"M=$(sourceRoot)"
|
||||
];
|
||||
|
||||
patchPhase = ''
|
||||
# Add support for Acer Swift 14 (SFG14-63) model
|
||||
# Using values found by playing with performance settings in acer's software on windows
|
||||
# https://github.com/hirschmann/nbfc/wiki/Probe-the-EC's-registers
|
||||
# Also, disable USB control because not sure, need to verify
|
||||
patch -p1 < ${./sfg14-63.patch}
|
||||
|
||||
# Create Kbuild file for module
|
||||
cat > Kbuild <<EOF
|
||||
obj-m := acer-wmi-ext.o
|
||||
EOF
|
||||
'';
|
||||
|
||||
buildFlags = [ "modules" ];
|
||||
installFlags = [ "INSTALL_MOD_PATH=${placeholder "out"}" ];
|
||||
installTargets = [ "modules_install" ];
|
||||
|
||||
meta = {
|
||||
description = "Acer WMI kernel module for battery charge limit and fan control";
|
||||
homepage = "https://github.com/TenSeventy7/acer-wmi-ext";
|
||||
license = lib.licenses.gpl2;
|
||||
platforms = lib.platforms.linux;
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,44 @@
|
||||
diff --git a/acer-wmi-ext.c b/acer-wmi-ext.c
|
||||
index 24112bf..7829c19 100644
|
||||
--- a/acer-wmi-ext.c
|
||||
+++ b/acer-wmi-ext.c
|
||||
@@ -69,9 +69,9 @@ struct set_battery_health_control_output {
|
||||
|
||||
enum battery_mode { HEALTH_MODE = 1, CALIBRATION_MODE = 2 };
|
||||
|
||||
-#define ACER_SYSTEM_CONTROL_MODE_EC_OFFSET 0x45
|
||||
+#define ACER_SYSTEM_CONTROL_MODE_EC_OFFSET 0x10
|
||||
enum system_control_mode {
|
||||
- SYSTEM_CONTROL_BALANCED = 1,
|
||||
+ SYSTEM_CONTROL_BALANCED = 0,
|
||||
SYSTEM_CONTROL_SILENT = 2,
|
||||
SYSTEM_CONTROL_PERFORMANCE = 3,
|
||||
};
|
||||
@@ -146,9 +146,9 @@ static struct quirk_entry quirk_unknown = {
|
||||
static struct quirk_entry quirk_acer_system_control_mode = {
|
||||
.system_control_mode = 1,
|
||||
};
|
||||
-static struct quirk_entry quirk_acer_sfg174_73 = {
|
||||
+static struct quirk_entry quirk_acer_sfg14_63 = {
|
||||
.system_control_mode = 1, // Enable system control mode for this model
|
||||
- .usb_charge_mode = 1, // Enable USB charge mode for this model
|
||||
+ .usb_charge_mode = 0, // Disable USB charge mode for this model
|
||||
};
|
||||
|
||||
/*
|
||||
@@ -165,12 +165,12 @@ static int __init dmi_matched(const struct dmi_system_id *dmi)
|
||||
static const struct dmi_system_id acer_quirks[] __initconst = {
|
||||
{
|
||||
.callback = dmi_matched,
|
||||
- .ident = "Acer Swift SFG14-73",
|
||||
+ .ident = "Acer Swift SFG14-63",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
|
||||
- DMI_MATCH(DMI_PRODUCT_NAME, "Swift SFG14-73"),
|
||||
+ DMI_MATCH(DMI_PRODUCT_NAME, "Swift SFG14-63"),
|
||||
},
|
||||
- .driver_data = &quirk_acer_sfg174_73,
|
||||
+ .driver_data = &quirk_acer_sfg14_63,
|
||||
},
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user