X_capture_setup gives "control failed" after upgrading from J4.4.1 -> J4.6.1

After upgrading my Jetson AGX Xavier to use Jetpack 4.6.1 from Jetpack 4.4.1, I get the following output from a command that previously worked to capture a single frame through LibArgus:

root@TOMDESKDEV:~# gst-launch-1.0 nvarguscamerasrc sensor-id=0 num-buffers=1 ! 'video/x-raw(memory:NVMM),width=2880, height=1860, framerate=20/1, format=NV12' ! nvjpegenc ! filesink location=/home/root/test.jpg -e
Setting pipeline to PAUSED ...
Pipeline is live and does not need PREROLL ...
Pipeline is PREROLLED ...
Setting pipeline to PLAYING ...
New clock: GstSystemClock
Error generated. gstnvarguscamerasrc.cpp, execute:740 No cameras available
Redistribute latency...
Got EOS from element "pipeline0".
EOS received - stopping pipeline...
Execution ended after 0:00:00.010874112
Setting pipeline to NULL ...
Freeing pipeline ...
(Argus) Error EndOfFile: Unexpected error in reading socket (in src/rpc/socket/client/ClientSocketManager.cpp, function recvThreadCore(), line 266)
(Argus) Error EndOfFile: Receive worker failure, notifying 1 waiting threads (in src/rpc/socket/client/ClientSocketManager.cpp, function recvThreadCore(), line 340)
(Argus) Error InvalidState: Argus client is exiting with 1 outstanding client threads (in src/rpc/socket/client/ClientSocketManager.cpp, function recvThreadCore(), line 357)
(Argus) Error EndOfFile: Receiving thread terminated with error (in src/rpc/socket/client/ClientSocketManager.cpp, function recvThreadWrapper(), line 368)
(Argus) Error EndOfFile: Client thread received an error from socket (in src/rpc/socket/client/ClientSocketManager.cpp, function send(), line 145)
(Argus) Error EndOfFile:  (propagating from src/rpc/socket/client/SocketClientDispatch.cpp, function dispatch(), line 91)

From the kernel ring buffer:

[  379.150809] tegra194-isp5 14800000.isp: isp_capture_setup: control failed, errno 7
[  379.151068] tegra194-isp5 14800000.isp: isp capture setup failed

I get a similar issue when trying to capture through v4l2:

root@TOMDESKDEV:~# v4l2-ctl -d /dev/video0 --set-fmt-video=width=2880,height=1860,pixelformat=RG12 --stream-count=1 --stream-mmap --stream-to=csi.raw --verbose
VIDIOC_QUERYCAP: ok
VIDIOC_G_FMT: ok
VIDIOC_S_FMT: ok
Format Video Capture:
	Width/Height      : 2880/1860
	Pixel Format      : 'RG12' (12-bit Bayer RGRG/GBGB)
	Field             : None
	Bytes per Line    : 5760
	Size Image        : 10713600
	Colorspace        : sRGB
	Transfer Function : Default (maps to sRGB)
	YCbCr/HSV Encoding: Default (maps to ITU-R 601)
	Quantization      : Default (maps to Full Range)
	Flags             :
		VIDIOC_REQBUFS returned 0 (Success)
		VIDIOC_QUERYBUF returned 0 (Success)
		VIDIOC_QUERYBUF returned 0 (Success)
		VIDIOC_QUERYBUF returned 0 (Success)
		VIDIOC_QUERYBUF returned 0 (Success)
		VIDIOC_QBUF returned 0 (Success)
		VIDIOC_QBUF returned 0 (Success)
		VIDIOC_QBUF returned 0 (Success)
		VIDIOC_QBUF returned 0 (Success)
		VIDIOC_STREAMON returned -1 (Invalid argument)

From kernel ring buffer:

[  553.263386] tegra194-vi5 15c10000.vi: vi_capture_setup: control failed, errno 2
[  553.263639] tegra194-vi5 15c10000.vi: vi capture setup failed

Here is trace (looks same for both capture methods):

root@TOMDESKDEV:~# cat /sys/kernel/debug/tracing/trace
# tracer: nop
#
# entries-in-buffer/entries-written: 60/60   #P:8
#
#                              _-----=> irqs-off
#                             / _----=> need-resched
#                            | / _---=> hardirq/softirq
#                            || / _--=> preempt-depth
#                            ||| /     delay
#           TASK-PID   CPU#  ||||    TIMESTAMP  FUNCTION
#              | |       |   ||||       |         |
     kworker/0:1-8073  [000] ....   617.197237: rtos_queue_peek_from_isr_failed: tstamp:19722978447 queue:0x0bcbcf78
     kworker/0:1-8073  [000] ....   617.365227: rtos_queue_peek_from_isr_failed: tstamp:19727978445 queue:0x0bcbcf78
     kworker/0:1-8073  [000] ....   617.477226: rtos_queue_peek_from_isr_failed: tstamp:19732978449 queue:0x0bcbcf78
     kworker/0:1-8073  [000] ....   617.649220: rtos_queue_peek_from_isr_failed: tstamp:19737978445 queue:0x0bcbcf78
     kworker/0:1-8073  [000] ....   617.817216: rtos_queue_peek_from_isr_failed: tstamp:19742978444 queue:0x0bcbcf78
     kworker/0:1-8073  [000] ....   617.985207: rtos_queue_peek_from_isr_failed: tstamp:19747978443 queue:0x0bcbcf78
     kworker/0:1-8073  [000] ....   618.153204: rtos_queue_peek_from_isr_failed: tstamp:19752978443 queue:0x0bcbcf78
     kworker/0:1-8073  [000] ....   618.321211: rtos_queue_peek_from_isr_failed: tstamp:19757978444 queue:0x0bcbcf78
     kworker/0:1-8073  [000] ....   618.489211: rtos_queue_peek_from_isr_failed: tstamp:19762978445 queue:0x0bcbcf78
     kworker/0:1-8073  [000] ....   618.601198: rtos_queue_peek_from_isr_failed: tstamp:19767978445 queue:0x0bcbcf78
     kworker/0:1-8073  [000] ....   618.769212: rtos_queue_peek_from_isr_failed: tstamp:19772978445 queue:0x0bcbcf78
     kworker/0:0-4     [000] ....   618.937191: rtos_queue_peek_from_isr_failed: tstamp:19777978443 queue:0x0bcbcf78
     kworker/0:0-4     [000] ....   619.105203: rtos_queue_peek_from_isr_failed: tstamp:19782978448 queue:0x0bcbcf78
     kworker/0:0-4     [000] ....   619.273190: rtos_queue_peek_from_isr_failed: tstamp:19787978444 queue:0x0bcbcf78
     kworker/0:0-4     [000] ....   619.441208: rtos_queue_peek_from_isr_failed: tstamp:19792978444 queue:0x0bcbcf78
     kworker/0:0-4     [000] ....   619.609199: rtos_queue_peek_from_isr_failed: tstamp:19797978445 queue:0x0bcbcf78
     kworker/0:0-4     [000] ....   619.721196: rtos_queue_peek_from_isr_failed: tstamp:19802978444 queue:0x0bcbcf78
     kworker/0:0-4     [000] ....   619.889187: rtos_queue_peek_from_isr_failed: tstamp:19807978443 queue:0x0bcbcf78
     kworker/0:0-4     [000] ....   620.057177: rtos_queue_peek_from_isr_failed: tstamp:19812978443 queue:0x0bcbcf78
     kworker/0:0-4     [000] ....   620.225179: rtos_queue_peek_from_isr_failed: tstamp:19817978445 queue:0x0bcbcf78
     kworker/0:0-4     [000] ....   620.393174: rtos_queue_peek_from_isr_failed: tstamp:19822978445 queue:0x0bcbcf78
     kworker/0:0-4     [000] ....   620.561191: rtos_queue_peek_from_isr_failed: tstamp:19827978445 queue:0x0bcbcf78
     kworker/0:0-4     [000] ....   620.729168: rtos_queue_peek_from_isr_failed: tstamp:19832978444 queue:0x0bcbcf78
     kworker/0:0-4     [000] ....   620.841169: rtos_queue_peek_from_isr_failed: tstamp:19837978444 queue:0x0bcbcf78
     kworker/0:0-4     [000] ....   621.009164: rtos_queue_peek_from_isr_failed: tstamp:19842978443 queue:0x0bcbcf78
     kworker/0:0-4     [000] ....   621.177162: rtos_queue_peek_from_isr_failed: tstamp:19847978445 queue:0x0bcbcf78
     kworker/0:0-4     [000] ....   621.349171: rtos_queue_peek_from_isr_failed: tstamp:19852978445 queue:0x0bcbcf78
     kworker/0:0-4     [000] ....   621.517151: rtos_queue_peek_from_isr_failed: tstamp:19857978444 queue:0x0bcbcf78
     kworker/0:0-4     [000] ....   621.685187: rtos_queue_peek_from_isr_failed: tstamp:19862978448 queue:0x0bcbcf78
     kworker/0:0-4     [000] ....   621.797158: rtos_queue_peek_from_isr_failed: tstamp:19867978445 queue:0x0bcbcf78
     kworker/0:0-4     [000] ....   621.965182: rtos_queue_peek_from_isr_failed: tstamp:19872978444 queue:0x0bcbcf78
     kworker/0:0-4     [000] ....   622.133153: rtos_queue_peek_from_isr_failed: tstamp:19877978445 queue:0x0bcbcf78
     kworker/0:0-4     [000] ....   622.245146: rtos_queue_peek_from_isr_failed: tstamp:19880743565 queue:0x0bcbcf78
        v4l2-ctl-10910 [004] ....   623.390224: tegra_channel_open: vi-output, imx490 30-001b
        v4l2-ctl-10910 [000] ....   623.392089: tegra_channel_set_power: imx490 30-001b : 0x1
        v4l2-ctl-10910 [000] ....   623.392100: camera_common_s_power: status : 0x1
        v4l2-ctl-10910 [000] ....   623.392408: tegra_channel_set_power: 15a00000.nvcsi--8 : 0x1
        v4l2-ctl-10910 [000] ....   623.392411: csi_s_power: enable : 0x1
        v4l2-ctl-10910 [000] ....   623.402128: tegra_channel_capture_setup: vnc_id 0 W 2880 H 1860 fmt c4
        v4l2-ctl-10910 [000] ....   623.407701: tegra_channel_close: vi-output, imx490 30-001b
        v4l2-ctl-10910 [000] ....   623.410684: tegra_channel_set_power: imx490 30-001b : 0x0
        v4l2-ctl-10910 [000] ....   623.410694: camera_common_s_power: status : 0x0
        v4l2-ctl-10910 [000] ....   623.410977: tegra_channel_set_power: 15a00000.nvcsi--8 : 0x0
        v4l2-ctl-10910 [000] ....   623.410979: csi_s_power: enable : 0x0
     kworker/0:1-8073  [000] ....   623.425140: rtos_queue_peek_from_isr_failed: tstamp:19918211324 queue:0x0bcbcf78
     kworker/0:1-8073  [000] ....   623.425144: rtcpu_start: tstamp:19918212861
     kworker/0:1-8073  [000] ....   623.425147: rtos_queue_send_from_isr_failed: tstamp:19918230376 queue:0x0bcb41f8
     kworker/0:1-8073  [000] ....   623.425149: rtos_queue_send_from_isr_failed: tstamp:19918230514 queue:0x0bcb8a60
     kworker/0:1-8073  [000] ....   623.425150: rtos_queue_send_from_isr_failed: tstamp:19918230651 queue:0x0bcba5e0
     kworker/0:1-8073  [000] ....   623.425152: rtos_queue_send_from_isr_failed: tstamp:19918230785 queue:0x0bcbb3a0
     kworker/0:1-8073  [000] ....   623.425153: rtos_queue_send_from_isr_failed: tstamp:19918230919 queue:0x0bcbc160
     kworker/0:1-8073  [000] ....   623.593148: rtos_queue_peek_from_isr_failed: tstamp:19923211664 queue:0x0bcbcf78
     kworker/0:1-8073  [000] ....   623.761100: rtos_queue_peek_from_isr_failed: tstamp:19928211661 queue:0x0bcbcf78
     kworker/0:1-8073  [000] ....   623.929110: rtos_queue_peek_from_isr_failed: tstamp:19933211664 queue:0x0bcbcf78
     kworker/0:0-4     [000] ....   624.097112: rtos_queue_peek_from_isr_failed: tstamp:19938211662 queue:0x0bcbcf78
     kworker/0:0-4     [000] ....   624.209100: rtos_queue_peek_from_isr_failed: tstamp:19943211665 queue:0x0bcbcf78
     kworker/0:0-4     [000] ....   624.377098: rtos_queue_peek_from_isr_failed: tstamp:19948211662 queue:0x0bcbcf78
     kworker/0:0-4     [000] ....   624.545096: rtos_queue_peek_from_isr_failed: tstamp:19953211658 queue:0x0bcbcf78
     kworker/0:0-4     [000] ....   624.713102: rtos_queue_peek_from_isr_failed: tstamp:19958211665 queue:0x0bcbcf78
     kworker/0:0-4     [000] ....   624.881073: rtos_queue_peek_from_isr_failed: tstamp:19963211662 queue:0x0bcbcf78

The camera hardware hasn’t changed and I can confirm that our camera driver is still being initialized correctly. We’re using an LI-IMX490-FPDLinkIII with TI953/954 serdes and all three of these devices appear to be correctly initialized over I2C.

Looks like your device tree have problem to have nvarguscamerasrc detect none of camera.

Okay, can you help me debug this? Here are the patches we are applying to device tree.

diff --git a/nvidia/platform/t19x/common/kernel-dts/t19x-common-modules/tegra194-camera-imx390-a00.dtsi b/nvidia/platform/t19x/common/kernel-dts/t19x-common-modules/tegra194-camera-imx390-a00.dtsi
index 715f8287db7a..82c435234bed 100644
--- a/nvidia/platform/t19x/common/kernel-dts/t19x-common-modules/tegra194-camera-imx390-a00.dtsi
+++ b/nvidia/platform/t19x/common/kernel-dts/t19x-common-modules/tegra194-camera-imx390-a00.dtsi
@@ -18,93 +20,1255 @@
 / {
 	host1x {
 		vi@15c10000 {
-			num-channels = <2>;
+			num-channels = <8>;
 			ports {
 				#address-cells = <1>;
 				#size-cells = <0>;
 				port@0 {
 					reg = <0>;
-					imx390_vi_in0: endpoint {
+					imx490_vi_in0: endpoint {
 						vc-id = <0>;
 						port-index = <0>;
-						bus-width = <2>;
-						remote-endpoint = <&imx390_csi_out0>;
+						bus-width = <4>;
+						remote-endpoint = <&imx490_csi_out0>;
 					};
 				};
 				port@1 {
 					reg = <1>;
-					imx390_vi_in1: endpoint {
+					imx490_vi_in1: endpoint {
 						vc-id = <1>;
 						port-index = <0>;
-						bus-width = <2>;
-						remote-endpoint = <&imx390_csi_out1>;
+						bus-width = <4>;
+						remote-endpoint = <&imx490_csi_out1>;
+					};
+				};
+				port@2 {
+					reg = <2>;
+					imx490_vi_in2: endpoint {
+						vc-id = <0>;
+						port-index = <2>;
+						bus-width = <4>;
+						remote-endpoint = <&imx490_csi_out2>;
+					};
+				};
+				port@3 {
+					reg = <3>;
+					imx490_vi_in3: endpoint {
+						vc-id = <1>;
+						port-index = <2>;
+						bus-width = <4>;
+						remote-endpoint = <&imx490_csi_out3>;
+					};
+				};
+				port@4 {
+					reg = <4>;
+					imx490_vi_in4: endpoint {
+						vc-id = <0>;
+						port-index = <4>;
+						bus-width = <4>;
+						remote-endpoint = <&imx490_csi_out4>;
+					};
+				};
+				port@5 {
+					reg = <5>;
+					imx490_vi_in5: endpoint {
+						vc-id = <1>;
+						port-index = <4>;
+						bus-width = <4>;
+						remote-endpoint = <&imx490_csi_out5>;
+					};
+				};
+				port@6 {
+					reg = <6>;
+					imx490_vi_in6: endpoint {
+						vc-id = <0>;
+						port-index = <5>;
+						bus-width = <4>;
+						remote-endpoint = <&imx490_csi_out6>;
+					};
+				};
+				port@7 {
+					reg = <7>;
+					imx490_vi_in7: endpoint {
+						vc-id = <1>;
+						port-index = <5>;
+						bus-width = <4>;
+						remote-endpoint = <&imx490_csi_out7>;
+					};
+				};
+			};
+		};
+
+		nvcsi@15a00000 {
+			num-channels = <8>;
+			#address-cells = <1>;
+			#size-cells = <0>;
+
+			channel@0 {
+				reg = <0>;
+				ports {
+					#address-cells = <1>;
+					#size-cells = <0>;
+					port@0 {
+						reg = <0>;
+						imx490_csi_in0: endpoint@0 {
+							port-index = <0>;
+							bus-width = <4>;
+							remote-endpoint = <&imx490_imx490_out0>;
+						};
+					};
+					port@1 {
+						reg = <1>;
+						imx490_csi_out0: endpoint@1 {
+							remote-endpoint = <&imx490_vi_in0>;
+						};
+					};
+				};
+			};
+			channel@1 {
+				reg = <1>;
+				ports {
+					#address-cells = <1>;
+					#size-cells = <0>;
+					port@0 {
+						reg = <0>;
+						imx490_csi_in1: endpoint@2 {
+							port-index = <0>;
+							bus-width = <4>;
+							remote-endpoint = <&imx490_imx490_out1>;
+						};
+					};
+					port@1 {
+						reg = <1>;
+						imx490_csi_out1: endpoint@3 {
+							remote-endpoint = <&imx490_vi_in1>;
+						};
+					};
+				};
+			};
+			channel@2 {
+				reg = <2>;
+				ports {
+					#address-cells = <1>;
+					#size-cells = <0>;
+					port@0 {
+						reg = <0>;
+						imx490_csi_in2: endpoint@4 {
+							port-index = <2>;
+							bus-width = <4>;
+							remote-endpoint = <&imx490_imx490_out2>;
+						};
+					};
+					port@1 {
+						reg = <1>;
+						imx490_csi_out2: endpoint@5 {
+							remote-endpoint = <&imx490_vi_in2>;
+						};
+					};
+				};
+			};
+			channel@3 {
+				reg = <3>;
+				ports {
+					#address-cells = <1>;
+					#size-cells = <0>;
+					port@0 {
+						reg = <0>;
+						imx490_csi_in3: endpoint@6 {
+							port-index = <2>;
+							bus-width = <4>;
+							remote-endpoint = <&imx490_imx490_out3>;
+						};
+					};
+					port@1 {
+						reg = <1>;
+						imx490_csi_out3: endpoint@7 {
+							remote-endpoint = <&imx490_vi_in3>;
+						};
+					};
+				};
+			};
+			channel@4 {
+				reg = <4>;
+				ports {
+					#address-cells = <1>;
+					#size-cells = <0>;
+					port@0 {
+						reg = <0>;
+						imx490_csi_in4: endpoint@8 {
+							port-index = <4>;
+							bus-width = <4>;
+							remote-endpoint = <&imx490_imx490_out4>;
+						};
+					};
+					port@1 {
+						reg = <1>;
+						imx490_csi_out4: endpoint@9 {
+							remote-endpoint = <&imx490_vi_in4>;
+						};
+					};
+				};
+			};
+			channel@5 {
+				reg = <5>;
+				ports {
+					#address-cells = <1>;
+					#size-cells = <0>;
+					port@0 {
+						reg = <0>;
+						imx490_csi_in5: endpoint@10 {
+							port-index = <4>;
+							bus-width = <4>;
+							remote-endpoint = <&imx490_imx490_out5>;
+						};
+					};
+					port@1 {
+						reg = <1>;
+						imx490_csi_out5: endpoint@11 {
+							remote-endpoint = <&imx490_vi_in5>;
+						};
+					};
+				};
+			};
+			channel@6 {
+				reg = <6>;
+				ports {
+					#address-cells = <1>;
+					#size-cells = <0>;
+					port@0 {
+						reg = <0>;
+						imx490_csi_in6: endpoint@12 {
+							port-index = <6>;
+							bus-width = <4>;
+							remote-endpoint = <&imx490_imx490_out6>;
+						};
+					};
+					port@1 {
+						reg = <1>;
+						imx490_csi_out6: endpoint@13 {
+							remote-endpoint = <&imx490_vi_in6>;
+						};
+					};
+				};
+			};
+			channel@7 {
+				reg = <7>;
+				ports {
+					#address-cells = <1>;
+					#size-cells = <0>;
+					port@0 {
+						reg = <0>;
+						imx490_csi_in7: endpoint@14 {
+							port-index = <6>;
+							bus-width = <4>;
+							remote-endpoint = <&imx490_imx490_out7>;
+						};
+					};
+					port@1 {
+						reg = <1>;
+						imx490_csi_out7: endpoint@15 {
+							remote-endpoint = <&imx490_vi_in7>;
+						};
 					};
 				};
 			};
 		};
+	};
+
+	i2c@3180000 {
+		tca9546@70 {
+			i2c@0 {
+			imx490_a@1b {
+				compatible = "nvidia,imx490";
+
+				reg = <0x1b>;
+
+				/* Physical dimensions of sensor */
+				physical_w = "3.764";
+				physical_h = "2.738";
+
+				sensor_model = "imx490";
+
+				/* Defines number of frames to be dropped by driver internally after applying */
+				/* sensor crop settings. Some sensors send corrupt frames after applying */
+				/* crop co-ordinates */
+				post_crop_frame_drop = "0";
+
+				/* Convert Gain to unit of dB (decibel) befor passing to kernel driver */
+				use_decibel_gain = "true";
+
+				/* enable CID_SENSOR_MODE_ID for sensor modes selection */
+				use_sensor_mode_id = "true";
+
+				/**
+				* A modeX node is required to support v4l2 driver
+				* implementation with NVIDIA camera software stack
+				*
+				* mclk_khz = "";
+				* Standard MIPI driving clock, typically 24MHz
+				*
+				* num_lanes = "";
+				* Number of lane channels sensor is programmed to output
+				*
+				* tegra_sinterface = "";
+				* The base tegra serial interface lanes are connected to
+				*
+				* vc_id = "";
+				* The virtual channel id of the sensor.
+				*
+				* discontinuous_clk = "";
+				* The sensor is programmed to use a discontinuous clock on MIPI lanes
+				*
+				* dpcm_enable = "true";
+				* The sensor is programmed to use a DPCM modes
+				*
+				* cil_settletime = "";
+				* MIPI lane settle time value.
+				* A "0" value attempts to autocalibrate based on mclk_khz and pix_clk_hz
+				*
+				* active_w = "";
+				* Pixel active region width
+				*
+				* active_h = "";
+				* Pixel active region height
+				*
+				* dynamic_pixel_bit_depth = "";
+				* sensor dynamic bit depth for sensor mode
+				*
+				* csi_pixel_bit_depth = "";
+				* sensor output bit depth for sensor mode
+				*
+				* mode_type="";
+				* Sensor mode type, For eg: yuv, Rgb, bayer, bayer_wdr_pwl
+				*
+				* pixel_phase="";
+				* Pixel phase for sensor mode, For eg: rggb, vyuy, rgb888
+				*
+				* readout_orientation = "0";
+				* Based on camera module orientation.
+				* Only change readout_orientation if you specifically
+				* Program a different readout order for this mode
+				*
+				* line_length = "";
+				* Pixel line length (width) for sensor mode.
+				* This is used to calibrate features in our camera stack.
+				*
+				* pix_clk_hz = "";
+				* Sensor pixel clock used for calculations like exposure and framerate
+				*
+				*
+				*
+				*
+				* inherent_gain = "";
+				* Gain obtained inherently from mode (ie. pixel binning)
+				*
+				* min_gain_val = ""; (floor to 6 decimal places)
+				* max_gain_val = ""; (floor to 6 decimal places)
+				* Gain limits for mode
+				* if use_decibel_gain = "true", please set the gain as decibel
+				*
+				* min_exp_time = ""; (ceil to integer)
+				* max_exp_time = ""; (ceil to integer)
+				* Exposure Time limits for mode (lines per exposure)
+				*
+				*
+				* min_hdr_ratio = "";
+				* max_hdr_ratio = "";
+				* HDR Ratio limits for mode
+				*
+				* min_framerate = "";
+				* max_framerate = "";
+				* 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 {/*mode IMX490_MODE_2880x1860_CROP_30FPS*/
+					mclk_khz = "24000";
+					num_lanes = "4";
+					tegra_sinterface = "serial_a";
+					vc_id = "0";
+					discontinuous_clk = "no";
+					dpcm_enable = "false";
+					cil_settletime = "0";
+					dynamic_pixel_bit_depth = "12";
+					csi_pixel_bit_depth = "12";
+					mode_type = "bayer";
+					pixel_phase = "rggb";
+					num_of_ignored_lines = "4"; /* optical black */
+
+					active_w = "2880";
+					active_h = "1860";
+					readout_orientation = "0";
+					line_length = "3000";
+					inherent_gain = "1";
+					pix_clk_hz = "180000000";
+					serdes_pix_clk_hz = "833333333";
+
+					gain_factor = "10";
+					min_gain_val = "0"; /* dB */
+					max_gain_val = "300"; /* dB */
+					step_gain_val = "3"; /* 0.3 */
+					default_gain = "0";
+					min_hdr_ratio = "1";
+					max_hdr_ratio = "1";
+					framerate_factor = "1000000";
+					min_framerate = "20000000";
+					max_framerate = "20000000";
+					step_framerate = "1";
+					default_framerate = "20000000";
+					exposure_factor = "1000000";
+					min_exp_time = "4"; /* minimum exposure time in lines from IMX490 datasheet */
+					max_exp_time = "1992"; /* maximum exposure time in lines from IMX490 datasheet */
+					step_exp_time = "1";
+					default_exp_time = "500";
+					embedded_metadata_height = "0";
+				};
+				ports {
+					#address-cells = <1>;
+					#size-cells = <0>;
+					port@0 {
+						reg = <0>;
+						imx490_imx490_out0: endpoint {
+							vc-id = <0>;
+							port-index = <0>;
+							bus-width = <4>;
+							remote-endpoint = <&imx490_csi_in0>;
+						};
+					};
+				};
+			};
+
+			imx490_b@1c {
+				compatible = "nvidia,imx490";
+
+				reg = <0x1c>;
+
+				/* Physical dimensions of sensor */
+				physical_w = "3.764";
+				physical_h = "2.738";
+
+				sensor_model = "imx490";
+
+				/* Defines number of frames to be dropped by driver internally after applying */
+				/* sensor crop settings. Some sensors send corrupt frames after applying */
+				/* crop co-ordinates */
+				post_crop_frame_drop = "0";
+
+				/* Convert Gain to unit of dB (decibel) befor passing to kernel driver */
+				use_decibel_gain = "true";
+
+				/* enable CID_SENSOR_MODE_ID for sensor modes selection */
+				use_sensor_mode_id = "true";
+
+				/**
+				* A modeX node is required to support v4l2 driver
+				* implementation with NVIDIA camera software stack
+				*
+				* mclk_khz = "";
+				* Standard MIPI driving clock, typically 24MHz
+				*
+				* num_lanes = "";
+				* Number of lane channels sensor is programmed to output
+				*
+				* tegra_sinterface = "";
+				* The base tegra serial interface lanes are connected to
+				*
+				* vc_id = "";
+				* The virtual channel id of the sensor.
+				*
+				* discontinuous_clk = "";
+				* The sensor is programmed to use a discontinuous clock on MIPI lanes
+				*
+				* dpcm_enable = "true";
+				* The sensor is programmed to use a DPCM modes
+				*
+				* cil_settletime = "";
+				* MIPI lane settle time value.
+				* A "0" value attempts to autocalibrate based on mclk_khz and pix_clk_hz
+				*
+				* active_w = "";
+				* Pixel active region width
+				*
+				* active_h = "";
+				* Pixel active region height
+				*
+				* dynamic_pixel_bit_depth = "";
+				* sensor dynamic bit depth for sensor mode
+				*
+				* csi_pixel_bit_depth = "";
+				* sensor output bit depth for sensor mode
+				*
+				* mode_type="";
+				* Sensor mode type, For eg: yuv, Rgb, bayer, bayer_wdr_pwl
+				*
+				* pixel_phase="";
+				* Pixel phase for sensor mode, For eg: rggb, vyuy, rgb888
+				*
+				* readout_orientation = "0";
+				* Based on camera module orientation.
+				* Only change readout_orientation if you specifically
+				* Program a different readout order for this mode
+				*
+				* line_length = "";
+				* Pixel line length (width) for sensor mode.
+				* This is used to calibrate features in our camera stack.
+				*
+				* pix_clk_hz = "";
+				* Sensor pixel clock used for calculations like exposure and framerate
+				*
+				*
+				*
+				*
+				* inherent_gain = "";
+				* Gain obtained inherently from mode (ie. pixel binning)
+				*
+				* min_gain_val = ""; (floor to 6 decimal places)
+				* max_gain_val = ""; (floor to 6 decimal places)
+				* Gain limits for mode
+				* if use_decibel_gain = "true", please set the gain as decibel
+				*
+				* min_exp_time = ""; (ceil to integer)
+				* max_exp_time = ""; (ceil to integer)
+				* Exposure Time limits for mode (lines per exposure)
+				*
+				*
+				* min_hdr_ratio = "";
+				* max_hdr_ratio = "";
+				* HDR Ratio limits for mode
+				*
+				* min_framerate = "";
+				* max_framerate = "";
+				* 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 {/*mode IMX490_MODE_2880x1860_CROP_30FPS*/
+					mclk_khz = "24000";
+					num_lanes = "4";
+					tegra_sinterface = "serial_a";
+					vc_id = "1";
+					discontinuous_clk = "no";
+					dpcm_enable = "false";
+					cil_settletime = "0";
+					dynamic_pixel_bit_depth = "12";
+					csi_pixel_bit_depth = "12";
+					mode_type = "bayer";
+					pixel_phase = "rggb";
+					num_of_ignored_lines = "4"; /* optical black */
+
+					active_w = "2880";
+					active_h = "1860";
+					readout_orientation = "0";
+					line_length = "3000";
+					inherent_gain = "1";
+					pix_clk_hz = "180000000";
+					serdes_pix_clk_hz = "833333333";
+
+					gain_factor = "10";
+					min_gain_val = "0"; /* dB */
+					max_gain_val = "300"; /* dB */
+					step_gain_val = "3"; /* 0.3 */
+					default_gain = "0";
+					min_hdr_ratio = "1";
+					max_hdr_ratio = "1";
+					framerate_factor = "1000000";
+					min_framerate = "20000000";
+					max_framerate = "20000000";
+					step_framerate = "1";
+					default_framerate = "20000000";
+					exposure_factor = "1000000";
+					min_exp_time = "4"; /* minimum exposure time in lines from IMX490 datasheet */
+					max_exp_time = "1992"; /* maximum exposure time in lines from IMX490 datasheet */
+					step_exp_time = "1";
+					default_exp_time = "500";
+					embedded_metadata_height = "0";
+				};
+				ports {
+					#address-cells = <1>;
+					#size-cells = <0>;
+					port@0 {
+						reg = <0>;
+						imx490_imx490_out1: endpoint {
+							vc-id = <1>;
+							port-index = <0>;
+							bus-width = <4>;
+							remote-endpoint = <&imx490_csi_in1>;
+						};
+					};
+				};
+			};
+			};
+			i2c@1 {
+			imx490_c@1b {
+				compatible = "nvidia,imx490";
+
+				reg = <0x1b>;
+
+				/* Physical dimensions of sensor */
+				physical_w = "3.764";
+				physical_h = "2.738";
+
+				sensor_model ="imx490";
+
+				/* Defines number of frames to be dropped by driver internally after applying */
+				/* sensor crop settings. Some sensors send corrupt frames after applying */
+				/* crop co-ordinates */
+				post_crop_frame_drop = "0";
+
+				/* Convert Gain to unit of dB (decibel) befor passing to kernel driver */
+				use_decibel_gain = "true";
+
+				/* enable CID_SENSOR_MODE_ID for sensor modes selection */
+				use_sensor_mode_id = "true";
+
+				/**
+				* A modeX node is required to support v4l2 driver
+				* implementation with NVIDIA camera software stack
+				*
+				* mclk_khz = "";
+				* Standard MIPI driving clock, typically 24MHz
+				*
+				* num_lanes = "";
+				* Number of lane channels sensor is programmed to output
+				*
+				* tegra_sinterface = "";
+				* The base tegra serial interface lanes are connected to
+				*
+				* vc_id = "";
+				* The virtual channel id of the sensor.
+				*
+				* discontinuous_clk = "";
+				* The sensor is programmed to use a discontinuous clock on MIPI lanes
+				*
+				* dpcm_enable = "true";
+				* The sensor is programmed to use a DPCM modes
+				*
+				* cil_settletime = "";
+				* MIPI lane settle time value.
+				* A "0" value attempts to autocalibrate based on mclk_khz and pix_clk_hz
+				*
+				* active_w = "";
+				* Pixel active region width
+				*
+				* active_h = "";
+				* Pixel active region height
+				*
+				* dynamic_pixel_bit_depth = "";
+				* sensor dynamic bit depth for sensor mode
+				*
+				* csi_pixel_bit_depth = "";
+				* sensor output bit depth for sensor mode
+				*
+				* mode_type="";
+				* Sensor mode type, For eg: yuv, Rgb, bayer, bayer_wdr_pwl
+				*
+				* pixel_phase="";
+				* Pixel phase for sensor mode, For eg: rggb, vyuy, rgb888
+				*
+				* readout_orientation = "0";
+				* Based on camera module orientation.
+				* Only change readout_orientation if you specifically
+				* Program a different readout order for this mode
+				*
+				* line_length = "";
+				* Pixel line length (width) for sensor mode.
+				* This is used to calibrate features in our camera stack.
+				*
+				* pix_clk_hz = "";
+				* Sensor pixel clock used for calculations like exposure and framerate
+				*
+				*
+				*
+				*
+				* inherent_gain = "";
+				* Gain obtained inherently from mode (ie. pixel binning)
+				*
+				* min_gain_val = ""; (floor to 6 decimal places)
+				* max_gain_val = ""; (floor to 6 decimal places)
+				* Gain limits for mode
+				* if use_decibel_gain = "true", please set the gain as decibel
+				*
+				* min_exp_time = ""; (ceil to integer)
+				* max_exp_time = ""; (ceil to integer)
+				* Exposure Time limits for mode (lines per exposure)
+				*
+				*
+				* min_hdr_ratio = "";
+				* max_hdr_ratio = "";
+				* HDR Ratio limits for mode
+				*
+				* min_framerate = "";
+				* max_framerate = "";
+				* 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 {/*mode IMX490_MODE_2880x1860_CROP_30FPS*/
+					mclk_khz = "24000";
+					num_lanes = "4";
+					tegra_sinterface = "serial_c";
+					vc_id = "0";
+					discontinuous_clk = "no";
+					dpcm_enable = "false";
+					cil_settletime = "0";
+					dynamic_pixel_bit_depth = "12";
+					csi_pixel_bit_depth = "12";
+					mode_type = "bayer";
+					pixel_phase = "rggb";
+					num_of_ignored_lines = "4"; /* optical black */
+
+					active_w = "2880";
+					active_h = "1860";
+					readout_orientation = "0";
+					line_length = "3000";
+					inherent_gain = "1";
+					pix_clk_hz = "180000000";
+					serdes_pix_clk_hz = "833333333";
+
+					gain_factor = "10";
+					min_gain_val = "0"; /* dB */
+					max_gain_val = "300"; /* dB */
+					step_gain_val = "3"; /* 0.3 */
+					default_gain = "0";
+					min_hdr_ratio = "1";
+					max_hdr_ratio = "1";
+					framerate_factor = "1000000";
+					min_framerate = "20000000";
+					max_framerate = "20000000";
+					step_framerate = "1";
+					default_framerate = "20000000";
+					exposure_factor = "1000000";
+					min_exp_time = "4"; /* minimum exposure time in lines from IMX490 datasheet */
+					max_exp_time = "1992"; /* maximum exposure time in lines from IMX490 datasheet */
+					step_exp_time = "1";
+					default_exp_time = "500";
+					embedded_metadata_height = "0";
+				};
+				ports {
+					#address-cells = <1>;
+					#size-cells = <0>;
+					port@0 {
+						reg = <0>;
+						imx490_imx490_out2: endpoint {
+							vc-id = <0>;
+							port-index = <2>;
+							bus-width = <4>;
+							remote-endpoint = <&imx490_csi_in2>;
+						};
+					};
+				};
+			};
+
+			imx490_d@1c {
+				compatible = "nvidia,imx490";
+
+				reg = <0x1c>;
+
+				/* Physical dimensions of sensor */
+				physical_w = "3.764";
+				physical_h = "2.738";
+
+				sensor_model ="imx490";
+
+				/* Defines number of frames to be dropped by driver internally after applying */
+				/* sensor crop settings. Some sensors send corrupt frames after applying */
+				/* crop co-ordinates */
+				post_crop_frame_drop = "0";
+
+				/* Convert Gain to unit of dB (decibel) befor passing to kernel driver */
+				use_decibel_gain = "true";
+
+				/* enable CID_SENSOR_MODE_ID for sensor modes selection */
+				use_sensor_mode_id = "true";
+
+				/**
+				* A modeX node is required to support v4l2 driver
+				* implementation with NVIDIA camera software stack
+				*
+				* mclk_khz = "";
+				* Standard MIPI driving clock, typically 24MHz
+				*
+				* num_lanes = "";
+				* Number of lane channels sensor is programmed to output
+				*
+				* tegra_sinterface = "";
+				* The base tegra serial interface lanes are connected to
+				*
+				* vc_id = "";
+				* The virtual channel id of the sensor.
+				*
+				* discontinuous_clk = "";
+				* The sensor is programmed to use a discontinuous clock on MIPI lanes
+				*
+				* dpcm_enable = "true";
+				* The sensor is programmed to use a DPCM modes
+				*
+				* cil_settletime = "";
+				* MIPI lane settle time value.
+				* A "0" value attempts to autocalibrate based on mclk_khz and pix_clk_hz
+				*
+				* active_w = "";
+				* Pixel active region width
+				*
+				* active_h = "";
+				* Pixel active region height
+				*
+				* dynamic_pixel_bit_depth = "";
+				* sensor dynamic bit depth for sensor mode
+				*
+				* csi_pixel_bit_depth = "";
+				* sensor output bit depth for sensor mode
+				*
+				* mode_type="";
+				* Sensor mode type, For eg: yuv, Rgb, bayer, bayer_wdr_pwl
+				*
+				* pixel_phase="";
+				* Pixel phase for sensor mode, For eg: rggb, vyuy, rgb888
+				*
+				* readout_orientation = "0";
+				* Based on camera module orientation.
+				* Only change readout_orientation if you specifically
+				* Program a different readout order for this mode
+				*
+				* line_length = "";
+				* Pixel line length (width) for sensor mode.
+				* This is used to calibrate features in our camera stack.
+				*
+				* pix_clk_hz = "";
+				* Sensor pixel clock used for calculations like exposure and framerate
+				*
+				*
+				*
+				*
+				* inherent_gain = "";
+				* Gain obtained inherently from mode (ie. pixel binning)
+				*
+				* min_gain_val = ""; (floor to 6 decimal places)
+				* max_gain_val = ""; (floor to 6 decimal places)
+				* Gain limits for mode
+				* if use_decibel_gain = "true", please set the gain as decibel
+				*
+				* min_exp_time = ""; (ceil to integer)
+				* max_exp_time = ""; (ceil to integer)
+				* Exposure Time limits for mode (lines per exposure)
+				*
+				*
+				* min_hdr_ratio = "";
+				* max_hdr_ratio = "";
+				* HDR Ratio limits for mode
+				*
+				* min_framerate = "";
+				* max_framerate = "";
+				* 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 {/*mode IMX490_MODE_2880x1860_CROP_30FPS*/
+					mclk_khz = "24000";
+					num_lanes = "4";
+					tegra_sinterface = "serial_c";
+					vc_id = "1";
+					discontinuous_clk = "no";
+					dpcm_enable = "false";
+					cil_settletime = "0";
+					dynamic_pixel_bit_depth = "12";
+					csi_pixel_bit_depth = "12";
+					mode_type = "bayer";
+					pixel_phase = "rggb";
+					num_of_ignored_lines = "4"; /* optical black */
+
+					active_w = "2880";
+					active_h = "1860";
+					readout_orientation = "0";
+					line_length = "3000";
+					inherent_gain = "1";
+					pix_clk_hz = "180000000";
+					serdes_pix_clk_hz = "833333333";
+
+					gain_factor = "10";
+					min_gain_val = "0"; /* dB */
+					max_gain_val = "300"; /* dB */
+					step_gain_val = "3"; /* 0.3 */
+					default_gain = "0";
+					min_hdr_ratio = "1";
+					max_hdr_ratio = "1";
+					framerate_factor = "1000000";
+					min_framerate = "20000000";
+					max_framerate = "20000000";
+					step_framerate = "1";
+					default_framerate = "20000000";
+					exposure_factor = "1000000";
+					min_exp_time = "4"; /* minimum exposure time in lines from IMX490 datasheet */
+					max_exp_time = "1992"; /* maximum exposure time in lines from IMX490 datasheet */
+					step_exp_time = "1";
+					default_exp_time = "500";
+					embedded_metadata_height = "0";
+				};
+				ports {
+					#address-cells = <1>;
+					#size-cells = <0>;
+					port@0 {
+						reg = <0>;
+						imx490_imx490_out3: endpoint {
+							vc-id = <1>;
+							port-index = <2>;
+							bus-width = <4>;
+							remote-endpoint = <&imx490_csi_in3>;
+						};
+					};
+				};
+			};
+			};
+			i2c@2 {
+			imx490_e@1b {
+				compatible = "nvidia,imx490";
+
+				reg = <0x1b>;
+
+				/* Physical dimensions of sensor */
+				physical_w = "3.764";
+				physical_h = "2.738";
+
+				sensor_model ="imx490";
+
+				/* Defines number of frames to be dropped by driver internally after applying */
+				/* sensor crop settings. Some sensors send corrupt frames after applying */
+				/* crop co-ordinates */
+				post_crop_frame_drop = "0";
+
+				/* Convert Gain to unit of dB (decibel) befor passing to kernel driver */
+				use_decibel_gain = "true";
+
+				/* enable CID_SENSOR_MODE_ID for sensor modes selection */
+				use_sensor_mode_id = "true";
+
+				/**
+				* A modeX node is required to support v4l2 driver
+				* implementation with NVIDIA camera software stack
+				*
+				* mclk_khz = "";
+				* Standard MIPI driving clock, typically 24MHz
+				*
+				* num_lanes = "";
+				* Number of lane channels sensor is programmed to output
+				*
+				* tegra_sinterface = "";
+				* The base tegra serial interface lanes are connected to
+				*
+				* vc_id = "";
+				* The virtual channel id of the sensor.
+				*
+				* discontinuous_clk = "";
+				* The sensor is programmed to use a discontinuous clock on MIPI lanes
+				*
+				* dpcm_enable = "true";
+				* The sensor is programmed to use a DPCM modes
+				*
+				* cil_settletime = "";
+				* MIPI lane settle time value.
+				* A "0" value attempts to autocalibrate based on mclk_khz and pix_clk_hz
+				*
+				* active_w = "";
+				* Pixel active region width
+				*
+				* active_h = "";
+				* Pixel active region height
+				*
+				* dynamic_pixel_bit_depth = "";
+				* sensor dynamic bit depth for sensor mode
+				*
+				* csi_pixel_bit_depth = "";
+				* sensor output bit depth for sensor mode
+				*
+				* mode_type="";
+				* Sensor mode type, For eg: yuv, Rgb, bayer, bayer_wdr_pwl
+				*
+				* pixel_phase="";
+				* Pixel phase for sensor mode, For eg: rggb, vyuy, rgb888
+				*
+				* readout_orientation = "0";
+				* Based on camera module orientation.
+				* Only change readout_orientation if you specifically
+				* Program a different readout order for this mode
+				*
+				* line_length = "";
+				* Pixel line length (width) for sensor mode.
+				* This is used to calibrate features in our camera stack.
+				*
+				* pix_clk_hz = "";
+				* Sensor pixel clock used for calculations like exposure and framerate
+				*
+				*
+				*
+				*
+				* inherent_gain = "";
+				* Gain obtained inherently from mode (ie. pixel binning)
+				*
+				* min_gain_val = ""; (floor to 6 decimal places)
+				* max_gain_val = ""; (floor to 6 decimal places)
+				* Gain limits for mode
+				* if use_decibel_gain = "true", please set the gain as decibel
+				*
+				* min_exp_time = ""; (ceil to integer)
+				* max_exp_time = ""; (ceil to integer)
+				* Exposure Time limits for mode (lines per exposure)
+				*
+				*
+				* min_hdr_ratio = "";
+				* max_hdr_ratio = "";
+				* HDR Ratio limits for mode
+				*
+				* min_framerate = "";
+				* max_framerate = "";
+				* 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.
+				*/
 
-		nvcsi@15a00000 {
-			num-channels = <2>;
-			#address-cells = <1>;
-			#size-cells = <0>;
-			channel@0 {
-				reg = <0>;
+				mode0 {/*mode IMX490_MODE_2880x1860_CROP_30FPS*/
+					mclk_khz = "24000";
+					num_lanes = "4";
+					tegra_sinterface = "serial_e";
+					vc_id = "0";
+					discontinuous_clk = "no";
+					dpcm_enable = "false";
+					cil_settletime = "0";
+					dynamic_pixel_bit_depth = "12";
+					csi_pixel_bit_depth = "12";
+					mode_type = "bayer";
+					pixel_phase = "rggb";
+					num_of_ignored_lines = "4"; /* optical black */
+
+					active_w = "2880";
+					active_h = "1860";
+					readout_orientation = "0";
+					line_length = "3000";
+					inherent_gain = "1";
+					pix_clk_hz = "180000000";
+					serdes_pix_clk_hz = "833333333";
+
+					gain_factor = "10";
+					min_gain_val = "0"; /* dB */
+					max_gain_val = "300"; /* dB */
+					step_gain_val = "3"; /* 0.3 */
+					default_gain = "0";
+					min_hdr_ratio = "1";
+					max_hdr_ratio = "1";
+					framerate_factor = "1000000";
+					min_framerate = "20000000";
+					max_framerate = "20000000";
+					step_framerate = "1";
+					default_framerate = "20000000";
+					exposure_factor = "1000000";
+					min_exp_time = "4"; /* minimum exposure time in lines from IMX490 datasheet */
+					max_exp_time = "1992"; /* maximum exposure time in lines from IMX490 datasheet */
+					step_exp_time = "1";
+					default_exp_time = "500";
+					embedded_metadata_height = "0";
+				};
 				ports {
 					#address-cells = <1>;
 					#size-cells = <0>;
 					port@0 {
 						reg = <0>;
-						imx390_csi_in0: endpoint@0 {
-							port-index = <0>;
-							bus-width = <2>;
-							remote-endpoint = <&imx390_imx390_out0>;
-						};
-					};
-					port@1 {
-						reg = <1>;
-						imx390_csi_out0: endpoint@1 {
-							remote-endpoint = <&imx390_vi_in0>;
+						imx490_imx490_out4: endpoint {
+							vc-id = <0>;
+							port-index = <4>;
+							bus-width = <4>;
+							remote-endpoint = <&imx490_csi_in4>;
 						};
 					};
 				};
 			};
-			channel@1 {
-				reg = <1>;
+
+			imx490_f@1c {
+				compatible = "nvidia,imx490";
+
+				reg = <0x1c>;
+
+				/* Physical dimensions of sensor */
+				physical_w = "3.764";
+				physical_h = "2.738";
+
+				sensor_model ="imx490";
+
+				/* Defines number of frames to be dropped by driver internally after applying */
+				/* sensor crop settings. Some sensors send corrupt frames after applying */
+				/* crop co-ordinates */
+				post_crop_frame_drop = "0";
+
+				/* Convert Gain to unit of dB (decibel) befor passing to kernel driver */
+				use_decibel_gain = "true";
+
+				/* enable CID_SENSOR_MODE_ID for sensor modes selection */
+				use_sensor_mode_id = "true";
+
+				/**
+				* A modeX node is required to support v4l2 driver
+				* implementation with NVIDIA camera software stack
+				*
+				* mclk_khz = "";
+				* Standard MIPI driving clock, typically 24MHz
+				*
+				* num_lanes = "";
+				* Number of lane channels sensor is programmed to output
+				*
+				* tegra_sinterface = "";
+				* The base tegra serial interface lanes are connected to
+				*
+				* vc_id = "";
+				* The virtual channel id of the sensor.
+				*
+				* discontinuous_clk = "";
+				* The sensor is programmed to use a discontinuous clock on MIPI lanes
+				*
+				* dpcm_enable = "true";
+				* The sensor is programmed to use a DPCM modes
+				*
+				* cil_settletime = "";
+				* MIPI lane settle time value.
+				* A "0" value attempts to autocalibrate based on mclk_khz and pix_clk_hz
+				*
+				* active_w = "";
+				* Pixel active region width
+				*
+				* active_h = "";
+				* Pixel active region height
+				*
+				* dynamic_pixel_bit_depth = "";
+				* sensor dynamic bit depth for sensor mode
+				*
+				* csi_pixel_bit_depth = "";
+				* sensor output bit depth for sensor mode
+				*
+				* mode_type="";
+				* Sensor mode type, For eg: yuv, Rgb, bayer, bayer_wdr_pwl
+				*
+				* pixel_phase="";
+				* Pixel phase for sensor mode, For eg: rggb, vyuy, rgb888
+				*
+				* readout_orientation = "0";
+				* Based on camera module orientation.
+				* Only change readout_orientation if you specifically
+				* Program a different readout order for this mode
+				*
+				* line_length = "";
+				* Pixel line length (width) for sensor mode.
+				* This is used to calibrate features in our camera stack.
+				*
+				* pix_clk_hz = "";
+				* Sensor pixel clock used for calculations like exposure and framerate
+				*
+				*
+				*
+				*
+				* inherent_gain = "";
+				* Gain obtained inherently from mode (ie. pixel binning)
+				*
+				* min_gain_val = ""; (floor to 6 decimal places)
+				* max_gain_val = ""; (floor to 6 decimal places)
+				* Gain limits for mode
+				* if use_decibel_gain = "true", please set the gain as decibel
+				*
+				* min_exp_time = ""; (ceil to integer)
+				* max_exp_time = ""; (ceil to integer)
+				* Exposure Time limits for mode (lines per exposure)
+				*
+				*
+				* min_hdr_ratio = "";
+				* max_hdr_ratio = "";
+				* HDR Ratio limits for mode
+				*
+				* min_framerate = "";
+				* max_framerate = "";
+				* 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 {/*mode IMX490_MODE_2880x1860_CROP_30FPS*/
+					mclk_khz = "24000";
+					num_lanes = "4";
+					tegra_sinterface = "serial_e";
+					vc_id = "1";
+					discontinuous_clk = "no";
+					dpcm_enable = "false";
+					cil_settletime = "0";
+					dynamic_pixel_bit_depth = "12";
+					csi_pixel_bit_depth = "12";
+					mode_type = "bayer";
+					pixel_phase = "rggb";
+					num_of_ignored_lines = "4"; /* optical black */
+
+					active_w = "2880";
+					active_h = "1860";
+					readout_orientation = "0";
+					line_length = "3000";
+					inherent_gain = "1";
+					pix_clk_hz = "180000000";
+					serdes_pix_clk_hz = "833333333";
+
+					gain_factor = "10";
+					min_gain_val = "0"; /* dB */
+					max_gain_val = "300"; /* dB */
+					step_gain_val = "3"; /* 0.3 */
+					default_gain = "0";
+					min_hdr_ratio = "1";
+					max_hdr_ratio = "1";
+					framerate_factor = "1000000";
+					min_framerate = "20000000";
+					max_framerate = "20000000";
+					step_framerate = "1";
+					default_framerate = "20000000";
+					exposure_factor = "1000000";
+					min_exp_time = "4"; /* minimum exposure time in lines from IMX490 datasheet */
+					max_exp_time = "1992"; /* maximum exposure time in lines from IMX490 datasheet */
+					step_exp_time = "1";
+					default_exp_time = "500";
+					embedded_metadata_height = "0";
+				};
 				ports {
 					#address-cells = <1>;
 					#size-cells = <0>;
 					port@0 {
 						reg = <0>;
-						imx390_csi_in1: endpoint@2 {
-							port-index = <0>;
-							bus-width = <2>;
-							remote-endpoint = <&imx390_imx390_out1>;
-						};
-					};
-					port@1 {
-						reg = <1>;
-						imx390_csi_out1: endpoint@3 {
-							remote-endpoint = <&imx390_vi_in1>;
+						imx490_imx490_out5: endpoint {
+							vc-id = <1>;
+							port-index = <4>;
+							bus-width = <4>;
+							remote-endpoint = <&imx490_csi_in5>;
 						};
 					};
 				};
 			};
-		};
-	};
-
-	i2c@3180000 {
-		tca9546@70 {
-			i2c@0 {
-			imx390_a@1b {
-				compatible = "nvidia,imx390";
+			};
+			i2c@3 {
+			imx490_g@1b {
+				compatible = "nvidia,imx490";
 
 				reg = <0x1b>;
 
 				/* Physical dimensions of sensor */
-				physical_w = "15.0";
-				physical_h = "12.5";
+				physical_w = "3.764";
+				physical_h = "2.738";
 
-				sensor_model ="imx390";
+				sensor_model ="imx490";
 
 				/* Defines number of frames to be dropped by driver internally after applying */
 				/* sensor crop settings. Some sensors send corrupt frames after applying */
@@ -202,10 +1366,10 @@
 				* If sensor does not support embedded metadata value should be 0.
 				*/
 
-				mode0 {/*mode IMX390_MODE_1920X1080_CROP_30FPS*/
+				mode0 {/*mode IMX490_MODE_2880x1860_CROP_30FPS*/
 					mclk_khz = "24000";
-					num_lanes = "2";
-					tegra_sinterface = "serial_a";
+					num_lanes = "4";
+					tegra_sinterface = "serial_g";
 					vc_id = "0";
 					discontinuous_clk = "no";
 					dpcm_enable = "false";
@@ -214,13 +1378,14 @@
 					csi_pixel_bit_depth = "12";
 					mode_type = "bayer";
 					pixel_phase = "rggb";
+					num_of_ignored_lines = "4"; /* optical black */
 
-					active_w = "1920";
-					active_h = "1080";
+					active_w = "2880";
+					active_h = "1860";
 					readout_orientation = "0";
-					line_length = "2200";
+					line_length = "3000";
 					inherent_gain = "1";
-					pix_clk_hz = "74250000";
+					pix_clk_hz = "180000000";
 					serdes_pix_clk_hz = "833333333";
 
 					gain_factor = "10";
@@ -247,36 +1412,26 @@
 					#size-cells = <0>;
 					port@0 {
 						reg = <0>;
-						imx390_imx390_out0: endpoint {
+						imx490_imx490_out6: endpoint {
 							vc-id = <0>;
-							port-index = <0>;
-							bus-width = <2>;
-							remote-endpoint = <&imx390_csi_in0>;
-							};
+							port-index = <6>;
+							bus-width = <4>;
+							remote-endpoint = <&imx490_csi_in6>;
 						};
 					};
-				gmsl-link {
-					src-csi-port = "b";
-					dst-csi-port = "a";
-					serdes-csi-link = "a";
-					csi-mode = "1x4";
-					st-vc = <0>;
-					vc-id = <0>;
-					num-lanes = <2>;
-					streams = "ued-u1", "raw12";
-					};
 				};
+			};
 
-			imx390_b@1c {
-				compatible = "nvidia,imx390";
+			imx490_h@1c {
+				compatible = "nvidia,imx490";
 
 				reg = <0x1c>;
 
 				/* Physical dimensions of sensor */
-				physical_w = "15.0";
-				physical_h = "12.5";
+				physical_w = "3.764";
+				physical_h = "2.738";
 
-				sensor_model ="imx390";
+				sensor_model ="imx490";
 
 				/* Defines number of frames to be dropped by driver internally after applying */
 				/* sensor crop settings. Some sensors send corrupt frames after applying */
@@ -374,10 +1529,10 @@
 				* If sensor does not support embedded metadata value should be 0.
 				*/
 
-				mode0 {/*mode IMX390_MODE_1920X1080_CROP_30FPS*/
+				mode0 {/*mode IMX490_MODE_2880x1860_CROP_30FPS*/
 					mclk_khz = "24000";
-					num_lanes = "2";
-					tegra_sinterface = "serial_a";
+					num_lanes = "4";
+					tegra_sinterface = "serial_g";
 					vc_id = "1";
 					discontinuous_clk = "no";
 					dpcm_enable = "false";
@@ -386,13 +1541,14 @@
 					csi_pixel_bit_depth = "12";
 					mode_type = "bayer";
 					pixel_phase = "rggb";
+					num_of_ignored_lines = "4"; /* optical black */
 
-					active_w = "1920";
-					active_h = "1080";
+					active_w = "2880";
+					active_h = "1860";
 					readout_orientation = "0";
-					line_length = "2200";
+					line_length = "3000";
 					inherent_gain = "1";
-					pix_clk_hz = "74250000";
+					pix_clk_hz = "180000000";
 					serdes_pix_clk_hz = "833333333";
 
 					gain_factor = "10";
@@ -419,26 +1575,16 @@
 					#size-cells = <0>;
 					port@0 {
 						reg = <0>;
-						imx390_imx390_out1: endpoint {
+						imx490_imx490_out7: endpoint {
 							vc-id = <1>;
-							port-index = <0>;
-							bus-width = <2>;
-							remote-endpoint = <&imx390_csi_in1>;
-							};
+							port-index = <6>;
+							bus-width = <4>;
+							remote-endpoint = <&imx490_csi_in7>;
 						};
 					};
-				gmsl-link {
-					src-csi-port = "b";
-					dst-csi-port = "a";
-					serdes-csi-link = "b";
-					csi-mode = "1x4";
-					st-vc = <0>;
-					vc-id = <1>;
-					num-lanes = <2>;
-					streams = "ued-u1", "raw12";
-					};
 				};
 			};
+			};
 		};
 	};
 };
@@ -474,9 +1620,9 @@
 		* isp_bw_margin_pct = <>;
 		* Isp bandwidth margin in percentage
 		*/
-		num_csi_lanes = <2>;
+		num_csi_lanes = <8>;
 		max_lane_speed = <4000000>;
-		min_bits_per_pixel = <10>;
+		min_bits_per_pixel = <12>;
 		vi_peak_byte_per_pixel = <2>;
 		vi_bw_margin_pct = <25>;
 		isp_peak_byte_per_pixel = <5>;
@@ -492,29 +1638,107 @@
 		 */
 		modules {
 			module0 {
-				badge = "imx390_rear";
-				position = "rear";
+				badge = "imx490_rear";
+				position = "bottomleft";
 				orientation = "1";
 				drivernode0 {
 					/* Declare PCL support driver (classically known as guid)  */
 					pcl_id = "v4l2_sensor";
 					/* Driver v4l2 device name */
-					devname = "imx390 30-001b";
+					devname = "imx490 30-001b";
 					/* Declare the device-tree hierarchy to driver instance */
-					proc-device-tree = "/proc/device-tree/i2c@3180000/tca9546@70/i2c@0/imx390_a@1b";
+					proc-device-tree = "/proc/device-tree/i2c@3180000/tca9546@70/i2c@0/imx490_a@1b";
 				};
 			};
 			module1 {
-				badge = "imx390_front";
-				position = "front";
+				badge = "imx490_front";
+				position = "bottomleft";
+				orientation = "1";
+				drivernode0 {
+					/* Declare PCL support driver (classically known as guid)  */
+					pcl_id = "v4l2_sensor";
+					/* Driver v4l2 device name */
+					devname = "imx490 30-001c";
+					/* Declare the device-tree hierarchy to driver instance */
+					proc-device-tree = "/proc/device-tree/i2c@3180000/tca9546@70/i2c@0/imx490_b@1c";
+				};
+			};
+			module2 {
+				badge = "imx490_bottomleft";
+				position = "bottomleft";
+				orientation = "1";
+				drivernode0 {
+					/* Declare PCL support driver (classically known as guid)  */
+					pcl_id = "v4l2_sensor";
+					/* Driver v4l2 device name */
+					devname = "imx490 31-001b";
+					/* Declare the device-tree hierarchy to driver instance */
+					proc-device-tree = "/proc/device-tree/i2c@3180000/tca9546@70/i2c@1/imx490_c@1b";
+				};
+			};
+			module3 {
+				badge = "imx490_bottomright";
+				position = "bottomright";
+				orientation = "1";
+				drivernode0 {
+					/* Declare PCL support driver (classically known as guid)  */
+					pcl_id = "v4l2_sensor";
+					/* Driver v4l2 device name */
+					devname = "imx490 31-001c";
+					/* Declare the device-tree hierarchy to driver instance */
+					proc-device-tree = "/proc/device-tree/i2c@3180000/tca9546@70/i2c@1/imx490_d@1c";
+				};
+			};
+			module4 {
+				badge = "imx490_topleft";
+				position = "topleft";
+				orientation = "1";
+				drivernode0 {
+					/* Declare PCL support driver (classically known as guid)  */
+					pcl_id = "v4l2_sensor";
+					/* Driver v4l2 device name */
+					devname = "imx490 32-001b";
+					/* Declare the device-tree hierarchy to driver instance */
+					proc-device-tree = "/proc/device-tree/i2c@3180000/tca9546@70/i2c@2/imx490_e@1b";
+				};
+			};
+			module5 {
+				badge = "imx490_topright";
+				position = "topright";
+				orientation = "1";
+				drivernode0 {
+					/* Declare PCL support driver (classically known as guid)  */
+					pcl_id = "v4l2_sensor";
+					/* Driver v4l2 device name */
+					devname = "imx490 32-001c";
+					/* Declare the device-tree hierarchy to driver instance */
+					proc-device-tree = "/proc/device-tree/i2c@3180000/tca9546@70/i2c@2/imx490_f@1c";
+				};
+			};
+			module6 {
+				badge = "imx490_centerleft";
+				position = "centerleft";
+				orientation = "1";
+				drivernode0 {
+					/* Declare PCL support driver (classically known as guid)  */
+					pcl_id = "v4l2_sensor";
+					/* Driver v4l2 device name */
+					devname = "imx490 33-001b";
+					/* Declare the device-tree hierarchy to driver instance */
+					proc-device-tree = "/proc/device-tree/i2c@3180000/tca9546@70/i2c@3/imx490_g@1b";
+				};
+			};
+			module7 {
+				badge = "imx490_centerright";
+				position = "centerright";
 				orientation = "1";
 				drivernode0 {
 					/* Declare PCL support driver (classically known as guid)  */
 					pcl_id = "v4l2_sensor";
 					/* Driver v4l2 device name */
-					devname = "imx390 30-001c";
+					devname = "imx490 33-001c";
 					/* Declare the device-tree hierarchy to driver instance */
-					proc-device-tree = "/proc/device-tree/i2c@3180000/tca9546@70/i2c@0/imx390_b@1c";
+					proc-device-tree = "/proc/device-tree/i2c@3180000/tca9546@70/i2c@3/imx490_h@1c";
 				};
 			};
 		};
diff --git a/nvidia/platform/t19x/galen/kernel-dts/common/tegra194-p2822-0000-camera-imx390-a00.dtsi b/nvidia/platform/t19x/galen/kernel-dts/common/tegra194-p2822-0000-camera-imx390-a00.dtsi
index fadfb0efcc96..c611135ab965 100644
--- a/nvidia/platform/t19x/galen/kernel-dts/common/tegra194-p2822-0000-camera-imx390-a00.dtsi
+++ b/nvidia/platform/t19x/galen/kernel-dts/common/tegra194-p2822-0000-camera-imx390-a00.dtsi
@@ -1,5 +1,6 @@
 /*
- * Copyright (c) 2018-2019, NVIDIA CORPORATION.  All rights reserved.
+ * Copyright (c) 2020, Leopard Imaging Inc.  All rights reserved.
+ * Based on Copyright (c) 2018-2019, NVIDIA CORPORATION.  All rights reserved.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -18,11 +19,23 @@
 #include "dt-bindings/clock/tegra194-clock.h"
 
 #define CAM0_RST_L	TEGRA194_MAIN_GPIO(H, 3)
+#define CAM0_PWDN	TEGRA194_MAIN_GPIO(H, 6)
+#define CAM1_RST_L	TEGRA194_MAIN_GPIO(T, 6)
+#define CAM1_PWDN	TEGRA194_MAIN_GPIO(T, 5)
 #define CAMERA_I2C_MUX_BUS(x) (0x1E + x)
 
 /* camera control gpio definitions */
 
 / {
+
+	gpio@2200000 {
+		camera-control-output-low {
+			gpio-hog;
+			output-low;
+			gpios = <CAM1_PWDN 1>;
+			label = "cam1-rst";
+		};
+	};
 	i2c@3180000 {
 		tca9546@70 {
 			compatible = "nxp,pca9546";
@@ -40,49 +53,95 @@
 				i2c-mux,deselect-on-exit;
 				#address-cells = <1>;
 				#size-cells = <0>;
-				dser: max9296@48 {
-					compatible = "nvidia,max9296";
-					reg = <0x48>;
-					csi-mode = "2x4";
-					max-src = <2>;
-					reset-gpios = <&tegra_main_gpio CAM0_RST_L GPIO_ACTIVE_HIGH>;
+				imx490_a@1b {
+					def-addr = <0x21>;
+					/* Define any required hw resources needed by driver */
+					/* ie. clocks, io pins, power sources */
+					clocks = <&bpmp_clks TEGRA194_CLK_EXTPERIPH1>,
+							<&bpmp_clks TEGRA194_CLK_EXTPERIPH1>;
+					clock-names = "extperiph1", "pllp_grtba";
+					mclk = "extperiph1";
 				};
-				ser_prim: max9295_prim@62 {
-					compatible = "nvidia,max9295";
-					reg = <0x62>;
-					is-prim-ser;
+				imx490_b@1c {
+					def-addr = <0x21>;
+					/* Define any required hw resources needed by driver */
+					/* ie. clocks, io pins, power sources */
+					clocks = <&bpmp_clks TEGRA194_CLK_EXTPERIPH1>,
+							<&bpmp_clks TEGRA194_CLK_EXTPERIPH1>;
+					clock-names = "extperiph1", "pllp_grtba";
+					mclk = "extperiph1";
 				};
-				ser_a: max9295_a@40 {
-					compatible = "nvidia,max9295";
-					reg = <0x40>;
-					nvidia,gmsl-dser-device = <&dser>;
+			};
+			i2c@1 {
+				reg = <1>;
+				i2c-mux,deselect-on-exit;
+				#address-cells = <1>;
+				#size-cells = <0>;
+				imx490_c@1b {
+					def-addr = <0x21>;
+					/* Define any required hw resources needed by driver */
+					/* ie. clocks, io pins, power sources */
+					clocks = <&bpmp_clks TEGRA194_CLK_EXTPERIPH1>,
+							<&bpmp_clks TEGRA194_CLK_EXTPERIPH1>;
+					clock-names = "extperiph1", "pllp_grtba";
+					mclk = "extperiph1";
 				};
-				ser_b: max9295_b@60 {
-					compatible = "nvidia,max9295";
-					reg = <0x60>;
-					nvidia,gmsl-dser-device = <&dser>;
+				imx490_d@1c {
+					def-addr = <0x21>;
+					/* Define any required hw resources needed by driver */
+					/* ie. clocks, io pins, power sources */
+					clocks = <&bpmp_clks TEGRA194_CLK_EXTPERIPH1>,
+							<&bpmp_clks TEGRA194_CLK_EXTPERIPH1>;
+					clock-names = "extperiph1", "pllp_grtba";
+					mclk = "extperiph1";
+				};
+			};
+			i2c@2 {
+				reg = <2>;
+				i2c-mux,deselect-on-exit;
+				#address-cells = <1>;
+				#size-cells = <0>;
+				imx490_e@1b {
+					def-addr = <0x21>;
+					/* Define any required hw resources needed by driver */
+					/* ie. clocks, io pins, power sources */
+					clocks = <&bpmp_clks TEGRA194_CLK_EXTPERIPH1>,
+							<&bpmp_clks TEGRA194_CLK_EXTPERIPH1>;
+					clock-names = "extperiph1", "pllp_grtba";
+					mclk = "extperiph1";
 				};
-				imx390_a@1b {
-					def-addr = <0x1a>;
+				imx490_f@1c {
+					def-addr = <0x21>;
+					/* Define any required hw resources needed by driver */
+					/* ie. clocks, io pins, power sources */
+					clocks = <&bpmp_clks TEGRA194_CLK_EXTPERIPH1>,
+							<&bpmp_clks TEGRA194_CLK_EXTPERIPH1>;
+					clock-names = "extperiph1", "pllp_grtba";
+					mclk = "extperiph1";
+				};
+			};
+			i2c@3 {
+				reg = <3>;
+				i2c-mux,deselect-on-exit;
+				#address-cells = <1>;
+				#size-cells = <0>;
+				imx490_g@1b {
+					def-addr = <0x21>;
 					/* Define any required hw resources needed by driver */
 					/* ie. clocks, io pins, power sources */
 					clocks = <&bpmp_clks TEGRA194_CLK_EXTPERIPH1>,
 							<&bpmp_clks TEGRA194_CLK_EXTPERIPH1>;
 					clock-names = "extperiph1", "pllp_grtba";
 					mclk = "extperiph1";
-					nvidia,gmsl-ser-device = <&ser_a>;
-					nvidia,gmsl-dser-device = <&dser>;
 				};
-				imx390_b@1c {
-					def-addr = <0x1a>;
+				imx490_h@1c {
+					def-addr = <0x21>;
 					/* Define any required hw resources needed by driver */
 					/* ie. clocks, io pins, power sources */
 					clocks = <&bpmp_clks TEGRA194_CLK_EXTPERIPH1>,
 							<&bpmp_clks TEGRA194_CLK_EXTPERIPH1>;
 					clock-names = "extperiph1", "pllp_grtba";
 					mclk = "extperiph1";
-					nvidia,gmsl-ser-device = <&ser_b>;
-					nvidia,gmsl-dser-device = <&dser>;
 				};
 			};
 		};
diff --git a/nvidia/platform/t19x/galen/kernel-dts/tegra194-p2888-0001-p2822-0000.dts b/nvidia/platform/t19x/galen/kernel-dts/tegra194-p2888-0001-p2822-0000.dts
index f4073dbc2f6e..beb6e076d6d1 100644
--- a/nvidia/platform/t19x/galen/kernel-dts/tegra194-p2888-0001-p2822-0000.dts
+++ b/nvidia/platform/t19x/galen/kernel-dts/tegra194-p2888-0001-p2822-0000.dts
@@ -1,6 +1,7 @@
 /*
  * Top level DTS file for CVM:P2888-0001 and CVB:P2822-0000.
  *
+ * Copyright (c) 2020, Leopard Imaging Inc.  All rights reserved.
  * Copyright (c) 2017-2019, NVIDIA CORPORATION.  All rights reserved.
  *
  * This program is free software; you can redistribute it and/or modify
@@ -13,5 +14,4 @@
  * more details.
  */
 #include "common/tegra194-p2888-0001-p2822-0000-common.dtsi"
-#include "common/tegra194-p2822-camera-modules.dtsi"
-#include "t19x-common-modules/tegra194-camera-plugin-manager.dtsi"
+#include "common/tegra194-p2822-0000-camera-imx390-a00.dtsi"

Resolved, our OTA flash wasn’t properly updating device tree

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.