mirror of
				https://github.com/NixOS/nixos-hardware.git
				synced 2025-11-04 17:27:14 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			76 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
			
		
		
	
	
			76 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
{ config, lib, ... }:
 | 
						|
 | 
						|
let
 | 
						|
  cfg = config.hardware.raspberry-pi."4";
 | 
						|
  optionalProperty = name: value: lib.optionalString (value != null) "${name} = <${builtins.toString value}>;";
 | 
						|
  simple-overlay = { target, status, frequency }: {
 | 
						|
    name = "${target}-${status}-overlay";
 | 
						|
    dtsText = ''
 | 
						|
      /dts-v1/;
 | 
						|
      /plugin/;
 | 
						|
      / {
 | 
						|
        compatible = "brcm,bcm2711";
 | 
						|
        fragment@0 {
 | 
						|
          target = <&${target}>;
 | 
						|
          __overlay__ {
 | 
						|
            status = "${status}";
 | 
						|
            ${optionalProperty "clock-frequency" frequency}
 | 
						|
          };
 | 
						|
        };
 | 
						|
      };
 | 
						|
    '';
 | 
						|
  };
 | 
						|
in
 | 
						|
{
 | 
						|
  options.hardware.raspberry-pi."4" = {
 | 
						|
    i2c0 = {
 | 
						|
      enable = lib.mkEnableOption ''
 | 
						|
        Turn on the VideoCore I2C bus (maps to /dev/i2c-22) and enable access from the i2c group.
 | 
						|
        After a reboot, i2c-tools (e.g. i2cdetect -F 22) should work for root or any user in i2c.
 | 
						|
      '';
 | 
						|
      frequency = lib.mkOption {
 | 
						|
        type = lib.types.nullOr lib.types.int;
 | 
						|
        default = null;
 | 
						|
        description = ''
 | 
						|
          interface clock-frequency
 | 
						|
        '';
 | 
						|
      };
 | 
						|
    };
 | 
						|
    i2c1 = {
 | 
						|
      enable = lib.mkEnableOption ''
 | 
						|
        Turn on the ARM I2C bus (/dev/i2c-1 on GPIO pins 3 and 5) and enable access from the i2c group.
 | 
						|
        After a reboot, i2c-tools (e.g. i2cdetect -F 1) should work for root or any user in i2c.
 | 
						|
      '';
 | 
						|
      frequency = lib.mkOption {
 | 
						|
        type = lib.types.nullOr lib.types.int;
 | 
						|
        default = null;
 | 
						|
        description = ''
 | 
						|
          interface clock-frequency
 | 
						|
        '';
 | 
						|
      };
 | 
						|
    };
 | 
						|
  };
 | 
						|
  config.hardware = lib.mkMerge [
 | 
						|
    (lib.mkIf cfg.i2c0.enable {
 | 
						|
      i2c.enable = lib.mkDefault true;
 | 
						|
      deviceTree = {
 | 
						|
        overlays = [ (simple-overlay {
 | 
						|
          target = "i2c0if";
 | 
						|
          status = "okay";
 | 
						|
          inherit (cfg.i2c0) frequency;
 | 
						|
        }) ];
 | 
						|
      };
 | 
						|
    })
 | 
						|
    (lib.mkIf cfg.i2c1.enable {
 | 
						|
      i2c.enable = lib.mkDefault true;
 | 
						|
      deviceTree = {
 | 
						|
        overlays = [ (simple-overlay {
 | 
						|
          target = "i2c1";
 | 
						|
          status = "okay";
 | 
						|
          inherit (cfg.i2c1) frequency;
 | 
						|
        }) ];
 | 
						|
      };
 | 
						|
    })
 | 
						|
  ];
 | 
						|
}
 |