Device tree problem

Hello guys,
I’m trying to write device driver for PAL/MIPI and i stucked on problem with device tree. I’m using Linux version 36.2 and AGX ORIN dev kit. My device tree:

tegra234-camera-adv7280-a00.dtsi
/ {
tegra-capture-vi {
num-channels = <1>;
ports {
#address-cells = <1>;
#size-cells = <0>;
port@0 {
reg = <0>;
vi_in0: endpoint {
port-index = <0>;
bus-width = <1>;
remote-endpoint = <&csi_out0>;
};
};
};
};
host1x@13e00000 {
nvcsi@15a00000 {
num-channels = <1>;
#address-cells = <1>;
#size-cells = <0>;
channel@0 {
reg = <0>;
ports {
#address-cells = <1>;
#size-cells = <0>;
port@0 {
reg = <0>;
csi_in0: endpoint@0 {
port-index = <0>;
bus-width = <1>;
remote-endpoint = <&csi_out0>;
};
};
port@1 {
reg = <1>;
csi_out0: endpoint@1 {
remote-endpoint = <&vi_in0>;
};
};
};
};
};
};
i2c@3180000 {
tca9546@70 {
i2c@2 {
adv7280_a@21 {
compatible = “adv,adv7280”;
/* I2C device address */
reg = <0x21>;

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

			/* Physical dimensions of sensor */
			physical_w = "3.674";
			physical_h = "2.738";

			sensor_model = "adv7280";

			/* 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";*/

			/* if true, delay gain setting by one frame to be in sync with exposure */
			delayed_gain = "true";

			/* 
			has-eeprom;
			fuse_id_start_addr = <91>;
			*/

			/**
			* ==== 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]
			* For convenience use 1 sec = 1000000us as conversion factor
			*
			* 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.

			* num_of_exposure = "";
			* Digital overlap(Dol) frames
			*
			* num_of_ignored_lines = "";
			* Used for cropping, eg. OB lines + Ignored area of effective pixel lines
			*
			* num_of_lines_offset_0 = "";
			* Used for cropping, vertical blanking in front of short exposure data
			* If more Dol frames are used, it can be extended, eg. num_of_lines_offset_1
			*
			* num_of_ignored_pixels = "";
			* Used for cropping, The length of line info(pixels)
			*
			* num_of_left_margin_pixels = "";
			* Used for cropping, the size of the left edge margin before
			* the active pixel area (after ignored pixels)
			*
			* num_of_right_margin_pixels = "";
			* Used for cropping, the size of the right edge margin after
			* the active pixel area
			*
			*/
			mode0 { //
				mclk_khz = "24000";
				num_lanes = "1";
				tegra_sinterface = "serial_a";
				phy_mode = "DPHY";
				discontinuous_clk = "yes";
				dpcm_enable = "false";
				cil_settletime = "0";

				active_w = "3840";
				active_h = "2160";
				mode_type = "bayer";
				pixel_phase = "rggb";
				csi_pixel_bit_depth = "10";
				readout_orientation = "0";
				line_length = "4208";
				inherent_gain = "1";
				mclk_multiplier = "24";
				pix_clk_hz = "576000000";

				gain_factor = "1000000";
				min_gain_val = "1000000";
				max_gain_val = "44400000";
				step_gain_val = "1";
				default_gain = "1000000";
				min_hdr_ratio = "1";
				max_hdr_ratio = "1";
				framerate_factor = "1000000";
				min_framerate = "1500000";
				max_framerate = "60000000";
				step_framerate = "1";
				default_framerate= "60000000";
				exposure_factor = "1000000";
				min_exp_time = "44";
				max_exp_time = "478696";
				step_exp_time = "1";
				default_exp_time = "16667";/* us */
				embedded_metadata_height = "1";
			};
			ports {
				#address-cells = <1>;
				#size-cells = <0>;
				port@0 {
					reg = <0>;
					adv7280_out0: endpoint {
						port-index = <0>;
						bus-width = <4>;
						remote-endpoint = <&csi_in0>;
						};
					};
				};
			};
		};
	};
 };};

/ {
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
*
* 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 = <1>;
max_lane_speed = <1500000>;
/
*
* 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 {
cam_module0: module0 {
status = “okay”;
cam_module0_drivernode0: drivernode0 {
status = “okay”;
};
};
};};

/* camera control gpio definitions */
/ {
i2c@3180000 {
tca9546@70 {
compatible = “nxp,pca9546”;
reg = <0x70>;
#address-cells = <1>;
#size-cells = <0>;

		i2c@0 {
			reg = <0>;
			i2c-mux,deselect-on-exit;
			#address-cells = <1>;
			#size-cells = <0>;
			adv7280_a@1a {
				/* Define any required hw resources needed by driver */
				/* ie. clocks, io pins, power sources */
				clocks = <&bpmp_clks TEGRA234_CLK_EXTPERIPH1>,
						 <&bpmp_clks TEGRA234_CLK_EXTPERIPH1>;
				clock-names = "extperiph1", "pllp_grtba";
				mclk = "extperiph1";
			};
		};
	};
};

};
/ {
tegra-camera-platform {
/**
* tpg_max_iso = <>;
* Max iso bw for 6 streams of tpg
* streams * nvcsi_freq * PG_bitrate / RG10 * BPP
* 6 * 102Mhz * 32 bits/ 10 bits * 2 Bps
* = 3916.8 MBps
*/
tpg_max_iso = <3916800>;
};

capture_vi_base: tegra-capture-vi {
	ports {
		vi_port0: port@0 {
			status = "okay";
			vi_in0: endpoint {
				vc-id = <0>;
				status = "okay";
			};
		};
	};
};

host1x@13e00000 {
	csi_base: nvcsi@15a00000 {
		num-tpg-channels = <36>;
		csi_chan0: channel@0 {
			status = "okay";
			ports {
				csi_chan0_port0: port@0 {
					status = "okay";
					csi_in0: endpoint@0 {
						status = "okay";
					};
				};
				csi_chan0_port1: port@1 {
					status = "okay";
					csi_out0: endpoint@1 {
						status = "okay";
					};
				};
			};
		};
	};
};

i2c@3180000 {
	e3326_cam0: ov5693_c@36 {
		status = "disabled";
	};
	e2832_cam0: e2832@2b {
		status = "disabled";
	};
	tca6408@21 {
		status = "disabled";
	};
	tca9548@77 {
		status = "disabled";
		i2c@0 {
			e3333_cam0: ov5693_a@36 {
				status = "disabled";
			};
		};
		i2c@1 {
			e3333_cam1: ov5693_b@36 {
				status = "disabled";
			};
		};
		i2c@2 {
			e3333_cam2: ov5693_c@36 {
				status = "disabled";
			};
		};
		i2c@3 {
			e3333_cam3: ov5693_d@36 {
				status = "disabled";
			};
		};
		i2c@4 {
			e3333_cam4: ov5693_e@36 {
				status = "disabled";
			};
		};
		i2c@5 {
			e3333_cam5: ov5693_g@36 {
				status = "disabled";
			};
		};
	};
	tca9546_70: tca9546@70 {
		status = "okay";
		i2c@0 {
			pca9570_a_24: pca9570_a@24 {
				status = "disabled";
			};
			adv7280_cam0: adv7280_a@21 {
				status = "okay";
			};
			imx185_cam0: imx185_a@1a {
				status = "disabled";
			};
			e3331_cam0: imx318_a@10 {
				status = "disabled";
			};
			max9296_dser: max9296@48 {
				status = "disabled";
			};
			max9295_prim: max9295_prim@62 {
				status = "disabled";
			};
			max9295_ser0: max9295_a@40 {
				status = "disabled";
			};
			max9295_ser1: max9295_b@60 {
				status = "disabled";
			};
			imx390_cam0: imx390_a@1b {
				status = "disabled";
			};
			imx390_cam1: imx390_b@1c {
				status = "disabled";
			};
		};
		i2c@1 {
			imx274_cam1: imx274_c@1a {
				status = "disabled";
			};
		};
	};
};

tcp: tegra-camera-platform {
	compatible = "nvidia, tegra-camera-platform";
	modules {
		cam_module0: module0 {
			status = "okay";
			cam_module0_drivernode0: drivernode0 {
				status = "okay";
			};
		};
	};
   };

};

When i try to compile new dtb via nvbuild.sh new dt seems like unconfigured, As far as I checked different posts this is most common and confirmed method.
Kind regards

Please check the programing guide to figure it out.

https://docs.nvidia.com/jetson/archives/r35.4.1/DeveloperGuide/text/SD/CameraDevelopment/SensorSoftwareDriverProgramming.html

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