How does jetson tx2 support virtual channels?

I currently have a camera that will output 4 captured data to 4 virtual channels through a csi interface. I refer to the device tree configuration of imx390, only /dev/video0 appears, but /dev/video1 /dev/video2 /dev/video3 does not appear

The device tree is as follows, please help to check for errors:

/*
 * Copyright (c) 2015-2020, 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 = <4>;
			ports {
				#address-cells = <1>;
				#size-cells = <0>;
				port@0 {
					reg = <0>;
					e3327_vi_in0: endpoint {
						vc-id = <0>;
						port-index = <2>;
						bus-width = <4>;
						remote-endpoint = <&e3327_csi_out0>;
					};
				};
				port@1 {
					reg = <1>;
					e3327_vi_in1: endpoint {
						vc-id = <1>;
						port-index = <2>;
						bus-width = <4>;
						remote-endpoint = <&e3327_csi_out1>;
					};
				};
				port@2 {
					reg = <2>;
					e3327_vi_in2: endpoint {
						vc-id = <2>;
						port-index = <2>;
						bus-width = <4>;
						remote-endpoint = <&e3327_csi_out2>;
					};
				};
				port@3 {
					reg = <3>;
					e3327_vi_in3: endpoint {
						vc-id = <3>;
						port-index = <2>;
						bus-width = <4>;
						remote-endpoint = <&e3327_csi_out3>;
					};
				};
			};
		};

		nvcsi@150c0000 {
			num-channels = <4>;
			#address-cells = <1>;
			#size-cells = <0>;
			channel@0 {
				reg = <0>;
				ports {
					#address-cells = <1>;
					#size-cells = <0>;
					port@0 {
						reg = <0>;
						e3327_csi_in0: endpoint@0 {
							port-index = <2>;
							bus-width = <4>;
							remote-endpoint = <&e3327_ox03c10_out0>;
						};
					};
					port@1 {
						reg = <1>;
						e3327_csi_out0: endpoint@1 {
							remote-endpoint = <&e3327_vi_in0>;
						};
					};
				};
			};
			channel@1 {
				reg = <1>;
				ports {
					#address-cells = <1>;
					#size-cells = <0>;
					port@0 {
						reg = <0>;
						e3327_csi_in1: endpoint@2 {
							port-index = <2>;
							bus-width = <4>;
							remote-endpoint = <&e3327_ox03c10_out1>;
						};
					};
					port@1 {
						reg = <1>;
						e3327_csi_out1: endpoint@3 {
							remote-endpoint = <&e3327_vi_in1>;
						};
					};
				};
			};
			channel@2 {
				reg = <2>;
				ports {
					#address-cells = <1>;
					#size-cells = <0>;
					port@0 {
						reg = <0>;
						e3327_csi_in2: endpoint@4 {
							port-index = <2>;
							bus-width = <4>;
							remote-endpoint = <&e3327_ox03c10_out2>;
						};
					};
					port@1 {
						reg = <1>;
						e3327_csi_out2: endpoint@5 {
							remote-endpoint = <&e3327_vi_in2>;
						};
					};
				};
			};
			channel@3 {
				reg = <3>;
				ports {
					#address-cells = <1>;
					#size-cells = <0>;
					port@0 {
						reg = <0>;
						e3327_csi_in3: endpoint@6 {
							port-index = <2>;
							bus-width = <4>;
							remote-endpoint = <&e3327_ox03c10_out3>;
						};
					};
					port@1 {
						reg = <1>;
						e3327_csi_out3: endpoint@7 {
							remote-endpoint = <&e3327_vi_in3>;
						};
					};
				};
			};
		};
	};

	i2c@3180000 {
		ahd0: ox03c10_c@36 {
			compatible = "nvidia,ox03c10";
			/* I2C device address */
			reg = <0x36>;

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

			/* Physical dimensions of sensor */
			physical_w = "5.814";
			physical_h = "3.894";

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

			horizontal-mirror = "true";

			/* Enable EEPROM support */
			has-eeprom = "1";

			use_sensor_mode_id = "true";

			sensor_model ="ox03c10_0";

			/**
			* 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
			* Incase of virtual HW devices, use virtual
			* For SW emulated devices, use host
			*
			* phy_mode = "";
			* PHY mode used by the MIPI lanes for this device
			*
			* 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)
			*
			* == 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 (us)
			*
			*
			* min_hdr_ratio = "";
			* max_hdr_ratio = "";
			* HDR Ratio limits for mode
			*
			* framerate_factor = ""; (integer factor used for floating to fixed point conversion)
			* min_framerate = "";
			* max_framerate = "";
			* step_framerate = ""; (ceil to integer)
			* default_framerate = ""; (ceil to integer)
			* Framerate limits for mode (fps)
			*/
			mode0 {	//1920x1280_DEBUG
				mclk_khz = "24000";
				num_lanes = "4";
				tegra_sinterface = "serial_c";
				vc_id = "0";
				phy_mode = "DPHY";
				discontinuous_clk = "no";
				dpcm_enable = "false";
				cil_settletime = "0";		//"29"; //max 36

				active_w = "1920";
				active_h = "1286";
				mode_type = "bayer";
				pixel_phase = "bggr";
				csi_pixel_bit_depth = "10";

				readout_orientation = "90";
				line_length = "2190";
				inherent_gain = "1";
				mclk_multiplier = "7.5";
				pix_clk_hz = "180000000";

				gain_factor = "10000";
				min_gain_val = "10000";/* 1DB*/
				max_gain_val = "155000";/* 16DB*/	//155000
				step_gain_val = "625";
				default_gain = "10000";
				min_hdr_ratio = "1";
				max_hdr_ratio = "1";
				framerate_factor = "1000000";
				min_framerate = "1816577";/*1.816577 */
				max_framerate = "30000000";/*30*/			//modify 30000000   6000000
				step_framerate = "1";
				default_framerate = "30000000";				//modify 30000000   6000000
				exposure_factor = "1000000";
				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>;
					e3327_ox03c10_out0: endpoint {
						vc-id = <0>;
						port-index = <2>;
						bus-width = <4>;
						remote-endpoint = <&e3327_csi_in0>;
					};
				};
			};
		};

		ahd1: ox03c10_c@36 {
			compatible = "nvidia,ox03c10";
			/* I2C device address */
			reg = <0x36>;

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

			/* Physical dimensions of sensor */
			physical_w = "5.814";
			physical_h = "3.894";

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

			horizontal-mirror = "true";

			/* Enable EEPROM support */
			has-eeprom = "1";

			use_sensor_mode_id = "true";

			sensor_model ="ox03c10_1";

			mode0 {	//1920x1280_DEBUG
				mclk_khz = "24000";
				num_lanes = "4";
				tegra_sinterface = "serial_c";
				vc_id = "1";
				phy_mode = "DPHY";
				discontinuous_clk = "no";
				dpcm_enable = "false";
				cil_settletime = "0";		//"29"; //max 36

				active_w = "1920";
				active_h = "1286";
				mode_type = "bayer";
				pixel_phase = "bggr";
				csi_pixel_bit_depth = "10";

				readout_orientation = "90";
				line_length = "2190";
				inherent_gain = "1";
				mclk_multiplier = "7.5";
				pix_clk_hz = "180000000";

				gain_factor = "10000";
				min_gain_val = "10000";/* 1DB*/
				max_gain_val = "155000";/* 16DB*/	//155000
				step_gain_val = "625";
				default_gain = "10000";
				min_hdr_ratio = "1";
				max_hdr_ratio = "1";
				framerate_factor = "1000000";
				min_framerate = "1816577";/*1.816577 */
				max_framerate = "30000000";/*30*/			//modify 30000000   6000000
				step_framerate = "1";
				default_framerate = "30000000";				//modify 30000000   6000000
				exposure_factor = "1000000";
				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>;
					e3327_ox03c10_out1: endpoint {
						vc-id = <1>;
						port-index = <2>;
						bus-width = <4>;
						remote-endpoint = <&e3327_csi_in1>;
					};
				};
			};
		};
		
		ahd2: ox03c10_c@36 {
			compatible = "nvidia,ox03c10";
			/* I2C device address */
			reg = <0x36>;

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

			/* Physical dimensions of sensor */
			physical_w = "5.814";
			physical_h = "3.894";

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

			horizontal-mirror = "true";

			/* Enable EEPROM support */
			has-eeprom = "1";

			use_sensor_mode_id = "true";

			sensor_model ="ox03c10_1";

			mode0 {	//1920x1280_DEBUG
				mclk_khz = "24000";
				num_lanes = "4";
				tegra_sinterface = "serial_c";
				vc_id = "2";
				phy_mode = "DPHY";
				discontinuous_clk = "no";
				dpcm_enable = "false";
				cil_settletime = "0";		//"29"; //max 36

				active_w = "1920";
				active_h = "1286";
				mode_type = "bayer";
				pixel_phase = "bggr";
				csi_pixel_bit_depth = "10";

				readout_orientation = "90";
				line_length = "2190";
				inherent_gain = "1";
				mclk_multiplier = "7.5";
				pix_clk_hz = "180000000";

				gain_factor = "10000";
				min_gain_val = "10000";/* 1DB*/
				max_gain_val = "155000";/* 16DB*/	//155000
				step_gain_val = "625";
				default_gain = "10000";
				min_hdr_ratio = "1";
				max_hdr_ratio = "1";
				framerate_factor = "1000000";
				min_framerate = "1816577";/*1.816577 */
				max_framerate = "30000000";/*30*/			//modify 30000000   6000000
				step_framerate = "1";
				default_framerate = "30000000";				//modify 30000000   6000000
				exposure_factor = "1000000";
				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>;
					e3327_ox03c10_out2: endpoint {
						vc-id = <2>;
						port-index = <2>;
						bus-width = <4>;
						remote-endpoint = <&e3327_csi_in2>;
					};
				};
			};
		};
		
		ahd3: ox03c10_c@36 {
			compatible = "nvidia,ox03c10";
			/* I2C device address */
			reg = <0x36>;

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

			/* Physical dimensions of sensor */
			physical_w = "5.814";
			physical_h = "3.894";

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

			horizontal-mirror = "true";

			/* Enable EEPROM support */
			has-eeprom = "1";

			use_sensor_mode_id = "true";

			sensor_model ="ox03c10_1";

			mode0 {	//1920x1280_DEBUG
				mclk_khz = "24000";
				num_lanes = "4";
				tegra_sinterface = "serial_c";
				vc_id = "3";
				phy_mode = "DPHY";
				discontinuous_clk = "no";
				dpcm_enable = "false";
				cil_settletime = "0";		//"29"; //max 36

				active_w = "1920";
				active_h = "1286";
				mode_type = "bayer";
				pixel_phase = "bggr";
				csi_pixel_bit_depth = "10";

				readout_orientation = "90";
				line_length = "2190";
				inherent_gain = "1";
				mclk_multiplier = "7.5";
				pix_clk_hz = "180000000";

				gain_factor = "10000";
				min_gain_val = "10000";/* 1DB*/
				max_gain_val = "155000";/* 16DB*/	//155000
				step_gain_val = "625";
				default_gain = "10000";
				min_hdr_ratio = "1";
				max_hdr_ratio = "1";
				framerate_factor = "1000000";
				min_framerate = "1816577";/*1.816577 */
				max_framerate = "30000000";/*30*/			//modify 30000000   6000000
				step_framerate = "1";
				default_framerate = "30000000";				//modify 30000000   6000000
				exposure_factor = "1000000";
				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>;
					e3327_ox03c10_out3: endpoint {
						vc-id = <3>;
						port-index = <2>;
						bus-width = <4>;
						remote-endpoint = <&e3327_csi_in3>;
					};
				};
			};
		};
	};

	e3327_lens_ox03c10@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 = <4>;
		max_lane_speed = <1200000>;
		min_bits_per_pixel = <10>;
		vi_peak_byte_per_pixel = <2>;
		vi_bw_margin_pct = <25>;
		max_pixel_rate = <180000>;
		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 = "e3327_rear_P5V27C";
				position = "rear";
				orientation = "1";
				//status = "okay";
				drivernode0 {
					/* Declare PCL support driver (classically known as guid)  */
					pcl_id = "v4l2_sensor";
					/* Driver v4l2 device name */
					devname = "ox03c10 2-0036";
					/* Declare the device-tree hierarchy to driver instance */
					proc-device-tree = "/proc/device-tree/i2c@3180000/ahd0";
					//status = "okay";
				};
				drivernode1 {
					/* Declare PCL support driver (classically known as guid)  */
					pcl_id = "v4l2_lens";
					proc-device-tree = "/proc/device-tree/e3327_lens_ox03c10@P5V27C/";
				};
			};
			module1 {
				badge = "e3327_front_P5V27C";
				position = "front";
				orientation = "1";
				//status = "okay";
				drivernode0 {
					/* Declare PCL support driver (classically known as guid)  */
					pcl_id = "v4l2_sensor";
					/* Driver v4l2 device name */
					devname = "ox03c10 2-0036";
					/* Declare the device-tree hierarchy to driver instance */
					proc-device-tree = "/proc/device-tree/i2c@3180000/ahd1";
					//status = "okay";
				};
				drivernode1 {
					/* Declare PCL support driver (classically known as guid)  */
					pcl_id = "v4l2_lens";
					proc-device-tree = "/proc/device-tree/e3327_lens_ox03c10@P5V27C/";
				};
			};
			
			module2 {
				badge = "e3327_front_P5V27C";
				position = "front";
				orientation = "1";
				//status = "okay";
				drivernode0 {
					/* Declare PCL support driver (classically known as guid)  */
					pcl_id = "v4l2_sensor";
					/* Driver v4l2 device name */
					devname = "ox03c10 2-0036";
					/* Declare the device-tree hierarchy to driver instance */
					proc-device-tree = "/proc/device-tree/i2c@3180000/ahd2";
					//status = "okay";
				};
				drivernode1 {
					/* Declare PCL support driver (classically known as guid)  */
					pcl_id = "v4l2_lens";
					proc-device-tree = "/proc/device-tree/e3327_lens_ox03c10@P5V27C/";
				};
			};
			
			module3 {
				badge = "e3327_front_P5V27C";
				position = "front";
				orientation = "1";
				//status = "okay";
				drivernode0 {
					/* Declare PCL support driver (classically known as guid)  */
					pcl_id = "v4l2_sensor";
					/* Driver v4l2 device name */
					devname = "ox03c10 2-0036";
					/* Declare the device-tree hierarchy to driver instance */
					proc-device-tree = "/proc/device-tree/i2c@3180000/ahd3";
					//status = "okay";
				};
				drivernode1 {
					/* Declare PCL support driver (classically known as guid)  */
					pcl_id = "v4l2_lens";
					proc-device-tree = "/proc/device-tree/e3327_lens_ox03c10@P5V27C/";
				};
			};
		};
	};
};

My camera is different from imx390, only one camera, one i2c address, and output data through 4 virtual channels. When the device tree has only one virtual channel, it can work normally. But after referencing the device tree to imx390, the corresponding number of /dev/videox is not obtained

Make others three camera to different i2c address and modify the driver to handle it if need i2c access.

thank you for your reply
Yes, this is what I do now, and I can display multiple /dev/videox.

  1. The other three i2c addresses are wrong, video0 can get data normally. Video1/video2/video3 cannot obtain camera data normally. How to modify the driver?
  2. Because there is only one camera, I may not need to use video1/video2/video3 to operate I2C. Only use video0 to operate I2C. But later, I want to get the data of video0/video1/video2/video3 at the same time for image processing. Do you have any suggestions here?

The driver able know the address from the client data struct. You can check the address to configure it.

I don’t quite understand what you mean, does your “the client data struct” refer to priv->i2c_client? What needs to be configured? Is it forced to change to a normal i2c address in the driver code?

struct ox03c10 {
	struct camera_common_eeprom_data eeprom[OX03C10_EEPROM_NUM_BLOCKS];
	u8				eeprom_buf[OX03C10_EEPROM_SIZE];
	u8				otp_buf[OX03C10_OTP_SIZE];
	struct i2c_client		*i2c_client;
	struct v4l2_subdev		*subdev;
	u8				fuse_id[OX03C10_FUSE_ID_SIZE];
	const char			*devname;
	struct dentry			*debugfs_dir;
	struct mutex			streaming_lock;
	bool				streaming;

	s32				group_hold_prev;
	u32				frame_length;
	bool				group_hold_en;
	struct camera_common_i2c	i2c_dev;
	struct camera_common_data	*s_data;
	struct tegracam_device		*tc_dev;

	char video_name[16];
};

static struct regmap_config ox03c10_regmap_config = {
	.reg_bits = 16,
	.val_bits = 8,
};

I mean i2c_client

struct i2c_client {
  unsigned short flags;
  unsigned short addr;
  char name[I2C_NAME_SIZE];
  struct i2c_adapter * adapter;
  struct device dev;
  int irq;
  struct list_head detected;
#if IS_ENABLED(CONFIG_I2C_SLAVE)
  i2c_slave_cb_t slave_cb;
#endif
};  

Thanks, I now try to force the modification to the correct I2C address in the driver to work normally

Hi @ShaneCCC

We do have a similar situation.
For us, one camera source outputs two mipi streams (vc = 0 and 1);
We tried the above method. But i2c-communication is only possible through first video node.
correct i2c addr <0x24> for /dev/video0
and a dummy addr <0x30> for /dev/video1.

In dummy driver we force client->addr = 0x24 and try to do i2c transaction to camera.
we get “no acknowledgement from addr 0x24”.
But in original sensor driver (video0) we get proper i2c transactions.

Could be power/reset/standby pin in incorrect state.

OK! … Shall check on the pin states and update

@ShaneCCC
Is there any reference implementation for the design mentioned in this discussion thread.

Please more specific your question.

Thanks

Please help to open a new topic if still an issue there. Thanks