update kernel to 6.15 and use acer-wmi-ext module
This commit is contained in:
+3
-3
@@ -17,7 +17,7 @@ rec {
|
|||||||
|
|
||||||
# Kernel
|
# Kernel
|
||||||
# boot.initrd.availableKernelModules = [ "xhci_pci" "ahci" "usb_storage" "sd_mod" "rtsx_pci_sdmmc" ];
|
# 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
|
# Swap
|
||||||
zramSwap = {
|
zramSwap = {
|
||||||
@@ -96,11 +96,11 @@ rec {
|
|||||||
boot.extraModulePackages = [
|
boot.extraModulePackages = [
|
||||||
# Super ugly hack, for some reason it's not included in pkgs.linuxKernel.packages.linux_6_12
|
# 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
|
# Despite being in overlays, something's not working
|
||||||
(pkgs.linuxPackages.acer-wmi-battery.override {
|
(pkgs.linuxPackages.acer-wmi-ext.override {
|
||||||
kernel = boot.kernelPackages.kernel;
|
kernel = boot.kernelPackages.kernel;
|
||||||
})
|
})
|
||||||
];
|
];
|
||||||
boot.kernelModules = [ "acer-wmi-battery" ];
|
boot.kernelModules = [ "acer-wmi-ext" ];
|
||||||
|
|
||||||
|
|
||||||
# This value determines the NixOS release from which the default
|
# This value determines the NixOS release from which the default
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ self: super:
|
|||||||
# });
|
# });
|
||||||
# });
|
# });
|
||||||
linuxPackages = super.linuxPackages.extend (lpself: lpsuper: {
|
linuxPackages = super.linuxPackages.extend (lpself: lpsuper: {
|
||||||
|
acer-wmi-ext = lpsuper.callPackage ../pkgs/acer-wmi-ext {};
|
||||||
acer-wmi-battery = lpsuper.callPackage ../pkgs/acer-wmi-battery {};
|
acer-wmi-battery = lpsuper.callPackage ../pkgs/acer-wmi-battery {};
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -19,24 +19,26 @@ stdenv.mkDerivation {
|
|||||||
|
|
||||||
nativeBuildInputs = [ kernel.moduleBuildDependencies ];
|
nativeBuildInputs = [ kernel.moduleBuildDependencies ];
|
||||||
|
|
||||||
makeFlags = kernel.makeFlags ++ [
|
# Makefile provided in repo is useless, hardcoded paths, not using it
|
||||||
"INSTALL_MOD_PATH=$(out)"
|
|
||||||
|
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 = ''
|
patchPhase = ''
|
||||||
cat > Makefile <<EOF
|
cat > Kbuild <<EOF
|
||||||
obj-m += acer-wmi-battery.o
|
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
|
|
||||||
EOF
|
EOF
|
||||||
'';
|
'';
|
||||||
|
|
||||||
buildFlags = [ "all" ];
|
buildFlags = [ "modules" ];
|
||||||
|
installFlags = [ "INSTALL_MOD_PATH=${placeholder "out"}" ];
|
||||||
installTargets = [ "modules_install" ];
|
installTargets = [ "modules_install" ];
|
||||||
|
|
||||||
meta = {
|
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