mirror of
				https://github.com/NixOS/nixos-hardware.git
				synced 2025-11-04 17:27:14 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			123 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
			
		
		
	
	
			123 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
{ config, lib, pkgs, ... }:
 | 
						|
 | 
						|
let 
 | 
						|
  cfg = config.hardware.raspberry-pi."4".poe-hat;
 | 
						|
in {
 | 
						|
  options.hardware = {
 | 
						|
    raspberry-pi."4".poe-hat = {
 | 
						|
      enable = lib.mkEnableOption ''
 | 
						|
        support for the Raspberry Pi POE Hat.
 | 
						|
      '';
 | 
						|
    };
 | 
						|
  };
 | 
						|
 | 
						|
  config = lib.mkIf cfg.enable {
 | 
						|
    # Configure for modesetting in the device tree
 | 
						|
    hardware.deviceTree = {
 | 
						|
      overlays = [
 | 
						|
        # Equivalent to: https://github.com/raspberrypi/linux/blob/rpi-5.10.y/arch/arm/boot/dts/overlays/rpi-poe-overlay.dts
 | 
						|
        {
 | 
						|
          name = "rpi-poe-overlay";
 | 
						|
          dtsText = ''
 | 
						|
            /*
 | 
						|
            * Overlay for the Raspberry Pi POE HAT.
 | 
						|
            */
 | 
						|
            /dts-v1/;
 | 
						|
            /plugin/;
 | 
						|
 | 
						|
            / {
 | 
						|
              compatible = "brcm,bcm2711";
 | 
						|
 | 
						|
              fragment@0 {
 | 
						|
                target-path = "/";
 | 
						|
                __overlay__ {
 | 
						|
                  fan0: rpi-poe-fan@0 {
 | 
						|
                    compatible = "raspberrypi,rpi-poe-fan";
 | 
						|
                    firmware = <&firmware>;
 | 
						|
                    cooling-min-state = <0>;
 | 
						|
                    cooling-max-state = <4>;
 | 
						|
                    #cooling-cells = <2>;
 | 
						|
                    cooling-levels = <0 1 10 100 255>;
 | 
						|
                    status = "okay";
 | 
						|
                  };
 | 
						|
                };
 | 
						|
              };
 | 
						|
 | 
						|
              fragment@1 {
 | 
						|
                target = <&cpu_thermal>;
 | 
						|
                __overlay__ {
 | 
						|
                  trips {
 | 
						|
                    trip0: trip0 {
 | 
						|
                      temperature = <40000>;
 | 
						|
                      hysteresis = <2000>;
 | 
						|
                      type = "active";
 | 
						|
                    };
 | 
						|
                    trip1: trip1 {
 | 
						|
                      temperature = <45000>;
 | 
						|
                      hysteresis = <2000>;
 | 
						|
                      type = "active";
 | 
						|
                    };
 | 
						|
                    trip2: trip2 {
 | 
						|
                      temperature = <50000>;
 | 
						|
                      hysteresis = <2000>;
 | 
						|
                      type = "active";
 | 
						|
                    };
 | 
						|
                    trip3: trip3 {
 | 
						|
                      temperature = <55000>;
 | 
						|
                      hysteresis = <5000>;
 | 
						|
                      type = "active";
 | 
						|
                    };
 | 
						|
                  };
 | 
						|
                  cooling-maps {
 | 
						|
                    map0 {
 | 
						|
                      trip = <&trip0>;
 | 
						|
                      cooling-device = <&fan0 0 1>;
 | 
						|
                    };
 | 
						|
                    map1 {
 | 
						|
                      trip = <&trip1>;
 | 
						|
                      cooling-device = <&fan0 1 2>;
 | 
						|
                    };
 | 
						|
                    map2 {
 | 
						|
                      trip = <&trip2>;
 | 
						|
                      cooling-device = <&fan0 2 3>;
 | 
						|
                    };
 | 
						|
                    map3 {
 | 
						|
                      trip = <&trip3>;
 | 
						|
                      cooling-device = <&fan0 3 4>;
 | 
						|
                    };
 | 
						|
                  };
 | 
						|
                };
 | 
						|
              };
 | 
						|
 | 
						|
              fragment@2 {
 | 
						|
                target-path = "/__overrides__";
 | 
						|
                __overlay__ {
 | 
						|
                  poe_fan_temp0 =		<&trip0>,"temperature:0";
 | 
						|
                  poe_fan_temp0_hyst =	<&trip0>,"hysteresis:0";
 | 
						|
                  poe_fan_temp1 =		<&trip1>,"temperature:0";
 | 
						|
                  poe_fan_temp1_hyst =	<&trip1>,"hysteresis:0";
 | 
						|
                  poe_fan_temp2 =		<&trip2>,"temperature:0";
 | 
						|
                  poe_fan_temp2_hyst =	<&trip2>,"hysteresis:0";
 | 
						|
                  poe_fan_temp3 =		<&trip3>,"temperature:0";
 | 
						|
                  poe_fan_temp3_hyst =	<&trip3>,"hysteresis:0";
 | 
						|
                };
 | 
						|
              };
 | 
						|
 | 
						|
              __overrides__ {
 | 
						|
                poe_fan_temp0 =		<&trip0>,"temperature:0";
 | 
						|
                poe_fan_temp0_hyst =	<&trip0>,"hysteresis:0";
 | 
						|
                poe_fan_temp1 =		<&trip1>,"temperature:0";
 | 
						|
                poe_fan_temp1_hyst =	<&trip1>,"hysteresis:0";
 | 
						|
                poe_fan_temp2 =		<&trip2>,"temperature:0";
 | 
						|
                poe_fan_temp2_hyst =	<&trip2>,"hysteresis:0";
 | 
						|
                poe_fan_temp3 =		<&trip3>,"temperature:0";
 | 
						|
                poe_fan_temp3_hyst =	<&trip3>,"hysteresis:0";
 | 
						|
              };
 | 
						|
            };
 | 
						|
          '';
 | 
						|
        }
 | 
						|
      ];
 | 
						|
    };
 | 
						|
  };
 | 
						|
}
 |