CSI camera on jetson nano custom carrier board issue

Hi,
On our custom carrier board for jetson nano we have designed 4x 2-line CSI camera connectors. CSi lines are connected to CSIA,C,E,F ports. Camera’s I2C-s are multiplexed by TCA9548 multiplexer on address 0x70. I wrote custom device tree according to the patterns: “…camera-e3333-a00.dtsi”, “…camera-rbpcv2-dual-imx219.dtsi” and 'Camera development’section of NVIDIA Jetson Linux Driver Package Developer Guide. After system start I can see camera in /dev as video0 but I can’t open video stream. For testing puposes I’am using camera with imx219 sensor, which was tested with nano developer kit(A02) and everything worked well.

Here are some outputs:

<b>root@ubuntu:~# v4l2-ctl --all</b>
Driver Info (not using libv4l2):
	Driver name   : tegra-video
	Card type     : vi-output, imx219 30-0010
	Bus info      : platform:54080000.vi:0
	Driver version: 4.9.140
	Capabilities  : 0x84200001
		Video Capture
		Streaming
		Extended Pix Format
		Device Capabilities
	Device Caps   : 0x04200001
		Video Capture
		Streaming
		Extended Pix Format
Priority: 2
Video input : 0 (Camera 0: no power)
Format Video Capture:
	Width/Height      : 3264/2464
	Pixel Format      : 'RG10'
	Field             : None
	Bytes per Line    : 6528
	Size Image        : 16084992
	Colorspace        : sRGB
	Transfer Function : Default (maps to sRGB)
	YCbCr/HSV Encoding: Default (maps to ITU-R 601)
	Quantization      : Default (maps to Full Range)
	Flags             : 

Camera Controls

                     group_hold 0x009a2003 (bool)   : default=0 value=0 flags=execute-on-write
                    sensor_mode 0x009a2008 (int64)  : min=0 max=0 step=0 default=0 value=0 flags=slider
                           gain 0x009a2009 (int64)  : min=0 max=0 step=0 default=0 value=16 flags=slider
                       exposure 0x009a200a (int64)  : min=0 max=0 step=0 default=0 value=13 flags=slider
                     frame_rate 0x009a200b (int64)  : min=0 max=0 step=0 default=0 value=2000000 flags=slider
                    bypass_mode 0x009a2064 (intmenu): min=0 max=1 default=0 value=0
                override_enable 0x009a2065 (intmenu): min=0 max=1 default=0 value=0
                   height_align 0x009a2066 (int)    : min=1 max=16 step=1 default=1 value=1
                     size_align 0x009a2067 (intmenu): min=0 max=2 default=0 value=0
               write_isp_format 0x009a2068 (bool)   : default=0 value=0
       sensor_signal_properties 0x009a2069 (u32)    : min=0 max=0 step=0 default=0 flags=read-only, has-payload
        sensor_image_properties 0x009a206a (u32)    : min=0 max=0 step=0 default=0 flags=read-only, has-payload
      sensor_control_properties 0x009a206b (u32)    : min=0 max=0 step=0 default=0 flags=read-only, has-payload
              sensor_dv_timings 0x009a206c (u32)    : min=0 max=0 step=0 default=0 flags=read-only, has-payload
               low_latency_mode 0x009a206d (bool)   : default=0 value=0
                   sensor_modes 0x009a2082 (int)    : min=0 max=30 step=1 default=30 value=5 flags=read-only
<b>root@ubuntu:~# gst-launch-1.0 nvarguscamerasrc ! nvoverlaysink</b>
X11 connection rejected because of wrong authentication.
nvbuf_utils: Could not get EGL display connection
Setting pipeline to PAUSED ...
Pipeline is live and does not need PREROLL ...
Setting pipeline to PLAYING ...
New clock: GstSystemClock
Error generated. /dvs/git/dirty/git-master_linux/multimedia/nvgstreamer/gst-nvarguscamera/gstnvarguscamerasrc.cpp, execute:532 No cameras available
Got EOS from element "pipeline0".
Execution ended after 0:00:00.510939375
Setting pipeline to PAUSED ...
Setting pipeline to READY ...
Setting pipeline to NULL ...
Freeing pipeline ...

<b>Messages output:</b> 
[  788.670661] imx219 30-0010: imx219_power_on: power on
[  788.786575] vi 54080000.vi: Calibrate csi port 0
[  788.846203] imx219 30-0010: imx219_power_off: power off
[  788.851782] imx219 30-0010: imx219_power_on: power on
[  788.881307] imx219 30-0010: imx219_power_off: power off
[  788.892907] imx219 30-0010: imx219_power_on: power on
[  788.922329] imx219 30-0010: imx219_power_off: power off
[  788.940394] imx219 30-0010: imx219_power_on: power on
[  788.969608] imx219 30-0010: imx219_power_off: power off
[  788.979574] imx219 30-0010: imx219_power_on: power on
[  789.008244] imx219 30-0010: imx219_power_off: power off
[  789.016245] imx219 30-0010: imx219_power_on: power on
[  789.044611] imx219 30-0010: imx219_power_off: power off
[  789.052460] imx219 30-0010: imx219_power_on: power on
[  789.081107] imx219 30-0010: imx219_power_off: power off
<b>root@ubuntu:/sys/kernel/debug/dynamic_debug# v4l2-ctl -d /dev/video0 --set-fmt-video=width=1920,height=1080,pixelformat=RG10 --set-ctrl bypass_mode=0 --stream-mmap --stream-count=1000</b>
<<<<<<<<<<<<<<<<<<<<<<< 21.35 fps
<<<<<<<<<<<<<<<<<<<<< 21.18 fps
<<<<<<<<<<<<<<<<<<<<< 21.19 fps
<<<<<<<<<<<<<<<<<<<<< 21.19 fps

.....



<b>Messages output:</b> 
[ 1367.761820] imx219 30-0010: imx219_power_on: power on
[ 1367.856245] vi 54080000.vi: Calibrate csi port 0
[ 1367.913042] imx219 30-0010: imx219_power_off: power off
[ 1367.918889] imx219 30-0010: imx219_power_on: power on
[ 1367.948113] imx219 30-0010: imx219_power_off: power off
[ 1367.961347] imx219 30-0010: imx219_power_on: power on
[ 1367.990714] imx219 30-0010: imx219_power_off: power off
[ 1368.015227] imx219 30-0010: imx219_power_on: power on
[ 1368.043657] imx219 30-0010: imx219_power_off: power off
[ 1368.051383] imx219 30-0010: imx219_power_on: power on
[ 1368.079661] imx219 30-0010: imx219_power_off: power off
[ 1368.087348] imx219 30-0010: imx219_power_on: power on
[ 1368.116009] imx219 30-0010: imx219_power_off: power off
[ 1368.123809] imx219 30-0010: imx219_power_on: power on
[ 1368.152105] imx219 30-0010: imx219_power_off: power off
[ 1596.513034] imx219 30-0010: imx219_power_on: power on
[ 1596.621539] vi 54080000.vi: Calibrate csi port 0
[ 1596.678442] imx219 30-0010: imx219_power_off: power off
[ 1596.684140] imx219 30-0010: imx219_power_on: power on
[ 1596.755646] vi 54080000.vi: cil_settingtime was autocalculated
[ 1596.761546] vi 54080000.vi: csi clock settle time: 13, cil settle time: 10
[ 1644.157439] video4linux video0: Syncpoint already enabled at capture done!0
[ 1644.288014] imx219 30-0010: imx219_power_off: power off

When I use gst-launch, “No cameras available” error appears. I enabled debug messages for vi2_fops.c csi2_fops.c, imx219.c, and set logslevel print from level 8, but I can’t see any error logs in terminal.

So in conclusion:
Q1: Why I can’t see drivers error logs in terminal ?
Q2: How do I proceed with debuging this problem ?

Thank you very much for any help.

Regards Tom.

Set the below environment before run the gst-launch.

export DISPLAY=:0

Hi, thank you for your quick reply.

I just tried it:

root@ubuntu:~# export DISPLAY=:0 
root@ubuntu:~# gst-launch-1.0 nvarguscamerasrc ! nvoverlaysink
No protocol specified
nvbuf_utils: Could not get EGL display connection
Setting pipeline to PAUSED ...
Pipeline is live and does not need PREROLL ...
Setting pipeline to PLAYING ...
New clock: GstSystemClock
Error generated. /dvs/git/dirty/git-master_linux/multimedia/nvgstreamer/gst-nvarguscamera/gstnvarguscamerasrc.cpp, execute:532 No cameras available
Got EOS from element "pipeline0".
Execution ended after 0:00:00.600928333
Setting pipeline to PAUSED ...
Setting pipeline to READY ...
Setting pipeline to NULL ...
Freeing pipeline ...

but there is still “No cameras available” error.

  1. Did you connect HDMI display? What the xrandr command show.
  2. Did you modify the position in the device tree as below.

https://docs.nvidia.com/jetson/l4t/index.html#page/Tegra%2520Linux%2520Driver%2520Package%2520Development%2520Guide%2Fcamera_sensor_prog.html%23

tegra-camera-platform {
        compatible = "nvidia, tegra-camera-platform";
        modules {
            module0 {
                badge = "imx185_bottom_liimx185";
                position = "bottom";
                orientation = "0";
                drivernode0 {
                    pcl_id = "v4l2_sensor";
                    devname = "imx185 30-001a";
                    proc-device-tree =
          "/proc/device-tree/i2c@3180000/tca9546@70/i2c@0/imx185_a@1a";
                };
            };
        };
    };
  1. No I’m working from ubuntu host pc through SSH connection.
  2. For position in device tree I used labels of six-cameras system (“bottomleft”) for camera0
    (test1 is my uboot board name )

I’m enclosing my device tree files:

#include <dt-bindings/media/camera.h>
#include <dt-bindings/platform/t210/t210.h>

/ {
	host1x {
		vi_base: vi {
			num-channels = <4>;
			ports {
				status="okay";
				#address-cells = <1>;
				#size-cells = <0>;
				vi_port0: port@0 {
					status="okay";
					reg = <0>;
					rbpcv2_imx219_vi_in0: endpoint {
						status="okay";
						port-index = <0>;
						bus-width = <2>;
						remote-endpoint = <&rbpcv2_imx219_csi_out0>;
					};
				};
				vi_port1: port@1 {
					status="okay";
					reg = <1>;
					rbpcv2_imx219_vi_in1: endpoint {
						status="okay";
						port-index = <4>;
						bus-width = <2>;
						remote-endpoint = <&rbpcv2_imx219_csi_out1>;
					};
				};
				vi_port2: port@2 {
					status="okay";
					reg = <2>;
					rbpcv2_imx219_vi_in2: endpoint {
						status="okay";
						port-index = <5>;
						bus-width = <2>;
						remote-endpoint = <&rbpcv2_imx219_csi_out2>;
					};
				};
				vi_port3: port@3 {
					status="okay";
					reg = <3>;
					rbpcv2_imx219_vi_in3: endpoint {
						status="okay";
						port-index = <2>;
						bus-width = <2>;
						remote-endpoint = <&rbpcv2_imx219_csi_out3>;
					};
				};
			};
		};

		csi_base: nvcsi {
			num-channels = <4>;
			#address-cells = <1>;
			#size-cells = <0>;
			status="okay";
			csi_chan0: channel@0 {
				reg = <0>;
				status="okay";
				ports {
					#address-cells = <1>;
					#size-cells = <0>;
					status="okay";
					csi_chan0_port0: port@0 {
						reg = <0>;
						status="okay";
						rbpcv2_imx219_csi_in0: endpoint@0 {
							status="okay";
							port-index = <0>;
							bus-width = <2>;
							remote-endpoint = <&rbpcv2_imx219_out0>;
						};
					};
					csi_chan0_port1: port@1 {
						reg = <1>;
						status="okay";
						rbpcv2_imx219_csi_out0: endpoint@1 {
							status="okay";
							remote-endpoint = <&rbpcv2_imx219_vi_in0>;
						};
					};
				};
			};
			csi_chan1: channel@1 {
				reg = <1>;
				status="okay";
				ports {
					#address-cells = <1>;
					#size-cells = <0>;
					status="okay";
					csi_chan1_port0: port@0 {
						status="okay";
						reg = <0>;
						rbpcv2_imx219_csi_in1: endpoint@2 {
							status="okay";
							port-index = <4>;
							bus-width = <2>;
							remote-endpoint = <&rbpcv2_imx219_out1>;
						};
					};
					csi_chan1_port1: port@1 {
						reg = <1>;
						status="okay";
						rbpcv2_imx219_csi_out1: endpoint@3 {
							status="okay";
							remote-endpoint = <&rbpcv2_imx219_vi_in1>;
						};
					};
				};
			};
			csi_chan2: channel@2 {
				reg = <2>;
				status="okay";
				ports {
					#address-cells = <1>;
					#size-cells = <0>;
					status="okay";
					csi_chan2_port0: port@0 {
						status="okay";
						reg = <0>;
						rbpcv2_imx219_csi_in2: endpoint@4 {
							status="okay";
							port-index = <5>;
							bus-width = <2>;
							remote-endpoint = <&rbpcv2_imx219_out2>;
						};
					};
					csi_chan2_port1: port@1 {
						status="okay";
						reg = <1>;
						rbpcv2_imx219_csi_out2: endpoint@5 {
							status="okay";
							remote-endpoint = <&rbpcv2_imx219_vi_in2>;
						};
					};
				};
			};
			csi_chan3: channel@3 {
				reg = <3>;
				status="okay";
				ports {
					#address-cells = <1>;
					#size-cells = <0>;
					status="okay";
					csi_chan3_port0: port@0 {
						status="okay";
						reg = <0>;
						rbpcv2_imx219_csi_in3: endpoint@6 {
							status="okay";
							port-index = <2>;
							bus-width = <2>;
							remote-endpoint = <&rbpcv2_imx219_out3>;
						};
					};
					csi_chan3_port1: port@1 {
						status="okay";
						reg = <1>;
						rbpcv2_imx219_csi_out3: endpoint@7 {
							status="okay";
							remote-endpoint = <&rbpcv2_imx219_vi_in3>;
						};
					};
				};
			};
		};
	

		 i2c@546c0000 { 
				status="okay"; 
				tca9548@70 {
					status="okay";
					i2c_0: i2c@0 {
						status="okay";
						imx219_cam0: rbpcv2_imx219_a@10 {
						status="okay";
						compatible = "nvidia,imx219";
						/* I2C device address */ 
						reg = <0x10>;

						/* V4L2 device node location */
						devnode = "video0";

						/* Physical dimensions of sensor */
						physical_w = "3.680";
						physical_h = "2.760";

						sensor_model = "imx219";

						use_sensor_mode_id = "true";

						/**
						* ==== Modes ====
						* A modeX node is required to support v4l2 driver
						* implementation with NVIDIA camera software stack
						*
						* == Signal properties ==
						*
						* phy_mode = "";
						* PHY mode used by the MIPI lanes for this device
						*
						* tegra_sinterface = "";
						* CSI Serial interface connected to tegra
						* Incase of virtual HW devices, use virtual
						* For SW emulated devices, use host
						*
						* pix_clk_hz = "";
						* Sensor pixel clock used for calculations like exposure and framerate
						*
						* readout_orientation = "0";
						* Based on camera module orientation.
						* Only change readout_orientation if you specifically
						* Program a different readout order for this mode
						*
						* == Image format Properties ==
						*
						* active_w = "";
						* Pixel active region width
						*
						* active_h = "";
						* Pixel active region height
						*
						* pixel_t = "";
						* The sensor readout pixel pattern
						*
						* line_length = "";
						* Pixel line length (width) for sensor mode.
						*
						* == Source Control Settings ==
						*
						* Gain factor used to convert fixed point integer to float
						* Gain range [min_gain/gain_factor, max_gain/gain_factor]
						* Gain step [step_gain/gain_factor is the smallest step that can be configured]
						* Default gain [Default gain to be initialized for the control.
						*     use min_gain_val as default for optimal results]
						* Framerate factor used to convert fixed point integer to float
						* Framerate range [min_framerate/framerate_factor, max_framerate/framerate_factor]
						* Framerate step [step_framerate/framerate_factor is the smallest step that can be configured]
						* Default Framerate [Default framerate to be initialized for the control.
						*     use max_framerate to get required performance]
						* Exposure factor used to convert fixed point integer to float
						* For convenience use 1 sec = 1000000us as conversion factor
						* Exposure range [min_exp_time/exposure_factor, max_exp_time/exposure_factor]
						* Exposure step [step_exp_time/exposure_factor is the smallest step that can be configured]
						* Default Exposure Time [Default exposure to be initialized for the control.
						*     Set default exposure based on the default_framerate for optimal exposure settings]
						*
						* gain_factor = ""; (integer factor used for floating to fixed point conversion)
						* min_gain_val = ""; (ceil to integer)
						* max_gain_val = ""; (ceil to integer)
						* step_gain_val = ""; (ceil to integer)
						* default_gain = ""; (ceil to integer)
						* Gain limits for mode
						*
						* exposure_factor = ""; (integer factor used for floating to fixed point conversion)
						* min_exp_time = ""; (ceil to integer)
						* max_exp_time = ""; (ceil to integer)
						* step_exp_time = ""; (ceil to integer)
						* default_exp_time = ""; (ceil to integer)
						* Exposure Time limits for mode (sec)
						*
						* framerate_factor = ""; (integer factor used for floating to fixed point conversion)
						* min_framerate = ""; (ceil to integer)
						* max_framerate = ""; (ceil to integer)
						* step_framerate = ""; (ceil to integer)
						* default_framerate = ""; (ceil to integer)
						* Framerate limits for mode (fps)
						*
						* embedded_metadata_height = "";
						* Sensor embedded metadata height in units of rows.
						* If sensor does not support embedded metadata value should be 0.
						*/
						mode0 { /* IMX219_MODE_3264x2464_21FPS */
							mclk_khz = "24000";
							num_lanes = "2";
							tegra_sinterface = "serial_a";
							phy_mode = "DPHY";
							discontinuous_clk = "yes";
							dpcm_enable = "false";
							cil_settletime = "0";

							active_w = "3264";
							active_h = "2464";
							pixel_t = "bayer_rggb";
							readout_orientation = "90";
							line_length = "3448";
							inherent_gain = "1";
							mclk_multiplier = "9.33";
							pix_clk_hz = "182400000";

							gain_factor = "16";
							framerate_factor = "1000000";
							exposure_factor = "1000000";
							min_gain_val = "16"; /* 1.00x */
							max_gain_val = "170"; /* 10.66x */
							step_gain_val = "1";
							default_gain = "16"; /* 1.00x */
							min_hdr_ratio = "1";
							max_hdr_ratio = "1";
							min_framerate = "2000000"; /* 2.0 fps */
							max_framerate = "21000000"; /* 21.0 fps */
							step_framerate = "1";
							default_framerate = "21000000"; /* 21.0 fps */
							min_exp_time = "13"; /* us */
							max_exp_time = "683709"; /* us */
							step_exp_time = "1";
							default_exp_time = "2495"; /* us */

							embedded_metadata_height = "2";
						};
						mode1 { /* IMX219_MODE_3264x1848_28FPS */
							mclk_khz = "24000";
							num_lanes = "2";
							tegra_sinterface = "serial_a";
							phy_mode = "DPHY";
							discontinuous_clk = "yes";
							dpcm_enable = "false";
							cil_settletime = "0";

							active_w = "3264";
							active_h = "1848";
							pixel_t = "bayer_rggb";
							readout_orientation = "90";
							line_length = "3448";
							inherent_gain = "1";
							mclk_multiplier = "9.33";
							pix_clk_hz = "182400000";

							gain_factor = "16";
							framerate_factor = "1000000";
							exposure_factor = "1000000";
							min_gain_val = "16"; /* 1.00x */
							max_gain_val = "170"; /* 10.66x */
							step_gain_val = "1";
							default_gain = "16"; /* 1.00x */
							min_hdr_ratio = "1";
							max_hdr_ratio = "1";
							min_framerate = "2000000"; /* 2.0 fps */
							max_framerate = "28000000"; /* 28.0 fps */
							step_framerate = "1";
							default_framerate = "28000000"; /* 28.0 fps */
							min_exp_time = "13"; /* us */
							max_exp_time = "683709"; /* us */
							step_exp_time = "1";
							default_exp_time = "2495"; /* us */

							embedded_metadata_height = "2";
						};
						mode2 { /* IMX219_MODE_1920x1080_30FPS */
							mclk_khz = "24000";
							num_lanes = "2";
							tegra_sinterface = "serial_a";
							phy_mode = "DPHY";
							discontinuous_clk = "yes";
							dpcm_enable = "false";
							cil_settletime = "0";

							active_w = "1920";
							active_h = "1080";
							pixel_t = "bayer_rggb";
							readout_orientation = "90";
							line_length = "3448";
							inherent_gain = "1";
							mclk_multiplier = "9.33";
							pix_clk_hz = "182400000";

							gain_factor = "16";
							framerate_factor = "1000000";
							exposure_factor = "1000000";
							min_gain_val = "16"; /* 1.00x */
							max_gain_val = "170"; /* 10.66x */
							step_gain_val = "1";
							default_gain = "16"; /* 1.00x */
							min_hdr_ratio = "1";
							max_hdr_ratio = "1";
							min_framerate = "2000000"; /* 2.0 fps */
							max_framerate = "30000000"; /* 30.0 fps */
							step_framerate = "1";
							default_framerate = "30000000"; /* 30.0 fps */
							min_exp_time = "13"; /* us */
							max_exp_time = "683709"; /* us */
							step_exp_time = "1";
							default_exp_time = "2495"; /* us */

							embedded_metadata_height = "2";
						};
						mode3 { /* IMX219_MODE_1280x720_60FPS */
							mclk_khz = "24000";
							num_lanes = "2";
							tegra_sinterface = "serial_a";
							phy_mode = "DPHY";
							discontinuous_clk = "yes";
							dpcm_enable = "false";
							cil_settletime = "0";

							active_w = "1280";
							active_h = "720";
							pixel_t = "bayer_rggb";
							readout_orientation = "90";
							line_length = "3448";
							inherent_gain = "1";
							mclk_multiplier = "9.33";
							pix_clk_hz = "182400000";

							gain_factor = "16";
							framerate_factor = "1000000";
							exposure_factor = "1000000";
							min_gain_val = "16"; /* 1.00x */
							max_gain_val = "170"; /* 10.66x */
							step_gain_val = "1";
							default_gain = "16"; /* 1.00x */
							min_hdr_ratio = "1";
							max_hdr_ratio = "1";
							min_framerate = "2000000"; /* 2.0 fps */
							max_framerate = "60000000"; /* 60.0 fps */
							step_framerate = "1";
							default_framerate = "60000000"; /* 60.0 fps */
							min_exp_time = "13"; /* us */
							max_exp_time = "683709"; /* us */
							step_exp_time = "1";
							default_exp_time = "2495"; /* us */

							embedded_metadata_height = "2";
						};
						mode4 { /* IMX219_MODE_1280x720_120FPS */
							mclk_khz = "24000";
							num_lanes = "2";
							tegra_sinterface = "serial_a";
							phy_mode = "DPHY";
							discontinuous_clk = "yes";
							dpcm_enable = "false";
							cil_settletime = "0";

							active_w = "1280";
							active_h = "720";
							pixel_t = "bayer_rggb";
							readout_orientation = "90";
							line_length = "3448";
							inherent_gain = "1";
							mclk_multiplier = "9.33";
							pix_clk_hz = "169600000";

							gain_factor = "16";
							framerate_factor = "1000000";
							exposure_factor = "1000000";
							min_gain_val = "16"; /* 1.00x */
							max_gain_val = "170"; /* 10.66x */
							step_gain_val = "1";
							default_gain = "16"; /* 1.00x */
							min_hdr_ratio = "1";
							max_hdr_ratio = "1";
							min_framerate = "2000000"; /* 2.0 fps */
							max_framerate = "120000000"; /* 120.0 fps */
							step_framerate = "1";
							default_framerate = "120000000"; /* 120.0 fps */
							min_exp_time = "13"; /* us */
							max_exp_time = "683709"; /* us */
							step_exp_time = "1";
							default_exp_time = "2495"; /* us */

							embedded_metadata_height = "2";
						};

						ports {
							#address-cells = <1>;
							#size-cells = <0>;
							status="okay";

							port@0 {
								reg = <0>;
								status="okay";
								rbpcv2_imx219_out0: endpoint {
									status="okay";
									port-index = <0>;
									bus-width = <2>;
									remote-endpoint = <&rbpcv2_imx219_csi_in0>;
								};
							};
						};
					};
				};
				i2c_1: i2c@1 {
					status="okay";
					imx219_cam1: rbpcv2_imx219_e@10 {
						status="okay";
						compatible = "nvidia,imx219";
						/* I2C device address */
						reg = <0x10>;

						/* V4L2 device node location */
						devnode = "video1";

						/* Physical dimensions of sensor */
						physical_w = "3.680";
						physical_h = "2.760";

						sensor_model = "imx219";

						use_sensor_mode_id = "true";


						mode0 { /* IMX219_MODE_3264x2464_21FPS */
							mclk_khz = "24000";
							num_lanes = "2";
							tegra_sinterface = "serial_e";
							phy_mode = "DPHY";
							discontinuous_clk = "yes";
							dpcm_enable = "false";
							cil_settletime = "0";

							active_w = "3264";
							active_h = "2464";
							pixel_t = "bayer_rggb";
							readout_orientation = "90";
							line_length = "3448";
							inherent_gain = "1";
							mclk_multiplier = "9.33";
							pix_clk_hz = "182400000";

							gain_factor = "16";
							framerate_factor = "1000000";
							exposure_factor = "1000000";
							min_gain_val = "16"; /* 1.00x */
							max_gain_val = "170"; /* 10.66x */
							step_gain_val = "1";
							default_gain = "16"; /* 1.00x */
							min_hdr_ratio = "1";
							max_hdr_ratio = "1";
							min_framerate = "2000000"; /* 2.0 fps */
							max_framerate = "21000000"; /* 21.0 fps */
							step_framerate = "1";
							default_framerate = "21000000"; /* 21.0 fps */
							min_exp_time = "13"; /* us */
							max_exp_time = "683709"; /* us */
							step_exp_time = "1";
							default_exp_time = "2495"; /* us */

							embedded_metadata_height = "2";
						};
						mode1 { /* IMX219_MODE_3264x1848_28FPS */
							mclk_khz = "24000";
							num_lanes = "2";
							tegra_sinterface = "serial_e";
							phy_mode = "DPHY";
							discontinuous_clk = "yes";
							dpcm_enable = "false";
							cil_settletime = "0";

							active_w = "3264";
							active_h = "1848";
							pixel_t = "bayer_rggb";
							readout_orientation = "90";
							line_length = "3448";
							inherent_gain = "1";
							mclk_multiplier = "9.33";
							pix_clk_hz = "182400000";

							gain_factor = "16";
							framerate_factor = "1000000";
							exposure_factor = "1000000";
							min_gain_val = "16"; /* 1.00x */
							max_gain_val = "170"; /* 10.66x */
							step_gain_val = "1";
							default_gain = "16"; /* 1.00x */
							min_hdr_ratio = "1";
							max_hdr_ratio = "1";
							min_framerate = "2000000"; /* 2.0 fps */
							max_framerate = "28000000"; /* 28.0 fps */
							step_framerate = "1";
							default_framerate = "28000000"; /* 28.0 fps */
							min_exp_time = "13"; /* us */
							max_exp_time = "683709"; /* us */
							step_exp_time = "1";
							default_exp_time = "2495"; /* us */

							embedded_metadata_height = "2";
						};
						mode2 { /* IMX219_MODE_1920x1080_30FPS */
							mclk_khz = "24000";
							num_lanes = "2";
							tegra_sinterface = "serial_e";
							phy_mode = "DPHY";
							discontinuous_clk = "yes";
							dpcm_enable = "false";
							cil_settletime = "0";

							active_w = "1920";
							active_h = "1080";
							pixel_t = "bayer_rggb";
							readout_orientation = "90";
							line_length = "3448";
							inherent_gain = "1";
							mclk_multiplier = "9.33";
							pix_clk_hz = "182400000";

							gain_factor = "16";
							framerate_factor = "1000000";
							exposure_factor = "1000000";
							min_gain_val = "16"; /* 1.00x */
							max_gain_val = "170"; /* 10.66x */
							step_gain_val = "1";
							default_gain = "16"; /* 1.00x */
							min_hdr_ratio = "1";
							max_hdr_ratio = "1";
							min_framerate = "2000000"; /* 2.0 fps */
							max_framerate = "30000000"; /* 30.0 fps */
							step_framerate = "1";
							default_framerate = "30000000"; /* 30.0 fps */
							min_exp_time = "13"; /* us */
							max_exp_time = "683709"; /* us */
							step_exp_time = "1";
							default_exp_time = "2495"; /* us */

							embedded_metadata_height = "2";
						};
						mode3 { /* IMX219_MODE_1280x720_60FPS */
							mclk_khz = "24000";
							num_lanes = "2";
							tegra_sinterface = "serial_e";
							phy_mode = "DPHY";
							discontinuous_clk = "yes";
							dpcm_enable = "false";
							cil_settletime = "0";

							active_w = "1280";
							active_h = "720";
							pixel_t = "bayer_rggb";
							readout_orientation = "90";
							line_length = "3448";
							inherent_gain = "1";
							mclk_multiplier = "9.33";
							pix_clk_hz = "182400000";

							gain_factor = "16";
							framerate_factor = "1000000";
							exposure_factor = "1000000";
							min_gain_val = "16"; /* 1.00x */
							max_gain_val = "170"; /* 10.66x */
							step_gain_val = "1";
							default_gain = "16"; /* 1.00x */
							min_hdr_ratio = "1";
							max_hdr_ratio = "1";
							min_framerate = "2000000"; /* 2.0 fps */
							max_framerate = "60000000"; /* 60.0 fps */
							step_framerate = "1";
							default_framerate = "60000000"; /* 60.0 fps */
							min_exp_time = "13"; /* us */
							max_exp_time = "683709"; /* us */
							step_exp_time = "1";
							default_exp_time = "2495"; /* us */

							embedded_metadata_height = "2";
						};
						mode4 { /* IMX219_MODE_1280x720_120FPS */
							mclk_khz = "24000";
							num_lanes = "2";
							tegra_sinterface = "serial_e";
							phy_mode = "DPHY";
							discontinuous_clk = "yes";
							dpcm_enable = "false";
							cil_settletime = "0";

							active_w = "1280";
							active_h = "720";
							pixel_t = "bayer_rggb";
							readout_orientation = "90";
							line_length = "3448";
							inherent_gain = "1";
							mclk_multiplier = "9.33";
							pix_clk_hz = "169600000";

							gain_factor = "16";
							framerate_factor = "1000000";
							exposure_factor = "1000000";
							min_gain_val = "16"; /* 1.00x */
							max_gain_val = "170"; /* 10.66x */
							step_gain_val = "1";
							default_gain = "16"; /* 1.00x */
							min_hdr_ratio = "1";
							max_hdr_ratio = "1";
							min_framerate = "2000000"; /* 2.0 fps */
							max_framerate = "120000000"; /* 120.0 fps */
							step_framerate = "1";
							default_framerate = "120000000"; /* 120.0 fps */
							min_exp_time = "13"; /* us */
							max_exp_time = "683709"; /* us */
							step_exp_time = "1";
							default_exp_time = "2495"; /* us */

							embedded_metadata_height = "2";
						};

						ports {
							#address-cells = <1>;
							#size-cells = <0>;
							status="okay";

							port@0 {
								reg = <0>;
								status="okay";
								rbpcv2_imx219_out1: endpoint {
									status="okay";
									port-index = <4>;
									bus-width = <2>;
									remote-endpoint = <&rbpcv2_imx219_csi_in1>;
								};
							};
						};
					};
				};
				i2c_2: i2c@2 {
					status="okay";
					imx219_cam2: rbpcv2_imx219_f@10 {
						status="okay";
						compatible = "nvidia,imx219";
						/* I2C device address */
						reg = <0x10>;

						/* V4L2 device node location */
						devnode = "video2";

						/* Physical dimensions of sensor */
						physical_w = "3.680";
						physical_h = "2.760";

						sensor_model = "imx219";

						use_sensor_mode_id = "true";

						
						mode0 { /* IMX219_MODE_3264x2464_21FPS */
							mclk_khz = "24000";
							num_lanes = "2";
							tegra_sinterface = "serial_f";
							phy_mode = "DPHY";
							discontinuous_clk = "yes";
							dpcm_enable = "false";
							cil_settletime = "0";

							active_w = "3264";
							active_h = "2464";
							pixel_t = "bayer_rggb";
							readout_orientation = "90";
							line_length = "3448";
							inherent_gain = "1";
							mclk_multiplier = "9.33";
							pix_clk_hz = "182400000";

							gain_factor = "16";
							framerate_factor = "1000000";
							exposure_factor = "1000000";
							min_gain_val = "16"; /* 1.00x */
							max_gain_val = "170"; /* 10.66x */
							step_gain_val = "1";
							default_gain = "16"; /* 1.00x */
							min_hdr_ratio = "1";
							max_hdr_ratio = "1";
							min_framerate = "2000000"; /* 2.0 fps */
							max_framerate = "21000000"; /* 21.0 fps */
							step_framerate = "1";
							default_framerate = "21000000"; /* 21.0 fps */
							min_exp_time = "13"; /* us */
							max_exp_time = "683709"; /* us */
							step_exp_time = "1";
							default_exp_time = "2495"; /* us */

							embedded_metadata_height = "2";
						};
						mode1 { /* IMX219_MODE_3264x1848_28FPS */
							mclk_khz = "24000";
							num_lanes = "2";
							tegra_sinterface = "serial_f";
							phy_mode = "DPHY";
							discontinuous_clk = "yes";
							dpcm_enable = "false";
							cil_settletime = "0";

							active_w = "3264";
							active_h = "1848";
							pixel_t = "bayer_rggb";
							readout_orientation = "90";
							line_length = "3448";
							inherent_gain = "1";
							mclk_multiplier = "9.33";
							pix_clk_hz = "182400000";

							gain_factor = "16";
							framerate_factor = "1000000";
							exposure_factor = "1000000";
							min_gain_val = "16"; /* 1.00x */
							max_gain_val = "170"; /* 10.66x */
							step_gain_val = "1";
							default_gain = "16"; /* 1.00x */
							min_hdr_ratio = "1";
							max_hdr_ratio = "1";
							min_framerate = "2000000"; /* 2.0 fps */
							max_framerate = "28000000"; /* 28.0 fps */
							step_framerate = "1";
							default_framerate = "28000000"; /* 28.0 fps */
							min_exp_time = "13"; /* us */
							max_exp_time = "683709"; /* us */
							step_exp_time = "1";
							default_exp_time = "2495"; /* us */

							embedded_metadata_height = "2";
						};
						mode2 { /* IMX219_MODE_1920x1080_30FPS */
							mclk_khz = "24000";
							num_lanes = "2";
							tegra_sinterface = "serial_f";
							phy_mode = "DPHY";
							discontinuous_clk = "yes";
							dpcm_enable = "false";
							cil_settletime = "0";

							active_w = "1920";
							active_h = "1080";
							pixel_t = "bayer_rggb";
							readout_orientation = "90";
							line_length = "3448";
							inherent_gain = "1";
							mclk_multiplier = "9.33";
							pix_clk_hz = "182400000";

							gain_factor = "16";
							framerate_factor = "1000000";
							exposure_factor = "1000000";
							min_gain_val = "16"; /* 1.00x */
							max_gain_val = "170"; /* 10.66x */
							step_gain_val = "1";
							default_gain = "16"; /* 1.00x */
							min_hdr_ratio = "1";
							max_hdr_ratio = "1";
							min_framerate = "2000000"; /* 2.0 fps */
							max_framerate = "30000000"; /* 30.0 fps */
							step_framerate = "1";
							default_framerate = "30000000"; /* 30.0 fps */
							min_exp_time = "13"; /* us */
							max_exp_time = "683709"; /* us */
							step_exp_time = "1";
							default_exp_time = "2495"; /* us */

							embedded_metadata_height = "2";
						};
						mode3 { /* IMX219_MODE_1280x720_60FPS */
							mclk_khz = "24000";
							num_lanes = "2";
							tegra_sinterface = "serial_f";
							phy_mode = "DPHY";
							discontinuous_clk = "yes";
							dpcm_enable = "false";
							cil_settletime = "0";

							active_w = "1280";
							active_h = "720";
							pixel_t = "bayer_rggb";
							readout_orientation = "90";
							line_length = "3448";
							inherent_gain = "1";
							mclk_multiplier = "9.33";
							pix_clk_hz = "182400000";

							gain_factor = "16";
							framerate_factor = "1000000";
							exposure_factor = "1000000";
							min_gain_val = "16"; /* 1.00x */
							max_gain_val = "170"; /* 10.66x */
							step_gain_val = "1";
							default_gain = "16"; /* 1.00x */
							min_hdr_ratio = "1";
							max_hdr_ratio = "1";
							min_framerate = "2000000"; /* 2.0 fps */
							max_framerate = "60000000"; /* 60.0 fps */
							step_framerate = "1";
							default_framerate = "60000000"; /* 60.0 fps */
							min_exp_time = "13"; /* us */
							max_exp_time = "683709"; /* us */
							step_exp_time = "1";
							default_exp_time = "2495"; /* us */

							embedded_metadata_height = "2";
						};
						mode4 { /* IMX219_MODE_1280x720_120FPS */
							mclk_khz = "24000";
							num_lanes = "2";
							tegra_sinterface = "serial_f";
							phy_mode = "DPHY";
							discontinuous_clk = "yes";
							dpcm_enable = "false";
							cil_settletime = "0";

							active_w = "1280";
							active_h = "720";
							pixel_t = "bayer_rggb";
							readout_orientation = "90";
							line_length = "3448";
							inherent_gain = "1";
							mclk_multiplier = "9.33";
							pix_clk_hz = "169600000";

							gain_factor = "16";
							framerate_factor = "1000000";
							exposure_factor = "1000000";
							min_gain_val = "16"; /* 1.00x */
							max_gain_val = "170"; /* 10.66x */
							step_gain_val = "1";
							default_gain = "16"; /* 1.00x */
							min_hdr_ratio = "1";
							max_hdr_ratio = "1";
							min_framerate = "2000000"; /* 2.0 fps */
							max_framerate = "120000000"; /* 120.0 fps */
							step_framerate = "1";
							default_framerate = "120000000"; /* 120.0 fps */
							min_exp_time = "13"; /* us */
							max_exp_time = "683709"; /* us */
							step_exp_time = "1";
							default_exp_time = "2495"; /* us */

							embedded_metadata_height = "2";
						};

						ports {
							#address-cells = <1>;
							#size-cells = <0>;
							status="okay";

							port@0 {
								status="okay";
								reg = <0>;
								rbpcv2_imx219_out2: endpoint {
									status="okay";
									port-index = <5>;
									bus-width = <2>;
									remote-endpoint = <&rbpcv2_imx219_csi_in2>;
								};
							};
						};
					};
				};
				i2c_3: i2c@3 {
					status="okay";
					imx219_cam3: rbpcv2_imx219_c@10 {
						status="okay";
						compatible = "nvidia,imx219";
						/* I2C device address */
						reg = <0x10>;

						/* V4L2 device node location */
						devnode = "video3";

						/* Physical dimensions of sensor */
						physical_w = "3.680";
						physical_h = "2.760";

						sensor_model = "imx219";

						use_sensor_mode_id = "true";


						mode0 { /* IMX219_MODE_3264x2464_21FPS */
							mclk_khz = "24000";
							num_lanes = "2";
							tegra_sinterface = "serial_c";
							phy_mode = "DPHY";
							discontinuous_clk = "yes";
							dpcm_enable = "false";
							cil_settletime = "0";

							active_w = "3264";
							active_h = "2464";
							pixel_t = "bayer_rggb";
							readout_orientation = "90";
							line_length = "3448";
							inherent_gain = "1";
							mclk_multiplier = "9.33";
							pix_clk_hz = "182400000";

							gain_factor = "16";
							framerate_factor = "1000000";
							exposure_factor = "1000000";
							min_gain_val = "16"; /* 1.00x */
							max_gain_val = "170"; /* 10.66x */
							step_gain_val = "1";
							default_gain = "16"; /* 1.00x */
							min_hdr_ratio = "1";
							max_hdr_ratio = "1";
							min_framerate = "2000000"; /* 2.0 fps */
							max_framerate = "21000000"; /* 21.0 fps */
							step_framerate = "1";
							default_framerate = "21000000"; /* 21.0 fps */
							min_exp_time = "13"; /* us */
							max_exp_time = "683709"; /* us */
							step_exp_time = "1";
							default_exp_time = "2495"; /* us */

							embedded_metadata_height = "2";
						};
						mode1 { /* IMX219_MODE_3264x1848_28FPS */
							mclk_khz = "24000";
							num_lanes = "2";
							tegra_sinterface = "serial_c";
							phy_mode = "DPHY";
							discontinuous_clk = "yes";
							dpcm_enable = "false";
							cil_settletime = "0";

							active_w = "3264";
							active_h = "1848";
							pixel_t = "bayer_rggb";
							readout_orientation = "90";
							line_length = "3448";
							inherent_gain = "1";
							mclk_multiplier = "9.33";
							pix_clk_hz = "182400000";

							gain_factor = "16";
							framerate_factor = "1000000";
							exposure_factor = "1000000";
							min_gain_val = "16"; /* 1.00x */
							max_gain_val = "170"; /* 10.66x */
							step_gain_val = "1";
							default_gain = "16"; /* 1.00x */
							min_hdr_ratio = "1";
							max_hdr_ratio = "1";
							min_framerate = "2000000"; /* 2.0 fps */
							max_framerate = "28000000"; /* 28.0 fps */
							step_framerate = "1";
							default_framerate = "28000000"; /* 28.0 fps */
							min_exp_time = "13"; /* us */
							max_exp_time = "683709"; /* us */
							step_exp_time = "1";
							default_exp_time = "2495"; /* us */

							embedded_metadata_height = "2";
						};
						mode2 { /* IMX219_MODE_1920x1080_30FPS */
							mclk_khz = "24000";
							num_lanes = "2";
							tegra_sinterface = "serial_c";
							phy_mode = "DPHY";
							discontinuous_clk = "yes";
							dpcm_enable = "false";
							cil_settletime = "0";

							active_w = "1920";
							active_h = "1080";
							pixel_t = "bayer_rggb";
							readout_orientation = "90";
							line_length = "3448";
							inherent_gain = "1";
							mclk_multiplier = "9.33";
							pix_clk_hz = "182400000";

							gain_factor = "16";
							framerate_factor = "1000000";
							exposure_factor = "1000000";
							min_gain_val = "16"; /* 1.00x */
							max_gain_val = "170"; /* 10.66x */
							step_gain_val = "1";
							default_gain = "16"; /* 1.00x */
							min_hdr_ratio = "1";
							max_hdr_ratio = "1";
							min_framerate = "2000000"; /* 2.0 fps */
							max_framerate = "30000000"; /* 30.0 fps */
							step_framerate = "1";
							default_framerate = "30000000"; /* 30.0 fps */
							min_exp_time = "13"; /* us */
							max_exp_time = "683709"; /* us */
							step_exp_time = "1";
							default_exp_time = "2495"; /* us */

							embedded_metadata_height = "2";
						};
						mode3 { /* IMX219_MODE_1280x720_60FPS */
							mclk_khz = "24000";
							num_lanes = "2";
							tegra_sinterface = "serial_c";
							phy_mode = "DPHY";
							discontinuous_clk = "yes";
							dpcm_enable = "false";
							cil_settletime = "0";

							active_w = "1280";
							active_h = "720";
							pixel_t = "bayer_rggb";
							readout_orientation = "90";
							line_length = "3448";
							inherent_gain = "1";
							mclk_multiplier = "9.33";
							pix_clk_hz = "182400000";

							gain_factor = "16";
							framerate_factor = "1000000";
							exposure_factor = "1000000";
							min_gain_val = "16"; /* 1.00x */
							max_gain_val = "170"; /* 10.66x */
							step_gain_val = "1";
							default_gain = "16"; /* 1.00x */
							min_hdr_ratio = "1";
							max_hdr_ratio = "1";
							min_framerate = "2000000"; /* 2.0 fps */
							max_framerate = "60000000"; /* 60.0 fps */
							step_framerate = "1";
							default_framerate = "60000000"; /* 60.0 fps */
							min_exp_time = "13"; /* us */
							max_exp_time = "683709"; /* us */
							step_exp_time = "1";
							default_exp_time = "2495"; /* us */

							embedded_metadata_height = "2";
						};
						mode4 { /* IMX219_MODE_1280x720_120FPS */
							mclk_khz = "24000";
							num_lanes = "2";
							tegra_sinterface = "serial_c";
							phy_mode = "DPHY";
							discontinuous_clk = "yes";
							dpcm_enable = "false";
							cil_settletime = "0";

							active_w = "1280";
							active_h = "720";
							pixel_t = "bayer_rggb";
							readout_orientation = "90";
							line_length = "3448";
							inherent_gain = "1";
							mclk_multiplier = "9.33";
							pix_clk_hz = "169600000";

							gain_factor = "16";
							framerate_factor = "1000000";
							exposure_factor = "1000000";
							min_gain_val = "16"; /* 1.00x */
							max_gain_val = "170"; /* 10.66x */
							step_gain_val = "1";
							default_gain = "16"; /* 1.00x */
							min_hdr_ratio = "1";
							max_hdr_ratio = "1";
							min_framerate = "2000000"; /* 2.0 fps */
							max_framerate = "120000000"; /* 120.0 fps */
							step_framerate = "1";
							default_framerate = "120000000"; /* 120.0 fps */
							min_exp_time = "13"; /* us */
							max_exp_time = "683709"; /* us */
							step_exp_time = "1";
							default_exp_time = "2495"; /* us */

							embedded_metadata_height = "2";
						};

						ports {
							#address-cells = <1>;
							#size-cells = <0>;
							status="okay";

							port@0 {
								status="okay";
								reg = <0>;
								rbpcv2_imx219_out3: endpoint {
									status="okay";
									port-index = <2>;
									bus-width = <2>;
									remote-endpoint = <&rbpcv2_imx219_csi_in3>;
								};
							};
						};
					};
				};
			};		
		};
	};

	lens_imx219@RBPCV2 {
		status="okay";
		min_focus_distance = "0.0";
		hyper_focal = "0.0";
		focal_length = "3.04";
		f_number = "2.0";
		aperture = "0.0";
	};

};

/ {
	tcp: tegra-camera-platform {
		compatible = "nvidia, tegra-camera-platform";	
		/**
		* Physical settings to calculate max ISO BW
		*
		* num_csi_lanes = <>;
		* Total number of CSI lanes when all cameras are active
		*
		* max_lane_speed = <>;
		* Max lane speed in Kbit/s
		*
		* min_bits_per_pixel = <>;
		* Min bits per pixel
		*
		* vi_peak_byte_per_pixel = <>;
		* Max byte per pixel for the VI ISO case
		*
		* vi_bw_margin_pct = <>;
		* Vi bandwidth margin in percentage
		*
		* max_pixel_rate = <>;
		* Max pixel rate in Kpixel/s for the ISP ISO case
		* Set this to the highest pix_clk_hz out of all available modes.
		*
		* isp_peak_byte_per_pixel = <>;
		* Max byte per pixel for the ISP ISO case
		*
		* isp_bw_margin_pct = <>;
		* Isp bandwidth margin in percentage
		*/
		num_csi_lanes = <8>;
		max_lane_speed = <1500000>;
		min_bits_per_pixel = <10>;
		vi_peak_byte_per_pixel = <2>;
		vi_bw_margin_pct = <25>;
		max_pixel_rate = <240000>;
		isp_peak_byte_per_pixel = <5>;
		isp_bw_margin_pct = <25>;

		/**
		* The general guideline for naming badge_info contains 3 parts, and is as follows,
		* The first part is the camera_board_id for the module; if the module is in a FFD
		* platform, then use the platform name for this part.
		* The second part contains the position of the module, ex. “rear” or “front”.
		* The third part contains the last 6 characters of a part number which is found
		* in the module's specsheet from the vender.
		*/
		modules {
			status="okay";
			cam_module0: module0 {
				badge = "test1_bottomleft_RBPCV2";
				position = "bottomleft";
				orientation = "1";
				status="okay";
				cam_module0_drivernode0: drivernode0 {
					status="okay";
					pcl_id = "v4l2_sensor";
					devname = "imx219 0-0010";
					proc-device-tree = "/proc/device-tree/host1x/i2c@546c0000/tca9548@70/i2c@0/rbpcv2_imx219_a@10";
				};
				cam_module0_drivernode1: drivernode1 {
 					status="okay";
					pcl_id = "v4l2_lens";
					proc-device-tree = "/proc/device-tree/lens_imx219@RBPCV2/";
				};
			};
			cam_module1: module1 {
				badge = "test1_bottomright_RBPCV2";
				position = "bottomright";
				orientation = "1";
				status="okay";
				cam_module1_drivernode0: drivernode0 {
					status="okay";
					pcl_id = "v4l2_sensor";
					devname = "imx219 1-0010";
					proc-device-tree = "/proc/device-tree/host1x/i2c@546c0000/tca9548@70/i2c@1/rbpcv2_imx219_e@10";
				};
				cam_module1_drivernode1: drivernode1 {
					status="okay";
					pcl_id = "v4l2_lens";
					proc-device-tree = "/proc/device-tree/lens_imx219@RBPCV2/";
				};
			};
			cam_module2: module2 {
				badge = "test1_topright_RBPCV2";
				position = "topright";
				orientation = "1";
				status="okay";
				cam_module2_drivernode0: drivernode0 {
					status="okay";
					pcl_id = "v4l2_sensor";
					devname = "imx219 2-0010";
					proc-device-tree = "/proc/device-tree/host1x/i2c@546c0000/tca9548@70/i2c@2/rbpcv2_imx219_f@10";
				};
				cam_module2_drivernode1: drivernode1 {
					status="okay";
					pcl_id = "v4l2_lens";
					proc-device-tree = "/proc/device-tree/lens_imx219@RBPCV2/";
				};
			};
			cam_module3: module3 {
				badge = "test1_topleft_RBPCV2";
				position = "topleft";
				orientation = "1";
				status="okay";
				cam_module3_drivernode0: drivernode0 {
					status="okay";
					pcl_id = "v4l2_sensor";
					devname = "imx219 3-0010";
					proc-device-tree = "/proc/device-tree/host1x/i2c@546c0000/tca9548@70/i2c@3/rbpcv2_imx219_c@10";
				};
				cam_module3_drivernode1: drivernode1 {
					status="okay";
					pcl_id = "v4l2_lens";
					proc-device-tree = "/proc/device-tree/lens_imx219@RBPCV2/";
				};
			};
		};
	};
};
#include "tegra210-camera-rbpcv2-quad-imx219.dtsi"

#define CAM0_PWDN	TEGRA_GPIO(S, 7)
#define CAM1_PWDN	TEGRA_GPIO(T, 0)

#define CAMERA_I2C_MUX_BUS(x) (0x1E + x)

/* camera control gpio definitions */

/ {

	gpio@6000d000 {
		camera-control-output-low {
			status = "okay";
			gpio-hog;
			output-low;
			gpios = < CAM0_PWDN 0  CAM1_PWDN 0>;
			label = "cam0-pwdn", "cam1-pwdn";
		};
	};

	en_vdd_cam: regulator@13 {
		compatible = "regulator-fixed-sync";
		reg = <13>;
		regulator-name = "en-vdd-cam";
		regulator-min-microvolt = <3300000>;
		regulator-max-microvolt = <3300000>;
		regulator-always-on;
	};

	host1x {
		i2c@546c0000 {
			tca9548_70: tca9548@70 {
				status = "okay";
				compatible = "nxp,pca9548";
				reg = <0x70>;
				#address-cells = <1>;
				#size-cells = <0>;
				vcc-supply = <&en_vdd_cam>;
				skip_mux_detect = "yes";	
				force_bus_start = <CAMERA_I2C_MUX_BUS(0)>;			
				i2c@0 {
					status = "okay";
					reg = <0>;
					i2c-mux,deselect-on-exit;
					#address-cells = <1>;
					#size-cells = <0>;
					rbpcv2_imx219_a@10 {
						status = "okay";
						reset-gpios = <&gpio CAM0_PWDN GPIO_ACTIVE_HIGH>;
					};
				};
				i2c@1 {
					status = "okay";
					reg = <1>;
					i2c-mux,deselect-on-exit;
					#address-cells = <1>;
					#size-cells = <0>;
					rbpcv2_imx219_e@10 {
						status = "okay";   						
						reset-gpios = <&gpio CAM1_PWDN GPIO_ACTIVE_HIGH>;
					};
				};
				i2c@2 {
					status = "okay";
					reg = <2>;
					i2c-mux,deselect-on-exit;
					#address-cells = <1>;
					#size-cells = <0>;
					rbpcv2_imx219_f@10 {
						status = "okay";  
						reset-gpios = <&gpio CAM0_PWDN GPIO_ACTIVE_HIGH>;
					};
				};
				i2c@3 {
					status = "okay";
					reg = <3>;
					i2c-mux,deselect-on-exit;
					#address-cells = <1>;
					#size-cells = <0>;
					rbpcv2_imx219_c@10 {
						status = "okay";
						reset-gpios = <&gpio CAM1_PWDN GPIO_ACTIVE_HIGH>;
					};
				};
			};
		};
	};
};

Modify the bus number of devname to match the kernel report. From 30 - 33

devname = “imx219 0-0010” → devname = “imx219 30-0010”

And use fakesink instead of nvoverlaysink.

gst-launch-1.0 nvarguscamerasrc ! fakesink

Oh, such a stupid mistake. Thank you so much ShaneCCC ! Now everything works fine.

Regards,

Tom.

Happy to hear the problem was fixed for you.

How do you apply the changes to the dtsi files?

Is this the right procedure to follow (complete kernel rebuild) or is there a simpler way?
https://developer.ridgerun.com/wiki/index.php?title=Jetson_Nano/Development/Building_the_Kernel_from_Source

@cpg_TO
Have a check the l4t document first.

https://docs.nvidia.com/jetson/l4t/index.html#page/Tegra%2520Linux%2520Driver%2520Package%2520Development%2520Guide%2Fkernel_custom.html%23

I know this should be basic for most people but I can’t figure it out. I am lost in step 5.

5.Replace <release_packagep>/Linux_for_Tegra/kernel/Image with a copy of:
$TEGRA_KERNEL_OUT/arch/arm64/boot/Image
6.Replace the contents of Linux_for_Tegra/kernel/dtb/ with the contents of:
$TEGRA_KERNEL_OUT/arch/arm64/boot/dts/

Where am I supposed to put the Image and the dts files? I don’t see “<release_packagep>/Linux_for_Tegra/kernel/Image” anywhere. The only Image and dts that I have are on /boot.

Did you install the BSP via sdkmanager?
The package was download by sdkmanager and the path is configure by it too. Check the sdkmanager to find it out.

With that, I was able to do the whole thing, and I can see cameras 1 and 2 via gst-launch (nvarguscamerasrc sensor-id=0 and sensor-id=1).

If I try to open the cameras 3 and 4, I get the following error:

Error generated. /dvs/git/dirty/git-master_linux/multimedia/nvgstreamer/gst-nvarguscamera/gstnvarguscamerasrc.cpp, execute:536 Invalid camera device specified 2 specified, 1 max index

Do I have to edit libargus (can’t find gstnvarguscamerasrc.cpp anywhere)? Is there any alternative to open the other channels (v4l2)?

First make sure the video node are created. (/dev/video3/4)
If the video node are created than check the device tree of the tegra-camera-platform if any problem.
You can use dtc to get the device tree to confirm.

sudo dtc -I fs -O dts -o extracted_proc.dts /proc/device-tree