212 lines
4.8 KiB
Nix
212 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>;
|
|
};
|
|
};
|
|
};
|
|
'';
|
|
}
|
|
];
|
|
};
|
|
}
|