Hardware Issue on Camera Board

[quote]

Good morning Wayne,

There are a few things unclear on the dtsi(s):

  1. Several nodes in tegra186-quill-camera-modules.dtsi is missing (i.e. target = <&e3326_vi_in0>, target = <&e3326_csi_in0>…), however these parameters(labels) can be found in tegra186-quill-e3326-a00.dtsi. Is there any other dts file contains the missing info? Is it safe to modify those parameters in tegra186-quill-e3326-a00.dtsi?

  2. Some of the parameters cannot be found in nodes (i.e. num-channels = <1> @csi_base of tegra186-quill-camera-modules.dtsi…). Is it safe to add? Overlay function in dts is to add or change the content?

  3. tegra-camera-platform settings field can’t be found. which indicates the csi lanes and lane speed.

Good morning Wayne,

There are a few things unclear on the dtsi(s):

  1. Several nodes in tegra186-quill-camera-modules.dtsi is missing (i.e. target = <&e3326_vi_in0>, target = <&e3326_csi_in0>…), however these parameters(labels) can be found in tegra186-quill-e3326-a00.dtsi. Is there any other dts file contains the missing info? Is it safe to modify those parameters in tegra186-quill-e3326-a00.dtsi?

  2. Some of the parameters cannot be found in nodes (i.e. num-channels = <1> @csi_base of tegra186-quill-camera-modules.dtsi…). Is it safe to add? Overlay function in dts is to add or change the content?

  3. tegra-camera-platform settings field can’t be found. which indicates the csi lanes and lane speed.

The missing node should be in tegra186-camera-e3326-a00.dtsi. As I know, following is the including path.

#from the final dts you are using, it should be tegra186-quill-p3310-1000-a00-00-base.dts 
tegra186-quill-p3310-1000-a00-00-base.dts-> tegra186-quill-camera-modules.dtsi -> tegra186-quill-camera-e3326-a00.dtsi -> tegra186-camera-e3326-a00.dtsi

It is normal that it would add some nodes. Deletion is also possible but rare.

tegra186-camera-e3326-a00.dtsi has tegra-camera-platform field.

And now we’ve finished changing multiple fields except one

override@15 {
				target = <&{/gpio@c2f0000}>;
				_overlay_ {
					camera-control-input {
						status = "disabled";
					};
				};

However, camera is still offline, /dev/video0 is missing.

And during bootup. tegra-vi4 module under vi node 15700000 indicates there are some errors.

  1. tegra_channel_csi_init:Fail to parse port info.
  2. channel init failed
  3. Init channel failed
  4. tegra_vi_media_controller_init: failed

What could cause this error?

I’ll attach some dtsi for your reference.

In tegra186-quill-camera-modules.dtsi

/*
 * Copyright (c) 2016-2017, 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
 * the Free Software Foundation; version 2 of the License.
 *
 * This program is distributed in the hope that 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.
 *
 */

#include "t18x-common-platforms/tegra186-quill-camera-e3326-a00.dtsi"
/* 
#include "t18x-common-platforms/tegra186-quill-camera-e3323-a00.dtsi"
#include "t18x-common-platforms/tegra186-quill-camera-e3333-a00.dtsi"
#include "t18x-common-platforms/tegra186-quill-camera-e3322-a00.dtsi"
#include "t18x-common-platforms/tegra186-quill-camera-li-mipi-adpt-a00.dtsi"
#include "t18x-common-platforms/tegra186-quill-camera-imx274-a00.dtsi"
*/ /*YZJ 11:00pm*/
#include "t18x-common-platforms/tegra186-quill-camera-vivid.dtsi"

#define CAM0_RST_L	TEGRA_MAIN_GPIO(R, 5)
#define CAM0_PWDN	TEGRA_MAIN_GPIO(R, 0)
#define CAM1_RST_L	TEGRA_MAIN_GPIO(R, 1)
#define CAM1_PWDN	TEGRA_MAIN_GPIO(L, 6)

/ {
	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-input {
                        status = "disabled"; /*YZJ 9:10pm*/
                };
		camera-control-output-low {
			gpio-hog;
			/*output-low;*//*YZJ 9:11pm*/
			gpios = <CAM0_RST_L 0 CAM0_PWDN 0>;/*YZJ 9:10pm*/
                        /*gpios = <CAM0_RST_L 0 CAM0_PWDN 0
				 CAM1_RST_L 0 CAM1_PWDN 0>;*//*YZJ 9:10pm*/
			/*label = "cam0-rst", "cam0-pwdn",
				"cam1-rst", "cam1-pwdn";*//*YZJ 9:10pm*/
                        label = "cam0-rst", "cam0-pwdn";/*YZJ 9:11pm*/
                        output-low;/*YZJ 9:11pm*/
                        status = "okay";/*YZJ 9:11pm*/
		};
                camera-control-output-high {
                        status = "disabled";/*YZJ 9:14pm*/
                };
	};

	/* all cameras are disabled by default */
	host1x {
		vi_base: vi@15700000 {
                        num-channels=<1>; /*YZJ 7:28pm*/
			ports {
				vi_port0: port@0 {
					status = "disabled";
                                        status = "okay";/*YZJ 7:30pm*/
					vi_in0: endpoint {
						status = "disabled";
					};
				};
				vi_port1: port@1 {
					status = "disabled";
					vi_in1: endpoint {
						status = "disabled";
					};
				};
				vi_port2: port@2 {
					status = "disabled";
					vi_in2: endpoint {
						status = "disabled";
					};
				};
				vi_port3: port@3 {
					status = "disabled";
					vi_in3: endpoint {
						status = "disabled";
					};
				};
				vi_port4: port@4 {
					status = "disabled";
					vi_in4: endpoint {
						status = "disabled";
					};
				};
				vi_port5: port@5 {
					status = "disabled";
					vi_in5: endpoint {
						status = "disabled";
					};
				};
			};
		};
		csi_base: nvcsi@150c0000 {
                        num-channels=<1>;/*YZJ 8:12pm*/
			csi_chan0: channel@0 {
				status = "disabled";
                                status = "okay";/*YZJ 8:12pm*/
				ports {
					csi_chan0_port0: port@0 {
						status = "disabled";
                                                status = "okay";/*YZJ 8:12pm*/
						csi_in0: endpoint@0 {
							status = "disabled";
						};
					};
					csi_chan0_port1: port@1 {
						status = "disabled";
                                                status = "okay";/*YZJ 8:15pm*/
						csi_out0: endpoint@1 {
							status = "disabled";
						};
					};
				};
			};
			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";
                        status = "okay"; /*YZJ 6:47pm*/
		};
		e3323_cam0: ov23850_a@10 {
			status = "disabled";
		};
		e3323_vcm0: lc898212@72 {
			status = "disabled";
		};
		tca6408@21 {
			status = "disabled";
		};
		tca9548@77 {
			status = "disabled";
			i2c@0 {
				e3333_cam0: ov5693_a@36 {
					status = "disabled";
				};
				e3322_cam0: imx219_a@10 {
					status = "disabled";
				};
			};
			i2c@1 {
				e3333_cam1: ov5693_b@36 {
					status = "disabled";
				};
				e3322_cam1: imx219_b@10 {
					status = "disabled";
				};
			};
			i2c@2 {
				e3333_cam2: ov5693_c@36 {
					status = "disabled";
				};
				e3322_cam2: imx219_c@10 {
					status = "disabled";
				};
			};
			i2c@3 {
				e3333_cam3: ov5693_d@36 {
					status = "disabled";
				};
				e3322_cam3: imx219_d@10 {
					status = "disabled";
				};
			};
			i2c@4 {
				e3333_cam4: ov5693_e@36 {
					status = "disabled";
				};
				e3322_cam4: imx219_e@10 {
					status = "disabled";
				};
			};
			i2c@5 {
				e3333_cam5: ov5693_f@36 {
					status = "disabled";
				};
				e3322_cam5: imx219_f@10 {
					status = "disabled";
				};
			};
		};
		tca9546_70: tca9546@70 {
			status = "disabled";
			i2c@0 {
				imx185_cam0: imx185_a@1a {
					status = "disabled";
				};
			};
		};
		tca9546_70: tca9546@70 {
			status = "disabled";
			i2c@0 {
				imx274_cam0: imx274_a@1a {
					status = "disabled";
				};
			};
		};
	};

	i2c@c240000 {
		e3323_cam1: ov23850_c@36 {
			status = "disabled";
		};
		e3323_vcm1: lc898212@72 {
			status = "disabled";
		};
	};

	tcp: tegra-camera-platform {
		compatible = "nvidia, tegra-camera-platform";
		modules {
			cam_module0: module0 {
				status = "disabled";
                                status = "okay"; /*YZJ 6:57pm*/
                                badge = "e3326_front_P5V27C";/*YZJ 6:57pm*/
                                position = "rear";/*YZJ 6:58pm*/
                                orientation = "1";/*YZJ 6:58pm*/
				cam_module0_drivernode0: drivernode0 {
					status = "disabled";
                                        status = "okay"; /*YZJ 7:05pm*/
                                        pcl_id = "v4l2_sensor";/*YZJ 7:05pm*/
                                        devname = "ov5693 2-0036";/*YZJ 7:05pm*/
                                        proc-device-tree = "/proc/device-tree/i2c@3180000/ov5693_c@36";/*YZJ 7:05pm*/
				};
				cam_module0_drivernode1: drivernode1 {
					status = "disabled";
                                        status = "okay"; /*YZJ 7:07pm*/
					pcl_id = "v4l2_lens";
                                        proc-device-tree = "/proc/device-tree/e3326_lens_ov5693@P5V27C/";/*YZJ 7:08pm*/
				};
			};
			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";
				};
			};
		};
	};
};

In tegra186-camera-e3326-a00.dtsi.

/*
 * Copyright (c) 2015-2017, 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
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that 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/>.
 */

/ {
	host1x {
		vi@15700000 {
			num-channels = <1>;
			ports {
				#address-cells = <1>;
				#size-cells = <0>;
				port@0 {
					reg = <0>;
					e3326_vi_in0: endpoint {
                                                status = "okay"; /*YZJ Add 8:05pm*/
						csi-port = <2>;
						bus-width = <2>;
						remote-endpoint = <&e3326_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>;
						e3326_csi_in0: endpoint@0 {
                                                        status = "okay"; /*YZJ Add 8:14pm*/
							csi-port = <2>;
							bus-width = <2>;
							remote-endpoint = <&e3326_ov5693_out0>;
						};
					};
					port@1 {
						reg = <1>;
						e3326_csi_out0: endpoint@1 {
                                                        status = "okay";/*YZJ Add 8:17pm*/
							remote-endpoint = <&e3326_vi_in0>;
						};
					};
				};
			};
		};
	};

	i2c@3180000 {
		ov5693_c@36 {
			compatible = "nvidia,ov5693";
			/* I2C device address */
			reg = <0x36>;

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

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

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

			/* Sensor output flip settings */
			vertical-flip = "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
			*
			* 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_multiplier
			*
			*
			*
			*
			* active_w = "";
			* Pixel active region width
			*
			* active_h = "";
			* Pixel active region height
			*
			* pixel_t = "";
			* The sensor readout pixel pattern
			*
			* 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.
			*
			* mclk_multiplier = "";
			* Multiplier to MCLK to help time hardware capture sequence
			* TODO: Assign to PLL_Multiplier as well until fixed in core
			*
			* 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
			*
			* min_exp_time = ""; (ceil to integer)
			* max_exp_time = ""; (ceil to integer)
			* Exposure Time limits for mode (us)
			*
			*
			* min_hdr_ratio = "";
			* max_hdr_ratio = "";
			* HDR Ratio limits for mode
			*
			* min_framerate = "";
			* max_framerate = "";
			* Framerate limits for mode (fps)
			*/
			mode0 { // OV5693_MODE_2592X1944
				mclk_khz = "24000";
				num_lanes = "2";
				tegra_sinterface = "serial_c";
				discontinuous_clk = "no";
				dpcm_enable = "false";
				cil_settletime = "0";

				active_w = "2592";
				active_h = "1944";
				pixel_t = "bayer_bggr";
				readout_orientation = "90";
				line_length = "2688";
				inherent_gain = "1";
				mclk_multiplier = "6.67";
				pix_clk_hz = "160000000";

				min_gain_val = "1.0";
				max_gain_val = "16";
				min_hdr_ratio = "1";
				max_hdr_ratio = "64";
				min_framerate = "1.816577";
				max_framerate = "30";
				min_exp_time = "34";
				max_exp_time = "550385";
			};

			mode1 { //OV5693_MODE_2592X1458
				mclk_khz = "24000";
				num_lanes = "2";
				tegra_sinterface = "serial_c";
				discontinuous_clk = "no";
				dpcm_enable = "false";
				cil_settletime = "0";

				active_w = "2592";
				active_h = "1458";
				pixel_t = "bayer_bggr";
				readout_orientation = "90";
				line_length = "2688";
				inherent_gain = "1";
				mclk_multiplier = "6.67";
				pix_clk_hz = "160000000";

				min_gain_val = "1.0";
				max_gain_val = "16";
				min_hdr_ratio = "1";
				max_hdr_ratio = "64";
				min_framerate = "1.816577";
				max_framerate = "30";
				min_exp_time = "34";
				max_exp_time = "550385";
			};

			mode2 { //OV5693_MODE_1280X720
				mclk_khz = "24000";
				num_lanes = "2";
				tegra_sinterface = "serial_c";
				discontinuous_clk = "no";
				dpcm_enable = "false";
				cil_settletime = "0";

				active_w = "1280";
				active_h = "720";
				pixel_t = "bayer_bggr";
				readout_orientation = "90";
				line_length = "1752";
				inherent_gain = "1";
				mclk_multiplier = "6.67";
				pix_clk_hz = "160000000";

				min_gain_val = "1.0";
				max_gain_val = "16";
				min_hdr_ratio = "1";
				max_hdr_ratio = "64";
				min_framerate = "2.787078";
				max_framerate = "120";
				min_exp_time = "22";
				max_exp_time = "358733";
			};

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

				port@0 {
					reg = <0>;
					e3326_ov5693_out0: endpoint {
						csi-port = <2>;
						bus-width = <2>;
						remote-endpoint = <&e3326_csi_in0>;
					};
				};
			};
		};
	};

	e3326_lens_ov5693@P5V27C {
		min_focus_distance = "0.0";
		hyper_focal = "0.0";
		focal_length = "2.67";
		f_number = "2.0";
		aperture = "2.0";
	};

	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 = <2>;
		max_lane_speed = <1500000>;
		min_bits_per_pixel = <10>;
		vi_peak_byte_per_pixel = <2>;
		vi_bw_margin_pct = <25>;
		max_pixel_rate = <160000>;
		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 = "e3326_front_P5V27C";
				position = "rear";
				orientation = "1";
				drivernode0 {
					/* Declare PCL support driver (classically known as guid)  */
					pcl_id = "v4l2_sensor";
					/* Driver v4l2 device name */
					devname = "ov5693 2-0036";
					/* Declare the device-tree hierarchy to driver instance */
					proc-device-tree = "/proc/device-tree/i2c@3180000/ov5693_c@36";
				};
				drivernode1 {
					/* Declare PCL support driver (classically known as guid)  */
					pcl_id = "v4l2_lens";
					proc-device-tree = "/proc/device-tree/e3326_lens_ov5693@P5V27C/";
				};
			};
		};
	};
};

Hi,

That vi error is due to parsing device tree failed, which is under expectation.

Please look into kernel-4.4/drivers/media/platform/tegra/camera/vi/graph.c and tegra_vi_get_port_info function to see which node got read failure.

Forgot to mention, some of your “okay” status again becomes to disable because of tegra186-quill-camera-modules.dtsi overwrites it. (It is a rule of DTS).

To know what exact status your dtb is, here are also some debug method.

dtc -I dtb -O dts -o temp.txt <your dtb name>

After this command, you can convert your final dtb to a text file(temp.txt) for debug.

I’ll dig up further for this…

And one thing forgot to ask about is that, is there a write sequence to the dtb when doing the “make dtbs”?

Use this as an example

tegra186-quill-p3310-1000-a00-00-base.dts-> tegra186-quill-camera-modules.dtsi -> tegra186-quill-camera-e3326-a00.dtsi -> tegra186-camera-e3326-a00.dtsi

if some nodes of tegra186-camera-e3326-a00.dtsi are changed (i.e. status from disable to okay). Then when making the final dtb (tegra186-quill-p3310-1000-a00-00-base.dtb), both camera-module.dtsi and quill-camera.dtsi would still affect those okay nodes? Is that directly change content in quill-camera-modules.dtsi would be a more optimal way to avoid this kind of problem?

Again thanks for your kindness.

Yes, there is an order between each dts. That is: if A.dts includes B.dtsi, those field in B.dtsi will be again overwritten by A.dts. (tegra186-camera-e3326-a00.dtsi is B.dtsi and tegra186-quill-camera-modules.dtsi is A.dts in your case).

You can also modify it in tegra186-quill-p3310-1000-a00-00-base.dts, so that it will definitely set to what you want.

Conventionally, the final dts is like a on/off switch.

Thanks for your advice. Now the camera becomes fully functional. We just modify the tegra186-quill-p3310-1000-a00-00-base.dts, which is decompiled using dtc. And manually replace all related nodes with overlay properties under correct fragment.

And we are now moving to TX1 platform, does it act the same with TX2?

Yes, TX1 camera module also uses plugin-manager