Cannot create /dev/video0 devicenode --AGX Orin

Hi,all
Is there a big difference between the AGX Orin and other Jetson lines? Why was I unable to generate the /dev/video0 device node using the previous method?
exe command : sudo insmod nv_imx318.ko
print: [IMX318] probing v4l2 sensor at addr 0x10
tegracam sebsir driver : imx318_v2.0.6
Detected IMX318 sensor
The driver should match properly and probe successfully,However, the /dev/video0 device node is not generated in the /dev/ directory.
I tried to find a solution on the forum, but there seems to be no similar case.
Some people say that the vi binding relationship in the device tree may be wrong, but I used the files in the SDK and did not change them.
At the same time, I use imx185 driver sample and device tree file, get the same result.
Could you give me some suggestions or examples.
Similarly, I also tried to hang the CMOS sensor directly under i2c@3180000 instead of… /… /i2c@3180000/tca9546@70/i2c@0/imx318_a@10/ this device tree structure, still cannot generate /dev/Video0 node.

/*
 * Copyright (c) 2017-2021, NVIDIA CORPORATION.  All rights reserved.
 *
 * This program is free software; you can redistribute it and/or modify it
 * under the terms and conditions of the GNU General Public License,
 * version 2, as published by the Free Software Foundation.
 *
 * This program is distributed in the hope it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
 * more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

/ {
	tegra-capture-vi {
		num-channels = <1>;
		ports {
			#address-cells = <1>;
			#size-cells = <0>;
			port@0 {
				reg = <0>;
				e3331_vi_in0: endpoint {
					port-index = <0>;
					bus-width = <3>;
					remote-endpoint = <&e3331_csi_out0>;
				};
			};
		};
	};

	host1x@13e00000 {
		nvcsi@15a00000 {
			num-channels = <1>;
			channel@0 {
				reg = <0>;
				ports {
					#address-cells = <1>;
					#size-cells = <0>;
					port@0 {
						reg = <0>;
						e3331_csi_in0: endpoint@0 {
							port-index = <0>;
							bus-width = <3>;
							remote-endpoint = <&e3331_imx318_out0>;
						};
					};
					port@1 {
						reg = <1>;
						e3331_csi_out0: endpoint@1 {
							remote-endpoint = <&e3331_vi_in0>;
						};
					};
				};
			};
		};
	};

	i2c@3180000 {
		tca9546@70 {
			i2c@0 {
				imx318_a@10 {
					compatible = "sony,imx318";
					reg = <0x10>;

					/* Physical dimensions of sensor */
					physical_w = "6.811";
					physical_h = "5.254";

					sensor_model = "imx318";
					/* Define any required hw resources needed by driver */
					/* ie. clocks, io pins, power sources */
					avdd-reg = "vana";
					iovdd-reg = "vif";
					dvdd-reg = "vdig";

					has-eeprom;

					/**
					* ==== 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 { /*IMX318_MODE_5488X4112_30FPS*/
						mclk_khz = "24000";
						num_lanes = "3";
						phy_mode = "CPHY";
						tegra_sinterface = "serial_a";
						discontinuous_clk = "no";
						dpcm_enable = "false";
						cil_settletime = "30";

						active_w = "5488";
						active_h = "4112";
						mode_type = "bayer";
						pixel_phase = "bggr";
						csi_pixel_bit_depth = "10";
						readout_orientation = "0";
						line_length = "5488";
						inherent_gain = "1";
						mclk_multiplier = "31.25";
						pix_clk_hz = "750000000";

						gain_factor = "16";
						framerate_factor = "1000000";
						exposure_factor = "1000000";
						min_gain_val = "16"; /* 1.0 */
						max_gain_val = "256"; /* 16.0 */
						step_gain_val = "1"; /* 0.125 */
						default_gain = "16";
						min_hdr_ratio = "1";
						max_hdr_ratio = "1";
						min_framerate = "1500000"; /* 1.5 */
						max_framerate = "30000000"; /* 30 */
						step_framerate = "1";
						default_framerate= "30000000";
						min_exp_time = "34"; /* us */
						max_exp_time = "550385"; /* us */
						step_exp_time = "1";
						default_exp_time = "33334";/* us */
						embedded_metadata_height = "0";
					};

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

						port@0 {
							reg = <0>;
							e3331_imx318_out0: endpoint {
								port-index = <0>;
								bus-width = <3>;
								remote-endpoint = <&e3331_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
		* 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 = <3>;
		max_lane_speed = <1500000>;
		min_bits_per_pixel = <10>;
		vi_peak_byte_per_pixel = <2>;
		vi_bw_margin_pct = <25>;
		max_pixel_rate = <800000>;
		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 {
			module0 {
				badge = "e3331_rear_22N02A";
				position = "rear";
				orientation = "1";
				drivernode0 {
					pcl_id = "v4l2_sensor";
					devname = "imx318 30-0010";
					proc-device-tree = "/proc/device-tree/i2c@3180000/tca9546@70/i2c@0/imx318_a@10";
				};
			};
		};
	};
};

camera_modules changed disabled to okay

/*
 * Copyright (c) 2022, NVIDIA CORPORATION.  All rights reserved.
 *
 * This program is free software; you can redistribute it and/or modify it
 * under the terms and conditions of the GNU General Public License,
 * version 2, as published by the Free Software Foundation.
 *
 * This program is distributed in the hope it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
 * more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

/* These headers don't exist yet.
 * TODO: add below headers for corresponding sensor modules.
 * #include "tegra234-p3737-0000-camera-e3377-a00.dtsi"
 * #include "tegra234-p3737-0000-camera-e3326-a00.dtsi"
 * #include "tegra234-p3737-0000-camera-vivid.dtsi"
 * #include "tegra234-p3737-0000-camera-imx274-a00.dtsi"
 */

#include "tegra234-p3737-0000-camera-e3331-a00.dtsi"
//#include "tegra234-p3737-0000-camera-e3333-a00.dtsi"
//#include "tegra234-p3737-0000-camera-imx185-a00.dtsi"
//#include "tegra234-p3737-0000-camera-imx390-a00.dtsi"
//#include "tegra234-p3737-0000-camera-imx274-dual.dtsi"


#define CAM0_RST_L	TEGRA234_MAIN_GPIO(H, 3)
#define CAM0_PWDN	TEGRA234_MAIN_GPIO(H, 6)
#define CAM1_RST_L	TEGRA234_MAIN_GPIO(AC, 1)
#define CAM1_PWDN	TEGRA234_MAIN_GPIO(AC, 0)

/ {
	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>;
	};

	/* set camera gpio direction to output */
	gpio@2200000 {
		camera-control-output-low {
			gpio-hog;
			output-low;
			gpios = <CAM0_RST_L 0 CAM0_PWDN 0
				 CAM1_RST_L 0 CAM1_PWDN 0>;
			label = "cam0-rst", "cam0-pwdn",
				"cam1-rst", "cam1-pwdn";
		};
	};

	/* all cameras are disabled by default */
	capture_vi_base: tegra-capture-vi {
		ports {
			vi_port0: port@0 {
				status = "okay";
				vi_in0: endpoint {
					vc-id = <0>;
					status = "okay";
				};
			};
			vi_port1: port@1 {
				status = "disabled";
				vi_in1: endpoint {
					vc-id = <0>;
					status = "disabled";
				};
			};
			vi_port2: port@2 {
				status = "disabled";
				vi_in2: endpoint {
					vc-id = <0>;
					status = "disabled";
				};
			};
			vi_port3: port@3 {
				status = "disabled";
				vi_in3: endpoint {
					vc-id = <0>;
					status = "disabled";
				};
			};
			vi_port4: port@4 {
				status = "disabled";
				vi_in4: endpoint {
					vc-id = <0>;
					status = "disabled";
				};
			};
			vi_port5: port@5 {
				status = "disabled";
				vi_in5: endpoint {
					vc-id = <0>;
					status = "disabled";
				};
			};
		};
	};

	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";
						};
					};
				};
			};
			csi_chan1: channel@1 {
				status = "disabled";
				ports {
					csi_chan1_port0: port@0 {
						status = "disabled";
						csi_in1: endpoint@2 {
							status = "disabled";
						};
					};
					csi_chan1_port1: port@1 {
						status = "disabled";
						csi_out1: endpoint@3 {
							status = "disabled";
						};
					};
				};
			};
			csi_chan2: channel@2 {
				status = "disabled";
				ports {
					csi_chan2_port0: port@0 {
						status = "disabled";
						csi_in2: endpoint@4 {
							status = "disabled";
						};
					};
					csi_chan2_port1: port@1 {
						status = "disabled";
						csi_out2: endpoint@5 {
							status = "disabled";
						};
					};
				};
			};
			csi_chan3: channel@3 {
				status = "disabled";
				ports {
					csi_chan3_port0: port@0 {
						status = "disabled";
						csi_in3: endpoint@6 {
							status = "disabled";
						};
					};
					csi_chan3_port1: port@1 {
						status = "disabled";
						csi_out3: endpoint@7 {
							status = "disabled";
						};
					};
				};
			};
			csi_chan4: channel@4 {
				status = "disabled";
				ports {
					csi_chan4_port0: port@0 {
						status = "disabled";
						csi_in4: endpoint@8 {
							status = "disabled";
						};
					};
					csi_chan4_port1: port@1 {
						status = "disabled";
						csi_out4: endpoint@9 {
							status = "disabled";
						};
					};
				};
			};
			csi_chan5: channel@5 {
				status = "disabled";
				ports {
					csi_chan5_port0: port@0 {
						status = "disabled";
						csi_in5: endpoint@10 {
							status = "disabled";
						};
					};
					csi_chan5_port1: port@1 {
						status = "disabled";
						csi_out5: endpoint@11 {
							status = "disabled";
						};
					};
				};
			};
		};
	};

	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";
				};
				imx274_cam0: imx274_a@1a {
					status = "disabled";
				};
				imx185_cam0: imx185_a@1a {
					status = "disabled";
				};
				e3331_cam0: imx318_a@10 {
					status = "okay";
				};
				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";
				};
				cam_module0_drivernode1: drivernode1 {
					status = "disabled";
					pcl_id = "v4l2_lens";
				};
			};
			cam_module1: module1 {
				status = "disabled";
				cam_module1_drivernode0: drivernode0 {
					status = "disabled";
				};
				cam_module1_drivernode1: drivernode1 {
					status = "disabled";
					pcl_id = "v4l2_lens";
				};
			};
			cam_module2: module2 {
				status = "disabled";
				cam_module2_drivernode0: drivernode0 {
					status = "disabled";
				};
				cam_module2_drivernode1: drivernode1 {
					status = "disabled";
					pcl_id = "v4l2_lens";
				};
			};
			cam_module3: module3 {
				status = "disabled";
				cam_module3_drivernode0: drivernode0 {
					status = "disabled";
				};
				cam_module3_drivernode1: drivernode1 {
					status = "disabled";
					pcl_id = "v4l2_lens";
				};
			};
			cam_module4: module4 {
				status = "disabled";
				cam_module4_drivernode0: drivernode0 {
					status = "disabled";
				};
				cam_module4_drivernode1: drivernode1 {
					status = "disabled";
					pcl_id = "v4l2_lens";
				};
			};
			cam_module5: module5 {
				status = "disabled";
				cam_module5_drivernode0: drivernode0 {
					status = "disabled";
				};
				cam_module5_drivernode1: drivernode1 {
					status = "disabled";
					pcl_id = "v4l2_lens";
				};
			};
		};
	};
};

e3331.dtsi

/*
 * Copyright (c) 2017-2021, NVIDIA CORPORATION.  All rights reserved.
 *
 * This program is free software; you can redistribute it and/or modify it
 * under the terms and conditions of the GNU General Public License,
 * version 2, as published by the Free Software Foundation.
 *
 * This program is distributed in the hope it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
 * more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
#include <t234-common-modules/tegra234-camera-e3331-a00.dtsi>
#include "dt-bindings/clock/tegra234-clock.h"

/* camera control gpio definitions */
#define CAM0_RST_L	TEGRA234_MAIN_GPIO(H, 3)
#define CAMERA_I2C_MUX_BUS(x) (0x1E + x)

/* TODO: Re-enable cam1 and cam2*/
/ {
	gpio@2200000 {
		camera-control-output-low {
			gpio-hog;
			output-low;
			gpios = <CAM0_RST_L 0>;
			label = "cam0-rst";
		};
	};

	i2c@3180000 {
		tca9546_70: tca9546@70 {
			compatible = "nxp,pca9546";
			reg = <0x70>;
			#address-cells = <1>;
			#size-cells = <0>;
			vcc-supply = <&p3737_vdd_1v8_sys>;
			vcc-pullup-supply = <&battery_reg>;
			skip_mux_detect;
			force_bus_start = <CAMERA_I2C_MUX_BUS(0)>;
			i2c@0 {
				reg = <0>;
				i2c-mux,deselect-on-exit;
				#address-cells = <1>;
				#size-cells = <0>;
				imx318_a@10 {
					clocks = <&bpmp_clks TEGRA234_CLK_EXTPERIPH1>,
						 <&bpmp_clks TEGRA234_CLK_PLLP_OUT0>;
					clock-names = "extperiph1", "pllp_grtba";
					mclk = "extperiph1";
					clock-frequency = <24000000>;
					reset-gpios = <&tegra_main_gpio CAM0_RST_L GPIO_ACTIVE_HIGH>;
					vana-supply = <&p3737_avdd_cam_2v8>;
					vif-supply = <&p3737_vdd_1v8_sys>;
					vdig-supply = <&p3737_vdd_sys_en>;
				};
			};
		};
	};
};

I found that vi failed to initialize ,just like

[    4.723619] tegra-camrtc-capture-vi tegra-capture-vi: tegra_channel_csi_init:Fail to parse port info
[    4.733422] tegra-camrtc-capture-vi tegra-capture-vi: channel init failed
[    4.740801] tegra-camrtc-capture-vi tegra-capture-vi: all channel init failed
[    4.748547] tegra-camrtc-capture-vi tegra-capture-vi: Init channel failed
[    4.755992] tegra-camrtc-capture-vi tegra-capture-vi: tegra_vi_media_controller_init_int: failed
[    4.765437] tegra-camrtc-capture-vi tegra-capture-vi: media controller init failed

please review developer guide, please see-also Port Binding section to review your device tree settings.

Yes I have also noticed it (Fail to parse port info), but I still don’t know how to modify it. It seems that there is no problem with Port binding.
I use the offical dtbs and only open the imx318 camera,but kernel log have problems above.
I use these offical dtbs,and only open one port ,change the status from “disabled” to “okay”,at the same time,open the imx318 status to “okay”.and don’t change other things.
The jetpack sdk is r35.1,jetson agx orin 32GB version.

we have the same problem and make sure the way we use can work on TX2 and Xavier Nx module.

1 Like

hello 541449841,

is it possible for moving to the latest Jetpack release, i.e. Jetpack-5.1.1/ l4t-r35.3.1
and… you may running Jetson-IO to configure the CSI connector.
for example,
$ cd /opt/nvidia/jetson-io/
$ sudo python jetson-io.py

there’s an option to configure CSI as [Jetson Camera E3331 module],
it uses device tree overlay (i.e. tegra234-p3737-camera-e3331-overlay.dtbo) to apply the settings,
could you please have a try,
thanks

Do you have resolved your problem?

yes, config with /opt/nvidia/jetson-io/xxx.py it works well

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