Dual camera setup with RKAIQ

Have a great day everyone!

Here’s what I managed to do so far:

  1. Connect two imx219 MIPI cameras and adapt dts accordingly
  2. Set up rkaiq 3A and tool servers (built by these wonderful people)
  3. Get good colorful image (basically with isp working) with one cam connected (either one works)
  4. Get horrible green picture (just like here) from two cameras at the same time with rkaiq_3A_server disabled
  5. Get absolutely nothing (aka black picture) with both cameras plugged in and rkaiq_3A_server enabled

What that tells me is rkaiq_3A_server is not working as expected

Now here’s the initial output of rkaiq_3A_server (note that ‘isOnline’ field of both cameras is 0, meanwhile with just one camera plugged in, it is automatically set to 1):

IPCSERVER:K:cid[1] Process path:/tmp/UNIX.domain1, sockfd:17
XCORE:K:cid[1] rk_aiq_uapi_sysctl_init success. iq:/etc/iqfiles//imx219_rpi-camera-v2-2_default.json
XCORE:K:cid[1] rk_aiq_uapi_sysctl_setMulCamConc: cc:1
CAMHW:E:failed to set hdr mode 0
XCORE:K:cid[1] rk_aiq_uapi_sysctl_prepare success. mode:0 
DBG: subscribe events from /dev/video41 success !
DBG: device manager start
CAMHW:K:cid[1] start success. isGroup:0, isOnline:0, isMultiIsp:0, init_ens:0x19fc8ffe473b
XCORE:K:cid[1] rk_aiq_uapi_sysctl_start success.
DBG: rkisp_init engine succeed
DBG: /dev/media3: wait stream start event...
XCORE:E:invalid main scene len!

IPCSERVER:K:cid[0] Process path:/tmp/UNIX.domain0, sockfd:51
XCORE:K:cid[0] rk_aiq_uapi_sysctl_init success. iq:/etc/iqfiles//imx219_rpi-camera-v2_default.json
XCORE:K:cid[0] rk_aiq_uapi_sysctl_setMulCamConc: cc:1
CAMHW:E:failed to set hdr mode 0
XCORE:K:cid[0] rk_aiq_uapi_sysctl_prepare success. mode:0 
DBG: subscribe events from /dev/video50 success !
DBG: device manager start
CAMHW:K:cid[0] start success. isGroup:0, isOnline:0, isMultiIsp:0, init_ens:0x19fc8ffe473b
XCORE:K:cid[0] rk_aiq_uapi_sysctl_start success.
DBG: rkisp_init engine succeed
DBG: /dev/media4: wait stream start event...

When I try to execute rkaiq_tool_server, the tool server itself outputs

[aiqtool][main]:################ Please input camera index to connect
[aiqtool][main]:camera 0 ,please input 0
[aiqtool][main]:camera 1 ,please input 1
[aiqtool][main]:----
[aiqtool][main]:PLEASE INPUT CAMERA INDEX:1
[aiqtool][main]:camera index 1:
[aiqtool][main]:camera socket node /tmp/UNIX.domain1 selected
[aiqtool][Setup]:Linux,Create domain socket success.
[aiqtool][Setup]:Credentials from SO_PEERCRED: pid=3490, euid=0, egid=0
[aiqtool][main]:#### ToolServer connect AIQ success ####
[aiqtool][Process]:TCPServer::Process
[aiqtool][Accepted]:TCPServer::Accepted
^C[aiqtool][Accepted]:socket accept exit

meanwhile rkaiq_3A_server outputs

IPCSERVER:K:cid[1] socket accept server:/tmp/UNIX.domain1, client:

IPCSERVER:K:cid[1] SocketServer::Recvieve recv_len -1
IPCSERVER:K:cid[1] SocketServer::Recvieve recv_len -1
IPCSERVER:K:cid[1] SocketServer::Recvieve recv_len -1
IPCSERVER:K:cid[1] SocketServer::Recvieve recv_len 0
IPCSERVER:K:cid[1], socket accept close

And /dev/videoX devices still don’t produce any imaging at any point. I’ve tried doing this with camera 0, I also tried to give /tmp/UNIX.domain1 all the permissions it could ever wish for to no avail…
I’ve also been thinking about building 3A server myself (found at firefly’s gitlab repo) to try to debug it but haven’t managed to actually do it…

Does anybody know how I can make two cameras work? Or could anyone help me with building rkaiq_3A_server?

Many thanks in advance!

Can you show us your DTS?

Sure can!

/ {

    compatible = "rockchip,rk3588";

	ext_cam_clk: external-camera-clock {

        compatible = "fixed-clock";

        clock-frequency = <24000000>;

        clock-output-names = "CLK_CAMERA_24MHZ";

        #clock-cells = <0>;

    };

};



&rkcif_mmu {

    status = "okay";

};



&rkcif {

    status = "okay";

};



&rkisp0 {

    status = "okay";

};



&isp0_mmu {

    status = "okay";

};



&rkisp1 {

    status = "okay";

};



&isp1_mmu {

    status = "okay";

};



&mipi_dcphy0 {

    status = "okay";

};



&mipi_dcphy1 {

    status = "okay";

};



//************************************************

//***  IMX219

//************************************************



&i2c4 {

    status = "okay";

    clock-frequency = <400000>;



    cam2_imx219: cam2_imx219@10 {

        compatible = "sony,imx219";

        status = "okay";

        reg = <0x10>;



        clocks = <&ext_cam_clk>;

        clock-names = "xvclk";



        rockchip,camera-module-index = <1>;

        rockchip,camera-module-facing = "front";

        rockchip,camera-module-name = "rpi-camera-v2-2";

        rockchip,camera-module-lens-name = "default";



        port {

            cam2_imx219_out: endpoint {

                remote-endpoint = <&mipi_in_1_ucam2>;

                data-lanes = <1 2>;

            };

        };

    };

};



&csi2_dcphy1 {

    status = "okay";

    ports {

        #address-cells = <1>;

        #size-cells = <0>;

        port@0 {

            reg = <0>;

            #address-cells = <1>;

            #size-cells = <0>;

            mipi_in_1_ucam2: endpoint@1 {

                reg = <1>;

                remote-endpoint = <&cam2_imx219_out>;

                data-lanes = <1 2>;

            };

        };

        port@1 {

            reg = <1>;

            #address-cells = <1>;

            #size-cells = <0>;

            csidcphy1_out: endpoint@0 {

                reg = <0>;

                remote-endpoint = <&mipi1_csi2_input>;

            };

        };

    };

};



&mipi1_csi2 {

    status = "okay";

    ports {

        #address-cells = <1>;

        #size-cells = <0>;

        port@0 {

            reg = <0>;

            #address-cells = <1>;

            #size-cells = <0>;

            mipi1_csi2_input: endpoint@1 {

                reg = <1>;

                remote-endpoint = <&csidcphy1_out>;

            };

        };

        port@1 {

            reg = <1>;

            #address-cells = <1>;

            #size-cells = <0>;

            mipi1_csi2_output: endpoint@0 {

                reg = <0>;

                remote-endpoint = <&cif_mipi_lvds1>;

            };

        };

    };

};



&rkcif_mipi_lvds1 {

    status = "okay";

    port {

        cif_mipi_lvds1: endpoint {

            remote-endpoint = <&mipi1_csi2_output>;

        };

    };

};



&rkcif_mipi_lvds1_sditf {

    status = "okay";

    port {

        mipi_lvds1_sditf: endpoint {

            remote-endpoint = <&isp0_vir2>;

        };

    };

};



&rkisp0_vir2 {

    status = "okay";

    port {

        #address-cells = <1>;

        #size-cells = <0>;

        isp0_vir2: endpoint@0 {

            reg = <1>;

            remote-endpoint = <&mipi_lvds1_sditf>;

        };

    };

};



//************************************************

//***  IMX219

//************************************************



&csi2_dphy1_hw {

    status = "okay";

};



&i2c3 {

    status = "okay";



    camera_imx219_4: camera-imx219@10 {

        status = "okay";

        compatible = "sony,imx219";

        reg = <0x10>;



        clocks = <&ext_cam_clk>;

        clock-names = "xclk";



        rockchip,camera-module-index = <0>;

        rockchip,camera-module-facing = "back";

        rockchip,camera-module-name = "rpi-camera-v2";

        rockchip,camera-module-lens-name = "default";



        port {

            imx219_out4: endpoint {

                remote-endpoint = <&mipi_in_ucam4>;

                bus-type = <4>; /* CSI2 DPHY */

                clock-lanes = <0>;

                data-lanes = <3 4>;

                // clock-noncontinuous;

                link-frequencies = /bits/ 64 <456000000>;

            };

        };

    };

};



&csi2_dphy4 {

    status = "okay";

    ports {

        #address-cells = <1>;

        #size-cells = <0>;

        port@0 {

            reg = <0>;

            #address-cells = <1>;

            #size-cells = <0>;

            mipi_in_ucam4: endpoint@0 {

                bus-type = <4>; /* CSI2 DPHY */

                clock-lanes = <0>;

                reg = <0>;

                remote-endpoint = <&imx219_out4>;

                data-lanes = <3 4>;

            };

        };

        port@1 {

            reg = <1>;

            #address-cells = <1>;

            #size-cells = <0>;

            mipi4_csi2_csidphy1_out0: endpoint@0 {

                reg = <0>;

                remote-endpoint = <&mipi4_csi2_input>;

            };

        };

    };

};



&mipi4_csi2 {

    status = "okay";

    ports {

        #address-cells = <1>;

        #size-cells = <0>;

        port@0 {

            reg = <0>;

            #address-cells = <1>;

            #size-cells = <0>;

            mipi4_csi2_input: endpoint@0 {

                reg = <0>;

                remote-endpoint = <&mipi4_csi2_csidphy1_out0>;

            };

        };

        port@1 {

            reg = <1>;

            #address-cells = <1>;

            #size-cells = <0>;

            mipi4_csi2_output: endpoint@0 {

                reg = <0>;

                remote-endpoint = <&cif_mipi_in4>;

            };

        };

    };

};



&rkcif_mipi_lvds4 {

    status = "okay";

    port {

        cif_mipi_in4: endpoint {

            remote-endpoint = <&mipi4_csi2_output>;

        };

    };

};



&rkcif_mipi_lvds4_sditf {

    status = "okay";



    port {

        mipi_lvds4_sditf: endpoint {

            remote-endpoint = <&isp1_vir1>;

        };

    };

};



&rkisp1_vir1 {

    status = "okay";



    port {

        #address-cells = <1>;

        #size-cells = <0>;



        isp1_vir1: endpoint@0 {

            reg = <0>;

            remote-endpoint = <&mipi_lvds4_sditf>;

        };

    };

};

Make sure you have in /etc/iqfiles the file rpi-camera-v2-2_default.json

Ok, the log show there is.

Try to stop the server and run it without systemctl, it will display some info while reading the file.

Yes, they’re all there, otherwise the server doesn’t even start. On top of that I made sure both cams work separately on their own and produce good picture processed by ISP
UPD: I’ll try to send the log once I get a hold of pc :slight_smile:

Maybe this can help:

1 Like

Here’s full output of sudo /usr/local/bin/rkaiq_3A_server 2>&1 before trying to mess with rkaiq_tool_server

media get entity by name: rkisp-isp-subdev is null
media get entity by name: rkisp-input-params is null
media get entity by name: rkisp-statistics is null
media get entity by name: rkisp_mainpath is null
Cound not find rkisp dev names, skipped /dev/media0
ERR: Bad media topology for: /dev/media0
media get entity by name: rkisp-isp-subdev is null
media get entity by name: rkisp-input-params is null
media get entity by name: rkisp-statistics is null
media get entity by name: rkisp_mainpath is null
Cound not find rkisp dev names, skipped /dev/media1
ERR: Bad media topology for: /dev/media1
media get entity by name: rkisp-isp-subdev is null
media get entity by name: rkisp-input-params is null
media get entity by name: rkisp-statistics is null
media get entity by name: rkisp_mainpath is null
Cound not find rkisp dev names, skipped /dev/media2
ERR: Bad media topology for: /dev/media2
DBG: get rkisp-isp-subdev devname: /dev/v4l-subdev3
DBG: get rkisp-input-params devname: /dev/video41
DBG: get rkisp-statistics devname: /dev/video40
DBG: get rkisp_mainpath devname: /dev/video33
rkaiq log level ff1
XCORE:K:rk_aiq_init_lib, ISP HW ver: 30

************************** VERSION INFOS **************************
version release date: 2023-09-7
         AIQ:       AIQ v5.0x3.0
   IQ PARSER:       Calib v1.4.8,magicCode:1170944
************************ VERSION INFOS END ************************
DBG: get rkisp-isp-subdev devname: /dev/v4l-subdev8
DBG: get rkisp-input-params devname: /dev/video50
DBG: get rkisp-statistics devname: /dev/video49
DBG: get rkisp_mainpath devname: /dev/video42
ERR: Bad media topology for: /dev/media5
ERR: Bad media topology for: /dev/media6
ERR: Bad media topology for: /dev/media7
ERR: Bad media topology for: /dev/media8
ERR: Bad media topology for: /dev/media9
ERR: Bad media topology for: /dev/media10
ERR: Bad media topology for: /dev/media11
ERR: Bad media topology for: /dev/media12
ERR: Bad media topology for: /dev/media13
ERR: Bad media topology for: /dev/media14
ERR: Bad media topology for: /dev/media15
XCORE:E:invalid main scene len!

IPCSERVER:K:cid[0] Process path:/tmp/UNIX.domain0, sockfd:17
XCORE:K:cid[0] rk_aiq_uapi_sysctl_init success. iq:/etc/iqfiles//imx219_rpi-camera-v2_default.json
XCORE:K:cid[0] rk_aiq_uapi_sysctl_setMulCamConc: cc:1
CAMHW:E:failed to set hdr mode 0
XCORE:K:cid[0] rk_aiq_uapi_sysctl_prepare success. mode:0 
DBG: subscribe events from /dev/video50 success !
DBG: device manager start
CAMHW:K:cid[0] start success. isGroup:0, isOnline:0, isMultiIsp:0, init_ens:0x19fc8ffe473b
XCORE:K:cid[0] rk_aiq_uapi_sysctl_start success.
DBG: rkisp_init engine succeed
DBG: /dev/media4: wait stream start event...
XCORE:E:invalid main scene len!

IPCSERVER:K:cid[1] Process path:/tmp/UNIX.domain1, sockfd:51
XCORE:K:cid[1] rk_aiq_uapi_sysctl_init success. iq:/etc/iqfiles//imx219_rpi-camera-v2-2_default.json
XCORE:K:cid[1] rk_aiq_uapi_sysctl_setMulCamConc: cc:1
CAMHW:E:failed to set hdr mode 0
XCORE:K:cid[1] rk_aiq_uapi_sysctl_prepare success. mode:0 
DBG: subscribe events from /dev/video41 success !
DBG: device manager start
CAMHW:K:cid[1] start success. isGroup:0, isOnline:0, isMultiIsp:0, init_ens:0x19fc8ffe473b
XCORE:K:cid[1] rk_aiq_uapi_sysctl_start success.
DBG: rkisp_init engine succeed
DBG: /dev/media3: wait stream start event...

UPD: and here is output with just one camera connected

media get entity by name: rkisp-isp-subdev is null
media get entity by name: rkisp-input-params is null
media get entity by name: rkisp-statistics is null
media get entity by name: rkisp_mainpath is null
Cound not find rkisp dev names, skipped /dev/media0
ERR: Bad media topology for: /dev/media0
media get entity by name: rkisp-isp-subdev is null
media get entity by name: rkisp-input-params is null
media get entity by name: rkisp-statistics is null
media get entity by name: rkisp_mainpath is null
Cound not find rkisp dev names, skipped /dev/media1
ERR: Bad media topology for: /dev/media1
media get entity by name: rkisp-isp-subdev is null
media get entity by name: rkisp-input-params is null
media get entity by name: rkisp-statistics is null
media get entity by name: rkisp_mainpath is null
Cound not find rkisp dev names, skipped /dev/media2
ERR: Bad media topology for: /dev/media2
DBG: get rkisp-isp-subdev devname: /dev/v4l-subdev7
DBG: get rkisp-input-params devname: /dev/video41
DBG: get rkisp-statistics devname: /dev/video40
DBG: get rkisp_mainpath devname: /dev/video33
rkaiq log level ff1
XCORE:K:rk_aiq_init_lib, ISP HW ver: 30

************************** VERSION INFOS **************************
version release date: 2023-09-7
         AIQ:       AIQ v5.0x3.0
   IQ PARSER:       Calib v1.4.8,magicCode:1170944
************************ VERSION INFOS END ************************
ERR: Bad media topology for: /dev/media3
DBG: get rkisp-isp-subdev devname: /dev/v4l-subdev3
DBG: get rkisp-input-params devname: /dev/video50
DBG: get rkisp-statistics devname: /dev/video49
DBG: get rkisp_mainpath devname: /dev/video42
ERR: Bad media topology for: /dev/media5
ERR: Bad media topology for: /dev/media6
ERR: Bad media topology for: /dev/media7
ERR: Bad media topology for: /dev/media8
ERR: Bad media topology for: /dev/media9
ERR: Bad media topology for: /dev/media10
ERR: Bad media topology for: /dev/media11
ERR: Bad media topology for: /dev/media12
ERR: Bad media topology for: /dev/media13
ERR: Bad media topology for: /dev/media14
ERR: Bad media topology for: /dev/media15
XCORE:E:invalid main scene len!

IPCSERVER:K:cid[0] Process path:/tmp/UNIX.domain0, sockfd:16
XCORE:K:cid[0] rk_aiq_uapi_sysctl_init success. iq:/etc/iqfiles//imx219_rpi-camera-v2_default.json
CAMHW:E:failed to set hdr mode 0
XCORE:K:cid[0] rk_aiq_uapi_sysctl_prepare success. mode:0 
DBG: subscribe events from /dev/video50 success !
DBG: device manager start
CAMHW:K:cid[0] start success. isGroup:0, isOnline:1, isMultiIsp:0, init_ens:0x19fc8ffe473b
XCORE:K:cid[0] rk_aiq_uapi_sysctl_start success.
DBG: rkisp_init engine succeed
DBG: /dev/media4: wait stream start event...

I think the log didn’t help much.

My understanding (I’m not a hw guy) is that the issue may be the 3A server breaks if in split mode.
I have a board with dual cameras (csi0 and csi1 full mode) working fine with the 3A server…

If no one can spott something wrong with your dts i would suggest building the 3A server with some additional debugging info. Unfortunately, i can’t test it, but i can tell you the 3A server works in full mode for dual-cameras (csi0 and csi1).

I see. Is there any chance you could share your dts with me?
I managed to borrow an omnivision camera, and bizarrely ov+imx combo works and imx+imx breaks. So at this point I’m thinking it has something to do with either device tree or my imx219 driver.

Credits to Sergey Gagarin:

&pinctrl {
	cam_pins {
		//ov4689 on CSI0
		cam0_mcam400_default_pins: cam0-mcam400-default-pins {
			rockchip,pins =
				<4 RK_PC5 RK_FUNC_GPIO &pcfg_pull_down>,//pwdn
				<4 RK_PC4 RK_FUNC_GPIO &pcfg_pull_none>;//reset
		};

		//ov4689 on CSI1
		cam1_mcam400_default_pins: cam1-mcam400-default-pins {
			rockchip,pins =
				<2 RK_PC2 RK_FUNC_GPIO &pcfg_pull_down>,//pwdn
				<2 RK_PC1 RK_FUNC_GPIO &pcfg_pull_none>;//reset
		};
	};
};

//dphy0 full mode (for split mode use csi2_dphy1/2)
&csi2_dphy0_hw {
	status = "okay";
};

&csi2_dphy0 {
	status = "okay";
	ports {
		#address-cells = <1>;
		#size-cells = <0>;
		port@0 {
			reg = <0>;
			#address-cells = <1>;
			#size-cells = <0>;
			mipi_in_ucam0: endpoint@1 {
				reg = <1>;
				remote-endpoint = <&ucam_out0>;
				data-lanes = <1 2 3 4>;
			};
		};
		port@1 {
			reg = <1>;
			#address-cells = <1>;
			#size-cells = <0>;
			csidphy0_out: endpoint@0 {
				reg = <0>;
				remote-endpoint = <&mipi2_csi2_input>;
			};
		};
	};
};

&i2c3 {
	status = "okay";

	//camera connected to CSI0

	ov4689p0: ov4689@36 {
		compatible = "ovti,ov4689";
		status = "okay";
		reg = <0x36>;
		clocks = <&cru CLK_MIPI_CAMARAOUT_M1>;
		clock-names = "xvclk";
		power-domains = <&power RK3588_PD_VI>;

		reset-gpios = <&gpio4 RK_PC4 GPIO_ACTIVE_LOW>;
		pwdn-gpios = <&gpio4 RK_PC5 GPIO_ACTIVE_HIGH>;
		pinctrl-names = "rockchip,camera_default", "rockchip,camera_sleep";
		pinctrl-0 = <&cam0_mcam400_default_pins &mipim0_camera1_clk>;
		pinctrl-1 = <&cam0_mcam400_default_pins>;

		rockchip,camera-module-index = <1>;
		rockchip,camera-module-facing = "front";
		rockchip,camera-module-name = "MCAM400";
		rockchip,camera-module-lens-name = "MCAM400";

		rockchip,camera-vflip = <0>;
		rockchip,camera-hflip = <0>;

		port {
			ucam_out0: endpoint {
				remote-endpoint = <&mipi_in_ucam0>;
				data-lanes = <1 2 3 4>;
			};
		};
	};
};

&mipi2_csi2 {
	status = "okay";
	ports {
		#address-cells = <1>;
		#size-cells = <0>;
		port@0 {
			reg = <0>;
			#address-cells = <1>;
			#size-cells = <0>;
			mipi2_csi2_input: endpoint@1 {
				reg = <1>;
				remote-endpoint = <&csidphy0_out>;
			};
		};
		port@1 {
			reg = <1>;
			#address-cells = <1>;
			#size-cells = <0>;
			mipi2_csi2_output: endpoint@0 {
				reg = <0>;
				remote-endpoint = <&cif_mipi_in2>;
			};
		};
	};
};

&rkcif {
	status = "okay";
};

&rkcif_mmu {
	status = "okay";
};

&rkcif_mipi_lvds2 {
	status = "okay";
	port {
		cif_mipi_in2: endpoint {
			remote-endpoint = <&mipi2_csi2_output>;
		};
	};
};

&rkcif_mipi_lvds2_sditf {
	status = "okay";
	port {
		mipi_lvds2_sditf: endpoint {
			remote-endpoint = <&isp0_vir0>;
		};
	};
};

&rkisp0 {
	status = "okay";
};

&isp0_mmu {
	status = "okay";
};

&rkisp0_vir0 {
	status = "okay";
	port {
		#address-cells = <1>;
		#size-cells = <0>;
		isp0_vir0: endpoint@0 {
			reg = <0>;
			remote-endpoint = <&mipi_lvds2_sditf>;
		};
	};
};

//dphy1 full mode (for split mode use csi2_dphy4/5)
&csi2_dphy1_hw {
	status = "okay";
};

&csi2_dphy3 {
	status = "okay";
	ports {
		#address-cells = <1>;
		#size-cells = <0>;
		port@0 {
			reg = <0>;
			#address-cells = <1>;
			#size-cells = <0>;
			mipi_in_ucam1: endpoint@1 {
				reg = <1>;
				remote-endpoint = <&ucam_out1>;
				data-lanes = <1 2 3 4>;
			};
		};
		port@1 {
			reg = <1>;
			#address-cells = <1>;
			#size-cells = <0>;
			csidphy3_out: endpoint@0 {
				reg = <0>;
				remote-endpoint = <&mipi4_csi2_input>;
			};
		};
	};
};

&i2c7 {
	status = "okay";

	//camera connected to CSI1

	ov4689p1: ov4689@36 {
		compatible = "ovti,ov4689";
		status = "okay";
		reg = <0x36>;
		clocks = <&cru CLK_MIPI_CAMARAOUT_M2>;
		clock-names = "xvclk";
		power-domains = <&power RK3588_PD_VI>;

		reset-gpios = <&gpio2 RK_PC1 GPIO_ACTIVE_LOW>;
		pwdn-gpios = <&gpio2 RK_PC2 GPIO_ACTIVE_HIGH>;
		pinctrl-names = "rockchip,camera_default", "rockchip,camera_sleep";
		pinctrl-0 = <&cam1_mcam400_default_pins &mipim0_camera2_clk>;
		pinctrl-1 = <&cam1_mcam400_default_pins>;

		rockchip,camera-module-index = <2>;
		rockchip,camera-module-facing = "front";
		rockchip,camera-module-name = "MCAM400";
		rockchip,camera-module-lens-name = "MCAM400";

		rockchip,camera-vflip = <0>;
		rockchip,camera-hflip = <0>;


		port {
			ucam_out1: endpoint {
				remote-endpoint = <&mipi_in_ucam1>;
				data-lanes = <1 2 3 4>;
			};
		};
	};
};

&mipi4_csi2 {
	status = "okay";
	ports {
		#address-cells = <1>;
		#size-cells = <0>;
		port@0 {
			reg = <0>;
			#address-cells = <1>;
			#size-cells = <0>;
			mipi4_csi2_input: endpoint@1 {
				reg = <1>;
				remote-endpoint = <&csidphy3_out>;
			};
		};
		port@1 {
			reg = <1>;
			#address-cells = <1>;
			#size-cells = <0>;
			mipi4_csi2_output: endpoint@0 {
				reg = <0>;
				remote-endpoint = <&cif_mipi_in0>;
			};
		};
	};
};

&rkcif_mipi_lvds4 {
	status = "okay";
	port {
		cif_mipi_in0: endpoint {
			remote-endpoint = <&mipi4_csi2_output>;
		};
	};
};

&rkcif_mipi_lvds4_sditf {
	status = "okay";
	port {
		mipi_lvds4_sditf: endpoint {
			remote-endpoint = <&isp1_vir0>;
		};
	};
};

&rkisp1 {
	status = "okay";
};

&isp1_mmu {
	status = "okay";
};

&rkisp1_vir0 {
	status = "okay";

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

		isp1_vir0: endpoint@0 {
			reg = <0>;
			remote-endpoint = <&mipi_lvds4_sditf>;
		};
	};
};

@Bluez
how did you managed to connect two sensor ? adapter board ? 5A or 5B ?