diff --git a/raspberry-pi/4/default.nix b/raspberry-pi/4/default.nix index 7d1bce4..fac4cc1 100644 --- a/raspberry-pi/4/default.nix +++ b/raspberry-pi/4/default.nix @@ -4,8 +4,7 @@ imports = [ ./audio.nix ./dwc2.nix - ./i2c0.nix - ./i2c1.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"; }) ]; + }; + }) + ]; +} diff --git a/raspberry-pi/4/i2c0.nix b/raspberry-pi/4/i2c0.nix deleted file mode 100644 index e4fa779..0000000 --- a/raspberry-pi/4/i2c0.nix +++ /dev/null @@ -1,25 +0,0 @@ -{ config, lib, pkgs, ... }: - -let - cfg = config.hardware.raspberry-pi."4".i2c0; - inherit (import ./overlay.nix) simple-pi4-overlay; -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. - ''; - }; - }; - - config = lib.mkIf cfg.enable { - hardware = { - i2c.enable = lib.mkDefault true; - deviceTree = { - overlays = [ (simple-pi4-overlay { target = "i2c0if"; status = "okay"; }) ]; - }; - }; - }; -} diff --git a/raspberry-pi/4/i2c1.nix b/raspberry-pi/4/i2c1.nix deleted file mode 100644 index 02d2623..0000000 --- a/raspberry-pi/4/i2c1.nix +++ /dev/null @@ -1,25 +0,0 @@ -{ config, lib, pkgs, ... }: - -let - cfg = config.hardware.raspberry-pi."4".i2c1; - inherit (import ./overlay.nix) simple-pi4-overlay; -in -{ - options.hardware = { - raspberry-pi."4".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 = lib.mkIf cfg.enable { - hardware = { - i2c.enable = lib.mkDefault true; - deviceTree = { - overlays = [ (simple-pi4-overlay { target = "i2c1"; status = "okay"; }) ]; - }; - }; - }; -} diff --git a/raspberry-pi/4/overlay.nix b/raspberry-pi/4/overlay.nix deleted file mode 100644 index d32e75f..0000000 --- a/raspberry-pi/4/overlay.nix +++ /dev/null @@ -1,18 +0,0 @@ -{ - simple-pi4-overlay = { target, status }: { - name = "${target}-${status}-overlay"; - dtsText = '' - /dts-v1/; - /plugin/; - / { - compatible = "brcm,bcm2711"; - fragment@0 { - target = <&${target}>; - __overlay__ { - status = "${status}"; - }; - }; - }; - ''; - }; -}