Orin Nano R36.4.3, ADV7280A-M when capturing images we get artifacts

Good day.

We have our own board that can be used with Jetson Nano
On Jetson Nano ADV7280A-M in R32.7.4 works great.

On Orin Nano you can capture an image, but it has large artifacts.
The image is double.
I am attaching a photo of the color stripes.

I suspect that for nVidia drivers you need to specify modes, but for the v4l2 device you cannot specify mode{} in the device tree.

I understand that the ncsi and vi drivers should receive settings through calls to callback functions in structures.

static const struct v4l2_subdev_video_ops adv7180_video_ops
static const struct v4l2_subdev_core_ops adv7180_core_ops
static const struct v4l2_subdev_pad_ops adv7180_pad_ops
static const struct v4l2_subdev_sensor_ops adv7180_sensor_ops
static const struct v4l2_subdev_ops adv7180_ops

How do we properly configure ncsi and vi modes?

The log returns the following error.

[ 1483.052560] tegra-camrtc-capture-vi tegra-capture-vi: corr_err: discarding frame 2, flags: 0, err_data 64
[ 1483.072636] tegra-camrtc-capture-vi tegra-capture-vi: corr_err: discarding frame 1, flags: 0, err_data 64
[ 1483.093015] tegra-camrtc-capture-vi tegra-capture-vi: corr_err: discarding frame 2, flags: 0, err_data 64
[ 1483.112924] tegra-camrtc-capture-vi tegra-capture-vi: corr_err: discarding frame 1, flags: 0, err_data 64
[ 1483.133357] tegra-camrtc-capture-vi tegra-capture-vi: corr_err: discarding frame 2, flags: 0, err_data 131072
[ 1483.153257] tegra-camrtc-capture-vi tegra-capture-vi: corr_err: discarding frame 1, flags: 0, err_data 64
[ 1483.173344] tegra-camrtc-capture-vi tegra-capture-vi: corr_err: discarding frame 2, flags: 0, err_data 131072
[ 1483.193195] tegra-camrtc-capture-vi tegra-capture-vi: corr_err: discarding frame 1, flags: 0, err_data 64
[ 1483.213099] tegra-camrtc-capture-vi tegra-capture-vi: corr_err: discarding frame 2, flags: 0, err_data 64
[ 1483.232923] tegra-camrtc-capture-vi tegra-capture-vi: corr_err: discarding frame 1, flags: 0, err_data 64
[ 1483.252867] tegra-camrtc-capture-vi tegra-capture-vi: corr_err: discarding frame 2, flags: 0, err_data 64
[ 1483.272495] tegra-camrtc-capture-vi tegra-capture-vi: corr_err: discarding frame 1, flags: 0, err_data 64
[ 1483.292529] tegra-camrtc-capture-vi tegra-capture-vi: corr_err: discarding frame 2, flags: 0, err_data 64
[ 1483.312530] tegra-camrtc-capture-vi tegra-capture-vi: corr_err: discarding frame 1, flags: 0, err_data 64
[ 1483.332520] tegra-camrtc-capture-vi tegra-capture-vi: corr_err: discarding frame 2, flags: 0, err_data 64
[ 1483.352291] tegra-camrtc-capture-vi tegra-capture-vi: corr_err: discarding frame 1, flags: 0, err_data 64
[ 1483.372423] tegra-camrtc-capture-vi tegra-capture-vi: corr_err: discarding frame 2, flags: 0, err_data 64
[ 1483.412310] tegra-camrtc-capture-vi tegra-capture-vi: corr_err: discarding frame 2, flags: 0, err_data 64
[ 1483.433078] tegra-camrtc-capture-vi tegra-capture-vi: corr_err: discarding frame 1, flags: 0, err_data 64
[ 1483.452921] tegra-camrtc-capture-vi tegra-capture-vi: corr_err: discarding frame 2, flags: 0, err_data 64
[ 1483.472825] tegra-camrtc-capture-vi tegra-capture-vi: corr_err: discarding frame 1, flags: 0, err_data 64
[ 1483.492821] tegra-camrtc-capture-vi tegra-capture-vi: corr_err: discarding frame 2, flags: 0, err_data 64
[ 1483.512955] tegra-camrtc-capture-vi tegra-capture-vi: corr_err: discarding frame 1, flags: 0, err_data 64
[ 1483.533121] tegra-camrtc-capture-vi tegra-capture-vi: corr_err: discarding frame 2, flags: 0, err_data 131072
[ 1483.553101] tegra-camrtc-capture-vi tegra-capture-vi: corr_err: discarding frame 1, flags: 0, err_data 131072
[ 1483.572907] tegra-camrtc-capture-vi tegra-capture-vi: corr_err: discarding frame 2, flags: 0, err_data 64
[ 1483.612805] tegra-camrtc-capture-vi tegra-capture-vi: corr_err: discarding frame 2, flags: 0, err_data 64
[ 1483.632499] tegra-camrtc-capture-vi tegra-capture-vi: corr_err: discarding frame 1, flags: 0, err_data 64
[ 1483.652225] tegra-camrtc-capture-vi tegra-capture-vi: corr_err: discarding frame 2, flags: 0, err_data 64

DTSI

//#include <dt-bindings/media/camera.h>
//#include <dt-bindings/platform/t210/t210.h>
#include <dt-bindings/tegra234-p3767-0000-common.h>
#include <dt-bindings/gpio/gpio.h>

//#define CAM1_PWDN		TEGRA194_MAIN_GPIO(S,7)
//#define CAM2_PWDN		TEGRA194_MAIN_GPIO(T,0)
//#define CAM3_PWDN   	TEGRA194_MAIN_GPIO(T,5)
//#define CAM4_PWDN		TEGRA194_MAIN_GPIO(T,6)
//#define CAMERA_I2C_MUX_BUS(x) (0x1E + x)

#define CAMERA_I2C_MUX_BUS(x) (0x1E + x)
#define CAM0_PWDN	TEGRA234_MAIN_GPIO(H, 6)

//#define CAM1_PWDN	TEGRA234_MAIN_GPIO(H, 6)
#define CAM2_PWDN	TEGRA234_MAIN_GPIO(Q, 6)
#define CAM3_PWDN	TEGRA234_MAIN_GPIO(AC,0)
#define CAM4_PWDN	TEGRA234_MAIN_GPIO(Q, 5)

/ {

	gpio@6000d000 {
		camera-control-output-low {
			gpio-hog;
			output-low;
//			gpios = <CAM1_PWDN 0  CAM2_PWDN 0>;
//            gpios = < TEGRA234_MAIN_GPIO(S,7) 0 TEGRA234_MAIN_GPIO(T,0) 0>;

			label = "cam1-pwdn", "cam2-pwdn";
		};
	};

    tegra-capture-vi  {
        status = "okay";
        num-channels = <1>;
        ports {
            #address-cells = <1>;
            #size-cells = <0>;
            port@0{
                status = "okay";
                reg = <0>;
                adv7280_vi_in0: endpoint {
                    status = "okay";
                    // ADV7280
                    port-index = <3>;  // MIPI3 -> CSI-F
                    bus-width = <1>;   // Use CSI-F only
                    remote-endpoint = <&adv7280_csi_out0>;
                };
            };

        };//end ports
    };//end vi

bus@0 {
	host1x@13e00000 {
		nvcsi@15a00000 {
        //status = "okay";
        num-channels = <1>;
        #address-cells = <1>;
        #size-cells = <0>;

        channel@0 {
            status = "okay";
            reg = <0>;
            discontinuous_clk = "no";
            ports {
                #address-cells = <1>;
                #size-cells = <0>;
                port@0 {
                    status = "okay";
                    reg = <0>;
                    adv7280_i2C_csi_in0: endpoint@0 {
                        status = "okay";
                        port-index = <3>; // MIPI4 -> CSI-C
                        bus-width = <1>;  // Use CSI-C and CSI-D
                        remote-endpoint = <&adv7280_i2c_out0>;
                    };
                };
                port@1 {
                    status = "okay";
                    reg = <1>;
                    adv7280_csi_out0: endpoint@1 {
                        status = "okay";
                        remote-endpoint = <&adv7280_vi_in0>;
                    };
                };
            };
        };//end chanel@3
	
    };//end nvcsi

};//end host1x
    //i2c@7000c400{
	i2c@c250000{
        status = "okay";
        adv7280@21 {
            compatible = "adi,adv7280-m";
            status = "okay";
            // I2C device address
            reg = <0x21>;
            clock-frequency = <24000000>;
            //#address-cells = <1>;
            //#size-cells = <0>;
            // V4L2 device node location
            devnode = "video0";
            // Physical dimensions of sensor
            physical_w = "4.713";
            physical_h = "3.494";
            sensor_model = "adv7280-m";
            use_sensor_mode_id = "false";
           // mclk = "extperiph1";
            //refclk_hz = <28636363>;
							
            ports {
                #address-cells = <1>;
                #size-cells = <0>;
                port@0 {
                    reg = <0>;
                    adv7280_i2c_out0: endpoint {
                        port-index = <3>;
                        bus-width = <1>;
                        //cil_settletime = "30";
                        //data-lanes = <1>;
                        //clock-lanes = <0>;
                        //link-frequencies = /bits/ 64 <297000000>;
                        //link-frequencies = /bits/ 64 <216000000>;
                        remote-endpoint = <&adv7280_i2C_csi_in0>;
                    };
                };
            };
        };//end adv7280@21
    };//end i2c@7000c400

};

	tegra-camera-platform {
        compatible = "nvidia, tegra-camera-platform";
        num_csi_lanes = <1>;  // Changed 2 -> 4
		max_lane_speed = <15000000>; //<4000000>;//<4500000>;
		min_bits_per_pixel = <10>;  
		vi_peak_byte_per_pixel = <2>;
		vi_bw_margin_pct = <25>;
//        max_pixel_rate = <240000>;
        max_pixel_rate = <7500000>;
		isp_peak_byte_per_pixel = <5>;
		isp_bw_margin_pct = <25>;

        /*
		* The general guideline for naming badge_info contains 3 parts, and is as follows,
		* The first part is the camera_board_id for the module; if the module is in a FFD
		* platform, then use the platform name for this part.
        * The second part contains the position of the module, ex. rear or front.
		* The third part contains the last 6 characters of a part number which is found
		* in the module's specsheet from the vender.
		*/
		modules {
            module0 {
                status = "okay";
                badge = "porg_front_ADV7280";
                position = "front";
                orientation = "1";

                drivernode0 {
                    status = "okay";
                    pcl_id = "v4l2_sensor";
                    //devname = "adv7280 1-0021";
                    //proc-device-tree = "/proc/device-tree/i2c@7000c400/adv7280@21";
                    sysfs-device-tree = "/sys/firmware/devicetree/base/bus@0/i2c@c250000/adv7280@21";


                };
            };

		};
	};
};

adv7280.zip (17.8 KB)

Hi @akvadak66,

In older Jetpack, I remember having similar problem and it was resolved by setting the preferred_stride=1472

There seems a similar issue with the recent Orin family as well (preferred_stride=1920) : Incorrecrt PAL is displayed on Orin - #8 by igal.kroyter

1 Like

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