1
0
Fork 0
mirror of https://github.com/NixOS/nixos-hardware synced 2024-11-26 21:09:42 +01:00
nixos-hardware/raspberry-pi/4/tc358743.nix
2021-05-30 20:27:13 +00:00

211 lines
4.8 KiB
Nix

{ config, lib, ... }:
let
cfg = config.hardware.raspberry-pi."4".tc358743;
in
{
options.hardware = {
raspberry-pi."4".tc358743 = {
enable = lib.mkEnableOption ''
Enable support for the Toshiba TC358743 HDMI-to-CSI-2 converter.
This can be tested with a plugged in converter device and for example
running ustreamer (which starts webservice providing a camera stream):
''${pkgs.ustreamer}/bin/ustreamer --persistent --dv-timings
'';
};
};
config = lib.mkIf cfg.enable {
hardware.deviceTree.overlays = [
{
name = "tc358743-overlay";
dtsText = ''
/dts-v1/;
/ {
compatible = "brcm,bcm2711";
fragment@0 {
target = <0xffffffff>;
__overlay__ {
#address-cells = <0x01>;
#size-cells = <0x00>;
status = "okay";
tc358743@0f {
compatible = "toshiba,tc358743";
reg = <0x0f>;
status = "okay";
clocks = <0x01>;
clock-names = "refclk";
port {
endpoint {
remote-endpoint = <0x02>;
clock-lanes = <0x00>;
clock-noncontinuous;
link-frequencies = <0x00 0x1cf7c580>;
phandle = <0x03>;
};
};
};
};
};
fragment@1 {
target = <0xffffffff>;
__overlay__ {
status = "okay";
port {
endpoint {
remote-endpoint = <0x03>;
phandle = <0x02>;
};
};
};
};
fragment@2 {
target = <0x03>;
__overlay__ {
data-lanes = <0x01 0x02>;
};
};
fragment@3 {
target = <0x03>;
__dormant__ {
data-lanes = <0x01 0x02 0x03 0x04>;
};
};
fragment@4 {
target = <0xffffffff>;
__overlay__ {
status = "okay";
};
};
fragment@5 {
target = <0xffffffff>;
__overlay__ {
status = "okay";
};
};
fragment@6 {
target-path = [2f 00];
__overlay__ {
bridge-clk {
compatible = "fixed-clock";
#clock-cells = <0x00>;
clock-frequency = <0x19bfcc0>;
phandle = <0x01>;
};
};
};
fragment@7 {
target = <0x02>;
__overlay__ {
data-lanes = <0x01 0x02>;
};
};
fragment@8 {
target = <0x02>;
__dormant__ {
data-lanes = <0x01 0x02 0x03 0x04>;
};
};
__overrides__ {
4lane = "\0\0\0\0-2+3-7+8";
link-frequency = [00 00 00 03 6c 69 6e 6b 2d 66 72 65 71 75 65 6e 63 69 65 73 23 30 00];
};
__symbols__ {
tc358743 = "/fragment@0/__overlay__/tc358743@0f/port/endpoint";
csi1_ep = "/fragment@1/__overlay__/port/endpoint";
tc358743_clk = "/fragment@6/__overlay__/bridge-clk";
};
__fixups__ {
i2c_csi_dsi = "/fragment@0:target:0";
csi1 = "/fragment@1:target:0";
i2c0if = "/fragment@4:target:0";
i2c0mux = "/fragment@5:target:0";
};
__local_fixups__ {
fragment@0 {
__overlay__ {
tc358743@0f {
clocks = <0x00>;
port {
endpoint {
remote-endpoint = <0x00>;
};
};
};
};
};
fragment@1 {
__overlay__ {
port {
endpoint {
remote-endpoint = <0x00>;
};
};
};
};
fragment@2 {
target = <0x00>;
};
fragment@3 {
target = <0x00>;
};
fragment@7 {
target = <0x00>;
};
fragment@8 {
target = <0x00>;
};
__overrides__ {
link-frequency = <0x00>;
};
};
};
'';
}
];
};
}