{ config, lib, ... }: let cfg = config.hardware.raspberry-pi."4".leds; in { options.hardware = { raspberry-pi."4".leds = { disable-eth = lib.mkEnableOption '' disable ethernet LEDs. ''; disable-act = lib.mkEnableOption '' disable activity LED. ''; disable-pwr = lib.mkEnableOption '' disable power LED. ''; }; }; # Adapted from: https://gist.github.com/SFrijters/206d2c09656affb04284f076c75a1969 config = lib.mkMerge [ (lib.mkIf cfg.disable-eth { hardware.deviceTree = { overlays = [ # https://github.com/raspberrypi/firmware/blob/master/boot/overlays/README # eth_led0 Set mode of LED0 - amber on Pi3B+ (default "1"), # green on Pi4 (default "0"). # The legal values are: # # Pi4 # # 0=Speed/Activity 1=Speed # 2=Flash activity 3=FDX # 4=Off 5=On # 6=Alt 7=Speed/Flash # 8=Link 9=Activity # # Debugging: # $ hexdump /proc/device-tree/scb/ethernet@7d580000/mdio@e14/ethernet-phy@1/led-modes { name = "disable-eth-leds"; filter = "*rpi-4-b*"; dtsText = '' /dts-v1/; /plugin/; /{ compatible = "raspberrypi,4-model-b"; fragment@0 { target = <&phy1>; __overlay__ { led-modes = <0x04 0x04>; }; }; }; ''; } ]; }; }) (lib.mkIf cfg.disable-act { hardware.deviceTree = { overlays = [ # Debugging: # $ hexdump /proc/device-tree/leds/led-act/gpios # $ cat /proc/device-tree/leds/led-act/linux,default-trigger { name = "disable-act-led"; filter = "*rpi-4-b*"; dtsText = '' /dts-v1/; /plugin/; /{ compatible = "raspberrypi,4-model-b"; fragment@0 { target = <&act_led>; __overlay__ { gpios = <&gpio 42 0>; /* first two values copied from bcm2711-rpi-4-b.dts */ linux,default-trigger = "none"; }; }; }; ''; } ]; }; }) (lib.mkIf cfg.disable-pwr { hardware.deviceTree = { overlays = [ # Debugging: # $ hexdump /proc/device-tree/leds/led-pwr/gpios # $ cat /proc/device-tree/leds/led-pwr/linux,default-trigger { name = "disable-pwr-led"; filter = "*rpi-4-b*"; dtsText = '' /dts-v1/; /plugin/; /{ compatible = "raspberrypi,4-model-b"; fragment@0 { target = <&pwr_led>; __overlay__ { gpios = <&expgpio 2 0>; /* first two values copied from bcm2711-rpi-4-b.dts */ linux,default-trigger = "default-on"; }; }; }; ''; } ]; }; }) ]; }