update kernel to 6.15 and use acer-wmi-ext module

This commit is contained in:
2025-08-10 04:18:21 +02:00
parent bb7ada0347
commit a2335f453a
5 changed files with 119 additions and 15 deletions
+14 -12
View File
@@ -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 = {
+57
View File
@@ -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;
};
}
+44
View File
@@ -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,
},
};