IMX219-83 not working on Jetson TX2 NX

I have a IMX219-120 that works correctly with my Jetson TX2 NX. However when I connect a IMX219-83 stereo, it doesn’t show in /dev/videoX


supp1

If i run dmesg

I2c is working correctly as I am able to read accelerometer
supp3

I have seen many posts regarding similar errors but no solution is working for me.

hello eloi3,

please confirm IMX219-83 stereo using same I2C slave address.
or… you may updating the device tree.

Hi Jerry,

Slave address is fixed at 0x10 as per datasheet.

This is the DTBO i am using:

/dts-v1/;

/ {
        overlay-name = "Camera IMX219 Dual";
        jetson-header-name = "Jetson Nano CSI Connector";
        compatible = "nvidia,tegra186", "nvidia,p3449-0000+p3668-0000", "nvidia,p3449-0000+p3668-0001", "nvidia,p3509-0000+p3668-0000", "nvidia,p3509-0000+p3668-0001", "nvidia,p3509-0000+p3636-0001", "nvidia,p2597-0000+p3310-1000";

        fragment@0 {
                target = <0xffffffff>;

                __overlay__ {
                        status = "okay";
                };
        };

        fragment@1 {
                target = <0xffffffff>;

                __overlay__ {
                        status = "okay";
                        badge = "jakku_front_RBP194";
                        position = "front";
                        orientation = [31 00];
                };
        };

        fragment@2 {
                target = <0xffffffff>;

                __overlay__ {
                        status = "okay";
                        pcl_id = "v4l2_sensor";
                        devname = "imx219 9-0010";
                        proc-device-tree = "/proc/device-tree/cam_i2cmux/i2c@0/rbpcv2_imx219_a@10";
                };
        };

        fragment@3 {
                target = <0xffffffff>;

                __overlay__ {
                        status = "okay";
                };
        };

        fragment@4 {
                target = <0xffffffff>;

                __overlay__ {
                        status = "okay";
                        badge = "jakku_rear_RBP194";
                        position = "rear";
                        orientation = [31 00];
                };
        };

        fragment@5 {
                target = <0xffffffff>;

                __overlay__ {
                        status = "okay";
                        pcl_id = "v4l2_sensor";
                        devname = "imx219 10-0010";
                        proc-device-tree = "/proc/device-tree/cam_i2cmux/i2c@1/rbpcv2_imx219_c@10";
                };
        };

        fragment@6 {
                target = <0xffffffff>;

                __overlay__ {
                        status = "okay";
                        port-index = <0x0>;
                        bus-width = <0x2>;
                        remote-endpoint = <0xffffffff>;
                };
        };

        fragment@7 {
                target = <0xffffffff>;

                __overlay__ {
                        status = "okay";
                        port-index = <0x2>;
                        bus-width = <0x2>;
                        remote-endpoint = <0xffffffff>;
                };
        };

        fragment@8 {
                target = <0xffffffff>;

                __overlay__ {
                        status = "okay";
                        port-index = <0x0>;
                        bus-width = <0x2>;
                        remote-endpoint = <0xffffffff>;
                };
        };

        fragment@9 {
                target = <0xffffffff>;

                __overlay__ {
                        status = "okay";
                };
        };

        fragment@10 {
                target = <0xffffffff>;

                __overlay__ {
                        status = "okay";
                        port-index = <0x2>;
                        bus-width = <0x2>;
                        remote-endpoint = <0xffffffff>;
                };
        };

        fragment@12 {
                target = <0xffffffff>;

                __overlay__ {
                        status = "okay";
                };
        };

        __fixups__ {
                imx219_cam0 = "/fragment@0:target:0";
                cam_module0 = "/fragment@1:target:0";
                cam_module0_drivernode0 = "/fragment@2:target:0";
                imx219_cam1 = "/fragment@3:target:0";
                cam_module1 = "/fragment@4:target:0";
                cam_module1_drivernode0 = "/fragment@5:target:0";
                rbpcv2_imx219_vi_in0 = "/fragment@6:target:0";
                rbpcv2_imx219_csi_out0 = "/fragment@6/__overlay__:remote-endpoint:0", "/fragment@9:target:0";
                rbpcv2_imx219_vi_in1 = "/fragment@7:target:0";
                rbpcv2_imx219_csi_out1 = "/fragment@7/__overlay__:remote-endpoint:0", "/fragment@12:target:0";
                rbpcv2_imx219_csi_in0 = "/fragment@8:target:0";
                rbpcv2_imx219_out0 = "/fragment@8/__overlay__:remote-endpoint:0";
                rbpcv2_imx219_csi_in1 = "/fragment@10:target:0";
                rbpcv2_imx219_out1 = "/fragment@10/__overlay__:remote-endpoint:0";
        };
};

This is the resulting fragment of the device tree

  i2c@1 {
                        reg = <0x1>;
                        #address-cells = <0x1>;
                        #size-cells = <0x0>;
                        linux,phandle = <0x163>;
                        phandle = <0x163>;

                        rbpcv2_imx219_c@10 {
                                status = "okay";
                                compatible = "nvidia,imx219";
                                reg = <0x10>;
                                devnode = "video1";
                                physical_w = "3.680";
                                physical_h = "2.760";
                                sensor_model = "imx219";
                                use_sensor_mode_id = "true";
                                reset-gpios = <0x21 0x6b 0x0>;
                                linux,phandle = <0x164>;
                                phandle = <0x164>;

                                mode0 {
                                        mclk_khz = "24000";
                                        num_lanes = [32 00];
                                        tegra_sinterface = "serial_c";
                                        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";
--
                                        default_exp_time = "2495";
                                        embedded_metadata_height = [32 00];
                                };

                                mode4 {
                                        mclk_khz = "24000";
                                        num_lanes = [32 00];
                                        tegra_sinterface = "serial_c";
                                        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];
                                };

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

                                        port@0 {
                                                reg = <0x0>;

                                                endpoint {
                                                        status = "okay";
                                                        port-index = <0x2>;
                                                        bus-width = <0x2>;
                                                        remote-endpoint = <0xd4>;
                                                        linux,phandle = <0x4f>;
                                                        phandle = <0x4f>;
                                                };
                                        };
                                };
                        };
                };

hello eloi3,

I’m not sure the difference between IMX219-120 and IMX219-83.
are they using the same sensor kernel driver?

The only difference to me is that IMX219-120 is monocular and 83 is stereo (uses 2 csi connectors). I do not understand neither why 120 is working and 83 is not. For 83 I get

[    4.389606] tegra-i2c 3180000.i2c: no acknowledge from address 0x10
[    4.389653] imx219 9-0010: imx219_board_setup: error during i2c read probe (-121)
[    4.389716] imx219 9-0010: board setup failed
[    4.389758] imx219: probe of 9-0010 failed with error -121
[    4.390037] imx219 10-0010: tegracam sensor driver:imx219_v2.0.6
[    4.414910] tegra-i2c 3180000.i2c: no acknowledge from address 0x10
[    4.414951] imx219 10-0010: imx219_board_setup: error during i2c read probe (-121)
[    4.415000] imx219 10-0010: board setup failed
[    4.415034] imx219: probe of 10-0010 failed with error -121

hello eloi3,

it usually due to regulator settings that your board did not power-up correctly, that’s why i2c communication has failed.
are they using the same sensor kernel driver? you may try adding some debug prints for confirmation.

Hello Jerry,

I have attached the camera that is working, IMX219-120, and it shows the same message

However, it shows up in /dev/video0 and is working correctly, so I think the I2C message always appears, doesn’t matter if the cam is working or not.

So my question would be, why is the IMX219-120 appearing in /dev/video and the 83 is not?

as my request from you… are they using the same sensor kernel driver?

I guess so yes. I am just disconnecting one and connecting the other without changing anything.

hello eloi3,

again, this is failure on device registration.
you may digging into driver init process to understand why i2c communication has failed.

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.