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)