Merge pull request #1490 from mcdonc/mcdonc-rpi4-gpio

add optional config that makes lgpio and pigpio work
This commit is contained in:
Jörg Thalheim
2025-05-30 21:45:40 +02:00
committed by GitHub
2 changed files with 37 additions and 0 deletions

View File

@@ -8,6 +8,7 @@
./cpu-revision.nix
./digi-amp-plus.nix
./dwc2.nix
./gpio.nix
./i2c.nix
./leds.nix
./modesetting.nix

36
raspberry-pi/4/gpio.nix Normal file
View File

@@ -0,0 +1,36 @@
{ pkgs, lib, config, ... }:
{
options.hardware.raspberry-pi."4".gpio = {
enable = lib.mkOption {
type = lib.types.bool;
description =
"Enable udev rules and kernelParams that make lgpio and pigpio work";
default = false;
};
};
config = let
cfg = config.hardware.raspberry-pi."4".gpio;
in
lib.mkIf cfg.enable {
users.groups.gpio = lib.mkDefault { };
# the bit that matters to lgpio here is
# "${pkgs.coreutils}/bin/chgrp gpio /dev/%k && chmod 660 /dev/%k"
# see https://github.com/NixOS/nixpkgs/pull/352308
# sudo udevadm test --action=add /dev/gpiochip0 to test
# import lgpio; lgpio.gpiochip_open(0) should show "1" and not raise
# an exception
services.udev.extraRules = lib.mkBefore ''
KERNEL=="gpiomem", GROUP="gpio", MODE="0660"
SUBSYSTEM=="gpio", KERNEL=="gpiochip*", ACTION=="add", PROGRAM="${pkgs.bash}/bin/bash -c '${pkgs.coreutils}/bin/chgrp gpio /dev/%k && chmod 660 /dev/%k && ${pkgs.coreutils}/bin/chgrp -R gpio /sys/class/gpio && ${pkgs.coreutils}/bin/chmod -R g=u /sys/class/gpio'"
SUBSYSTEM=="gpio", ACTION=="add", PROGRAM="${pkgs.bash}/bin/bash -c '${pkgs.coreutils}/bin/chgrp -R gpio /sys%p && ${pkgs.coreutils}/bin/chmod -R g=u /sys%p'"
'';
boot.kernelParams = [
"iomem=relaxed" # for pigpiod
];
};
}