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