We test our own camera deserializer board with a camera IMX390 and a MAX9295 Serializer. On our board, we have 4 Deserializer MAX9296.
For testing, we connect one camera to each input port of the deserializers (only one camera connected at once). Now we have the following behavior:
the camera gets recognized on every Input Port A of all four deserializers, we get also an image
for the first two deserializers, Input Port B works also fine (CAM1 and CAM3)
for the last two deserializers, Input Port B does not work, there is no /dev/video device (CAM5 and CAM7)
The connections are as follows:
CAM0 (MAX9295) → SIOB (MAX9296_1) → CSI_2/CSI_3
CAM1 (MAX9295) → SIOA (MAX9296_1) → CSI_2/CSI_3
Thank you for your answer. We tested already mutliple port-index settings, but so far were not able to make all cameras work. Does the device tree is correct now? out.dts (292.9 KB)
In the forum we also saw that for the vi, the last port-index is 5 and not 6. We have to change this everywhere or only for the vi node? Can you elaborate a bit on the port mapping?
Thank you.
Thank you ShaneCCC.
We changed our device tree accordingly: out.dts (292.9 KB)
Now we have the weird behavior that the CAM5 is ones recognized and after a reboot/poweroff, the sensor disappears.
In the dmesg we see the following message:
max9296 32-0048: max9296_sdev_register: serdes csi link is in use
max9296 33-0048: max9296_sdev_register: serdes csi link is in use
Apparently this happens also with CAM2. Attached you can find the dmesg for when the camera is detected and for when it is not: cam_ok.txt (77.4 KB) cam_nok.txt (76.9 KB)
The difference is that in the unsuccessfull case, there is the error max9296 31-0048:
max9296_sdev_register: serdes csi link is in use
This message comes from the max9296 driver:
if (g_ctx->serdes_csi_link ==
priv->sources[i].g_ctx->serdes_csi_link) {
dev_err(dev,
“%s: serdes csi link is in use\n”, func);
err = -EINVAL;
goto error;
}
We have tried multiple different settings for the gmsl-link{} without any success.
Do we understand the settings correctly?
src-csi-port=“b”; → MAX9295 is always Port B
dst-csi-port=“a”; → is this the Jetson CSI Port (A, B, C, D, E, F, G) or the Input Port of the deserializer, meaning A or B?
serdes-csi-link=“a”; → connection of deserializer? A or B?
Hi ShaneCCC
As additional information - when we switch serdes-csi-link=“a” and serdes-csi-link=“b” in our device tree, then the Camera on Port B is always working, but the one on Port A is not anymore. As this switch leads just to a switch of the I2C Proxy address of the sensor and the order of the initialization, could there something go wrong when the addresses are translated?
Can you explain the “src-csi-port”, “dst-csi-por” and “serdes-csi-link” a bit more?
Thank you.
And we get the following dmesg output: dmesg.txt (78.7 KB)
Were we see this message:
[ 1.796317] pca954x 2-0070: vcc-pullup regulator not found
[ 1.801069] max9295 31-0062: prim-ser already exists
[ 1.801266] max9295: probe of 31-0062 failed with error -17
Do you have an idea what our problem is?
We use the Multiplexer TCA9546APWR from Texas Instruments, what do we need to use for the “compatible=” option in the device tree?
Thank you.