Jetson TX2 camera focuser interfacing issues

Hello,

I am having issues interfacing a VCM driver (focuser) that is available on my camera module (IMX214).

I am using the Jetson TX2 device with an Auvidea J140 daughter board and three IMX214 camera modules that integrate the DW9714 VCM driver.

The camera sensors work fine and my goal is to interface the focuser so we can acquire quality images.

My problem is that I cannot find a proper example for the TX2 platform. I have studied the Sensor Driver Programming (v28.2) and the part where focuser properties are described is not available. I found the said information in an older document (Tegra Linux Driver Package Development Guide v27.1).

In addition, the device-tree files available in the source have confused me even more…

As an example I looked at the device tree for the E3323 camera module. Looking at the files for both Jetson TX1 and TX2 I found that they use a different approach and I am unsure as what to implement.

For example :

In the device tree for TX1 the focuser (LC898212) is assigned a port, properties and a device node.

/ {
	host1x {
		vi {
			num-channels = <2>;
			ports {
				#address-cells = <1>;
				#size-cells = <0>;
				port@0 {
					reg = <0>;
					e3323_vi_in0: endpoint {
						csi-port = <0>;
						bus-width = <4>;
						remote-endpoint = <&e3323_csi_out0>;
					};
				};
				port@1 {
					reg = <1>;
					e3323_vi_in1: endpoint {
						csi-port = <2>;
						bus-width = <4>;
						remote-endpoint = <&e3323_csi_out1>;
					};
				};
			};
		};

		nvcsi {
			num-channels = <1>;
			#address-cells = <1>;
			#size-cells = <0>;
			channel@0 {
				reg = <0>;
				ports {
					#address-cells = <1>;
					#size-cells = <0>;
					port@0 {
						reg = <0>;
						e3323_csi_in0: endpoint@0 {
							csi-port = <0>;
							bus-width = <4>;
							remote-endpoint = <&e3323_ov23850_out0>;
						};
					};
					port@1 {
						reg = <1>;
						e3323_csi_out0: endpoint@1 {
							remote-endpoint = <&e3323_vi_in0>;
						};
					};
				};
			};
		};

		i2c@546c0000 {
			ov23850_a@10 {
				compatible = "nvidia,ov23850";

				reg = <0x10>;
				physical_w = "7.3998";
				physical_h = "5.5998";

				avdd-reg = "vana";
				dvdd-reg = "vdig";
				iovdd-reg = "vif";
				vcmvdd-reg = "vvcm";
				devnode = "video0";

				mode0 { // OV23850_MODE_5632X3168
					mclk_khz = "24000";
					num_lanes = "4";
					tegra_sinterface = "serial_a";
					discontinuous_clk = "no";
					dpcm_enable = "false";
					cil_settletime = "0";

					active_w = "5632";
					active_h = "3168";
					pixel_t = "bayer_bggr";
					readout_orientation = "270";
					line_length = "5922";
					inherent_gain = "1";
					mclk_multiplier = "25";
					pix_clk_hz = "600000000";

					min_gain_val = "1.0";
					max_gain_val = "15.5";
					min_hdr_ratio = "1";
					max_hdr_ratio = "64";
					min_framerate = "3.09135";
					max_framerate = "30";
					min_exp_time = "19.74";
					max_exp_time = "323094";
				};
				ports {
					#address-cells = <1>;
					#size-cells = <0>;

					port@0 {
						reg = <0>;
						e3323_ov23850_out0: endpoint {
							csi-port = <0>;
							bus-width = <4>;
							remote-endpoint = <&e3323_csi_in0>;
						};
					};
				};
			};
			lc898212@72 {
				compatible = "nvidia,lc898212";
				reg = <0x72>;

				devnode = "video2";

				type = "default";
				min_focus_distance = "10.0"; /* 1.0f/0.1f */
				hyper_focal = "0.2"; /* 1.0f/5.0f */
				focal_length = "4.73";
				f_number = "2.2";
				aperture = "2.2";

				ports {
					#address-cells = <1>;
					#size-cells = <0>;
					port@0 {
						reg = <0>;
						e3323_lc898212_out0: endpoint {
							remote-endpoint = <&e3323_vi_in2>;
						};
					};
				};
			};
		};
	};

	tegra-camera-platform {
		compatible = "nvidia, tegra-camera-platform";
		num_csi_lanes = <4>;
		max_lane_speed = <1500000>;
		min_bits_per_pixel = <10>;
		vi_peak_byte_per_pixel = <2>;
		vi_bw_margin_pct = <25>;
		max_pixel_rate = <750000>;
		isp_peak_byte_per_pixel = <5>;
		isp_bw_margin_pct = <25>;

		modules {
			module0 {
				badge = "e3323_bottom_CH06P1";
				position = "bottom";
				orientation = "3";
				drivernode0 {
					pcl_id = "v4l2_sensor";
					devname = "ov23850 6-0010";
					proc-device-tree = "/proc/device-tree/host1x/i2c@546c0000/ov23850_a@10";
				};
				drivernode1 {
					pcl_id = "v4l2_focuser";
					devname = "lc898212 6-0072";
					proc-device-tree = "/proc/device-tree/host1x/i2c@546c0000/lc898212@72";
				};
			};
		};
	};
};

{
	host1x {
		i2c@546c0000 {
			ov23850_a@10 {
				clocks = <&tegra_car TEGRA210_CLK_CLK_OUT_3>;
				clock-names = "clk_out_3";
				clock-frequency = <24000000>;
				mclk = "clk_out_3";
				reset-gpios = <&gpio CAM0_RST_L GPIO_ACTIVE_HIGH>;   pwdn-gpios = <&gpio CAM0_PWDN GPIO_ACTIVE_HIGH>;
				vana-supply = <&en_vdd_cam_hv_2v8>;
				vdig-supply = <&en_vdd_cam_1v2>;
				vif-supply = <&en_vdd_cam>;
				vvcm-suply = <&en_vdd_vcm_2v8>;
			};
			lc898212_1: lc898212@72 {
				vvcm-supply = <&en_vdd_vcm_2v8>;
				support_mfi = "true";
			};
		};
	};
}

Now the driver for the TX2 is as follows :

/ {
	host1x {
		vi@15700000 {
			num-channels = <1>;
			ports {
				#address-cells = <1>;
				#size-cells = <0>;
				port@0 {
					reg = <0>;
					e3323_vi_in0: endpoint {
						csi-port = <0>;
						bus-width = <4>;
						remote-endpoint = <&e3323_csi_out0>;
					};
				};
			};
		};

		nvcsi@150c0000 {
			num-channels = <1>;
			#address-cells = <1>;
			#size-cells = <0>;
			channel@0 {
				reg = <0>;
				ports {
					#address-cells = <1>;
					#size-cells = <0>;
					port@0 {
						reg = <0>;
						e3323_csi_in0: endpoint@0 {
							csi-port = <0>;
							bus-width = <4>;
							remote-endpoint = <&e3323_ov23850_out0>;
						};
					};
					port@1 {
						reg = <1>;
						e3323_csi_out0: endpoint@1 {
							remote-endpoint = <&e3323_vi_in0>;
						};
					};
				};
			};
		};
	};

	i2c@3180000 {
		ov23850_a@10 {
			compatible = "nvidia,ov23850";
			reg = <0x10>;

			physical_w = "7.3998";
			physical_h = "5.5998";

			avdd-reg = "vana";
			dvdd-reg = "vdig";
			iovdd-reg = "vif";
			vcmvdd-reg = "vvcm";
			devnode = "video0";

			mode0 { // OV23850_MODE_5632X3168
				mclk_khz = "24000";
				num_lanes = "4";
				tegra_sinterface = "serial_a";
				discontinuous_clk = "no";
				dpcm_enable = "false";
				cil_settletime = "0";

				active_w = "5632";
				active_h = "3168";
				pixel_t = "bayer_bggr";
				readout_orientation = "270";
				line_length = "5922";
				inherent_gain = "1";
				mclk_multiplier = "25";
				pix_clk_hz = "600000000";

				min_gain_val = "1.0";
				max_gain_val = "15.5";
				min_hdr_ratio = "1";
				max_hdr_ratio = "64";
				min_framerate = "3.09135";
				max_framerate = "30";
				min_exp_time = "19.74";
				max_exp_time = "323094";
			};
			ports {
				#address-cells = <1>;
				#size-cells = <0>;

				port@0 {
					reg = <0>;
					e3323_ov23850_out0: endpoint {
						csi-port = <0>;
						bus-width = <4>;
						remote-endpoint = <&e3323_csi_in0>;
					};
				};
			};
		};
	};


	e3323_lens_ov23850@CH06P1 {
		min_focus_distance = "10.0"; /* 1.0f/0.1f */
		hyper_focal = "0.2"; /* 1.0f/5.0f */
		focal_length = "4.73";
		f_number = "2.2";
		aperture = "2.2";
	};

	tegra-camera-platform {
		compatible = "nvidia, tegra-camera-platform";
		num_csi_lanes = <4>;
		max_lane_speed = <1500000>;
		min_bits_per_pixel = <10>;
		vi_peak_byte_per_pixel = <2>;
		vi_bw_margin_pct = <25>;
		max_pixel_rate = <600000>;
		isp_peak_byte_per_pixel = <5>;
		isp_bw_margin_pct = <25>;

		modules {
			module0 {
				badge = "e3323_bottom_CH06P1";
				position = "bottom";
				orientation = "3";
				drivernode0 {
					pcl_id = "v4l2_sensor";
					devname = "ov23850 2-0010";
					proc-device-tree = "/proc/device-tree/i2c@3180000/ov23850_a@10";
				};
				drivernode1 {
					pcl_id = "v4l2_lens";
					proc-device-tree = "/proc/device-tree/e3323_lens_ov23850@CH06P1/";
				};
			};
		};
	};
};

/ {
	i2c@3180000 {
		ov23850_a@10 {
			clocks = <&tegra_car TEGRA186_CLK_EXTPERIPH1>,
					 <&tegra_car TEGRA186_CLK_PLLP_OUT0>;
			clock-names = "extperiph1", "pllp_grtba";
			mclk = "extperiph1";

			reset-gpios = <&tegra_main_gpio CAM0_RST_L GPIO_ACTIVE_HIGH>;   //also for VCM_2V8 en
			pwdn-gpios = <&tegra_main_gpio CAM0_PWDN GPIO_ACTIVE_HIGH>;
			vana-supply = <&en_vdd_cam_hv_2v8>;
			vdig-supply = <&en_vdd_sys>;
			vif-supply = <&en_vdd_cam>;
			vvcm-suply = <&en_vdd_vcm_2v8>;
		};
	};

	fixed-regulators {
		en_vdd_sys: regulator@118 {
			enable-active-high;
		};
	};
};

For a first glance I cannot understand how the TX2 device tree knows on which I2C it communicates with the focuser. Furthermore, it is configured as lens and not focuser (like the TX1).

One question is what CH06P1 stands for ?

And another one, where is e3323_lens_ov23850 defined ?

I based my device tree on the TX1 example whcih clearly states that it’s a focuser. Is there something similar for the TX2 ?

The device tree files can be downloaded from the following links

https://www.dropbox.com/s/gxg5go4anr2pei0/tegra186-camera-imx214-a00.dtsi?dl=0
https://www.dropbox.com/s/pjr7r7y0bl1wsti/tegra186-quill-camera-imx214-a00.dtsi?dl=0

While I got no compilation errors, the focuser device did not show up as a video device and the feedback I get from dmesg is :

tegra-vi4 1570000.vi: invalid port number 0 on /i2c@3160000/dw9714_a@0c

Can you provide any assistance as to how to develop the driver/device-tree for the TX2 or even an example of a device-tree for a camera module with a focuser ? Do you see something wrong with the device-tree files I use ?

Please do not refer me to the Sensor Driver Programming Guide as I have studied the document and as said previously, I cannot find the required information.

Here at Augmenta Agriculture we are basing our entire product line on the TX2 platform and it’s critical to be able to remedy this issue and get proper support.

Thank you in advance for your assistance.

Pavlos

@pavlos.stavrou
Sorry to tell focuser not support yet. If still need focuser support you need manual control the VCM step by v4l2 control. You can have in your DT to have focuser driver probe maybe video1 then use v4l2 framework to control it manually.

			drivernode1 {
				pcl_id = "v4l2_focuser";
				devname = "lc898212 6-0072";
				proc-device-tree = "/proc/device-tree/host1x/i2c@546c0000/lc898212@72";
			};

Hello,

What do you mean there is no focuser support ? There is no support in the argus library or in the device tree ?

For the TX2 device I have the following files :

tegra186-camera-imx214-a00.dtsi

/ {
	host1x {
		vi@15700000 {
			num-channels = <6>;
			ports {
				#address-cells = <1>;
				#size-cells = <0>;
				port@0 {
					reg = <0>;
					liimx214_vi_in0: endpoint { //CSI A-B
						csi-port = <0>;
						bus-width = <4>;
						remote-endpoint = <&liimx214_csi_out0>;
					};
				};
				port@1 {
					reg = <1>;
					liimx214_vi_in1: endpoint { //CSI C-D
						csi-port = <2>;
						bus-width = <4>;
						remote-endpoint = <&liimx214_csi_out1>;
					};
				};
				port@2 {
					reg = <2>;
					liimx214_vi_in2: endpoint { //CSI E-F
						csi-port = <4>;
						bus-width = <4>;
						remote-endpoint = <&liimx214_csi_out2>;
					};
				};
				port@3 {
					reg = <3>;
					liimx214_vi_in3: endpoint { //CSI A-B
						//csi-port = <0>;
						//bus-width = <4>;
						remote-endpoint = <&liimx214_dw9714_out0>;
					};
				};
				port@4 {
					reg = <4>;
					liimx214_vi_in4: endpoint { //CSI C-D
						//csi-port = <2>;
						//bus-width = <4>;
						remote-endpoint = <&liimx214_dw9714_out1>;
					};
				};
				port@5 {
					reg = <5>;
					liimx214_vi_in5: endpoint { //CSI E-F
						//csi-port = <4>;
						//bus-width = <4>;
						remote-endpoint = <&liimx214_dw9714_out2>;
					};
				};
			};
		};

		nvcsi@150c0000 {
			num-channels = <3>;
			#address-cells = <1>;
			#size-cells = <0>;
			channel@0 {
				reg = <0>;
				ports {
					#address-cells = <1>;
					#size-cells = <0>;
					port@0 {
						reg = <0>;
						liimx214_csi_in0: endpoint@0 {
							csi-port = <0>;
							bus-width = <4>;
							remote-endpoint = <&liimx214_imx214_out0>;
						};
					};
					port@1 {
						reg = <1>;
						liimx214_csi_out0: endpoint@1 {
							remote-endpoint = <&liimx214_vi_in0>;
						};
					};
				};
			};
			channel@1 {
				reg = <1>;
				ports {
					#address-cells = <1>;
					#size-cells = <0>;
					port@0 {
						reg = <0>;
						liimx214_csi_in1: endpoint@0 {
							csi-port = <2>;
							bus-width = <4>;
							remote-endpoint = <&liimx214_imx214_out1>;
						};
					};
					port@1 {
						reg = <1>;
						liimx214_csi_out1: endpoint@1 {
							remote-endpoint = <&liimx214_vi_in1>;
						};
					};
				};
			};
			channel@2 {
				reg = <2>;
				ports {
					#address-cells = <1>;
					#size-cells = <0>;
					port@0 {
						reg = <0>;
						liimx214_csi_in2: endpoint@0 {
							csi-port = <4>;
							bus-width = <4>;
							remote-endpoint = <&liimx214_imx214_out2>;
						};
					};
					port@1 {
						reg = <1>;
						liimx214_csi_out2: endpoint@1 {
							remote-endpoint = <&liimx214_vi_in2>;
						};
					};
				};
			};
		};
	};

	i2c@3180000 {
		status = "okay";
		#address-cells = <1>;
		#size-cells = <0>;
		imx214_c@10 {
			compatible = "nvidia,imx214";
			
			reg = <0x10>;
			devnode = "video1";

			physical_w = "5.095";
			physical_h = "4.930";

			sensor_model ="imx214";
			post_crop_frame_drop = "0";

			delayed_gain = "false";
			//use_decibel_gain = "true";

			mode0 { // IMX214_MODE_4208X3120
				mclk_khz = "24000";
				num_lanes = "4";
				tegra_sinterface = "serial_c";
				discontinuous_clk = "yes";
				cil_settletime = "0";

				active_w = "4208";
				active_h = "3120";
				pixel_t = "bayer_rggb";
				readout_orientation = "0";
				line_length = "5008";
				inherent_gain = "1";
				mclk_multiplier = "20";
				pix_clk_hz = "480000000";

				min_gain_val = "1.0";
				max_gain_val = "16.0";
				min_hdr_ratio = "1";
				max_hdr_ratio = "1";
				min_framerate = "1.462526";
				max_framerate = "30";
				min_exp_time = "13";
				//max_exp_time = "683709";
				max_exp_time = "65525";
				embedded_metadata_height = "4";
			};

			mode1 { // IMX214_MODE_2104X1560
				mclk_khz = "24000";
				num_lanes = "4";
				tegra_sinterface = "serial_c";
				discontinuous_clk = "yes";
				cil_settletime = "0";

				active_w = "2104";
				active_h = "1560";
				pixel_t = "bayer_rggb";
				readout_orientation = "0";
				line_length = "5008";
				inherent_gain = "1";
				mclk_multiplier = "20";
				pix_clk_hz = "480000000";

				min_gain_val = "1.0";
				max_gain_val = "16.0";
				min_hdr_ratio = "1";
				max_hdr_ratio = "1";
				min_framerate = "1.462526";
				max_framerate = "60";
				min_exp_time = "13";
				//max_exp_time = "683709";
				max_exp_time = "65525";
				embedded_metadata_height = "4";
			};

			mode2 { // IMX214_MODE_1396X788
				mclk_khz = "24000";
				num_lanes = "4";
				tegra_sinterface = "serial_c";
				discontinuous_clk = "yes";
				cil_settletime = "0";

				active_w = "1396";
				active_h = "788";
				pixel_t = "bayer_rggb";
				readout_orientation = "0";
				line_length = "5008";
				inherent_gain = "1";
				mclk_multiplier = "20";
				pix_clk_hz = "480000000";

				min_gain_val = "1.0";
				max_gain_val = "16.0";
				min_hdr_ratio = "1";
				max_hdr_ratio = "1";
				min_framerate = "1.462526";
				max_framerate = "60";
				min_exp_time = "13";
				//max_exp_time = "683709";
				max_exp_time = "65525";
				embedded_metadata_height = "4";
			};


			ports {
				#address-cells = <1>;
				#size-cells = <0>;
				port@0 {
					reg = <0>;
					liimx214_imx214_out1: endpoint {
						csi-port = <2>;
						bus-width = <4>;
						remote-endpoint = <&liimx214_csi_in1>;
					};
				};
			};
		};
		dw9714_c@0c {
			compatible = "nvidia,dw9714";
			reg = <0x0c>;

			/* physical camera layer interface tags */
			devnode = "video4";

			/**
			* Type specifies the control features supported by
			* the focuser driver.
			* default type means only position control setting
			* supported by the focuser
			*/
			type = "default";
			min_focus_distance = "10.0"; /* 1.0f/0.1f */
			hyper_focal = "0.2"; /* 1.0f/5.0f */
			focal_length = "4.73";
			f_number = "2.2";
			aperture = "2.2";

			ports {
				#address-cells = <1>;
				#size-cells = <0>;
				port@0 {
					reg = <0>;
					liimx214_dw9714_out1: endpoint {
						remote-endpoint = <&liimx214_vi_in4>;
					};
				};
			};
		};	
	};

	i2c@3160000 {
		status = "okay";
		#address-cells = <1>;
		#size-cells = <0>;
		imx214_a@10 {
			compatible = "nvidia,imx214";
			reg = <0x10>;
			devnode = "video0";

			physical_w = "5.095";
			physical_h = "4.930";

			sensor_model ="imx214";
			post_crop_frame_drop = "0";

			delayed_gain = "false";
			//use_decibel_gain = "true";

			mode0 { // IMX214_MODE_4208X3120
				mclk_khz = "24000";
				num_lanes = "4";
				tegra_sinterface = "serial_a";
				discontinuous_clk = "yes";
				cil_settletime = "0";

				active_w = "4208";
				active_h = "3120";
				pixel_t = "bayer_rggb";
				readout_orientation = "0";
				line_length = "5008";
				inherent_gain = "1";
				mclk_multiplier = "20";
				pix_clk_hz = "480000000";

				min_gain_val = "1.0";
				max_gain_val = "16.0";
				min_hdr_ratio = "1";
				max_hdr_ratio = "1";
				min_framerate = "1.462526";
				max_framerate = "30";
				min_exp_time = "13";
				//max_exp_time = "683709";
				max_exp_time = "65525";
				embedded_metadata_height = "4";
			};

			mode1 { // IMX214_MODE_2104X1560
				mclk_khz = "24000";
				num_lanes = "4";
				tegra_sinterface = "serial_a";
				discontinuous_clk = "yes";
				cil_settletime = "0";

				active_w = "2104";
				active_h = "1560";
				pixel_t = "bayer_rggb";
				readout_orientation = "0";
				line_length = "5008";
				inherent_gain = "1";
				mclk_multiplier = "20";
				pix_clk_hz = "480000000";

				min_gain_val = "1.0";
				max_gain_val = "16.0";
				min_hdr_ratio = "1";
				max_hdr_ratio = "1";
				min_framerate = "1.462526";
				max_framerate = "60";
				min_exp_time = "13";
				//max_exp_time = "683709";
				max_exp_time = "65525";
				embedded_metadata_height = "4";
			};

			mode2 { // IMX214_MODE_1396X788
				mclk_khz = "24000";
				num_lanes = "4";
				tegra_sinterface = "serial_a";
				discontinuous_clk = "yes";
				cil_settletime = "0";

				active_w = "1396";
				active_h = "788";
				pixel_t = "bayer_rggb";
				readout_orientation = "0";
				line_length = "5008";
				inherent_gain = "1";
				mclk_multiplier = "20";
				pix_clk_hz = "480000000";

				min_gain_val = "1.0";
				max_gain_val = "16.0";
				min_hdr_ratio = "1";
				max_hdr_ratio = "1";
				min_framerate = "1.462526";
				max_framerate = "60";
				min_exp_time = "13";
				//max_exp_time = "683709";
				max_exp_time = "65525";
				embedded_metadata_height = "4";
			};


			ports {
				#address-cells = <1>;
				#size-cells = <0>;
				port@0 {
					reg = <0>;
					liimx214_imx214_out0: endpoint {
						csi-port = <0>;
						bus-width = <4>;
						remote-endpoint = <&liimx214_csi_in0>;
					};
				};
			};
		};
		dw9714_a@0c {
			compatible = "nvidia,dw9714";
			reg = <0x0c>;

			/* physical camera layer interface tags */
			devnode = "video3";

			/**
			* Type specifies the control features supported by
			* the focuser driver.
			* default type means only position control setting
			* supported by the focuser
			*/
			type = "default";
			min_focus_distance = "10.0"; /* 1.0f/0.1f */
			hyper_focal = "0.2"; /* 1.0f/5.0f */
			focal_length = "4.73";
			f_number = "2.2";
			aperture = "2.2";

			ports {
				#address-cells = <1>;
				#size-cells = <0>;
				port@0 {
					reg = <0>;
					liimx214_dw9714_out0: endpoint {
						remote-endpoint = <&liimx214_vi_in3>;
					};
				};
			};
		};
	};

	i2c@c250000 {
		status = "okay";
		#address-cells = <1>;
		#size-cells = <0>;
		imx214_e@10 {
			compatible = "nvidia,imx214";
			reg = <0x10>;
			devnode = "video2";

			physical_w = "5.095";
			physical_h = "4.930";

			sensor_model ="imx214";
			post_crop_frame_drop = "0";

			delayed_gain = "false";
			//use_decibel_gain = "true";

			mode0 { // IMX214_MODE_4208X3120
				mclk_khz = "24000";
				num_lanes = "4";
				tegra_sinterface = "serial_e";
				discontinuous_clk = "yes";
				cil_settletime = "0";

				active_w = "4208";
				active_h = "3120";
				pixel_t = "bayer_rggb";
				readout_orientation = "0";
				line_length = "5008";
				inherent_gain = "1";
				mclk_multiplier = "20";
				pix_clk_hz = "480000000";

				min_gain_val = "1.0";
				max_gain_val = "16.0";
				min_hdr_ratio = "1";
				max_hdr_ratio = "1";
				min_framerate = "1.462526";
				max_framerate = "30";
				min_exp_time = "13";
				//max_exp_time = "683709";
				max_exp_time = "65525";
				embedded_metadata_height = "4";
			};

			mode1 { // IMX214_MODE_2104X1560
				mclk_khz = "24000";
				num_lanes = "4";
				tegra_sinterface = "serial_e";
				discontinuous_clk = "yes";
				cil_settletime = "0";

				active_w = "2104";
				active_h = "1560";
				pixel_t = "bayer_rggb";
				readout_orientation = "0";
				line_length = "5008";
				inherent_gain = "1";
				mclk_multiplier = "20";
				pix_clk_hz = "480000000";

				min_gain_val = "1.0";
				max_gain_val = "16.0";
				min_hdr_ratio = "1";
				max_hdr_ratio = "1";
				min_framerate = "1.462526";
				max_framerate = "60";
				min_exp_time = "13";
				//max_exp_time = "683709";
				max_exp_time = "65525";
				embedded_metadata_height = "4";
			};

			mode2 { // IMX214_MODE_1396X788
				mclk_khz = "24000";
				num_lanes = "4";
				tegra_sinterface = "serial_e";
				discontinuous_clk = "yes";
				cil_settletime = "0";

				active_w = "1396";
				active_h = "788";
				pixel_t = "bayer_rggb";
				readout_orientation = "0";
				line_length = "5008";
				inherent_gain = "1";
				mclk_multiplier = "20";
				pix_clk_hz = "480000000";

				min_gain_val = "1.0";
				max_gain_val = "16.0";
				min_hdr_ratio = "1";
				max_hdr_ratio = "1";
				min_framerate = "1.462526";
				max_framerate = "60";
				min_exp_time = "13";
				//max_exp_time = "683709";
				max_exp_time = "65525";
				embedded_metadata_height = "4";
			};

			ports {
				#address-cells = <1>;
				#size-cells = <0>;
				port@0 {
					reg = <0>;
					liimx214_imx214_out2: endpoint {
						csi-port = <4>;
						bus-width = <4>;
						remote-endpoint = <&liimx214_csi_in2>;
					};
				};
			};
		};
		dw9714_e@0c {
			compatible = "nvidia,dw9714";
			reg = <0x0c>;

			/* physical camera layer interface tags */
			devnode = "video5";

			/**
			* Type specifies the control features supported by
			* the focuser driver.
			* default type means only position control setting
			* supported by the focuser
			*/
			type = "default";
			min_focus_distance = "10.0"; /* 1.0f/0.1f */
			hyper_focal = "0.2"; /* 1.0f/5.0f */
			focal_length = "4.73";
			f_number = "2.2";
			aperture = "2.2";

			ports {
				#address-cells = <1>;
				#size-cells = <0>;
				port@0 {
					reg = <0>;
					liimx214_dw9714_out2: endpoint {
						remote-endpoint = <&liimx214_vi_in5>;
					};
				};
			};
		};
	};

	tegra-camera-platform {
		compatible = "nvidia, tegra-camera-platform";
		
		num_csi_lanes = <12>;
		max_lane_speed = <1500000>;
		min_bits_per_pixel = <10>;
		vi_peak_byte_per_pixel = <2>;
		vi_bw_margin_pct = <25>;
		max_pixel_rate = <750000>;
		isp_peak_byte_per_pixel = <5>;
		isp_bw_margin_pct = <25>;

		modules {
			module0 {
				badge = "imx214_top_liimx214";
				position = "top";
				orientation = "0";
				drivernode0 {
					pcl_id = "v4l2_sensor";
					devname = "imx214 0-0010";
					proc-device-tree = "/proc/device-tree/i2c@3160000/imx214_a@10";
				};
				drivernode1 {
					/* Declare PCL support driver (classically known as guid)  */
					pcl_id = "v4l2_focuser";
					/* Driver v4l2 device name */
					devname = "dw9714 0-000c";
					/* Declare the device-tree hierarchy to driver instance */
					proc-device-tree = "/proc/device-tree/i2c@3160000/dw9714_a@0c";
				};
			};
			module1 {
				badge = "imx214_bottom_liimx214";
				position = "bottom";
				orientation = "0";
				drivernode0 {
					pcl_id = "v4l2_sensor";
					devname = "imx214 2-0010";
					proc-device-tree = "/proc/device-tree/i2c@3180000/imx214_c@10";
				};
				drivernode1 {
					/* Declare PCL support driver (classically known as guid)  */
					pcl_id = "v4l2_focuser";
					/* Driver v4l2 device name */
					devname = "dw9714 2-000c";
					/* Declare the device-tree hierarchy to driver instance */
					proc-device-tree = "/proc/device-tree/i2c@3180000/dw9714_c@0c";
				};
			};
			module2 {
				badge = "imx214_center_liimx214";
				position = "center";
				orientation = "0";
				drivernode0 {
					pcl_id = "v4l2_sensor";
					devname = "imx214 7-0010";
					proc-device-tree = "/proc/device-tree/i2c@c250000/imx214_e@10";
				};
				drivernode1 {
					/* Declare PCL support driver (classically known as guid)  */
					pcl_id = "v4l2_focuser";
					/* Driver v4l2 device name */
					devname = "dw9714 7-000c";
					/* Declare the device-tree hierarchy to driver instance */
					proc-device-tree = "/proc/device-tree/i2c@c250000/dw9714_e@0c";
				};
			};
		};
	};
};

And tegra186-quill-camera-imx214-a00.dtsi

#include <t18x-common-modules/tegra186-camera-imx214-a00.dtsi>
#include "dt-bindings/clock/tegra186-clock.h"

#define CAM0_RST_L     TEGRA_MAIN_GPIO(R, 5)
#define CAMERA_I2C_MUX_BUS(x) (0x1E + x)

/* camera control gpio definitions */
/ {
	gpio@2200000 {
		camera-control-output-low {
			gpio-hog;
			output-low;
			gpios = <CAM0_RST_L 0>;
			label = "cam0-rst";
		};
	};

	i2c@3180000 {
		imx214_c@10 {
			clocks = <&tegra_car TEGRA186_CLK_EXTPERIPH1>,
					 <&tegra_car TEGRA186_CLK_PLLP_OUT0>;
			clock-names = "extperiph1", "pllp_grtba";
			clock-frequency = <24000000>;
			mclk = "extperiph1";
			reset-gpios = <&tegra_main_gpio CAM0_RST_L GPIO_ACTIVE_HIGH>;

			vana-supply = <&en_vdd_cam_hv_2v8>;
			vif-supply = <&en_vdd_cam>;
			vdig-supply = <&en_vdd_cam_1v2>;
			vvcm-suply = <&en_vdd_vcm_2v8>;
		};
		dw9714_c@0c {
			vvcm-supply = <&en_vdd_vcm_2v8>;
			support_mfi = "true";
		};
	};
	i2c@3160000 {
		imx214_a@10 {
			clocks = <&tegra_car TEGRA186_CLK_EXTPERIPH2>,
					 <&tegra_car TEGRA186_CLK_PLLP_OUT0>;
			clock-names = "extperiph2", "pllp_grtba";
			clock-frequency = <24000000>;
			mclk = "extperiph2";
			reset-gpios = <&tegra_main_gpio CAM0_RST_L GPIO_ACTIVE_HIGH>;

			vana-supply = <&en_vdd_cam_hv_2v8>;
			vif-supply = <&en_vdd_cam>;
			vdig-supply = <&en_vdd_cam_1v2>;
			vvcm-suply = <&en_vdd_vcm_2v8>;
		};
		dw9714_a@0c {
			vvcm-supply = <&en_vdd_vcm_2v8>;
			support_mfi = "true";
		};
	};
	i2c@c250000 {
		imx214_e@10 {
			clocks = <&tegra_car TEGRA186_CLK_EXTPERIPH2>,
					 <&tegra_car TEGRA186_CLK_PLLP_OUT0>;
			clock-names = "extperiph2", "pllp_grtba";
			clock-frequency = <24000000>;
			mclk = "extperiph2";
			reset-gpios = <&tegra_main_gpio CAM0_RST_L GPIO_ACTIVE_HIGH>;

			vana-supply = <&en_vdd_cam_hv_2v8>;
			vif-supply = <&en_vdd_cam>;
			vdig-supply = <&en_vdd_cam_1v2>;
			vvcm-suply = <&en_vdd_vcm_2v8>;
		};
		dw9714_e@0c {
			vvcm-supply = <&en_vdd_vcm_2v8>;
			//support_mfi = "true";
		};
	};
};

This does not work.
From what you suggest, I believe this is what I have done in the device tree, correct ?

Should I exclude the block where I set the default values / control features for the driver ?
The example you provided is from the TX1 platform if I am not mistaken. Does the same apply for the TX2, because in the examples in the kernel source, there is no such definition as pointed out in my previous post.

  1. argus not support focuser function
  2. You need to add debug message in the focuser driver probe function to check if it up by the system.

I will check the driver with debug messages. That’s fine.

Concerning my device tree, I should not change something ? Is that device tree configuration supported by TX2 ?