I swapped the badge values between module3 and module0, and observed that the black screen issue shifted to video0.
To investigate further, I tried assigning all eight cameras with different “unique” badge names, but this resulted in multiple “No cameras available” errors.
Eventually, I found the following configuration that allows all eight cameras to preview correctly without triggering the black screen issue:
//module0
badge = "gmsl2_rear";
position = "rear";
//module1
badge = "gmsl2_front";
position = "front";
//module2
badge = "gmsl2_topright";
position = "topright";
//module3
badge = "gmsl2_bottomright";
position = "bottomright";
//module4
badge = "gmsl2_topleft";
position = "topleft";
//module5
badge = "gmsl2_centerright";
position = "centerright";
//module6
badge = "gmsl2_centerleft";
position = "centerleft";
//module7
badge = "gmsl2_bottomleft";
position = "bottomleft";
I’m curious why the badge value seems to affect gstnvarguscamerasrc behavior so significantly.
By the way, I also noticed that the convergenceStatus value changes to 2 after a few image frames.
it’s glad to know the issue has resolved.
may I know what’s the badge property value of your module3? I assume such string has duplicated with others to cause such failure.
My original badge properties in the DTS do not contain any duplicated values, so it’s puzzling why the black screen issue consistently occurs with the "gmsl2_sensor_3" badge.
modules {
camera_module0: module0 {
status = "okay";
badge = "gmsl2_sensor_0";
position = "rear";
orientation = "1";
drivernode0 {
status = "okay";
pcl_id = "v4l2_sensor";
sysfs-device-tree = "/sys/firmware/devicetree/base/bus@0/i2c@3160000/tca9546@70/i2c@0/sensing_sensors_0";
};
};
camera_module1: module1 {
status = "okay";
badge = "gmsl2_sensor_1";
position = "front";
orientation = "1";
drivernode0 {
status = "okay";
pcl_id = "v4l2_sensor";
sysfs-device-tree = "/sys/firmware/devicetree/base/bus@0/i2c@3160000/tca9546@70/i2c@0/sensing_sensors_1";
};
};
camera_module2: module2 {
status = "okay";
badge = "gmsl2_sensor_2";
position = "topright";
orientation = "1";
drivernode0 {
status = "okay";
pcl_id = "v4l2_sensor";
sysfs-device-tree = "/sys/firmware/devicetree/base/bus@0/i2c@3160000/tca9546@70/i2c@0/sensing_sensors_2";
};
};
camera_module3: module3 {
status = "okay";
badge = "gmsl2_sensor_3";
position = "bottomright";
orientation = "1";
drivernode0 {
status = "okay";
pcl_id = "v4l2_sensor";
sysfs-device-tree = "/sys/firmware/devicetree/base/bus@0/i2c@3160000/tca9546@70/i2c@0/sensing_sensors_3";
};
};
camera_module4: module4 {
status = "okay";
badge = "gmsl2_sensor_4";
position = "topleft";
orientation = "1";
drivernode0 {
status = "okay";
pcl_id = "v4l2_sensor";
sysfs-device-tree = "/sys/firmware/devicetree/base/bus@0/i2c@3160000/tca9546@70/i2c@1/sensing_sensors_4";
};
};
camera_module5: module5 {
status = "okay";
badge = "gmsl2_sensor_5";
position = "centerright";
orientation = "1";
drivernode0 {
status = "okay";
pcl_id = "v4l2_sensor";
sysfs-device-tree = "/sys/firmware/devicetree/base/bus@0/i2c@3160000/tca9546@70/i2c@1/sensing_sensors_5";
};
};
camera_module6: module6 {
status = "okay";
badge = "gmsl2_sensor_6";
position = "centerleft";
orientation = "1";
drivernode0 {
status = "okay";
pcl_id = "v4l2_sensor";
sysfs-device-tree = "/sys/firmware/devicetree/base/bus@0/i2c@3160000/tca9546@70/i2c@1/sensing_sensors_6";
};
};
camera_module7: module7 {
status = "okay";
badge = "gmsl2_sensor_7";
position = "bottomleft";
orientation = "1";
drivernode0 {
status = "okay";
pcl_id = "v4l2_sensor";
sysfs-device-tree = "/sys/firmware/devicetree/base/bus@0/i2c@3160000/tca9546@70/i2c@1/sensing_sensors_7";
};
};
}; // end modules
it’s a bad practice.
it’s suggest to have an unique string in the last column.
let me give you some examples for reference, $public_sources/kernel_src/hardware/nvidia/t23x/nv-public/overlay/tegra234-camera-imx185-a00.dtsi badge = "imx185_bottom_liimx185";
it’s the last string, liimx185 used by camera software stack to distinguish the configuration file.
if you’re having multi-camera, you may still using the same unique string in last column for sharing the single tuning file. $public_sources/kernel_src/hardware/nvidia/t23x/nv-public/overlay/tegra234-camera-imx274-dual.dtsi badge = "imx274_bottom_A6V26"; badge = "imx274_top_A6V26";
BTW,
you may see-also Camera Architecture Stack, v4l2-ctl that uses direct kernel IOCTL calls to access V4L2 functionality. that’s why you don’t see black screen issue in post #16.
I’m aware that there are documents explaining the expected values for the badge property, such as the one below:
However, it remains unclear what specifically qualifies as a “unique” value within the camera software stack.
Could you kindly clarify the logic used by the stack to identify and distinguish between camera modules?
Specifically, I’m curious why distinct strings with different indices or IDs—such as those used in my original configuration—are not sufficient for proper module recognition.