tonny wong

i.MX 6Quad ov5640 csi driver problem

Discussion created by tonny wong on Jun 26, 2013
Latest reply on Jul 9, 2014 by Thomas Yang
Branched to a new discussion

Hi, I wired OV5640 camera to the CSI0 interface of the i.MX 6Quad Sabrelite board, the os is android 4.0.4,kernel is 3.0.15.

After I ran the camera application, it displayed black screen and  got some error like below:

 

/*******************************************************************/

ERROR: v4l2 capture: mxc_v4l_dqueue timeout enc_counter 0

ERROR: v4l2 capture: VIDIOC_QBUF: buffer already queued

ERROR: v4l2 capture: mxc_v4l_dqueue timeout enc_counter 0

ERROR: v4l2 capture: VIDIOC_QBUF: buffer already queued

ERROR: v4l2 capture: mxc_v4l_dqueue timeout enc_counter 0

ERROR: v4l2 capture: VIDIOC_QBUF: buffer already queued

ERROR: v4l2 capture: mxc_v4l_dqueue timeout enc_counter 0

ERROR: v4l2 capture: VIDIOC_QBUF: buffer already queued

ERROR: v4l2 capture: mxc_v4l_dqueue timeout enc_counter 0

ERROR: v4l2 capture: VIDIOC_QBUF: buffer already queued

ERROR: v4l2 capture: mxc_v4l_dqueue timeout enc_counter 0

ERROR: v4l2 capture: VIDIOC_QBUF: buffer already queued

ERROR: v4l2 capture: mxc_v4l_dqueue timeout enc_counter 0

/*******************************************************************/

 

 

The I2C communication is ok, because the ov5640 driver could read the id of the ov5640 chip:

/*******************************************************************/

<<-OV5640-DEBUG->>[1531]ov5640 Model ID 0x5640, Revision 0xb0

/*******************************************************************/



I used oscilloscope to detect the signals of hardware, and it seemed no problem:

1)the MCLK  pin outputs 24M waveform

2)the HSYNC, VSYNC output square wave

3) CSI0_DAT12~CSI0_DAT19 output waveform




the file for ov5640 driver is drivers/media/video/mxc/capture/ov5640.c, i only made some change in probe() function for porting:


 

static int ov5640_probe(struct i2c_client *client,

 

const struct i2c_device_id *id)

{

...

 

ov5640_data.mclk = plat_data->mclk;                                          //24M

 

ov5640_data.csi = plat_data->csi; //csi0

ov5640_data.io_init = plat_data->io_init;                                       //see board-mx6q_sabrelite.c         

ov5640_data.i2c_client = client;

ov5640_data.pix.pixelformat = V4L2_PIX_FMT_YUYV;                  //choose output format

ov5640_data.pix.width = 1280;//640;                                            //set the width 1280

ov5640_data.pix.height = 760;//480;                                             //set the height 760

ov5640_data.streamcap.capability = V4L2_MODE_HIGHQUALITY |

   V4L2_CAP_TIMEPERFRAME;

ov5640_data.streamcap.capturemode = 4;//0;                              //set mode ov5640_mode_720P_1280_720

 

...

}

 

 

the io_init refers to the function mx6q_csi0_io_ini of board-mx6q_sabrelite.c:

 

static void mx6q_csi0_io_init(void)

 

{

...

 

gpio_request(MX6Q_SABRELITE_CAM2_RST, "cam2-reset");

gpio_direction_output(MX6Q_SABRELITE_CAM2_RST, 0);

gpio_request(MX6Q_SABRELITE_CAM2_PWN, "cam2-pwdn");

gpio_direction_output(MX6Q_SABRELITE_CAM2_PWN, 1);

msleep(5);

gpio_set_value(MX6Q_SABRELITE_CAM2_PWN, 0);

msleep(1);

gpio_set_value(MX6Q_SABRELITE_CAM2_RST, 1);

}

 

 


can anyone know how to fix this problem ?




 

Outcomes