diff --git a/raspberry-pi/4/default.nix b/raspberry-pi/4/default.nix index 2fe97e1..fac4cc1 100644 --- a/raspberry-pi/4/default.nix +++ b/raspberry-pi/4/default.nix @@ -4,6 +4,7 @@ imports = [ ./audio.nix ./dwc2.nix + ./i2c.nix ./modesetting.nix ./poe-hat.nix ./tc358743.nix diff --git a/raspberry-pi/4/i2c.nix b/raspberry-pi/4/i2c.nix new file mode 100644 index 0000000..93c1c6d --- /dev/null +++ b/raspberry-pi/4/i2c.nix @@ -0,0 +1,47 @@ +{ config, lib, pkgs, ... }: + +let + cfg = config.hardware.raspberry-pi."4"; + simple-overlay = { target, status }: { + name = "${target}-${status}-overlay"; + dtsText = '' + /dts-v1/; + /plugin/; + / { + compatible = "brcm,bcm2711"; + fragment@0 { + target = <&${target}>; + __overlay__ { + status = "${status}"; + }; + }; + }; + ''; + }; +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. + ''; + 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. + ''; + }; + config.hardware = lib.mkMerge [ + (lib.mkIf cfg.i2c0.enable { + i2c.enable = lib.mkDefault true; + deviceTree = { + overlays = [ (simple-overlay { target = "i2c0if"; status = "okay"; }) ]; + }; + }) + (lib.mkIf cfg.i2c1.enable { + i2c.enable = lib.mkDefault true; + deviceTree = { + overlays = [ (simple-overlay { target = "i2c1"; status = "okay"; }) ]; + }; + }) + ]; +}