question: CSI on imx8mq with (any) CSI2 camera / experience with mx6s_capture?

Martin Kepplinger martin.kepplinger at puri.sm
Thu Dec 10 03:17:48 EST 2020


hi,

TL;DR: did you use the NXP "mx6s_capture" csi bridge driver with other 
cameras?

I try to use a CSI2 camera (hi846 I'm writing a driver for) on imx8mq: 
Using NXP's CSI bridge driver
https://source.codeaurora.org/external/imx/linux-imx/tree/drivers/media/platform/mxc/capture/mx6s_capture.c?h=imx_5.4.0_8dxlphantom_er 
as well as the CSI driver itself:
https://source.codeaurora.org/external/imx/linux-imx/tree/drivers/media/platform/imx8/mxc-mipi-csi2_yav.c?h=imx_5.4.0_8dxlphantom_er 
works fine when using the ov5640 camera with this driver:
https://source.codeaurora.org/external/imx/linux-imx/tree/drivers/media/platform/mxc/capture/ov5640_mipi_v2.c?h=imx_5.4.0_8dxlphantom_er

(I realize there is a CSI bridge driver in staging, but that need more 
work to be actually used. Of course after this the goal is to fix and 
use it; and mainline a CSI phy driver too.)

Now I use said NXP's CSI drivers on mainline without problems with the 
ov5640. For the hi846 (as an example), I want to use a different 
pixelformat and CSI media bus format. Describing, say, 
MEDIA_BUS_FMT_SBGGR10_1X10 in the driver lets mx6s_capture find it; but 
as soon as I try to add a different pixelformat than V4L2_PIX_FMT_UYVY in:
https://source.codeaurora.org/external/imx/linux-imx/tree/drivers/media/platform/mxc/capture/mx6s_capture.c?h=imx_5.4.0_8dxlphantom_er#n244
streaming won't start anymore: "not negotiated, -4" and the 
"mx6s_vidioc_enum_framesizes" ioctl is not called anymore. Why so?

I didn't find much when comparing strace from "gst-launch-1.0 v4l2src ! 
video/x-raw,width=1280,height=720 ! videoconvert ! xvimagesink" (which 
is how I test).

When I simply use V4L2_PIX_FMT_UYVY I *do* get interrupts (in mx6s) but 
only "FIELD0_INT" (and drawing at this point suggests that buffer 1 is 
not yet full and "distorted" in a wrong format, which could explain why 
DMA is never completed in order to create a full frame).

Now this is details, but the hi846 camera uses a 10bit CSI format and 
therefore I need to set PIXEL_BIT in cr1 too, but when I do that for 
example, I don't get "FIELD0_INT" anymore (only SFF_OR_INT and of course 
the "base address switching Change Err").

Do you have experience with using this driver with other cameras and can 
point me in a direction that might help me?

If you want to look at the work-in-progress driver:
https://source.puri.sm/martin.kepplinger/linux-next/-/blob/hi846/drivers/media/i2c/hi846.c

thanks a lot,

                               martin





More information about the linux-arm-kernel mailing list