Modifying device tree for IMX219 behind I2C mux

Hi all,

I’m looking for some help with modifying my device tree to get an IMX219 working on my custom carrier board (Antmicro open source baseboard).

On the carrier , the Camera I2C lines are behind an I2C mux (TCA9548, as pointed out in this github issue). The authors made a patch to add their own camera to the device tree, and I want to do the same but with an imx219.

I have decompiled the existing tegra210-p3448-0002-p3449-0000-b00.dtb into a dts, and added the following i2c node:

i2c@3180000 {
	avt_pca9548: avt_pca9548@70 {
		compatible = "nxp,pca9548";
		status = "okay";
		reg = <0x70>;
		#address-cells = <1>;
		#size-cells = <0>;
		// vcc-supply = <&battery_reg>;
		force_bus_start = <0>;
		i2c@2 {
			reg = <2>;
			i2c-mux,deselect-on-exit;
			#address-cells = <1>;
			#size-cells = <0>;
			rbpcv2_imx219 {
				compatible = "nvidia,imx219";
				reg = <0x10>;
				devnode = "video0";
				physical_w = "3.680";
				physical_h = "2.760";
				sensor_model = "imx219";
				use_sensor_mode_id = "true";
				status = "okay";
				reset-gpios = <0x5b 0x97 0x00>;
				// linux,phandle = <0xcb>;
				// phandle = <0xcb>;
				mode0 {... };
                                    // More modes added after this point
				
                                    ports {
					#address-cells = <0x01>;
					#size-cells = <0x00>;

					port@0 {
						reg = <0x00>;

						endpoint {
							port-index = <0x00>;
							bus-width = <0x02>;
							remote-endpoint = <0x78>;
							// linux,phandle = <0x79>;
							// phandle = <0x79>;
						};
					};
				};
			};
		};

		i2c@3 {
			reg = <3>;
			i2c-mux,deselect-on-exit;
			#address-cells = <1>;
			#size-cells = <0>;
			rbpcv2_imx219 {
				compatible = "nvidia,imx219";
				reg = <0x10>;
				devnode = "video1";
				physical_w = "3.680";
				physical_h = "2.760";
				sensor_model = "imx219";
				use_sensor_mode_id = "true";
				status = "disabled";
				reset-gpios = <0x5b 0x97 0x00>;
				linux,phandle = <0xcb>;
				phandle = <0xcb>;
				mode0 { ... };

                                    // More modes after this point

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

					port@0 {
						reg = <0x00>;

						endpoint {
							port-index = <0x00>;
							bus-width = <0x02>;
							remote-endpoint = <0x78>;
							linux,phandle = <0x79>;
							phandle = <0x79>;
						};
					};
				};
			};
		};
	};
};

This *.dts is a messy mashup of the original tegra210-p3448-0002-p3449-0000-b00.dtb and the patch from this github.

Needless to say - it doesn’t work, so I’m left with the following questions:

  • There is a /proc/device-tree/i2c@3180000, so the *.dtb was definitely flashed, but how do I actually debug the i2c@3180000 address? It looks like this:
tree -L 4 i2c@3180000
i2c@3180000
β”œβ”€β”€ avt_pca9548@70
β”‚   β”œβ”€β”€ #address-cells
β”‚   β”œβ”€β”€ compatible
β”‚   β”œβ”€β”€ force_bus_start
β”‚   β”œβ”€β”€ i2c@2
β”‚   β”‚   β”œβ”€β”€ #address-cells
β”‚   β”‚   β”œβ”€β”€ i2c-mux,deselect-on-exit
β”‚   β”‚   β”œβ”€β”€ name
β”‚   β”‚   β”œβ”€β”€ rbpcv2_imx219
β”‚   β”‚   β”‚   β”œβ”€β”€ compatible
β”‚   β”‚   β”‚   β”œβ”€β”€ devnode
β”‚   β”‚   β”‚   β”œβ”€β”€ mode0
β”‚   β”‚   β”‚   β”œβ”€β”€ mode1
β”‚   β”‚   β”‚   β”œβ”€β”€ mode2
β”‚   β”‚   β”‚   β”œβ”€β”€ mode3
β”‚   β”‚   β”‚   β”œβ”€β”€ mode4
β”‚   β”‚   β”‚   β”œβ”€β”€ mode5
β”‚   β”‚   β”‚   β”œβ”€β”€ name
β”‚   β”‚   β”‚   β”œβ”€β”€ physical_h
β”‚   β”‚   β”‚   β”œβ”€β”€ physical_w
β”‚   β”‚   β”‚   β”œβ”€β”€ ports
β”‚   β”‚   β”‚   β”œβ”€β”€ reg
β”‚   β”‚   β”‚   β”œβ”€β”€ reset-gpios
β”‚   β”‚   β”‚   β”œβ”€β”€ sensor_model
β”‚   β”‚   β”‚   β”œβ”€β”€ status
β”‚   β”‚   β”‚   └── use_sensor_mode_id
β”‚   β”‚   β”œβ”€β”€ reg
β”‚   β”‚   └── #size-cells
β”‚   β”œβ”€β”€ i2c@3
β”‚   β”‚   β”œβ”€β”€ #address-cells
β”‚   β”‚   β”œβ”€β”€ i2c-mux,deselect-on-exit
β”‚   β”‚   β”œβ”€β”€ name
β”‚   β”‚   β”œβ”€β”€ rbpcv2_imx219
β”‚   β”‚   β”‚   β”œβ”€β”€ compatible
β”‚   β”‚   β”‚   β”œβ”€β”€ devnode
β”‚   β”‚   β”‚   β”œβ”€β”€ linux,phandle
β”‚   β”‚   β”‚   β”œβ”€β”€ mode0
β”‚   β”‚   β”‚   β”œβ”€β”€ mode1
β”‚   β”‚   β”‚   β”œβ”€β”€ mode2
β”‚   β”‚   β”‚   β”œβ”€β”€ mode3
β”‚   β”‚   β”‚   β”œβ”€β”€ mode4
β”‚   β”‚   β”‚   β”œβ”€β”€ mode5
β”‚   β”‚   β”‚   β”œβ”€β”€ name
β”‚   β”‚   β”‚   β”œβ”€β”€ phandle
β”‚   β”‚   β”‚   β”œβ”€β”€ physical_h
β”‚   β”‚   β”‚   β”œβ”€β”€ physical_w
β”‚   β”‚   β”‚   β”œβ”€β”€ ports
β”‚   β”‚   β”‚   β”œβ”€β”€ reg
β”‚   β”‚   β”‚   β”œβ”€β”€ reset-gpios
β”‚   β”‚   β”‚   β”œβ”€β”€ sensor_model
β”‚   β”‚   β”‚   β”œβ”€β”€ status
β”‚   β”‚   β”‚   └── use_sensor_mode_id
β”‚   β”‚   β”œβ”€β”€ reg
β”‚   β”‚   └── #size-cells
β”‚   β”œβ”€β”€ name
β”‚   β”œβ”€β”€ reg
β”‚   β”œβ”€β”€ #size-cells
β”‚   └── status
└── name
  • i2cdetect -l shows this:
i2cdetect -l
i2c-3	i2c       	7000c700.i2c                    	I2C adapter
i2c-1	i2c       	7000c400.i2c                    	I2C adapter
i2c-6	i2c       	Tegra I2C adapter               	I2C adapter
i2c-4	i2c       	7000d000.i2c                    	I2C adapter
i2c-2	i2c       	7000c500.i2c                    	I2C adapter
i2c-0	i2c       	7000c000.i2c                    	I2C adapter
i2c-5	i2c       	7000d100.i2c                    	I2C adapter

does this mean that the I2C mux is not being detected at all?

  • Does anyone have experience with a device tree with the TCA9548 mux for the jetson Nano? I would love to be able to copy someones *.dts (or use it as a guide for my own)

Jetson Nano doesn’t have i2c@3180000, it could be the i2c6 = β€œ/host1x/i2c@546c0000”

Hi @ShaneCCC, thanks for getting back at me

I’ve replaced the /host1x/i2c@546c0000 address in my dtb, and it seems to have flashed correctly, but still no luck.

I’ve also tried setting the cam_i2cmux status to okay, but that didn’t seem to change anything either.

Any idea how I can fix or even debug this issue? Not entirely sure where to begin. Here’s the serial output from boot:

[    0.000000] Booting Linux on physical CPU 0x0
[    0.000000] Linux version 4.9.201-tegra (buildbrain@mobile-u64-5294-d8000) (gcc version 7.3.1 20180425 [linaro-7.3-2018.05 revision d29120a424ecfbc11
[    0.000000] Boot CPU: AArch64 Processor [411fd071]
[    0.000000] OF: fdt:memory scan node memory@80000000, reg size 32,
[    0.000000] OF: fdt: - 80000000 ,  7ee00000
[    0.000000] OF: fdt: - 100000000 ,  7f200000
[    0.000000] earlycon: uart8250 at MMIO32 0x0000000070006000 (options '')
[    0.000000] bootconsole [uart8250] enabled
[    1.079261] tegradc tegradc.1: dpd enable lookup fail:-19
[    1.585000] Host read timeout at address 545c00c4
[    1.628376] qspi_mtd spi32766.0: unrecognized JEDEC id 000000
[    1.830483] imx219 7-0010: imx219_board_setup: error during i2c read probe (-121)
[    1.838057] imx219 7-0010: board setup failed
[    1.866218] imx219 8-0010: imx219_board_setup: error during i2c read probe (-121)
[    1.873756] imx219 8-0010: board setup failed

Here’s my DTS snippet for the cam_i2cmux:


	cam_i2cmux {
		compatible = "i2c-mux-gpio";
		#address-cells = <0x01>;
		#size-cells = <0x00>;
		mux-gpios = <0x5b 0x40 0x00>;
		i2c-parent = <0xad>;
		status = "okay";
		linux,phandle = <0xd3>;
		phandle = <0xd3>;

		i2c@0 {
			status = "okay";
			reg = <0x00>;
			#address-cells = <0x01>;
			#size-cells = <0x00>;
			linux,phandle = <0xd4>;
			phandle = <0xd4>;

			rbpcv2_imx219_a@10 {
				compatible = "nvidia,imx219";
				reg = <0x10>;
				devnode = "video0";
				physical_w = "3.680";
				physical_h = "2.760";
				sensor_model = "imx219";
				use_sensor_mode_id = "true";
				status = "disabled";
				reset-gpios = <0x5b 0x97 0x00>;
				linux,phandle = <0xcb>;
				phandle = <0xcb>;

				mode0 {
					mclk_khz = "24000";
					num_lanes = [32 00];
					tegra_sinterface = "serial_a";
					phy_mode = "DPHY";
					discontinuous_clk = "yes";
					dpcm_enable = "false";
					cil_settletime = [30 00];
					active_w = "3264";
					active_h = "2464";
					pixel_t = "bayer_rggb";
					readout_orientation = "90";
					line_length = "3448";
					inherent_gain = [31 00];
					mclk_multiplier = "9.33";
					pix_clk_hz = "182400000";
					gain_factor = "16";
					framerate_factor = "1000000";
					exposure_factor = "1000000";
					min_gain_val = "16";
					max_gain_val = "170";
					step_gain_val = [31 00];
					default_gain = "16";
					min_hdr_ratio = [31 00];
					max_hdr_ratio = [31 00];
					min_framerate = "2000000";
					max_framerate = "21000000";
					step_framerate = [31 00];
					default_framerate = "21000000";
					min_exp_time = "13";
					max_exp_time = "683709";
					step_exp_time = [31 00];
					default_exp_time = "2495";
					embedded_metadata_height = [32 00];
				};

				mode1 {
					mclk_khz = "24000";
					num_lanes = [32 00];
					tegra_sinterface = "serial_a";
					phy_mode = "DPHY";
					discontinuous_clk = "yes";
					dpcm_enable = "false";
					cil_settletime = [30 00];
					active_w = "3264";
					active_h = "1848";
					pixel_t = "bayer_rggb";
					readout_orientation = "90";
					line_length = "3448";
					inherent_gain = [31 00];
					mclk_multiplier = "9.33";
					pix_clk_hz = "182400000";
					gain_factor = "16";
					framerate_factor = "1000000";
					exposure_factor = "1000000";
					min_gain_val = "16";
					max_gain_val = "170";
					step_gain_val = [31 00];
					default_gain = "16";
					min_hdr_ratio = [31 00];
					max_hdr_ratio = [31 00];
					min_framerate = "2000000";
					max_framerate = "28000000";
					step_framerate = [31 00];
					default_framerate = "28000000";
					min_exp_time = "13";
					max_exp_time = "683709";
					step_exp_time = [31 00];
					default_exp_time = "2495";
					embedded_metadata_height = [32 00];
				};

				mode2 {
					mclk_khz = "24000";
					num_lanes = [32 00];
					tegra_sinterface = "serial_a";
					phy_mode = "DPHY";
					discontinuous_clk = "yes";
					dpcm_enable = "false";
					cil_settletime = [30 00];
					active_w = "1920";
					active_h = "1080";
					pixel_t = "bayer_rggb";
					readout_orientation = "90";
					line_length = "3448";
					inherent_gain = [31 00];
					mclk_multiplier = "9.33";
					pix_clk_hz = "182400000";
					gain_factor = "16";
					framerate_factor = "1000000";
					exposure_factor = "1000000";
					min_gain_val = "16";
					max_gain_val = "170";
					step_gain_val = [31 00];
					default_gain = "16";
					min_hdr_ratio = [31 00];
					max_hdr_ratio = [31 00];
					min_framerate = "2000000";
					max_framerate = "30000000";
					step_framerate = [31 00];
					default_framerate = "30000000";
					min_exp_time = "13";
					max_exp_time = "683709";
					step_exp_time = [31 00];
					default_exp_time = "2495";
					embedded_metadata_height = [32 00];
				};

				mode3 {
					mclk_khz = "24000";
					num_lanes = [32 00];
					tegra_sinterface = "serial_a";
					phy_mode = "DPHY";
					discontinuous_clk = "yes";
					dpcm_enable = "false";
					cil_settletime = [30 00];
					active_w = "1640";
					active_h = "1232";
					pixel_t = "bayer_rggb";
					readout_orientation = "90";
					line_length = "3448";
					inherent_gain = [31 00];
					mclk_multiplier = "9.33";
					pix_clk_hz = "182400000";
					gain_factor = "16";
					framerate_factor = "1000000";
					exposure_factor = "1000000";
					min_gain_val = "16";
					max_gain_val = "170";
					step_gain_val = [31 00];
					default_gain = "16";
					min_hdr_ratio = [31 00];
					max_hdr_ratio = [31 00];
					min_framerate = "2000000";
					max_framerate = "30000000";
					step_framerate = [31 00];
					default_framerate = "30000000";
					min_exp_time = "13";
					max_exp_time = "683709";
					step_exp_time = [31 00];
					default_exp_time = "2495";
					embedded_metadata_height = [32 00];
				};

				mode4 {
					mclk_khz = "24000";
					num_lanes = [32 00];
					tegra_sinterface = "serial_a";
					phy_mode = "DPHY";
					discontinuous_clk = "yes";
					dpcm_enable = "false";
					cil_settletime = [30 00];
					active_w = "1280";
					active_h = "720";
					pixel_t = "bayer_rggb";
					readout_orientation = "90";
					line_length = "3448";
					inherent_gain = [31 00];
					mclk_multiplier = "9.33";
					pix_clk_hz = "182400000";
					gain_factor = "16";
					framerate_factor = "1000000";
					exposure_factor = "1000000";
					min_gain_val = "16";
					max_gain_val = "170";
					step_gain_val = [31 00];
					default_gain = "16";
					min_hdr_ratio = [31 00];
					max_hdr_ratio = [31 00];
					min_framerate = "2000000";
					max_framerate = "60000000";
					step_framerate = [31 00];
					default_framerate = "60000000";
					min_exp_time = "13";
					max_exp_time = "683709";
					step_exp_time = [31 00];
					default_exp_time = "2495";
					embedded_metadata_height = [32 00];
				};

				mode5 {
					mclk_khz = "24000";
					num_lanes = [32 00];
					tegra_sinterface = "serial_a";
					phy_mode = "DPHY";
					discontinuous_clk = "yes";
					dpcm_enable = "false";
					cil_settletime = [30 00];
					active_w = "1280";
					active_h = "720";
					pixel_t = "bayer_rggb";
					readout_orientation = "90";
					line_length = "3560";
					inherent_gain = [31 00];
					mclk_multiplier = "9.33";
					pix_clk_hz = "169600000";
					gain_factor = "16";
					framerate_factor = "1000000";
					exposure_factor = "1000000";
					min_gain_val = "16";
					max_gain_val = "170";
					step_gain_val = [31 00];
					default_gain = "16";
					min_hdr_ratio = [31 00];
					max_hdr_ratio = [31 00];
					min_framerate = "2000000";
					max_framerate = "120000000";
					step_framerate = [31 00];
					default_framerate = "120000000";
					min_exp_time = "13";
					max_exp_time = "683709";
					step_exp_time = [31 00];
					default_exp_time = "2495";
					embedded_metadata_height = [32 00];
				};

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

					port@0 {
						reg = <0x00>;

						endpoint {
							port-index = <0x00>;
							bus-width = <0x02>;
							remote-endpoint = <0x78>;
							linux,phandle = <0x79>;
							phandle = <0x79>;
						};
					};
				};
			};
		};

		i2c@1 {
			status = "okay";
			reg = <0x01>;
			#address-cells = <0x01>;
			#size-cells = <0x00>;
			linux,phandle = <0xd5>;
			phandle = <0xd5>;

			rbpcv2_imx219_e@10 {
				compatible = "nvidia,imx219";
				reg = <0x10>;
				devnode = "video1";
				physical_w = "3.680";
				physical_h = "2.760";
				sensor_model = "imx219";
				use_sensor_mode_id = "true";
				status = "disabled";
				reset-gpios = <0x5b 0x98 0x00>;
				linux,phandle = <0xcc>;
				phandle = <0xcc>;

				mode0 {
					mclk_khz = "24000";
					num_lanes = [32 00];
					tegra_sinterface = "serial_e";
					phy_mode = "DPHY";
					discontinuous_clk = "yes";
					dpcm_enable = "false";
					cil_settletime = [30 00];
					active_w = "3264";
					active_h = "2464";
					pixel_t = "bayer_rggb";
					readout_orientation = "90";
					line_length = "3448";
					inherent_gain = [31 00];
					mclk_multiplier = "9.33";
					pix_clk_hz = "182400000";
					gain_factor = "16";
					framerate_factor = "1000000";
					exposure_factor = "1000000";
					min_gain_val = "16";
					max_gain_val = "170";
					step_gain_val = [31 00];
					default_gain = "16";
					min_hdr_ratio = [31 00];
					max_hdr_ratio = [31 00];
					min_framerate = "2000000";
					max_framerate = "21000000";
					step_framerate = [31 00];
					default_framerate = "21000000";
					min_exp_time = "13";
					max_exp_time = "683709";
					step_exp_time = [31 00];
					default_exp_time = "2495";
					embedded_metadata_height = [32 00];
				};

				mode1 {
					mclk_khz = "24000";
					num_lanes = [32 00];
					tegra_sinterface = "serial_e";
					phy_mode = "DPHY";
					discontinuous_clk = "yes";
					dpcm_enable = "false";
					cil_settletime = [30 00];
					active_w = "3264";
					active_h = "1848";
					pixel_t = "bayer_rggb";
					readout_orientation = "90";
					line_length = "3448";
					inherent_gain = [31 00];
					mclk_multiplier = "9.33";
					pix_clk_hz = "182400000";
					gain_factor = "16";
					framerate_factor = "1000000";
					exposure_factor = "1000000";
					min_gain_val = "16";
					max_gain_val = "170";
					step_gain_val = [31 00];
					default_gain = "16";
					min_hdr_ratio = [31 00];
					max_hdr_ratio = [31 00];
					min_framerate = "2000000";
					max_framerate = "28000000";
					step_framerate = [31 00];
					default_framerate = "28000000";
					min_exp_time = "13";
					max_exp_time = "683709";
					step_exp_time = [31 00];
					default_exp_time = "2495";
					embedded_metadata_height = [32 00];
				};

				mode2 {
					mclk_khz = "24000";
					num_lanes = [32 00];
					tegra_sinterface = "serial_e";
					phy_mode = "DPHY";
					discontinuous_clk = "yes";
					dpcm_enable = "false";
					cil_settletime = [30 00];
					active_w = "1920";
					active_h = "1080";
					pixel_t = "bayer_rggb";
					readout_orientation = "90";
					line_length = "3448";
					inherent_gain = [31 00];
					mclk_multiplier = "9.33";
					pix_clk_hz = "182400000";
					gain_factor = "16";
					framerate_factor = "1000000";
					exposure_factor = "1000000";
					min_gain_val = "16";
					max_gain_val = "170";
					step_gain_val = [31 00];
					default_gain = "16";
					min_hdr_ratio = [31 00];
					max_hdr_ratio = [31 00];
					min_framerate = "2000000";
					max_framerate = "30000000";
					step_framerate = [31 00];
					default_framerate = "30000000";
					min_exp_time = "13";
					max_exp_time = "683709";
					step_exp_time = [31 00];
					default_exp_time = "2495";
					embedded_metadata_height = [32 00];
				};

				mode3 {
					mclk_khz = "24000";
					num_lanes = [32 00];
					tegra_sinterface = "serial_e";
					phy_mode = "DPHY";
					discontinuous_clk = "yes";
					dpcm_enable = "false";
					cil_settletime = [30 00];
					active_w = "1640";
					active_h = "1232";
					pixel_t = "bayer_rggb";
					readout_orientation = "90";
					line_length = "3448";
					inherent_gain = [31 00];
					mclk_multiplier = "9.33";
					pix_clk_hz = "182400000";
					gain_factor = "16";
					framerate_factor = "1000000";
					exposure_factor = "1000000";
					min_gain_val = "16";
					max_gain_val = "170";
					step_gain_val = [31 00];
					default_gain = "16";
					min_hdr_ratio = [31 00];
					max_hdr_ratio = [31 00];
					min_framerate = "2000000";
					max_framerate = "30000000";
					step_framerate = [31 00];
					default_framerate = "30000000";
					min_exp_time = "13";
					max_exp_time = "683709";
					step_exp_time = [31 00];
					default_exp_time = "2495";
					embedded_metadata_height = [32 00];
				};

				mode4 {
					mclk_khz = "24000";
					num_lanes = [32 00];
					tegra_sinterface = "serial_e";
					phy_mode = "DPHY";
					discontinuous_clk = "yes";
					dpcm_enable = "false";
					cil_settletime = [30 00];
					active_w = "1280";
					active_h = "720";
					pixel_t = "bayer_rggb";
					readout_orientation = "90";
					line_length = "3448";
					inherent_gain = [31 00];
					mclk_multiplier = "9.33";
					pix_clk_hz = "182400000";
					gain_factor = "16";
					framerate_factor = "1000000";
					exposure_factor = "1000000";
					min_gain_val = "16";
					max_gain_val = "170";
					step_gain_val = [31 00];
					default_gain = "16";
					min_hdr_ratio = [31 00];
					max_hdr_ratio = [31 00];
					min_framerate = "2000000";
					max_framerate = "60000000";
					step_framerate = [31 00];
					default_framerate = "60000000";
					min_exp_time = "13";
					max_exp_time = "683709";
					step_exp_time = [31 00];
					default_exp_time = "2495";
					embedded_metadata_height = [32 00];
				};

				mode5 {
					mclk_khz = "24000";
					num_lanes = [32 00];
					tegra_sinterface = "serial_e";
					phy_mode = "DPHY";
					discontinuous_clk = "yes";
					dpcm_enable = "false";
					cil_settletime = [30 00];
					active_w = "1280";
					active_h = "720";
					pixel_t = "bayer_rggb";
					readout_orientation = "90";
					line_length = "3560";
					inherent_gain = [31 00];
					mclk_multiplier = "9.33";
					pix_clk_hz = "169600000";
					gain_factor = "16";
					framerate_factor = "1000000";
					exposure_factor = "1000000";
					min_gain_val = "16";
					max_gain_val = "170";
					step_gain_val = [31 00];
					default_gain = "16";
					min_hdr_ratio = [31 00];
					max_hdr_ratio = [31 00];
					min_framerate = "2000000";
					max_framerate = "120000000";
					step_framerate = [31 00];
					default_framerate = "120000000";
					min_exp_time = "13";
					max_exp_time = "683709";
					step_exp_time = [31 00];
					default_exp_time = "2495";
					embedded_metadata_height = [32 00];
				};

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

					port@0 {
						reg = <0x00>;

						endpoint {
							port-index = <0x04>;
							bus-width = <0x02>;
							remote-endpoint = <0xae>;
							linux,phandle = <0x7b>;
							phandle = <0x7b>;
						};
					};
				};
			};
		};
	};

It’s different with your early source. In the early dts your sensor is connected to i2c mux chip(pca9548) but in the latest they are connect to i2c-gpio-mux, which one is correct.
Also from latest the driver was been loaded but could be i2c failed cause probe failed.

Yeah, I’ve been messing with the DTS since my first post in an attempt to get it to work.

So if the driver was loaded but the probe failed, that probably means either the parent node is wrong or the kernel can’t see the path to the I2C mux?

Here’s the image of the mux:

Can I just use the cam_i2cmux node to represent this mux?

Then you can reference to …//hardware/nvidia/platform/t210/jetson/kernel-dts/jetson-platforms/tegra210-camera-e3333-a00.dtsi for it.
It should be like below

		i2c@546c0000 {
              tca9548@77 {
              compatible = "nxp,pca9548";
               reg = <0x77>;
               #address-cells = <0x1>;
               #size-cells = <0x0>;

 				i2c@0 {
 					ov5693_a@36 {
...
...
				i2c@1 {
429 					ov5693_b@36 {

Hi @ShaneCCC, thanks again for getting back to me

Ok so I just tried the e3333 config but replaced the ov5693_a@36 with rbpcv2_imx219 to no avail.

I also tried reg = <0x70 and adding force_bus_start = <0x1E>, as that is what I saw on github

So my DTS looked like this:

...
        host1x {
		i2c@546c0000 {
			tca9548@70 {
				compatible = "nxp,pca9548";
				status = "okay";
				reg = <0x70>;
				#address-cells = <1>;
				#size-cells = <0>;
				// vcc-supply = <&battery_reg>;
				force_bus_start = <0x1E>;
				i2c@2 {
					reg = <2>;
					i2c-mux,deselect-on-exit;
					#address-cells = <1>;
					#size-cells = <0>;
					rbpcv2_imx219 {
						compatible = "nvidia,imx219";
						reg = <0x10>;
						devnode = "video0";
						physical_w = "3.680";
						physical_h = "2.760";
						sensor_model = "imx219";
						use_sensor_mode_id = "true";
						status = "okay";
						reset-gpios = <0x5b 0x97 0x00>;
						// linux,phandle = <0xcb>;
						// phandle = <0xcb>;

						mode0 {
							mclk_khz = "24000";
							num_lanes = [32 00];
							tegra_sinterface = "serial_a";
							phy_mode = "DPHY";
							discontinuous_clk = "yes";
							dpcm_enable = "false";
							cil_settletime = [30 00];
							active_w = "3264";
							active_h = "2464";
							pixel_t = "bayer_rggb";
							readout_orientation = "90";
							line_length = "3448";
							inherent_gain = [31 00];
							mclk_multiplier = "9.33";
							pix_clk_hz = "182400000";
							gain_factor = "16";
							framerate_factor = "1000000";
							exposure_factor = "1000000";
							min_gain_val = "16";
							max_gain_val = "170";
							step_gain_val = [31 00];
							default_gain = "16";
							min_hdr_ratio = [31 00];
							max_hdr_ratio = [31 00];
							min_framerate = "2000000";
							max_framerate = "21000000";
							step_framerate = [31 00];
							default_framerate = "21000000";
							min_exp_time = "13";
							max_exp_time = "683709";
							step_exp_time = [31 00];
							default_exp_time = "2495";
							embedded_metadata_height = [32 00];
						};

						mode1 {
							mclk_khz = "24000";
							num_lanes = [32 00];
							tegra_sinterface = "serial_a";
							phy_mode = "DPHY";
							discontinuous_clk = "yes";
							dpcm_enable = "false";
							cil_settletime = [30 00];
							active_w = "3264";
							active_h = "1848";
							pixel_t = "bayer_rggb";
							readout_orientation = "90";
							line_length = "3448";
							inherent_gain = [31 00];
							mclk_multiplier = "9.33";
							pix_clk_hz = "182400000";
							gain_factor = "16";
							framerate_factor = "1000000";
							exposure_factor = "1000000";
							min_gain_val = "16";
							max_gain_val = "170";
							step_gain_val = [31 00];
							default_gain = "16";
							min_hdr_ratio = [31 00];
							max_hdr_ratio = [31 00];
							min_framerate = "2000000";
							max_framerate = "28000000";
							step_framerate = [31 00];
							default_framerate = "28000000";
							min_exp_time = "13";
							max_exp_time = "683709";
							step_exp_time = [31 00];
							default_exp_time = "2495";
							embedded_metadata_height = [32 00];
						};

						mode2 {
							mclk_khz = "24000";
							num_lanes = [32 00];
							tegra_sinterface = "serial_a";
							phy_mode = "DPHY";
							discontinuous_clk = "yes";
							dpcm_enable = "false";
							cil_settletime = [30 00];
							active_w = "1920";
							active_h = "1080";
							pixel_t = "bayer_rggb";
							readout_orientation = "90";
							line_length = "3448";
							inherent_gain = [31 00];
							mclk_multiplier = "9.33";
							pix_clk_hz = "182400000";
							gain_factor = "16";
							framerate_factor = "1000000";
							exposure_factor = "1000000";
							min_gain_val = "16";
							max_gain_val = "170";
							step_gain_val = [31 00];
							default_gain = "16";
							min_hdr_ratio = [31 00];
							max_hdr_ratio = [31 00];
							min_framerate = "2000000";
							max_framerate = "30000000";
							step_framerate = [31 00];
							default_framerate = "30000000";
							min_exp_time = "13";
							max_exp_time = "683709";
							step_exp_time = [31 00];
							default_exp_time = "2495";
							embedded_metadata_height = [32 00];
						};

						mode3 {
							mclk_khz = "24000";
							num_lanes = [32 00];
							tegra_sinterface = "serial_a";
							phy_mode = "DPHY";
							discontinuous_clk = "yes";
							dpcm_enable = "false";
							cil_settletime = [30 00];
							active_w = "1640";
							active_h = "1232";
							pixel_t = "bayer_rggb";
							readout_orientation = "90";
							line_length = "3448";
							inherent_gain = [31 00];
							mclk_multiplier = "9.33";
							pix_clk_hz = "182400000";
							gain_factor = "16";
							framerate_factor = "1000000";
							exposure_factor = "1000000";
							min_gain_val = "16";
							max_gain_val = "170";
							step_gain_val = [31 00];
							default_gain = "16";
							min_hdr_ratio = [31 00];
							max_hdr_ratio = [31 00];
							min_framerate = "2000000";
							max_framerate = "30000000";
							step_framerate = [31 00];
							default_framerate = "30000000";
							min_exp_time = "13";
							max_exp_time = "683709";
							step_exp_time = [31 00];
							default_exp_time = "2495";
							embedded_metadata_height = [32 00];
						};

						mode4 {
							mclk_khz = "24000";
							num_lanes = [32 00];
							tegra_sinterface = "serial_a";
							phy_mode = "DPHY";
							discontinuous_clk = "yes";
							dpcm_enable = "false";
							cil_settletime = [30 00];
							active_w = "1280";
							active_h = "720";
							pixel_t = "bayer_rggb";
							readout_orientation = "90";
							line_length = "3448";
							inherent_gain = [31 00];
							mclk_multiplier = "9.33";
							pix_clk_hz = "182400000";
							gain_factor = "16";
							framerate_factor = "1000000";
							exposure_factor = "1000000";
							min_gain_val = "16";
							max_gain_val = "170";
							step_gain_val = [31 00];
							default_gain = "16";
							min_hdr_ratio = [31 00];
							max_hdr_ratio = [31 00];
							min_framerate = "2000000";
							max_framerate = "60000000";
							step_framerate = [31 00];
							default_framerate = "60000000";
							min_exp_time = "13";
							max_exp_time = "683709";
							step_exp_time = [31 00];
							default_exp_time = "2495";
							embedded_metadata_height = [32 00];
						};

						mode5 {
							mclk_khz = "24000";
							num_lanes = [32 00];
							tegra_sinterface = "serial_a";
							phy_mode = "DPHY";
							discontinuous_clk = "yes";
							dpcm_enable = "false";
							cil_settletime = [30 00];
							active_w = "1280";
							active_h = "720";
							pixel_t = "bayer_rggb";
							readout_orientation = "90";
							line_length = "3560";
							inherent_gain = [31 00];
							mclk_multiplier = "9.33";
							pix_clk_hz = "169600000";
							gain_factor = "16";
							framerate_factor = "1000000";
							exposure_factor = "1000000";
							min_gain_val = "16";
							max_gain_val = "170";
							step_gain_val = [31 00];
							default_gain = "16";
							min_hdr_ratio = [31 00];
							max_hdr_ratio = [31 00];
							min_framerate = "2000000";
							max_framerate = "120000000";
							step_framerate = [31 00];
							default_framerate = "120000000";
							min_exp_time = "13";
							max_exp_time = "683709";
							step_exp_time = [31 00];
							default_exp_time = "2495";
							embedded_metadata_height = [32 00];
						};

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

							port@0 {
								reg = <0x00>;

								endpoint {
									port-index = <0x00>;
									bus-width = <0x02>;
									remote-endpoint = <0x78>;
									// linux,phandle = <0x79>;
									// phandle = <0x79>;
								};
							};
						};
					};
				};

				i2c@3 {
					reg = <3>;
					i2c-mux,deselect-on-exit;
					#address-cells = <1>;
					#size-cells = <0>;
					rbpcv2_imx219 {
						compatible = "nvidia,imx219";
						reg = <0x10>;
						devnode = "video1";
						physical_w = "3.680";
						physical_h = "2.760";
						sensor_model = "imx219";
						use_sensor_mode_id = "true";
						status = "okay";
						reset-gpios = <0x5b 0x97 0x00>;
						// linux,phandle = <0xcb>;
						// phandle = <0xcb>;

						mode0 {
							mclk_khz = "24000";
							num_lanes = [32 00];
							tegra_sinterface = "serial_a";
							phy_mode = "DPHY";
							discontinuous_clk = "yes";
							dpcm_enable = "false";
							cil_settletime = [30 00];
							active_w = "3264";
							active_h = "2464";
							pixel_t = "bayer_rggb";
							readout_orientation = "90";
							line_length = "3448";
							inherent_gain = [31 00];
							mclk_multiplier = "9.33";
							pix_clk_hz = "182400000";
							gain_factor = "16";
							framerate_factor = "1000000";
							exposure_factor = "1000000";
							min_gain_val = "16";
							max_gain_val = "170";
							step_gain_val = [31 00];
							default_gain = "16";
							min_hdr_ratio = [31 00];
							max_hdr_ratio = [31 00];
							min_framerate = "2000000";
							max_framerate = "21000000";
							step_framerate = [31 00];
							default_framerate = "21000000";
							min_exp_time = "13";
							max_exp_time = "683709";
							step_exp_time = [31 00];
							default_exp_time = "2495";
							embedded_metadata_height = [32 00];
						};

						mode1 {
							mclk_khz = "24000";
							num_lanes = [32 00];
							tegra_sinterface = "serial_a";
							phy_mode = "DPHY";
							discontinuous_clk = "yes";
							dpcm_enable = "false";
							cil_settletime = [30 00];
							active_w = "3264";
							active_h = "1848";
							pixel_t = "bayer_rggb";
							readout_orientation = "90";
							line_length = "3448";
							inherent_gain = [31 00];
							mclk_multiplier = "9.33";
							pix_clk_hz = "182400000";
							gain_factor = "16";
							framerate_factor = "1000000";
							exposure_factor = "1000000";
							min_gain_val = "16";
							max_gain_val = "170";
							step_gain_val = [31 00];
							default_gain = "16";
							min_hdr_ratio = [31 00];
							max_hdr_ratio = [31 00];
							min_framerate = "2000000";
							max_framerate = "28000000";
							step_framerate = [31 00];
							default_framerate = "28000000";
							min_exp_time = "13";
							max_exp_time = "683709";
							step_exp_time = [31 00];
							default_exp_time = "2495";
							embedded_metadata_height = [32 00];
						};

						mode2 {
							mclk_khz = "24000";
							num_lanes = [32 00];
							tegra_sinterface = "serial_a";
							phy_mode = "DPHY";
							discontinuous_clk = "yes";
							dpcm_enable = "false";
							cil_settletime = [30 00];
							active_w = "1920";
							active_h = "1080";
							pixel_t = "bayer_rggb";
							readout_orientation = "90";
							line_length = "3448";
							inherent_gain = [31 00];
							mclk_multiplier = "9.33";
							pix_clk_hz = "182400000";
							gain_factor = "16";
							framerate_factor = "1000000";
							exposure_factor = "1000000";
							min_gain_val = "16";
							max_gain_val = "170";
							step_gain_val = [31 00];
							default_gain = "16";
							min_hdr_ratio = [31 00];
							max_hdr_ratio = [31 00];
							min_framerate = "2000000";
							max_framerate = "30000000";
							step_framerate = [31 00];
							default_framerate = "30000000";
							min_exp_time = "13";
							max_exp_time = "683709";
							step_exp_time = [31 00];
							default_exp_time = "2495";
							embedded_metadata_height = [32 00];
						};

						mode3 {
							mclk_khz = "24000";
							num_lanes = [32 00];
							tegra_sinterface = "serial_a";
							phy_mode = "DPHY";
							discontinuous_clk = "yes";
							dpcm_enable = "false";
							cil_settletime = [30 00];
							active_w = "1640";
							active_h = "1232";
							pixel_t = "bayer_rggb";
							readout_orientation = "90";
							line_length = "3448";
							inherent_gain = [31 00];
							mclk_multiplier = "9.33";
							pix_clk_hz = "182400000";
							gain_factor = "16";
							framerate_factor = "1000000";
							exposure_factor = "1000000";
							min_gain_val = "16";
							max_gain_val = "170";
							step_gain_val = [31 00];
							default_gain = "16";
							min_hdr_ratio = [31 00];
							max_hdr_ratio = [31 00];
							min_framerate = "2000000";
							max_framerate = "30000000";
							step_framerate = [31 00];
							default_framerate = "30000000";
							min_exp_time = "13";
							max_exp_time = "683709";
							step_exp_time = [31 00];
							default_exp_time = "2495";
							embedded_metadata_height = [32 00];
						};

						mode4 {
							mclk_khz = "24000";
							num_lanes = [32 00];
							tegra_sinterface = "serial_a";
							phy_mode = "DPHY";
							discontinuous_clk = "yes";
							dpcm_enable = "false";
							cil_settletime = [30 00];
							active_w = "1280";
							active_h = "720";
							pixel_t = "bayer_rggb";
							readout_orientation = "90";
							line_length = "3448";
							inherent_gain = [31 00];
							mclk_multiplier = "9.33";
							pix_clk_hz = "182400000";
							gain_factor = "16";
							framerate_factor = "1000000";
							exposure_factor = "1000000";
							min_gain_val = "16";
							max_gain_val = "170";
							step_gain_val = [31 00];
							default_gain = "16";
							min_hdr_ratio = [31 00];
							max_hdr_ratio = [31 00];
							min_framerate = "2000000";
							max_framerate = "60000000";
							step_framerate = [31 00];
							default_framerate = "60000000";
							min_exp_time = "13";
							max_exp_time = "683709";
							step_exp_time = [31 00];
							default_exp_time = "2495";
							embedded_metadata_height = [32 00];
						};

						mode5 {
							mclk_khz = "24000";
							num_lanes = [32 00];
							tegra_sinterface = "serial_a";
							phy_mode = "DPHY";
							discontinuous_clk = "yes";
							dpcm_enable = "false";
							cil_settletime = [30 00];
							active_w = "1280";
							active_h = "720";
							pixel_t = "bayer_rggb";
							readout_orientation = "90";
							line_length = "3560";
							inherent_gain = [31 00];
							mclk_multiplier = "9.33";
							pix_clk_hz = "169600000";
							gain_factor = "16";
							framerate_factor = "1000000";
							exposure_factor = "1000000";
							min_gain_val = "16";
							max_gain_val = "170";
							step_gain_val = [31 00];
							default_gain = "16";
							min_hdr_ratio = [31 00];
							max_hdr_ratio = [31 00];
							min_framerate = "2000000";
							max_framerate = "120000000";
							step_framerate = [31 00];
							default_framerate = "120000000";
							min_exp_time = "13";
							max_exp_time = "683709";
							step_exp_time = [31 00];
							default_exp_time = "2495";
							embedded_metadata_height = [32 00];
						};

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

							port@0 {
								reg = <0x00>;

								endpoint {
									port-index = <0x00>;
									bus-width = <0x02>;
									remote-endpoint = <0x78>;
									// linux,phandle = <0x79>;
									// phandle = <0x79>;
								};
							};
						};
					};
				};
			};
		};
        };

But still no /dev/video* in sight. Do you know if I’m missing another part of the DTS? Or is there a way to systematically debug this issue? I have no idea what point in the DTS is incorrect.

Serial log attached:

seriallog.txt (20.8 KB)

Didn’t see the imx219 been loaded.
Have a check dmesg | grep -i imx219

Nothing comes up for dmesg | grep -i imx219,

Does that likely mean that the carrier board is at fault?

I don’t think so. It could be device tree problem. Does your camera board have really have TCA9548 HW chip on it?

The camera doesn’t, but the carrier board supposedly does. You can see the author mention it in this github issue that I created.

Here’s the camera board.

I’ll try again with the cam_i2cmux node but with slightly different properties and see if I can get anything working

Confirm it by i2cdetect.

sudo i2cdetect -y -r 6
jetson@jetson:~$ i2cdetect -l
i2c-3   i2c             7000c700.i2c                            I2C adapter
i2c-1   i2c             7000c400.i2c                            I2C adapter
i2c-4   i2c             7000d000.i2c                            I2C adapter
i2c-2   i2c             7000c500.i2c                            I2C adapter
i2c-0   i2c             7000c000.i2c                            I2C adapter
i2c-5   i2c             7000d100.i2c                            I2C adapter

jetson@jetson:~$ sudo i2cdetect -y -r 6
Error: Could not open file `/dev/i2c-6' or `/dev/i2c/6': No such file or directory

Looks like your device tree remove the i2c6 = β€œ/host1x/i2c@546c0000”

nvidia@nvidia-desktop:~$ i2cdetect -l
i2c-3   i2c             7000c700.i2c                            I2C adapter
i2c-1   i2c             7000c400.i2c                            I2C adapter
i2c-8   i2c             i2c-6-mux (chan_id 1)                   I2C adapter
i2c-6   i2c             Tegra I2C adapter                       I2C adapter
i2c-4   i2c             7000d000.i2c                            I2C adapter
i2c-2   i2c             7000c500.i2c                            I2C adapter
i2c-0   i2c             7000c000.i2c                            I2C adapter
i2c-7   i2c             i2c-6-mux (chan_id 0)                   I2C adapter
i2c-5   i2c             7000d100.i2c                            I2C adapter

Looking through the DTS I’ve got this:

	aliases {
		sdhci0 = "/sdhci@700b0000";
		sdhci1 = "/sdhci@700b0200";
		sdhci2 = "/sdhci@700b0400";
		sdhci3 = "/sdhci@700b0600";
		i2c0 = "/i2c@7000c000";
		i2c1 = "/i2c@7000c400";
		i2c2 = "/i2c@7000c500";
		i2c3 = "/i2c@7000c700";
		i2c4 = "/i2c@7000d000";
		i2c5 = "/i2c@7000d100";
		i2c6 = "/host1x/i2c@546c0000";
		spi0 = "/spi@7000d400";
		spi1 = "/spi@7000d600";
		spi2 = "/spi@7000d800";
		spi3 = "/spi@7000da00";
		qspi6 = "/spi@70410000";
		serial0 = "/serial@70006000";
		serial1 = "/serial@70006040";
		serial2 = "/serial@70006200";
		serial3 = "/serial@70006300";
		rtc0 = "/i2c@7000d000/max77620@3c";
		rtc1 = "/rtc";
	};

But then I’ve also got this:

__symbols__ {
        i2c6 = "/i2c@7000d100";
};

So I guess I’ll try changing the symbol to:

__symbols__ {
        i2c6 = "/host1x/i2c@546c0000";
};

Will let you know how I go

Ok, so that didn’t seem to do anything…

Although I’m realising that the __symbols__ is not supposed to be the same as aliases. Clearly I’ve got no idea how DTS files work.

When I’m compiling the DTS I’ve been noticing some warnings such as:

new.dts:4442.16-4957.5: Warning (i2c_bus_bridge): /host1x/i2c@546c0000: incorrect #address-cells for I2C bus
new.dts:4442.16-4957.5: Warning (i2c_bus_bridge): /host1x/i2c@546c0000: incorrect #size-cells for I2C bus

new.dts:4465.7-38: Warning (gpios_property): /host1x/i2c@546c0000/tca9548@70/i2c@2/rbpcv2_imx219:reset-gpios: cell 0 is not a phandle reference
new.dts:4718.7-38: Warning (gpios_property): /host1x/i2c@546c0000/tca9548@70/i2c@3/rbpcv2_imx219:reset-gpios: cell 0 is not a phandle reference

new.dts:4685.13-4700.9: Warning (graph_child_address): /host1x/i2c@546c0000/tca9548@70/i2c@2/rbpcv2_imx219/ports: graph node has single child node 'port@0', #address-cells/#size-cells are not necessary
new.dts:4938.13-4953.9: Warning (graph_child_address): /host1x/i2c@546c0000/tca9548@70/i2c@3/rbpcv2_imx219/ports: graph node has single child node 'port@0', #address-cells/#size-cells are not necessary

new.dts:4692.18-4698.11: Warning (graph_endpoint): /host1x/i2c@546c0000/tca9548@70/i2c@2/rbpcv2_imx219/ports/port@0/endpoint: graph connection to node '/host1x/nvcsi/channel@0/ports/port@0/endpoint@0' is not bidirectional
new.dts:4983.8-33: Warning (graph_endpoint): /host1x/nvcsi/channel@0/ports/port@0/endpoint@0:remote-endpoint: graph phandle is not valid
new.dts:4945.18-4951.11: Warning (graph_endpoint): /host1x/i2c@546c0000/tca9548@70/i2c@3/rbpcv2_imx219/ports/port@0/endpoint: graph connection to node '/host1x/nvcsi/channel@0/ports/port@0/endpoint@0' is not bidirectional

After adding #address-cells and #size-cells to i2c546c0000:

		i2c@546c0000 {
			status = "okay";
			#address-cells = <0x1>;
			#size-cells = <0x0>;
            ........

I now get:

new.dts:4459.20-4704.8: Warning (i2c_bus_reg): /host1x/i2c@546c0000/tca9548@70/i2c@2/rbpcv2_imx219: I2C bus unit address format error, expected "10"
new.dts:4712.20-4957.8: Warning (i2c_bus_reg): /host1x/i2c@546c0000/tca9548@70/i2c@3/rbpcv2_imx219: I2C bus unit address format error, expected "10"

So I think I’m making progress?

EDIT:
Spoke too soon :(

i2c-3   i2c             7000c700.i2c                            I2C adapter
i2c-1   i2c             7000c400.i2c                            I2C adapter
i2c-4   i2c             7000d000.i2c                            I2C adapter
i2c-2   i2c             7000c500.i2c                            I2C adapter
i2c-0   i2c             7000c000.i2c                            I2C adapter
i2c-5   i2c             7000d100.i2c                            I2C adapter

UPDATE:

Welp, using the default *.dtb I now have i2c-6 appearing in i2cdetect -l

running sudo i2cdetect -y -r 6 yeilds:

     0  1  2  3  4  5  6  7  8  9  a  b [ 1436.224051] tegra-vii2c 546c0000.i2c: no acknowledge from address 0x3
 c  d  e  f
00:          -- [ 1436.233951] tegra-vii2c 546c0000.i2c: no acknowledge from address 0x4
-- [ 1436.242934] tegra-vii2c 546c0000.i2c: no acknowledge from address 0x5
-- [ 1436.250172] tegra-vii2c 546c0000.i2c: no acknowledge from address 0x6
-- [ 1436.257865] tegra-vii2c 546c0000.i2c: no acknowledge from address 0x7
-- [ 1436.265259] tegra-vii2c 546c0000.i2c: no acknowledge from address 0x8
-- [ 1436.272474] tegra-vii2c 546c0000.i2c: no acknowledge from address 0x9
-- [ 1436.279681] tegra-vii2c 546c0000.i2c: no acknowledge from address 0xa
-- [ 1436.286843] tegra-vii2c 546c0000.i2c: no acknowledge from address 0xb
-- [ 1436.294326] tegra-vii2c 546c0000.i2c: no acknowledge from address 0xc
-- [ 1436.301699] tegra-vii2c 546c0000.i2c: no acknowledge from address 0xd
-- [ 1436.309184] tegra-vii2c 546c0000.i2c: no acknowledge from address 0xe
-- [ 1436.316841] tegra-vii2c 546c0000.i2c: no acknowledge from address 0xf
-- 
10: [ 1436.324578] tegra-vii2c 546c0000.i2c: no acknowledge from address 0x10
-- [ 1436.332195] tegra-vii2c 546c0000.i2c: no acknowledge from address 0x11
-- [ 1436.339801] tegra-vii2c 546c0000.i2c: no acknowledge from address 0x12
-- [ 1436.347296] tegra-vii2c 546c0000.i2c: no acknowledge from address 0x13
-- [ 1436.354867] tegra-vii2c 546c0000.i2c: no acknowledge from address 0x14
-- [ 1436.362534] tegra-vii2c 546c0000.i2c: no acknowledge from address 0x15
-- [ 1436.370202] tegra-vii2c 546c0000.i2c: no acknowledge from address 0x16
-- [ 1436.377906] tegra-vii2c 546c0000.i2c: no acknowledge from address 0x17
-- [ 1436.385490] tegra-vii2c 546c0000.i2c: no acknowledge from address 0x18
-- [ 1436.393116] tegra-vii2c 546c0000.i2c: no acknowledge from address 0x19
-- [ 1436.400642] tegra-vii2c 546c0000.i2c: no acknowledge from address 0x1a
-- [ 1436.407917] tegra-vii2c 546c0000.i2c: no acknowledge from address 0x1b
-- [ 1436.415593] tegra-vii2c 546c0000.i2c: no acknowledge from address 0x1c
-- [ 1436.423064] tegra-vii2c 546c0000.i2c: no acknowledge from address 0x1d
-- [ 1436.430648] tegra-vii2c 546c0000.i2c: no acknowledge from address 0x1e
-- [ 1436.438328] tegra-vii2c 546c0000.i2c: no acknowledge from address 0x1f
-- 
20: [ 1436.446122] tegra-vii2c 546c0000.i2c: no acknowledge from address 0x20
-- [ 1436.454134] tegra-vii2c 546c0000.i2c: no acknowledge from address 0x21
-- [ 1436.461823] tegra-vii2c 546c0000.i2c: no acknowledge from address 0x22
-- [ 1436.469377] tegra-vii2c 546c0000.i2c: no acknowledge from address 0x23
-- [ 1436.477105] tegra-vii2c 546c0000.i2c: no acknowledge from address 0x24
-- [ 1436.485011] tegra-vii2c 546c0000.i2c: no acknowledge from address 0x25
-- [ 1436.492321] tegra-vii2c 546c0000.i2c: no acknowledge from address 0x26
-- [ 1436.499606] tegra-vii2c 546c0000.i2c: no acknowledge from address 0x27
-- [ 1436.506828] tegra-vii2c 546c0000.i2c: no acknowledge from address 0x28
-- [ 1436.514432] tegra-vii2c 546c0000.i2c: no acknowledge from address 0x29
-- [ 1436.522063] tegra-vii2c 546c0000.i2c: no acknowledge from address 0x2a
-- [ 1436.529667] tegra-vii2c 546c0000.i2c: no acknowledge from address 0x2b
-- [ 1436.537186] tegra-vii2c 546c0000.i2c: no acknowledge from address 0x2c
-- [ 1436.544443] tegra-vii2c 546c0000.i2c: no acknowledge from address 0x2d
-- [ 1436.552593] tegra-vii2c 546c0000.i2c: no acknowledge from address 0x2e
-- [ 1436.559848] tegra-vii2c 546c0000.i2c: no acknowledge from address 0x2f
-- 
30: [ 1436.567282] tegra-vii2c 546c0000.i2c: no acknowledge from address 0x30
-- [ 1436.575310] tegra-vii2c 546c0000.i2c: no acknowledge from address 0x31
-- [ 1436.583155] tegra-vii2c 546c0000.i2c: no acknowledge from address 0x32
-- [ 1436.591066] tegra-vii2c 546c0000.i2c: no acknowledge from address 0x33
-- [ 1436.598951] tegra-vii2c 546c0000.i2c: no acknowledge from address 0x34
-- [ 1436.607042] tegra-vii2c 546c0000.i2c: no acknowledge from address 0x35
-- [ 1436.614458] tegra-vii2c 546c0000.i2c: no acknowledge from address 0x36
-- [ 1436.621907] tegra-vii2c 546c0000.i2c: no acknowledge from address 0x37
-- [ 1436.629427] tegra-vii2c 546c0000.i2c: no acknowledge from address 0x38
-- [ 1436.637114] tegra-vii2c 546c0000.i2c: no acknowledge from address 0x39
-- [ 1436.644635] tegra-vii2c 546c0000.i2c: no acknowledge from address 0x3a
-- [ 1436.651985] tegra-vii2c 546c0000.i2c: no acknowledge from address 0x3b
-- [ 1436.659661] tegra-vii2c 546c0000.i2c: no acknowledge from address 0x3c
-- [ 1436.667216] tegra-vii2c 546c0000.i2c: no acknowledge from address 0x3d
-- [ 1436.674949] tegra-vii2c 546c0000.i2c: no acknowledge from address 0x3e
-- [ 1436.682486] tegra-vii2c 546c0000.i2c: no acknowledge from address 0x3f

Sorry for the triple post: but I thought I’d update.

I’ve gotten to the point where the i2c lines are visible, I’ve simply set the cam_i2cmux status to okay

	cam_i2cmux {
		compatible = "i2c-mux-gpio";
		#address-cells = <0x01>;
		#size-cells = <0x00>;
		mux-gpios = <0x5b 0x40 0x00>;
		i2c-parent = <0xad>;
		status = "okay";
		linux,phandle = <0xd3>;
		phandle = <0xd3>;

		i2c@0 {
			status = "okay";
			reg = <0x00>;
			#address-cells = <0x01>;
			#size-cells = <0x00>;
			linux,phandle = <0xd4>;
			phandle = <0xd4>;

			rbpcv2_imx219_a@10 {
				compatible = "nvidia,imx219";
				reg = <0x10>;
				devnode = "video0";
				physical_w = "3.680";
				physical_h = "2.760";
				sensor_model = "imx219";
				use_sensor_mode_id = "true";
				status = "okay";
				reset-gpios = <0x5b 0x97 0x00>;
				linux,phandle = <0xcb>;
				phandle = <0xcb>;

				mode0 {
					mclk_khz = "24000";
					num_lanes = [32 00];
					tegra_sinterface = "serial_a";
					phy_mode = "DPHY";
					discontinuous_clk = "yes";
					dpcm_enable = "false";
					cil_settletime = [30 00];
					active_w = "3264";
					active_h = "2464";
					pixel_t = "bayer_rggb";
					readout_orientation = "90";
					line_length = "3448";
					inherent_gain = [31 00];
					mclk_multiplier = "9.33";
					pix_clk_hz = "182400000";
					gain_factor = "16";
					framerate_factor = "1000000";
					exposure_factor = "1000000";
					min_gain_val = "16";
					max_gain_val = "170";
					step_gain_val = [31 00];
					default_gain = "16";
					min_hdr_ratio = [31 00];
					max_hdr_ratio = [31 00];
					min_framerate = "2000000";
					max_framerate = "21000000";
					step_framerate = [31 00];
					default_framerate = "21000000";
					min_exp_time = "13";
					max_exp_time = "683709";
					step_exp_time = [31 00];
					default_exp_time = "2495";
					embedded_metadata_height = [32 00];
				};

				mode1 {
					mclk_khz = "24000";
					num_lanes = [32 00];
					tegra_sinterface = "serial_a";
					phy_mode = "DPHY";
					discontinuous_clk = "yes";
					dpcm_enable = "false";
					cil_settletime = [30 00];
					active_w = "3264";
					active_h = "1848";
					pixel_t = "bayer_rggb";
					readout_orientation = "90";
					line_length = "3448";
					inherent_gain = [31 00];
					mclk_multiplier = "9.33";
					pix_clk_hz = "182400000";
					gain_factor = "16";
					framerate_factor = "1000000";
					exposure_factor = "1000000";
					min_gain_val = "16";
					max_gain_val = "170";
					step_gain_val = [31 00];
					default_gain = "16";
					min_hdr_ratio = [31 00];
					max_hdr_ratio = [31 00];
					min_framerate = "2000000";
					max_framerate = "28000000";
					step_framerate = [31 00];
					default_framerate = "28000000";
					min_exp_time = "13";
					max_exp_time = "683709";
					step_exp_time = [31 00];
					default_exp_time = "2495";
					embedded_metadata_height = [32 00];
				};

				mode2 {
					mclk_khz = "24000";
					num_lanes = [32 00];
					tegra_sinterface = "serial_a";
					phy_mode = "DPHY";
					discontinuous_clk = "yes";
					dpcm_enable = "false";
					cil_settletime = [30 00];
					active_w = "1920";
					active_h = "1080";
					pixel_t = "bayer_rggb";
					readout_orientation = "90";
					line_length = "3448";
					inherent_gain = [31 00];
					mclk_multiplier = "9.33";
					pix_clk_hz = "182400000";
					gain_factor = "16";
					framerate_factor = "1000000";
					exposure_factor = "1000000";
					min_gain_val = "16";
					max_gain_val = "170";
					step_gain_val = [31 00];
					default_gain = "16";
					min_hdr_ratio = [31 00];
					max_hdr_ratio = [31 00];
					min_framerate = "2000000";
					max_framerate = "30000000";
					step_framerate = [31 00];
					default_framerate = "30000000";
					min_exp_time = "13";
					max_exp_time = "683709";
					step_exp_time = [31 00];
					default_exp_time = "2495";
					embedded_metadata_height = [32 00];
				};

				mode3 {
					mclk_khz = "24000";
					num_lanes = [32 00];
					tegra_sinterface = "serial_a";
					phy_mode = "DPHY";
					discontinuous_clk = "yes";
					dpcm_enable = "false";
					cil_settletime = [30 00];
					active_w = "1640";
					active_h = "1232";
					pixel_t = "bayer_rggb";
					readout_orientation = "90";
					line_length = "3448";
					inherent_gain = [31 00];
					mclk_multiplier = "9.33";
					pix_clk_hz = "182400000";
					gain_factor = "16";
					framerate_factor = "1000000";
					exposure_factor = "1000000";
					min_gain_val = "16";
					max_gain_val = "170";
					step_gain_val = [31 00];
					default_gain = "16";
					min_hdr_ratio = [31 00];
					max_hdr_ratio = [31 00];
					min_framerate = "2000000";
					max_framerate = "30000000";
					step_framerate = [31 00];
					default_framerate = "30000000";
					min_exp_time = "13";
					max_exp_time = "683709";
					step_exp_time = [31 00];
					default_exp_time = "2495";
					embedded_metadata_height = [32 00];
				};

				mode4 {
					mclk_khz = "24000";
					num_lanes = [32 00];
					tegra_sinterface = "serial_a";
					phy_mode = "DPHY";
					discontinuous_clk = "yes";
					dpcm_enable = "false";
					cil_settletime = [30 00];
					active_w = "1280";
					active_h = "720";
					pixel_t = "bayer_rggb";
					readout_orientation = "90";
					line_length = "3448";
					inherent_gain = [31 00];
					mclk_multiplier = "9.33";
					pix_clk_hz = "182400000";
					gain_factor = "16";
					framerate_factor = "1000000";
					exposure_factor = "1000000";
					min_gain_val = "16";
					max_gain_val = "170";
					step_gain_val = [31 00];
					default_gain = "16";
					min_hdr_ratio = [31 00];
					max_hdr_ratio = [31 00];
					min_framerate = "2000000";
					max_framerate = "60000000";
					step_framerate = [31 00];
					default_framerate = "60000000";
					min_exp_time = "13";
					max_exp_time = "683709";
					step_exp_time = [31 00];
					default_exp_time = "2495";
					embedded_metadata_height = [32 00];
				};

				mode5 {
					mclk_khz = "24000";
					num_lanes = [32 00];
					tegra_sinterface = "serial_a";
					phy_mode = "DPHY";
					discontinuous_clk = "yes";
					dpcm_enable = "false";
					cil_settletime = [30 00];
					active_w = "1280";
					active_h = "720";
					pixel_t = "bayer_rggb";
					readout_orientation = "90";
					line_length = "3560";
					inherent_gain = [31 00];
					mclk_multiplier = "9.33";
					pix_clk_hz = "169600000";
					gain_factor = "16";
					framerate_factor = "1000000";
					exposure_factor = "1000000";
					min_gain_val = "16";
					max_gain_val = "170";
					step_gain_val = [31 00];
					default_gain = "16";
					min_hdr_ratio = [31 00];
					max_hdr_ratio = [31 00];
					min_framerate = "2000000";
					max_framerate = "120000000";
					step_framerate = [31 00];
					default_framerate = "120000000";
					min_exp_time = "13";
					max_exp_time = "683709";
					step_exp_time = [31 00];
					default_exp_time = "2495";
					embedded_metadata_height = [32 00];
				};

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

					port@0 {
						reg = <0x00>;

						endpoint {
							port-index = <0x00>;
							bus-width = <0x02>;
							remote-endpoint = <0x78>;
							linux,phandle = <0x79>;
							phandle = <0x79>;
						};
					};
				};
			};
		};

		i2c@1 {
			status = "okay";
			reg = <0x01>;
			#address-cells = <0x01>;
			#size-cells = <0x00>;
			linux,phandle = <0xd5>;
			phandle = <0xd5>;

			rbpcv2_imx219_e@10 {
				compatible = "nvidia,imx219";
				reg = <0x10>;
				devnode = "video1";
				physical_w = "3.680";
				physical_h = "2.760";
				sensor_model = "imx219";
				use_sensor_mode_id = "true";
				status = "okay";
				reset-gpios = <0x5b 0x98 0x00>;
				linux,phandle = <0xcc>;
				phandle = <0xcc>;

				mode0 {
					mclk_khz = "24000";
					num_lanes = [32 00];
					tegra_sinterface = "serial_e";
					phy_mode = "DPHY";
					discontinuous_clk = "yes";
					dpcm_enable = "false";
					cil_settletime = [30 00];
					active_w = "3264";
					active_h = "2464";
					pixel_t = "bayer_rggb";
					readout_orientation = "90";
					line_length = "3448";
					inherent_gain = [31 00];
					mclk_multiplier = "9.33";
					pix_clk_hz = "182400000";
					gain_factor = "16";
					framerate_factor = "1000000";
					exposure_factor = "1000000";
					min_gain_val = "16";
					max_gain_val = "170";
					step_gain_val = [31 00];
					default_gain = "16";
					min_hdr_ratio = [31 00];
					max_hdr_ratio = [31 00];
					min_framerate = "2000000";
					max_framerate = "21000000";
					step_framerate = [31 00];
					default_framerate = "21000000";
					min_exp_time = "13";
					max_exp_time = "683709";
					step_exp_time = [31 00];
					default_exp_time = "2495";
					embedded_metadata_height = [32 00];
				};

				mode1 {
					mclk_khz = "24000";
					num_lanes = [32 00];
					tegra_sinterface = "serial_e";
					phy_mode = "DPHY";
					discontinuous_clk = "yes";
					dpcm_enable = "false";
					cil_settletime = [30 00];
					active_w = "3264";
					active_h = "1848";
					pixel_t = "bayer_rggb";
					readout_orientation = "90";
					line_length = "3448";
					inherent_gain = [31 00];
					mclk_multiplier = "9.33";
					pix_clk_hz = "182400000";
					gain_factor = "16";
					framerate_factor = "1000000";
					exposure_factor = "1000000";
					min_gain_val = "16";
					max_gain_val = "170";
					step_gain_val = [31 00];
					default_gain = "16";
					min_hdr_ratio = [31 00];
					max_hdr_ratio = [31 00];
					min_framerate = "2000000";
					max_framerate = "28000000";
					step_framerate = [31 00];
					default_framerate = "28000000";
					min_exp_time = "13";
					max_exp_time = "683709";
					step_exp_time = [31 00];
					default_exp_time = "2495";
					embedded_metadata_height = [32 00];
				};

				mode2 {
					mclk_khz = "24000";
					num_lanes = [32 00];
					tegra_sinterface = "serial_e";
					phy_mode = "DPHY";
					discontinuous_clk = "yes";
					dpcm_enable = "false";
					cil_settletime = [30 00];
					active_w = "1920";
					active_h = "1080";
					pixel_t = "bayer_rggb";
					readout_orientation = "90";
					line_length = "3448";
					inherent_gain = [31 00];
					mclk_multiplier = "9.33";
					pix_clk_hz = "182400000";
					gain_factor = "16";
					framerate_factor = "1000000";
					exposure_factor = "1000000";
					min_gain_val = "16";
					max_gain_val = "170";
					step_gain_val = [31 00];
					default_gain = "16";
					min_hdr_ratio = [31 00];
					max_hdr_ratio = [31 00];
					min_framerate = "2000000";
					max_framerate = "30000000";
					step_framerate = [31 00];
					default_framerate = "30000000";
					min_exp_time = "13";
					max_exp_time = "683709";
					step_exp_time = [31 00];
					default_exp_time = "2495";
					embedded_metadata_height = [32 00];
				};

				mode3 {
					mclk_khz = "24000";
					num_lanes = [32 00];
					tegra_sinterface = "serial_e";
					phy_mode = "DPHY";
					discontinuous_clk = "yes";
					dpcm_enable = "false";
					cil_settletime = [30 00];
					active_w = "1640";
					active_h = "1232";
					pixel_t = "bayer_rggb";
					readout_orientation = "90";
					line_length = "3448";
					inherent_gain = [31 00];
					mclk_multiplier = "9.33";
					pix_clk_hz = "182400000";
					gain_factor = "16";
					framerate_factor = "1000000";
					exposure_factor = "1000000";
					min_gain_val = "16";
					max_gain_val = "170";
					step_gain_val = [31 00];
					default_gain = "16";
					min_hdr_ratio = [31 00];
					max_hdr_ratio = [31 00];
					min_framerate = "2000000";
					max_framerate = "30000000";
					step_framerate = [31 00];
					default_framerate = "30000000";
					min_exp_time = "13";
					max_exp_time = "683709";
					step_exp_time = [31 00];
					default_exp_time = "2495";
					embedded_metadata_height = [32 00];
				};

				mode4 {
					mclk_khz = "24000";
					num_lanes = [32 00];
					tegra_sinterface = "serial_e";
					phy_mode = "DPHY";
					discontinuous_clk = "yes";
					dpcm_enable = "false";
					cil_settletime = [30 00];
					active_w = "1280";
					active_h = "720";
					pixel_t = "bayer_rggb";
					readout_orientation = "90";
					line_length = "3448";
					inherent_gain = [31 00];
					mclk_multiplier = "9.33";
					pix_clk_hz = "182400000";
					gain_factor = "16";
					framerate_factor = "1000000";
					exposure_factor = "1000000";
					min_gain_val = "16";
					max_gain_val = "170";
					step_gain_val = [31 00];
					default_gain = "16";
					min_hdr_ratio = [31 00];
					max_hdr_ratio = [31 00];
					min_framerate = "2000000";
					max_framerate = "60000000";
					step_framerate = [31 00];
					default_framerate = "60000000";
					min_exp_time = "13";
					max_exp_time = "683709";
					step_exp_time = [31 00];
					default_exp_time = "2495";
					embedded_metadata_height = [32 00];
				};

				mode5 {
					mclk_khz = "24000";
					num_lanes = [32 00];
					tegra_sinterface = "serial_e";
					phy_mode = "DPHY";
					discontinuous_clk = "yes";
					dpcm_enable = "false";
					cil_settletime = [30 00];
					active_w = "1280";
					active_h = "720";
					pixel_t = "bayer_rggb";
					readout_orientation = "90";
					line_length = "3560";
					inherent_gain = [31 00];
					mclk_multiplier = "9.33";
					pix_clk_hz = "169600000";
					gain_factor = "16";
					framerate_factor = "1000000";
					exposure_factor = "1000000";
					min_gain_val = "16";
					max_gain_val = "170";
					step_gain_val = [31 00];
					default_gain = "16";
					min_hdr_ratio = [31 00];
					max_hdr_ratio = [31 00];
					min_framerate = "2000000";
					max_framerate = "120000000";
					step_framerate = [31 00];
					default_framerate = "120000000";
					min_exp_time = "13";
					max_exp_time = "683709";
					step_exp_time = [31 00];
					default_exp_time = "2495";
					embedded_metadata_height = [32 00];
				};

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

					port@0 {
						reg = <0x00>;

						endpoint {
							port-index = <0x04>;
							bus-width = <0x02>;
							remote-endpoint = <0xae>;
							linux,phandle = <0x7b>;
							phandle = <0x7b>;
						};
					};
				};
			};
		};
	};
jetson@jetson:~$ i2cdetect -l
i2c-3   i2c             7000c700.i2c                            I2C adapter
i2c-1   i2c             7000c400.i2c                            I2C adapter
i2c-8   i2c             i2c-6-mux (chan_id 1)                   I2C adapter
i2c-6   i2c             Tegra I2C adapter                       I2C adapter
i2c-4   i2c             7000d000.i2c                            I2C adapter
i2c-2   i2c             7000c500.i2c                            I2C adapter
i2c-0   i2c             7000c000.i2c                            I2C adapter
i2c-7   i2c             i2c-6-mux (chan_id 0)                   I2C adapter
i2c-5   i2c             7000d100.i2c                            I2C adapter

But now during boot I receive the following messages:

dmesg | grep -i imx
[    1.775107] imx219 7-0010: tegracam sensor driver:imx219_v2.0.6
[    1.798439] imx219 7-0010: imx219_board_setup: error during i2c read probe (-121)
[    1.806009] imx219 7-0010: board setup failed
[    1.810433] imx219: probe of 7-0010 failed with error -121
[    1.810864] imx219 8-0010: tegracam sensor driver:imx219_v2.0.6
[    1.834146] imx219 8-0010: imx219_board_setup: error during i2c read probe (-121)
[    1.841696] imx219 8-0010: board setup failed
[    1.846109] imx219: probe of 8-0010 failed with error -121

Any idea how I can resolve this one? Seems like it’s almoooost solved

Did you use customized carrier board instead of devkit?
If you are using devkit you can just using default dtb to support two imx219 by gpio i2c mux.
If you are using customized carrier board with tca9548 you need modify device tree as my previous comment. Modifying device tree for IMX219 behind I2C mux - #7 by ShaneCCC

I’m using a customised carrier - AntMicro jetson-nano-baseboard.

I will try your example once again, I’ve been copying it and replacing the ov sensor with the default rbpcv2_imx219_a from the kernel source, but it’s just confusing to debug device trees. I was hoping someone had experience with putting an imx219 behind a tca9548 and could share their device tree

Have reference to below document to remove the plugin manager to use e3333 only.

https://docs.nvidia.com/jetson/l4t/index.html#page/Tegra%20Linux%20Driver%20Package%20Development%20Guide/camera_sensor_prog.html#wwpID0E0XF0HA