FPD-Link camera on Jetson Nano "/dev/video0" node not created

Hi,
I am trying to interface a FPD link III camera (IMX290) with my customised board based on Jetson Nano.
I have created a dts file for it. After board is booted, i can see my camera sensor got detected (i2c address 0x1a) and deserializer(0x30). But “/dev/video0” node is not created.

MY dts file is like below:

/ {
host1x {
vi {
num-channels = <3>;
ports {
#address-cells = <1>;
#size-cells = <0>;
port@2 {
reg = <2>;
tis_imx290_vi_in2: endpoint {
vc-id = <0>;
port-index = <5>;
bus-width = <2>;
remote-endpoint = <&tis_imx290_csi_out2>;
};
};
};
};

	nvcsi {
		num-channels = <3>;
		channel@2 {
			reg = <2>;
			ports {
				#address-cells = <1>;
				#size-cells = <0>;
				port@0 {
					reg = <0>;
					tis_imx290_csi_in2: endpoint@4 {
						port-index = <5>;
						bus-width = <2>;
						remote-endpoint = <&tis_imx290_out2>;
					};
				};
				port@1 {
					reg = <1>;
					tis_imx290_csi_out2: endpoint@5 {
						remote-endpoint = <&tis_imx290_vi_in2>;
					};
				};
			};
		};
	};
};

i2c@7000c000 {

	tis_fpdlink_a: tis_fpdlink@30 {
		compatible = "tis,tis-fpdlink", "tis,tis-fpdlink-deser";
		status = "okay";
		reg = <0x30>;
		gpio_addr_base = /bits/ 8 <0x60>;
		gpio-controller;
		#gpio-cells = <2>;
		ngpios = <8>;
		deser_lanes = <2>;
		pdb-gpios = <&gpio TEGRA_GPIO(C, 2) GPIO_ACTIVE_HIGH>;

		clkout_hz = <37000000>;
		slave_map = /bits/ 8 <0x1a 0x1a>;
		ser_map_addr = /bits/ 8 <0x20>;
		ser_lanes = <2>;
		vc_map = /bits/ 8 <0x0>;

		tis_fpdlink_a_input {
			status = "okay";
			input;
			gpios = <7 0>;
			label = "tis_fpdlink_a_chn0_input_0";
		};
		tis_fpdlink_a_outlow {
			status = "okay";
			gpio-hog;
			output-low;
			gpios = <0 0 1 0 2 0 3 0 4 0 5 0 6 0>;
			label = "tis_fpdlink_a_chn0_CAM_PWR", "tis_fpdlink_a_chn0_RESET", "tis_fpdlink_a_chn0_GPOUT_LEVEL", "tis_fpdlink_a_chn0_GPOUT_PUSHPULL", "tis_fpdlink_a_chn0_GPOUT_SELECT", "tis_fpdlink_a_chn0_TRIG_LVL_SEL", "tis_fpdlink_a_chn0_TRIG_SRC_SEL";
		};
		tis_fpdlink_a_outhigh {
			status = "disabled";
		};
	};

	tis_imx290_a@1a {
		compatible = "tis,tis_imx290";
		reg = <0x1a>;
		status = "okay";
		reset-gpios = <&tis_fpdlink_a 1 GPIO_ACTIVE_HIGH>;
		pwdn-gpios = <&tis_fpdlink_a 0 GPIO_ACTIVE_HIGH>;
		devnode = "video2";
		physical_w = "5.640";
		physical_h = "3.216";
		sensor_model = "imx290";
		use_decibel_gain = "true";
		use_sensor_mode_id = "true";
		fpdlink = <&tis_fpdlink_a>;
		mode0 {
			mclk_khz = "37000";
			num_lanes = "2";
			tegra_sinterface = "serial_b";
			vc_id = "0";
			phy_mode = "DPHY";
			discontinuous_clk = "yes";
			dpcm_enable = "false";
			cil_settletime = "0";
			active_w = "1948";
			active_h = "1096";
			dynamic_pixel_bit_depth = "12";
			csi_pixel_bit_depth = "12";
			mode_type = "bayer";
			pixel_phase = "rggb";
			pixel_t = "bayer_rggb12";
			readout_orientation = "0";
			line_length = "2200";
			inherent_gain = "1";
			pix_clk_hz = "297000000";
			gain_factor = "10";
			framerate_factor = "1000000";
			exposure_factor = "1000000";
			min_gain_val = "0";
			max_gain_val = "300";
			step_gain_val = "3";
			default_gain = "1";
			min_hdr_ratio = "1";
			max_hdr_ratio = "1";
			min_framerate = "2000000";
			max_framerate = "60000000";
			step_framerate = "1";
			default_framerate = "60000000";
			min_exp_time = "15";
			max_exp_time = "16650";
			step_exp_time = "1";
			default_exp_time = "2495";
			embedded_metadata_height = "1";
		};
		ports {
			#address-cells = <1>;
			#size-cells = <0>;
			port@0 {
				reg = <0>;
				tis_imx290_out2: endpoint {
					port-index = <5>;
					bus-width = <2>;
					remote-endpoint = <&tis_imx290_csi_in2>;
				};
			};
		};
	};
};

lens_imx290@0 {
	min_focus_distance = "0.0";
	hyper_focal = "0.0";
	focal_length = "3.04";
	f_number = "2.0";
	aperture = "0.0";
};

};

/ {
tegra-camera-platform {
compatible = “nvidia, tegra-camera-platform”;
num_csi_lanes = <6>;
max_lane_speed = <1500000>;
min_bits_per_pixel = <12>;
vi_peak_byte_per_pixel = <2>;
vi_bw_margin_pct = <25>;
max_pixel_rate = <240000>;
isp_peak_byte_per_pixel = <5>;
isp_bw_margin_pct = <25>;
modules {
module2 {
status = “okay”;
badge = “neuron_center_imx290”;
position = “center”;
orientation = “1”;
drivernode0 {
status = “okay”;
pcl_id = “v4l2_sensor”;
devname = “tis_imx290 0-001a”;
proc-device-tree = “/proc/device-tree/i2c@7000c000/tis_imx290_a@1a”;
};
drivernode1 {
status = “okay”;
pcl_id = “v4l2_lens”;
proc-device-tree = “/proc/device-tree/lens_imx290@0/”;
};
};
};
};
};

@ShaneCCC @JerryChang

hello surya.narayan,

are you using the cameras supported by Jetson Camera Partners? may I know who’s the sensor vendor?
thanks

Did you check your driver for below. Also check the kernel message for the imx290_probe

Hi ShaneCCC,

Yes, I have checked the driver for compatible string “tis,tis_imx290”.

I got below message from dmesg log:

[ 3.331503] [TIS_IMX290]: probing v4l2 sensor.
[ 3.331632] tis_imx290 0-001a: Found 1 modes
[ 3.331839] tis_imx290 0-001a: tegracam sensor driver:tis_imx290_v2.0.6

I can see devices are being detected in i2c-0 bus . But no /dev/video0 node.

Could you modify the “tis, tis_imx290” to “tis, imx290” not sure if the length of strings would cause the problem.

HI ShaneCCC,

The same fpd camera works good in Xavier nx based SOM & we got the dmesg like below.

xavier nx log:

[ 6.073103] [TIS_IMX290]: probing v4l2 sensor.
[ 6.073199] tis_imx290 1-001a: Found 1 modes
[ 6.073331] tis_imx290 1-001a: tegracam sensor driver:tis_imx290_v2.0.6
[ 6.073401] tegra194-vi5 15c10000.vi: subdev tis_imx290 1-001a bound

If i compare this with jetson nano based board log , i found below line which is difference.

"[ 6.073401] tegra194-vi5 15c10000.vi: subdev tis_imx290 1-001a bound" : This line doesnt exist for nano.

Jetson Nano board log:

[ 3.331503] [TIS_IMX290]: probing v4l2 sensor.
[ 3.331632] tis_imx290 0-001a: Found 1 modes
[ 3.331839] tis_imx290 0-001a: tegracam sensor driver:tis_imx290_v2.0.6

For Nano should have message similar like below.

[ 1.489906] vi 54080000.vi: subdev imx219 6-0010 bound

Check if VI driver load correctly.
dmesg | grep -i vi:

[    1.484982] vi 54080000.vi: vi_probe: ++
[    1.487864] vi 54080000.vi: initialized
[    1.489890] vi 54080000.vi: subdev nvcsi--1 bound
[    1.489906] vi 54080000.vi: subdev imx219 6-0010 bound

Hi ShaneCCC,

I am able to see below logs while searching for “VI”

logs:

[ 1.532022] vi 54080000.vi: vi_probe: ++
[ 1.534821] vi 54080000.vi: initialized
[ 1.536856] vi 54080000.vi: subdev nvcsi–2 bound
[ 1.536958] vi 54080000.vi: subdev nvcsi–1 bound

But i dont see " subdev tis_imx290 0-001a bound"

Thanks & Regards
Surya

Then you may need to trace the tegracam_device_register() in imx290.c

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