Hi.
I am a little confused on the port binding in the devicetable for the TX2.
I understand that the default OV5693 camera is connected in 2 different paths.
One path it goes through the ISP and the other it is connected directly (bayer frames to memory).
So:
OV5693–>ISP(bayer2yuv conversion)–>Tegra Drivers–>Camera Core–>nvcamerasrc (YUV Frames)
&
OV5693–>V4L2 Drivers–>Mediacontroller–>V4L2src (Bayer Frames)
In the device table (after removing the whole plugin & module setup to keep it clean) I have the OV5693 camera setup with the following port connections (I’ve removed some parts to keep this concise here. only including the important port connection part). These connections work which look to be the following.
nvcsi port 0 <–> ov5693 v4l2 video0 device (im assuming this is the direct /dev/video0 path)
vi port 0 <–> nvscsi port 1 (im assuming this is the ISP path)
host1x {
vi@15700000 {
status = "okay";
num-channels = <1>;
ports {
#address-cells = <1>;
#size-cells = <0>;
status = "okay";
port@0 {
status = "okay";
reg = <0>;
ov5693_vi_in0: endpoint {
status = "okay";
csi-port = <2>;
bus-width = <2>;
remote-endpoint = <&ov5693_vi_out0>;
};
};
};
};
nvcsi@150c0000 {
num-channels = <1>;
#address-cells = <1>;
#size-cells = <0>;
channel@0 {
reg = <0>;
ports {
#address-cells = <1>;
#size-cells = <0>;
port@0 {
reg = <0>;
ov5693_csi_in0: endpoint@0 {
status = "okay";
csi-port = <2>;
bus-width = <2>;
remote-endpoint = <&ov5693_out0>;
};
};
port@1 {
reg = <1>;
ov5693_vi_out0: endpoint@1 {
status = "okay";
remote-endpoint = <&ov5693_vi_in0>;
};
};
};
};
};
};
i2c@3180000 {
ov5693_0@36 {
compatible = "nvidia,ov5693";
reg = <0x36>;
devnode = "video0";
ports {
#address-cells = <1>;
#size-cells = <0>;
port@0 {
reg = <0>;
ov5693_out0: endpoint {
status = "okay";
csi-port = <2>;
bus-width = <2>;
remote-endpoint = <&ov5693_csi_in0>;
};
};
};
};
};
running the following once booted up works and claims 30fps:
v4l2-ctl --set-fmt-video=width=1920,height=1080,pixelformat=RG10 --stream-mmap --stream-count=100 -d /dev/video0
So my goal is to remove any instance of the ISP connection since I will not be using it. But upon setting up the connection directly like below:
host1x {
vi@15700000 {
status = "okay";
num-channels = <1>;
ports {
#address-cells = <1>;
#size-cells = <0>;
status = "okay";
port@0 {
status = "okay";
reg = <0>;
ov5693_vi_in0: endpoint {
status = "okay";
csi-port = <2>;
bus-width = <2>;
remote-endpoint = <&ov5693_out0>;
};
};
};
};
i2c@3180000 {
ov5693_0@36 {
compatible = "nvidia,ov5693";
reg = <0x36>;
devnode = "video0";
ports {
#address-cells = <1>;
#size-cells = <0>;
port@0 {
reg = <0>;
ov5693_out0: endpoint {
status = "okay";
csi-port = <2>;
bus-width = <2>;
remote-endpoint = <&ov5693_vi_in0>;
};
};
};
};
};
The v4l2-ctl command fails with a timeout error in dmesg. /dev/video0 still gets created and everything, but frames do not come through.
I based this on the “Port binding” part of the “Sensor Driver Programming Guide” section of the "Tegra Linux Driver Package Development Guide "
There it has the vi connected directly.
What am I doing wrong?