DTS中video-interfaces接口详解


原文链接: DTS中video-interfaces接口详解

视频数据管道通常由外部设备组成,例如通过I2C、SPI或UART总线控制的摄像机传感器,以及SoC内部IP块(包括视频DMA引擎和视频数据处理器)。

SoC内部块由DT节点描述,与其他SoC块放置方式类似。外部设备表示为它们各自总线控制器节点的子节点,例如I2C。

所有视频设备上的数据接口都由它们的子“port”节点描述。端口的配置取决于参与数据传输的其他设备,并由“endpoint”子节点描述。

device {
    ...
    ports {
        #address-cells = <1>;
        #size-cells = <0>;

        port@0 {
            ...
            endpoint@0 { ... };
            endpoint@1 { ... };
        };
        port@1 { ... };
    };
};

如果一个端口可以配置为与同一总线上的多个远程设备一起工作,则必须为每个端口提供一个“endpoint”子节点。如果一个设备节点中有多个端口,或者端口上有多个端点,或者端口节点需要与选定的硬件接口相关联,则使用使用“#address-cells”、“#size-cells”和“reg”属性的常见方案。

所有“port”节点都可以分组再 可选的“port”节点下,该节点允许独立为“端口”和“端点”节点以及设备可能拥有的任何子设备节点指定#address-cells、#size-cells属性。

两个“endpoint” 节点通过它们的“remote-endpoint'”相互链接。设备的端点子节点包含配置此设备所需的所有属性,以便与其他设备进行数据交换。在大多数情况下,对等“端点”节点上的属性是相同的,但是当两个设备之间总线上有任何信号修改时,它们可能需要不同,例如线路上有逻辑信号逆变器。

它允许端口上的多个端点同时处于活动状态,而设备支持这种状态。例如,当一个设备的数据接口被划分为多个数据总线时,例如16位输入端口被划分为两个单独的ITU-R BT.656 8位总线。在这种情况下,可以使用总线宽度和数据转移属性为每个端点节点(逻辑总线)分配物理数据线。

 

 

必要属性Required properties

If there is more than one 'port' or more than one 'endpoint' node or 'reg' property is present in port and/or endpoint nodes the following properties are required in a relevant parent node:

如果存在多个“port”或多个“endpoint”节点或“reg”属性,则在相关父节点中需要以下属性:

 - #address-cells : number of cells required to define port/endpoint identifier, should be 1.
 - #size-cells    : should be zero.

 

非必要属性Optional endpoint properties

  • remote-endpoint: 远端设备节点 phandle to an 'endpoint' subnode of a remote device node.
  • slave-mode: 一个布尔属性,指示链接在从属模式下运行。未指定此属性时的默认值为主模式。在从模式下,水平和垂直同步信号由主设备(数据接收器)提供给从设备(数据源)。在主模式下,数据源设备也是同步信号的源。
  • bus-width: 总线位宽,适用于并行总线。
  • data-shift: 在并行数据总线上,如果指定了bus-width,则可以使用data-shift来指定使用哪些数据,例如。“总线带宽= < 8 >;data-shift=<2>;"表示使用了2-8位的数据。 
  • hsync-active: HSYNC信号的活动状态,低/高分别为0/1。
  • vsync-active: VSYNC信号的活动状态,低/高分别为0/1。

注意,如果没有指定HSYNC和VSYNC极性,可能需要在支持的情况下进行嵌入式同步。

  • data-active: 指定数据行极性。 
  • field-even-active: 场信号电平均匀时场数据传输。
  • pclk-sample: 采样数据上的上升(1)或下降(0)边缘的像素时钟信号。
  • sync-on-green-active: 同步绿色(SoG)信号的激活状态,低/高分别为0/1。 
  • data-lanes: 在mipi总线下,数据lane的指定。a
  • clock-lanes:  在mipi总线下,时钟lane的指定。- clock-noncontinuous: 允许非连续时钟
  • link-frequencies: 总线频率
  • lane-polarities: lean极性

 

例子Example

下面的示例代码片段描述了两个数据管道。ov772x和imx074分别是带有并行和串行(MIPI CSI-2)视频总线的摄像机传感器。两个传感器都位于I2C控制总线上,对应于i2c0控制器节点。ov772x传感器直接连接到ceu0视频主机接口。imx074通过MIPI CSI-2接收器(csi2)连接到ceu0。ceu0有一个(单个)DMA引擎将捕获的数据写入内存。ceu0节点有一个单一的“端口”节点,这可能表明在任何时候只有以下数据管道中的一个可以活动:ov772x -> ceu0或imx074 -> csi2 -> ceu0。

   ceu0: ceu@0xfe910000 {
        compatible = "renesas,sh-mobile-ceu";
        reg = <0xfe910000 0xa0>;
        interrupts = <0x880>;

        mclk: master_clock {
            compatible = "renesas,ceu-clock";
            #clock-cells = <1>;
            clock-frequency = <50000000>;   /* Max clock frequency */
            clock-output-names = "mclk";
        };

        port {
            #address-cells = <1>;
            #size-cells = <0>;

            /* Parallel bus endpoint /
            ceu0_1: endpoint@1 {
                reg = <1>;      /
Local endpoint # /
                remote = <&ov772x_1_1>; /
Remote phandle /
                bus-width = <8>;    /
Used data lines /
                data-shift = <2>;   /
Lines 9:2 are used */

                /* If hsync-active/vsync-active are missing,
                   embedded BT.656 sync is used /
                hsync-active = <0>; /
Active low /
                vsync-active = <0>; /
Active low /
                data-active = <1>;  /
Active high /
                pclk-sample = <1>;  /
Rising */
            };

            /* MIPI CSI-2 bus endpoint */
            ceu0_0: endpoint@0 {
                reg = <0>;
                remote = <&csi2_2>;
            };
        };
    };

 

i2c0: i2c@0xfff20000 {
        ...
        ov772x_1: camera@0x21 {
            compatible = "ovti,ov772x";
            reg = <0x21>;
            vddio-supply = <&regulator1>;
            vddcore-supply = <&regulator2>;

            clock-frequency = <20000000>;
            clocks = <&mclk 0>;
            clock-names = "xclk";

            port {
                /* With 1 endpoint per port no need for addresses. /
                ov772x_1_1: endpoint {
                    bus-width = <8>;
                    remote-endpoint = <&ceu0_1>;
                    hsync-active = <1>;
                    vsync-active = <0>; /
Who came up with an
                                   inverter here ?... */
                    data-active = <1>;
                    pclk-sample = <1>;
                };
            };
        };

            imx074: camera@0x1a {
            compatible = "sony,imx074";
            reg = <0x1a>;
            vddio-supply = <&regulator1>;
            vddcore-supply = <&regulator2>;

            clock-frequency = <30000000>;   /* Shared clock with ov772x_1 /
            clocks = <&mclk 0>;
            clock-names = "sysclk";     /
Assuming this is the
                               name in the datasheet */
            port {
                imx074_1: endpoint {
                    clock-lanes = <0>;
                    data-lanes = <1 2>;
                    remote-endpoint = <&csi2_1>;
                };
            };
        };
    };

  csi2: csi2@0xffc90000 {
        compatible = "renesas,sh-mobile-csi2";
        reg = <0xffc90000 0x1000>;
        interrupts = <0x17a0>;
        #address-cells = <1>;
        #size-cells = <0>;

        port@1 {
            compatible = "renesas,csi2c";   /* One of CSI2I and CSI2C. /
            reg = <1>;          /
CSI-2 PHY #1 of 2: PHY_S,
                               PHY_M has port address 0,
                               is unused. /
            csi2_1: endpoint {
                clock-lanes = <0>;
                data-lanes = <2 1>;
                remote-endpoint = <&imx074_1>;
            };
        };
        port@2 {
            reg = <2>;          /
port 2: link to the CEU */

            csi2_2: endpoint {
                remote-endpoint = <&ceu0_0>;
            };
        };
    };
————————————————
版权声明:本文为CSDN博主「龙图腾」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/dragon101788/article/details/99445027

Port Binding端口绑定
vi {
num-channels = <1>;
ports {

#address-cells = <1>;
#size-cells = <0>;
port@0 {
    reg = <0>;
    liimx185_vi_in0: endpoint {
        port-index = <2>;
        bus-width = <4>;
        remote-endpoint = <&liimx185_csi_out0>;
      };
  };

};
};

nvcsi {
num-channels = <1>;
#address-cells = <1>;
#size-cells = <0>;
channel@0 {

reg = <0>;
ports {
    #address-cells = <1>;
    #size-cells = <0>;
    port@0 {
        reg = <0>;
        liimx185_csi_in0: endpoint@0 {
            port-index = <0>;
            bus-width = <4>;
            remote-endpoint = <&liimx185_imx185_out0>;
        };
    };
    port@1 {
        reg = <1>;
        liimx185_csi_out0: endpoint@1 {
            remote-endpoint = <&liimx185_vi_in0>;
        };
    };
};

};
};

端口绑定属性是:

function
description

port
指定媒体填充端口连接。 所有成像器设备都有一个介质垫,用于绑定与VI的连接。

port-index
定义传感器端口连接。 对于成像器设备,例如聚焦器或闪光灯,不需要该字段。有关更多信息,请参阅端口索引。

bus-width
通过识别连接到传感器的CSI通道的数量来定义总线宽度。

remote-endpoint
定义绑定两个端口的标签。 绑定期望一个端口用于接收器,另一个端口用于源。

验证相机接口绑定

执行以下命令

//if have sudo apt-get install media-player-info
sudo media-ctl -p -d /dev/media0

对于本身不带该命令的系统可以通过apt-get install进行安装:
sudo apt-get install v4l-utils

返回的输出类似于以下内容:
Media controller API version 0.1.0

Media device information

driver tegra-vi4
model NVIDIA Tegra Video Input Device
serial
bus info
hw revision 0x3
driver version 0.0.0

Device topology

  • entity 1: 150c0000.nvcsi-0 (2 pads, 2 links)

    type V4L2 subdev subtype Unknown flags 0
    device node name /dev/v4l-subdev0
    

    pad0: Sink
    <- "imx185 30-001a":0 [ENABLED]
    pad1: Source
    -> "vi-output, imx185 30-001a":0 [ENABLED]

  • entity 2: imx185 30-001a (1 pad, 1 link)

    type V4L2 subdev subtype Sensor flags 0
    device node name /dev/v4l-subdev1
    

    pad0: Source
    [fmt:SRGGB12/1920x1080 field:none]
    -> "150c0000.nvcsi-0":0 [ENABLED]

  • entity 3: vi-output, imx185 30-001a (1 pad, 1 link)

    type Node subtype V4L flags 0
    device node name /dev/video0
    

    pad0: Sink
    <- "150c0000.nvcsi-0":1 [ENABLED]

作者:真全
链接:https://www.jianshu.com/p/e80a9e60a765
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

`