Hello,
We are trying to interface a 3rd party camera sensor configured for12 bit grayscale output with resolution of 640x480. However when trying to capture the raw image through v4l2-ctl, we are not seeing expected data in the captured frame.
We made changes suggested in https://community.nxp.com/t5/i-MX-Processors/How-to-set-up-the-MIPI-CSI-2-and-ISI-to-transfer-RAW10-.... However we are still not seeing a valid camera output through v4l2-ctl.
Below are the changes that we have made
Added the below format to mxc_isi_src_formats[]
{
.name = "Y12 (Grey)",
.fourcc = V4L2_PIX_FMT_Y12,
.depth = { 12 },
.memplanes = 1,
.colplanes = 1,
.align = 1,
}
struct mxc_isi_fmt *mxc_isi_get_src_fmt(struct v4l2_subdev_format *sd_fmt)
sd_fmt->format.code == MEDIA_BUS_FMT_UYVY8_2X8 ||
sd_fmt->format.code == MEDIA_BUS_FMT_YUYV8_2X8)
index = 1;
+ else if (sd_fmt->format.code == MEDIA_BUS_FMT_Y12_1X12)
+ index = 2;
else
index = 0;
Added below format to mxc_isi_out_formats[]
{
.name = "Y12",
.fourcc = V4L2_PIX_FMT_Y12,
.depth = { 12 },
.color = MXC_ISI_OUT_FMT_RAW12,
.memplanes = 1,
.colplanes = 1,
.align = 1,
.mbus_code = MEDIA_BUS_FMT_Y12_1X12,
}
Set the ISI CSC in bypass mode:
// if (is_yuv(src_fmt->fourcc) && is_rgb(dst_fmt->fourcc)) {
// /* YUV2RGB */
// csc = YUV2RGB;
// /* YCbCr enable??? */
// val |= (CHNL_IMG_CTRL_CSC_MODE_YCBCR2RGB << CHNL_IMG_CTRL_CSC_MODE_OFFSET);
// val |= (CHNL_IMG_CTRL_YCBCR_MODE_ENABLE << CHNL_IMG_CTRL_YCBCR_MODE_OFFSET);
// } else if (is_rgb(src_fmt->fourcc) && is_yuv(dst_fmt->fourcc)) {
// /* RGB2YUV */
// csc = RGB2YUV;
// val |= (CHNL_IMG_CTRL_CSC_MODE_RGB2YCBCR << CHNL_IMG_CTRL_CSC_MODE_OFFSET);
// } else {
// /* Bypass CSC */
pr_info("bypass csc\n");
mxc_isi->cscen = 0;
val |= CHNL_IMG_CTRL_CSC_BYPASS_ENABLE;
Add the Y12 format to imx8-mipi-csi2-sam.c
static int csis_s_fmt(struct v4l2_subdev *sd, struct csi_sam_format *fmt)
case V4L2_PIX_FMT_SRGGB12:
code = MEDIA_BUS_FMT_SRGGB12_1X12;
break;
+ case V4L2_PIX_FMT_Y12:
+ code = MEDIA_BUS_FMT_Y12_1X12;
+ break;
default:
return -EINVAL;
v4l2-ctl command to capture the camera frame:
v4l2-ctl --verbose --device /dev/video2 --stream-mmap --stream-to=frame.raw --stream-count=1 --set-fmt-video=width=640,height=480,pixelformat='Y12 '
ISI register dump during the capture:
[ 38.142066] mxc-isi 32e00000.isi: ISI CHNLC register dump, isi0
[ 38.148041] mxc-isi 32e00000.isi: CHNL_CTRL[0x00]: e0000000
[ 38.154595] mxc-isi 32e00000.isi: CHNL_IMG_CTRL[0x04]: e000001
[ 38.161123] mxc-isi 32e00000.isi: CHNL_OUT_BUF_CTRL[0x08]: 7c707
[ 38.167415] mxc-isi 32e00000.isi: CHNL_IMG_CFG[0x0c]: 1e00280
[ 38.173874] mxc-isi 32e00000.isi: CHNL_IER[0x10]: 3cfc0000
[ 38.180420] mxc-isi 32e00000.isi: CHNL_STS[0x14]: 100
[ 38.186540] mxc-isi 32e00000.isi: CHNL_SCALE_FACTOR[0x18]: 10001000
[ 38.193090] mxc-isi 32e00000.isi: CHNL_SCALE_OFFSET[0x1c]: 00
[ 38.199115] mxc-isi 32e00000.isi: CHNL_CROP_ULC[0x20]: 00
[ 38.205142] mxc-isi 32e00000.isi: CHNL_CROP_LRC[0x24]: 00
[ 38.211169] mxc-isi 32e00000.isi: CHNL_CSC_COEFF0[0x28]: 00
[ 38.217198] mxc-isi 32e00000.isi: CHNL_CSC_COEFF1[0x2c]: 00
[ 38.223222] mxc-isi 32e00000.isi: CHNL_CSC_COEFF2[0x30]: 00
[ 38.229249] mxc-isi 32e00000.isi: CHNL_CSC_COEFF3[0x34]: 00
[ 38.235274] mxc-isi 32e00000.isi: CHNL_CSC_COEFF4[0x38]: 00
[ 38.241302] mxc-isi 32e00000.isi: CHNL_CSC_COEFF5[0x3c]: 00
[ 38.247325] mxc-isi 32e00000.isi: CHNL_ROI_0_ALPHA[0x40]: 00
[ 38.253351] mxc-isi 32e00000.isi: CHNL_ROI_0_ULC[0x44]: 00
[ 38.259378] mxc-isi 32e00000.isi: CHNL_ROI_0_LRC[0x48]: 00
[ 38.265412] mxc-isi 32e00000.isi: CHNL_ROI_1_ALPHA[0x4c]: 00
[ 38.271440] mxc-isi 32e00000.isi: CHNL_ROI_1_ULC[0x50]: 00
[ 38.277465] mxc-isi 32e00000.isi: CHNL_ROI_1_LRC[0x54]: 00
[ 38.283491] mxc-isi 32e00000.isi: CHNL_ROI_2_ALPHA[0x58]: 00
[ 38.289514] mxc-isi 32e00000.isi: CHNL_ROI_2_ULC[0x5c]: 00
[ 38.295541] mxc-isi 32e00000.isi: CHNL_ROI_2_LRC[0x60]: 00
[ 38.301587] mxc-isi 32e00000.isi: CHNL_ROI_3_ALPHA[0x64]: 00
[ 38.307627] mxc-isi 32e00000.isi: CHNL_ROI_3_ULC[0x68]: 00
[ 38.313655] mxc-isi 32e00000.isi: CHNL_ROI_3_LRC[0x6c]: 00
[ 38.319683] mxc-isi 32e00000.isi: CHNL_OUT_BUF1_ADDR_Y[0x70]: 84500000
[ 38.326251] mxc-isi 32e00000.isi: CHNL_OUT_BUF1_ADDR_U[0x74]: 00
[ 38.332288] mxc-isi 32e00000.isi: CHNL_OUT_BUF1_ADDR_V[0x78]: 00
[ 38.338323] mxc-isi 32e00000.isi: CHNL_OUT_BUF_PITCH[0x7c]: 3c0
[ 38.344437] mxc-isi 32e00000.isi: CHNL_IN_BUF_ADDR[0x80]: 00
[ 38.350482] mxc-isi 32e00000.isi: CHNL_IN_BUF_PITCH[0x84]: 00
[ 38.356517] mxc-isi 32e00000.isi: CHNL_MEM_RD_CTRL[0x88]: 00
[ 38.362569] mxc-isi 32e00000.isi: CHNL_OUT_BUF2_ADDR_Y[0x8c]: 84100000
[ 38.369122] mxc-isi 32e00000.isi: CHNL_OUT_BUF2_ADDR_U[0x90]: 00
[ 38.375149] mxc-isi 32e00000.isi: CHNL_OUT_BUF2_ADDR_V[0x94]: 00
[ 38.381177] mxc-isi 32e00000.isi: CHNL_SCL_IMG_CFG[0x98]: 1e00280
[ 38.387638] mxc-isi 32e00000.isi: CHNL_FLOW_CTRL[0x9c]: 00
dmesg logs showing camera driver linking to mipi and isi
[ 8.149343] mx8-img-md: created link [mxc_isi.0] => [mxc_isi.0.capture]
[ 8.157345] mx8-img-md: created link [mxc-mipi-csi2.0] => [mxc_isi.0]
[ 8.181549] mx8-img-md: created link [test_cameras 0-0030] => [mxc-mipi-csi2.0]
We would appreciate any help or suggestion to resolve this issue.
Thanks,
Tareesh