mirror of
https://github.com/NixOS/nixos-hardware
synced 2024-11-23 03:19:42 +01:00
framework: refactor kmod for improved AMD support
Changes several aspects of framework-laptop-kmod support: - default value has been changed to true when NixOS >= 24.05 and linux kernel >=6.10, and false otherwise - adds required patch for framework AMD enablement when kernel <6.10 - add README section describing usage
This commit is contained in:
parent
ecfcd787f3
commit
f0dedf30e0
2 changed files with 45 additions and 9 deletions
|
@ -51,6 +51,17 @@ For the Framework 13 laptops, there are common configuration modules available u
|
|||
including some modules specific to AMD- or Intel-based laptops. By preference, there will already be a specialised
|
||||
module for your model's configuration. Otherwise, it can be added alongside the existing modules.
|
||||
|
||||
## OS integration
|
||||
|
||||
`hardware.framework.enableKmod` enables the [community-created Framework kernel
|
||||
module](https://github.com/DHowett/framework-laptop-kmod) which exposes EC functionality like battery charge limit,
|
||||
privacy switches, and system LEDs as standard driver interfaces. This enables, for example, configuring the charge limit
|
||||
using the KDE settings GUI. The option is enabled by default when NixOS `>= 24.05` and linux kernel version `>= 6.10`.
|
||||
|
||||
On AMD Framework 13 and 16, before kernel 6.10, additional kernel patches are required for the kernel module to function
|
||||
properly. Manually setting `hardware.framework.enableKmod = true` will apply the patches, requiring a kernel
|
||||
recompilation.
|
||||
|
||||
## Support Tools
|
||||
|
||||
### fw-ectool
|
||||
|
|
|
@ -1,17 +1,42 @@
|
|||
{ config, lib, ... }:
|
||||
{
|
||||
options.hardware.framework.enableKmod = lib.mkEnableOption
|
||||
{ config, lib, pkgs, ... }:
|
||||
let
|
||||
kernel_version_compatible = lib.versionAtLeast config.boot.kernelPackages.kernel.version "6.10";
|
||||
in {
|
||||
options.hardware.framework.enableKmod = (lib.mkEnableOption
|
||||
"Enable the community created Framework kernel module that allows interacting with the embedded controller from sysfs."
|
||||
// {
|
||||
# Enable by default if on new enough version of NixOS
|
||||
default = (lib.versionAtLeast (lib.versions.majorMinor lib.version) "24.05");
|
||||
) // {
|
||||
# enable by default on NixOS >= 24.05 and kernel >= 6.10
|
||||
default = lib.and
|
||||
(lib.versionAtLeast (lib.versions.majorMinor lib.version) "24.05")
|
||||
kernel_version_compatible;
|
||||
};
|
||||
|
||||
config = lib.mkIf config.hardware.framework.enableKmod {
|
||||
boot.extraModulePackages = with config.boot.kernelPackages; [
|
||||
|
||||
config.boot = lib.mkIf config.hardware.framework.enableKmod {
|
||||
extraModulePackages = with config.boot.kernelPackages; [
|
||||
framework-laptop-kmod
|
||||
];
|
||||
|
||||
# https://github.com/DHowett/framework-laptop-kmod?tab=readme-ov-file#usage
|
||||
boot.kernelModules = [ "cros_ec" "cros_ec_lpcs" ];
|
||||
kernelModules = [ "cros_ec" "cros_ec_lpcs" ];
|
||||
|
||||
# add required patch if enabled on kernel <6.10
|
||||
kernelPatches = lib.mkIf (!kernel_version_compatible) [
|
||||
rec {
|
||||
name = "platform/chrome: cros_ec_lpc: add support for AMD Framework Laptops";
|
||||
msgid = "20240403004713.130365-1-dustin@howett.net";
|
||||
version = "3";
|
||||
hash = "sha256-aQSyys8CMzlj9EdNhg8vtp76fg1qEwUVeJL0E+8w5HU=";
|
||||
patch = pkgs.runCommandLocal "patch-${msgid}" {
|
||||
nativeBuildInputs = with pkgs; [ b4 git cacert ];
|
||||
SSL_CERT_FILE = "${pkgs.cacert}/etc/ssl/certs/ca-bundle.crt";
|
||||
|
||||
outputHash = hash;
|
||||
} ''
|
||||
export HOME="$TMP"
|
||||
PYTHONHASHSEED=0 ${pkgs.b4}/bin/b4 -n am -C -T -v ${version} -o- "${msgid}" > "$out"
|
||||
'';
|
||||
}
|
||||
];
|
||||
};
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue