Other Parts Discussed in Thread: DM3730
Hi, i am trying to implement camera driver to dm3730 on beagleboard, i have FPGA connected to camera interface and i sumulate PCLK, HS, VS and DATA signals. i wrote my driver as follows:
/*
* drivers/media/video/mt9t111.c
*
* mt9t111 sensor driver
*
* Copyright (C) 2009 Leopard Imaging
*
* This file is licensed under the terms of the GNU General Public License
* version 2. This program is licensed "as is" without any warranty of any
* kind, whether express or implied.
*/
#include <linux/init.h>
#include <linux/mm.h>
#include <linux/delay.h>
#include <media/v4l2-int-device.h>
#include <linux/platform_device.h>
#include <../drivers/media/video/omap34xxcam.h>
#include <../drivers/media/video/isp/ispreg.h>
#define MODULE_NAME "camera"
#define WIDTH 640
#define HEIGHT 480
#define FPS 30
#define PCLK 40000000
#define PCLK_MIN 6000000
#define PCLK_MAX 60000000
#define RAWCAM_BIGGEST_FRAME_BYTE_SIZE PAGE_ALIGN(2048 * 1536 * 4)
struct rawcam_platform_data {
char *master;
int (*power_set)(struct v4l2_int_device *s, enum v4l2_power on);
int (*ifparm)(struct v4l2_ifparm *p);
int (*priv_data_set)(void *);
/* Interface control params */
bool clk_polarity;
bool hs_polarity;
bool vs_polarity;
};
struct rawcam_sensor {
const struct rawcam_platform_data *pdata;
struct v4l2_int_device *v4l2_int_device;
struct v4l2_pix_format pix;
struct v4l2_fract timeperframe;
};
static struct isp_interface_config rawcam_if_config = {
.ccdc_par_ser = ISP_PARLL,
.dataline_shift = 0x0,
.hsvs_syncdetect = ISPCTRL_SYNC_DETECT_VSRISE,
.strobe = 0x0,
.prestrobe = 0x0,
.shutter = 0x0,
.wenlog = ISPCCDC_CFG_WENLOG,
.wait_hs_vs = 2,
.u.par.par_bridge = 0x1,
.u.par.par_clk_pol = 0x1,
};
static struct v4l2_ifparm rawcam_ifparm_s = { .if_type = V4L2_IF_TYPE_RAW, .u = { .raw = { .frame_start_on_rising_vs = 1,
.bt_sync_correct = 0,
.swap = 0,
.latch_clk_inv = 0,
.nobt_hs_inv = 0, /* active high */
.nobt_vs_inv = 0, /* active high */
.clock_min = PCLK_MIN,
.clock_max = PCLK_MAX, }, }, };
static struct omap34xxcam_hw_config rawcam_hwc = { .dev_index = 0,
.dev_minor = 0,
.dev_type = OMAP34XXCAM_SLAVE_SENSOR,
.u.sensor.sensor_isp = 1,
.u.sensor.capture_mem = RAWCAM_BIGGEST_FRAME_BYTE_SIZE * 2,
.u.sensor.ival_default = { 1, FPS }, };
static int rawcam_ifparm(struct v4l2_ifparm *p) {
if (p == NULL)
return -EINVAL;
*p = rawcam_ifparm_s;
return 0;
}
static int rawcam_set_prv_data(void *priv) {
struct omap34xxcam_hw_config *hwc = priv;
if (priv == NULL)
return -EINVAL;
hwc->u.sensor = rawcam_hwc.u.sensor;
hwc->dev_index = rawcam_hwc.dev_index;
hwc->dev_minor = rawcam_hwc.dev_minor;
hwc->dev_type = rawcam_hwc.dev_type;
return 0;
}
static int rawcam_power_set(struct v4l2_int_device *s, enum v4l2_power power) {
struct omap34xxcam_videodev *vdev = s->u.slave->master->priv;
switch (power) {
case V4L2_POWER_OFF:
case V4L2_POWER_STANDBY:
break;
case V4L2_POWER_ON:
isp_configure_interface(vdev->cam->isp, &rawcam_if_config);
break;
default:
return -ENODEV;
break;
}
return 0;
}
struct rawcam_platform_data rawcam_pdata = {
.master = "omap34xxcam",
.power_set = rawcam_power_set,
.priv_data_set = rawcam_set_prv_data,
.ifparm = rawcam_ifparm,
/* Some interface dependent params */
.clk_polarity = 0, /* data clocked out on falling edge */
.hs_polarity = 1, /* 0 - Active low, 1- Active high */
.vs_polarity = 1, /* 0 - Active low, 1- Active high */
};
static struct rawcam_sensor rawcam;
const static struct v4l2_fmtdesc rawcam_format = { .description = "YUV 422 ", .pixelformat = V4L2_PIX_FMT_YUYV, };
const struct v4l2_fract rawcam_frameinterval = { .numerator = 1, .denominator = FPS };
static int ioctl_enum_framesizes(struct v4l2_int_device *s, struct v4l2_frmsizeenum *frms) {
if (frms->pixel_format != rawcam_format.pixelformat || frms->index > 0) {
return -EINVAL;
} else {
frms->type = V4L2_FRMSIZE_TYPE_DISCRETE;
frms->discrete.width = WIDTH;
frms->discrete.height = HEIGHT;
}
return 0;
}
static int ioctl_enum_frameintervals(struct v4l2_int_device *s, struct v4l2_frmivalenum *frmi) {
if (frmi->pixel_format != rawcam_format.pixelformat || frmi->index > 0) {
return -EINVAL;
} else {
frmi->type = V4L2_FRMSIZE_TYPE_DISCRETE;
frmi->discrete.numerator = rawcam_frameinterval.numerator;
frmi->discrete.denominator = rawcam_frameinterval.denominator;
}
return 0;
}
static int ioctl_init(struct v4l2_int_device *s) {
return 0;
}
static int ioctl_dev_exit(struct v4l2_int_device *s) {
return 0;
}
static int ioctl_dev_init(struct v4l2_int_device *s) {
return 0;
}
static int ioctl_s_power(struct v4l2_int_device *s, enum v4l2_power on) {
return 0;
}
static int ioctl_g_priv(struct v4l2_int_device *s, void *p) {
struct rawcam_sensor *sensor = s->priv;
return sensor->pdata->priv_data_set(p);
}
static int ioctl_s_parm(struct v4l2_int_device *s, struct v4l2_streamparm *a) {
return 0;
}
static int ioctl_g_parm(struct v4l2_int_device *s, struct v4l2_streamparm *a) {
struct rawcam_sensor *sensor = s->priv;
struct v4l2_captureparm *cparm = &a->parm.capture;
if (a->type != V4L2_BUF_TYPE_VIDEO_CAPTURE)
return -EINVAL;
memset(a, 0, sizeof(*a));
a->type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
cparm->capability = V4L2_CAP_TIMEPERFRAME;
cparm->timeperframe = sensor->timeperframe;
return 0;
}
static int ioctl_g_fmt_cap(struct v4l2_int_device *s, struct v4l2_format *f) {
struct rawcam_sensor *sensor = s->priv;
f->fmt.pix = sensor->pix;
return 0;
}
static int ioctl_try_fmt_cap(struct v4l2_int_device *s, struct v4l2_format *f) {
struct v4l2_pix_format *pix = &f->fmt.pix;
struct rawcam_sensor *sensor = s->priv;
struct v4l2_pix_format *pix2 = &sensor->pix;
pix->width = WIDTH;
pix->height = HEIGHT;
pix->pixelformat = V4L2_PIX_FMT_YUYV;
pix->bytesperline = pix->width * 2;
pix->colorspace = V4L2_COLORSPACE_JPEG;
pix->field = V4L2_FIELD_NONE;
pix->sizeimage = pix->bytesperline * pix->height;
pix->priv = 0;
*pix2 = *pix;
return 0;
}
static int ioctl_s_fmt_cap(struct v4l2_int_device *s, struct v4l2_format *f) {
struct rawcam_sensor *sensor = s->priv;
struct v4l2_pix_format *pix = &f->fmt.pix;
int rval;
rval = ioctl_try_fmt_cap(s, f);
if (!rval)
sensor->pix = *pix;
return 0;
}
static int ioctl_enum_fmt_cap(struct v4l2_int_device *s, struct v4l2_fmtdesc *fmt) {
int index = fmt->index;
enum v4l2_buf_type type = fmt->type;
memset(fmt, 0, sizeof(*fmt));
fmt->index = index;
fmt->type = type;
switch (fmt->type) {
case V4L2_BUF_TYPE_VIDEO_CAPTURE:
if (index > 0)
return -EINVAL;
break;
default:
return -EINVAL;
}
fmt->flags = 0;
strlcpy(fmt->description, rawcam_format.description, sizeof(fmt->description));
fmt->pixelformat = rawcam_format.pixelformat;
return 0;
}
static int ioctl_s_ctrl(struct v4l2_int_device *s, struct v4l2_control *vc) {
return 0;
}
static int ioctl_g_ctrl(struct v4l2_int_device *s, struct v4l2_control *vc) {
return 0;
}
static int ioctl_queryctrl(struct v4l2_int_device *s, struct v4l2_queryctrl *qc) {
return 0;
}
static int ioctl_s_routing(struct v4l2_int_device *s, struct v4l2_routing *route) {
return 0;
}
static int ioctl_g_ifparm(struct v4l2_int_device *s, struct v4l2_ifparm *p) {
struct rawcam_sensor *sensor = s->priv;
int rval;
if (p == NULL)
return -EINVAL;
if (NULL == sensor->pdata->ifparm)
return -EINVAL;
rval = sensor->pdata->ifparm(p);
p->u.ycbcr.clock_curr = PCLK;
return 0;
}
static struct v4l2_int_ioctl_desc rawcam_ioctl_desc[] = { { .num = vidioc_int_enum_framesizes_num, .func = (v4l2_int_ioctl_func *) ioctl_enum_framesizes },
{ .num = vidioc_int_enum_frameintervals_num, .func = (v4l2_int_ioctl_func *) ioctl_enum_frameintervals },
{ .num = vidioc_int_dev_init_num, .func = (v4l2_int_ioctl_func *) ioctl_dev_init },
{ .num = vidioc_int_dev_exit_num, .func = (v4l2_int_ioctl_func *) ioctl_dev_exit },
{ .num = vidioc_int_s_power_num, .func = (v4l2_int_ioctl_func *) ioctl_s_power },
{ .num = vidioc_int_g_priv_num, .func = (v4l2_int_ioctl_func *) ioctl_g_priv },
{ .num = vidioc_int_g_ifparm_num, .func = (v4l2_int_ioctl_func *) ioctl_g_ifparm },
{ .num = vidioc_int_init_num, .func = (v4l2_int_ioctl_func *) ioctl_init },
{ .num = vidioc_int_enum_fmt_cap_num, .func = (v4l2_int_ioctl_func *) ioctl_enum_fmt_cap },
{ .num = vidioc_int_try_fmt_cap_num, .func = (v4l2_int_ioctl_func *) ioctl_try_fmt_cap },
{ .num = vidioc_int_g_fmt_cap_num, .func = (v4l2_int_ioctl_func *) ioctl_g_fmt_cap },
{ .num = vidioc_int_s_fmt_cap_num, .func = (v4l2_int_ioctl_func *) ioctl_s_fmt_cap },
{ .num = vidioc_int_g_parm_num, .func = (v4l2_int_ioctl_func *) ioctl_g_parm },
{ .num = vidioc_int_s_parm_num, .func = (v4l2_int_ioctl_func *) ioctl_s_parm },
{ .num = vidioc_int_queryctrl_num, .func = (v4l2_int_ioctl_func *) ioctl_queryctrl },
{ .num = vidioc_int_g_ctrl_num, .func = (v4l2_int_ioctl_func *) ioctl_g_ctrl },
{ .num = vidioc_int_s_ctrl_num, .func = (v4l2_int_ioctl_func *) ioctl_s_ctrl },
{ .num = vidioc_int_s_video_routing_num, .func = (v4l2_int_ioctl_func *) ioctl_s_routing }, };
static struct v4l2_int_slave rawcam_slave = { .ioctls = rawcam_ioctl_desc, .num_ioctls = ARRAY_SIZE(rawcam_ioctl_desc), };
static struct v4l2_int_device rawcam_int_device = { .module = THIS_MODULE, .name = "rawcam", .priv = &rawcam, .type = v4l2_int_type_slave, .u = { .slave =
&rawcam_slave, }, };
static int __init rawcam_init(void) {
struct rawcam_sensor *sensor = &rawcam;
int err = 0;
sensor->pdata = &rawcam_pdata;
sensor->v4l2_int_device = &rawcam_int_device;
sensor->pix.width = 640;
sensor->pix.height = 480;
sensor->pix.pixelformat = V4L2_PIX_FMT_YUYV;
err = v4l2_int_device_register(sensor->v4l2_int_device);
printk(KERN_INFO MODULE_NAME ": driver registration complete\n");
return err;
}
module_init(rawcam_init);
static void __exit rawcam_cleanup(void)
{ struct rawcam_sensor *sensor = &rawcam;
sensor->v4l2_int_device = &rawcam_int_device;
v4l2_int_device_unregister(sensor->v4l2_int_device);
}
module_exit(rawcam_cleanup);
MODULE_LICENSE("GPL");
MODULE_DESCRIPTION("raw camera sensor driver");
when i insert module everything is ok, there is new video0 device in dev. When i try to test it, hangs on
while (count-- > 0) {
for (;;) {
fd_set fds;
struct timeval tv;
int r;
FD_ZERO(&fds);
FD_SET(fd, &fds);
/* Timeout. */
tv.tv_sec = 2;
tv.tv_usec = 0;
r = select(fd + 1, &fds, NULL, NULL, &tv);
if (-1 == r) {
if (EINTR == errno)
continue;
errno_exit("select");
}
if (0 == r) {
fprintf(stderr, "select timeout\n");
exit(EXIT_FAILURE);
}
if (read_frame())
break;
/* EAGAIN - continue select loop. */
}
it gives me select timeout :( when i try to skip select part, it hangs on DQBUF ioctl, when i start v4l2-test it gives me:
CUnit - A unit testing framework for C - Version 2.1-2
http://cunit.sourceforge.net/
Suite: VIDIOC_QUERYCAP
Test: VIDIOC_QUERYCAP ...passed
Test: VIDIOC_CROPCAP ...passed
Test: VIDIOC_CROPCAP with different inputs ...passed
Test: VIDIOC_G_SLICED_VBI_CAP ...passed
Test: VIDIOC_G_SLICED_VBI_CAP with invalid types ...passed
Suite: VIDIOC_ENUM* ioctl calls
Test: VIDIOC_ENUMAUDIO ...passed
Test: VIDIOC_ENUMAUDIO, index=S32_MAX ...passed
Test: VIDIOC_ENUMAUDIO, index=S32_MAX+1 ...passed
Test: VIDIOC_ENUMAUDIO, index=U32_MAX ...passed
Test: VIDIOC_ENUMAUDOUT ...passed
Test: VIDIOC_ENUMAUDOUT, index=S32_MAX ...passed
Test: VIDIOC_ENUMAUDOUT, index=S32_MAX+1 ...passed
Test: VIDIOC_ENUMAUDOUT, index=U32_MAX ...passed
Test: VIDIOC_ENUM_FMT ...passed
Test: VIDIOC_ENUM_FMT, index=S32_MAX ...passed
Test: VIDIOC_ENUM_FMT, index=S32_MAX+1 ...FAILED
1. test_VIDIOC_ENUM_FMT.c:167 - CU_ASSERT_EQUAL(ret_enum,-1)
2. test_VIDIOC_ENUM_FMT.c:174 - CU_ASSERT_EQUAL(memcmp(&format, &format2, sizeof(format)),0)
Test: VIDIOC_ENUM_FMT, index=U32_MAX ...FAILED
1. test_VIDIOC_ENUM_FMT.c:193 - CU_ASSERT_EQUAL(ret_enum,-1)
2. test_VIDIOC_ENUM_FMT.c:200 - CU_ASSERT_EQUAL(memcmp(&format, &format2, sizeof(format)),0)
Test: VIDIOC_ENUM_FMT, invalid type ...passed
Test: VIDIOC_ENUMINPUT ...passed
Test: VIDIOC_ENUMINPUT, index=S32_MAX ...passed
Test: VIDIOC_ENUMINPUT, index=S32_MAX+1 ...passed
Test: VIDIOC_ENUMINPUT, index=U32_MAX ...passed
Test: VIDIOC_ENUMOUTPUT ...passed
Test: VIDIOC_ENUMOUTPUT, index=S32_MAX ...passed
Test: VIDIOC_ENUMOUTPUT, index=S32_MAX+1 ...passed
Test: VIDIOC_ENUMOUTPUT, index=U32_MAX ...passed
Test: VIDIOC_ENUMSTD ...passed
Test: VIDIOC_ENUMSTD, index=S32_MAX ...passed
Test: VIDIOC_ENUMSTD, index=S32_MAX+1 ...passed
Test: VIDIOC_ENUMSTD, index=U32_MAX ...passed
Test: VIDIOC_QUERYCTRL ...FAILED
1. test_VIDIOC_QUERYCTRL.c:102 - 0 < strlen( (char*)queryctrl.name )
2. test_VIDIOC_QUERYCTRL.c:105 - valid_control_type(queryctrl.type)
3. test_VIDIOC_QUERYCTRL.c:102 - 0 < strlen( (char*)queryctrl.name )
4. test_VIDIOC_QUERYCTRL.c:105 - valid_control_type(queryctrl.type)
5. test_VIDIOC_QUERYCTRL.c:102 - 0 < strlen( (char*)queryctrl.name )
6. test_VIDIOC_QUERYCTRL.c:105 - valid_control_type(queryctrl.type)
7. test_VIDIOC_QUERYCTRL.c:102 - 0 < strlen( (char*)queryctrl.name )
8. test_VIDIOC_QUERYCTRL.c:105 - valid_control_type(queryctrl.type)
9. test_VIDIOC_QUERYCTRL.c:102 - 0 < strlen( (char*)queryctrl.name )
10. test_VIDIOC_QUERYCTRL.c:105 - valid_control_type(queryctrl.type)
11. test_VIDIOC_QUERYCTRL.c:102 - 0 < strlen( (char*)queryctrl.name )
12. test_VIDIOC_QUERYCTRL.c:105 - valid_control_type(queryctrl.type)
13. test_VIDIOC_QUERYCTRL.c:102 - 0 < strlen( (char*)queryctrl.name )
14. test_VIDIOC_QUERYCTRL.c:105 - valid_control_type(queryctrl.type)
15. test_VIDIOC_QUERYCTRL.c:102 - 0 < strlen( (char*)queryctrl.name )
16. test_VIDIOC_QUERYCTRL.c:105 - valid_control_type(queryctrl.type)
17. test_VIDIOC_QUERYCTRL.c:102 - 0 < strlen( (char*)queryctrl.name )
18. test_VIDIOC_QUERYCTRL.c:105 - valid_control_type(queryctrl.type)
19. test_VIDIOC_QUERYCTRL.c:102 - 0 < strlen( (char*)queryctrl.name )
20. test_VIDIOC_QUERYCTRL.c:105 - valid_control_type(queryctrl.type)
21. test_VIDIOC_QUERYCTRL.c:102 - 0 < strlen( (char*)queryctrl.name )
22. test_VIDIOC_QUERYCTRL.c:105 - valid_control_type(queryctrl.type)
23. test_VIDIOC_QUERYCTRL.c:102 - 0 < strlen( (char*)queryctrl.name )
24. test_VIDIOC_QUERYCTRL.c:105 - valid_control_type(queryctrl.type)
25. test_VIDIOC_QUERYCTRL.c:102 - 0 < strlen( (char*)queryctrl.name )
26. test_VIDIOC_QUERYCTRL.c:105 - valid_control_type(queryctrl.type)
27. test_VIDIOC_QUERYCTRL.c:102 - 0 < strlen( (char*)queryctrl.name )
28. test_VIDIOC_QUERYCTRL.c:105 - valid_control_type(queryctrl.type)
29. test_VIDIOC_QUERYCTRL.c:102 - 0 < strlen( (char*)queryctrl.name )
30. test_VIDIOC_QUERYCTRL.c:105 - valid_control_type(queryctrl.type)
31. test_VIDIOC_QUERYCTRL.c:102 - 0 < strlen( (char*)queryctrl.name )
32. test_VIDIOC_QUERYCTRL.c:105 - valid_control_type(queryctrl.type)
33. test_VIDIOC_QUERYCTRL.c:102 - 0 < strlen( (char*)queryctrl.name )
34. test_VIDIOC_QUERYCTRL.c:105 - valid_control_type(queryctrl.type)
35. test_VIDIOC_QUERYCTRL.c:102 - 0 < strlen( (char*)queryctrl.name )
36. test_VIDIOC_QUERYCTRL.c:105 - valid_control_type(queryctrl.type)
37. test_VIDIOC_QUERYCTRL.c:102 - 0 < strlen( (char*)queryctrl.name )
38. test_VIDIOC_QUERYCTRL.c:105 - valid_control_type(queryctrl.type)
39. test_VIDIOC_QUERYCTRL.c:102 - 0 < strlen( (char*)queryctrl.name )
40. test_VIDIOC_QUERYCTRL.c:105 - valid_control_type(queryctrl.type)
41. test_VIDIOC_QUERYCTRL.c:102 - 0 < strlen( (char*)queryctrl.name )
42. test_VIDIOC_QUERYCTRL.c:105 - valid_control_type(queryctrl.type)
43. test_VIDIOC_QUERYCTRL.c:102 - 0 < strlen( (char*)queryctrl.name )
44. test_VIDIOC_QUERYCTRL.c:105 - valid_control_type(queryctrl.type)
45. test_VIDIOC_QUERYCTRL.c:102 - 0 < strlen( (char*)queryctrl.name )
46. test_VIDIOC_QUERYCTRL.c:105 - valid_control_type(queryctrl.type)
47. test_VIDIOC_QUERYCTRL.c:102 - 0 < strlen( (char*)queryctrl.name )
48. test_VIDIOC_QUERYCTRL.c:105 - valid_control_type(queryctrl.type)
49. test_VIDIOC_QUERYCTRL.c:102 - 0 < strlen( (char*)queryctrl.name )
50. test_VIDIOC_QUERYCTRL.c:105 - valid_control_type(queryctrl.type)
51. test_VIDIOC_QUERYCTRL.c:102 - 0 < strlen( (char*)queryctrl.name )
52. test_VIDIOC_QUERYCTRL.c:105 - valid_control_type(queryctrl.type)
53. test_VIDIOC_QUERYCTRL.c:102 - 0 < strlen( (char*)queryctrl.name )
54. test_VIDIOC_QUERYCTRL.c:105 - valid_control_type(queryctrl.type)
55. test_VIDIOC_QUERYCTRL.c:102 - 0 < strlen( (char*)queryctrl.name )
56. test_VIDIOC_QUERYCTRL.c:105 - valid_control_type(queryctrl.type)
57. test_VIDIOC_QUERYCTRL.c:102 - 0 < strlen( (char*)queryctrl.name )
58. test_VIDIOC_QUERYCTRL.c:105 - valid_control_type(queryctrl.type)
59. test_VIDIOC_QUERYCTRL.c:102 - 0 < strlen( (char*)queryctrl.name )
60. test_VIDIOC_QUERYCTRL.c:105 - valid_control_type(queryctrl.type)
61. test_VIDIOC_QUERYCTRL.c:102 - 0 < strlen( (char*)queryctrl.name )
62. test_VIDIOC_QUERYCTRL.c:105 - valid_control_type(queryctrl.type)
63. test_VIDIOC_QUERYCTRL.c:102 - 0 < strlen( (char*)queryctrl.name )
64. test_VIDIOC_QUERYCTRL.c:105 - valid_control_type(queryctrl.type)
65. test_VIDIOC_QUERYCTRL.c:102 - 0 < strlen( (char*)queryctrl.name )
66. test_VIDIOC_QUERYCTRL.c:105 - valid_control_type(queryctrl.type)
67. test_VIDIOC_QUERYCTRL.c:102 - 0 < strlen( (char*)queryctrl.name )
68. test_VIDIOC_QUERYCTRL.c:105 - valid_control_type(queryctrl.type)
69. test_VIDIOC_QUERYCTRL.c:102 - 0 < strlen( (char*)queryctrl.name )
70. test_VIDIOC_QUERYCTRL.c:105 - valid_control_type(queryctrl.type)
71. test_VIDIOC_QUERYCTRL.c:102 - 0 < strlen( (char*)queryctrl.name )
72. test_VIDIOC_QUERYCTRL.c:105 - valid_control_type(queryctrl.type)
73. test_VIDIOC_QUERYCTRL.c:102 - 0 < strlen( (char*)queryctrl.name )
74. test_VIDIOC_QUERYCTRL.c:105 - valid_control_type(queryctrl.type)
75. test_VIDIOC_QUERYCTRL.c:102 - 0 < strlen( (char*)queryctrl.name )
76. test_VIDIOC_QUERYCTRL.c:105 - valid_control_type(queryctrl.type)
77. test_VIDIOC_QUERYCTRL.c:102 - 0 < strlen( (char*)queryctrl.name )
78. test_VIDIOC_QUERYCTRL.c:105 - valid_control_type(queryctrl.type)
Test: VIDIOC_QUERYCTRL, id=V4L2_CID_BASE-1 ...FAILED
1. test_VIDIOC_QUERYCTRL.c:223 - CU_ASSERT_EQUAL(ret_query,-1)
2. test_VIDIOC_QUERYCTRL.c:228 - CU_ASSERT_EQUAL(memcmp(&queryctrl, &queryctrl2, sizeof(queryctrl)),0)
Test: VIDIOC_QUERYCTRL, id=V4L2_CID_LASTP1 ...FAILED
1. test_VIDIOC_QUERYCTRL.c:245 - CU_ASSERT_EQUAL(ret_query,-1)
2. test_VIDIOC_QUERYCTRL.c:250 - CU_ASSERT_EQUAL(memcmp(&queryctrl, &queryctrl2, sizeof(queryctrl)),0)
Test: VIDIOC_QUERYCTRL, id=V4L2_CID_LASTP1+1 ...FAILED
1. test_VIDIOC_QUERYCTRL.c:267 - CU_ASSERT_EQUAL(ret_query,-1)
2. test_VIDIOC_QUERYCTRL.c:272 - CU_ASSERT_EQUAL(memcmp(&queryctrl, &queryctrl2, sizeof(queryctrl)),0)
Test: VIDIOC_QUERYCTRL with V4L2_CTRL_FLAG_NEXT_CTRL ...FAILED
1. test_VIDIOC_QUERYCTRL.c:353 - queryctrl.id < V4L2_CID_LASTP1
2. test_VIDIOC_QUERYCTRL.c:394 - CU_ASSERT_EQUAL(memcmp(count_controls1, count_controls2, sizeof(count_controls1)),0)
Test: VIDIOC_QUERYCTRL, enumerate private controls ...
and hangs,
during v4l2-test kernel have oops error:
[ 2084.642791] Restoring csi2 context
[ 2084.642852] Saving csi2 context
[ 2084.648162] camera: driver registration complete
[ 2110.169616] Restoring csi2 context
[ 3767.029937] omap3isp omap3isp: __isp_disable_modules: can't stop ccdc
[ 3767.036437] Unable to handle kernel NULL pointer dereference at virtual address 00000024
[ 3767.061279] pgd = c0004000
[ 3767.063995] [00000024] *pgd=00000000
[ 3767.067596] Internal error: Oops: 17 [#1] PREEMPT
[ 3767.072326] last sysfs file: /sys/devices/virtual/video4linux/video0/index
[ 3767.079223] Modules linked in: camera
[ 3767.082916] CPU: 0 Not tainted (2.6.32 #44)
[ 3767.087493] PC is at isp_buf_init+0x20/0x7c
[ 3767.091674] LR is at isp_buf_init+0x8/0x7c
[ 3767.095794] pc : [<c0370e80>] lr : [<c0370e68>] psr: a0000113
[ 3767.095794] sp : dc0efdb0 ip : c06ed838 fp : c0639730
[ 3767.107330] r10: dea69608 r9 : dea694f4 r8 : dea695bc
[ 3767.112579] r7 : dea69000 r6 : dea69a70 r5 : 00000000 r4 : dea69000
[ 3767.119140] r3 : 00000000 r2 : 00000000 r1 : 00000000 r0 : dea69000
[ 3767.125701] Flags: NzCv IRQs on FIQs on Mode SVC_32 ISA ARM Segment user
[ 3767.132873] Control: 10c5387d Table: 9cd3c019 DAC: 00000015
[ 3767.138641] Process capture (pid: 978, stack limit = 0xdc0ee2f0)
[ 3767.144683] Stack: (0xdc0efdb0 to 0xdc0f0000)
[ 3767.149047] fda0: 00030a8e 00000001 dea69a70 c0371570
[ 3767.157257] fdc0: 00000000 dea69000 c0639730 de614f78 db8dbf00 db5a8f70 00000001 de789f70
[ 3767.165496] fde0: de66bda8 c037383c c0639730 de538800 de614f78 c0381a94 dc11be00 de614f78
[ 3767.173706] fe00: 00000008 dcee6ea0 db5a8f70 c0364d9c 00000000 de614f78 00000008 c00eef84
[ 3767.181915] fe20: 00000000 00000000 00000000 de614f78 00000000 de75ff40 de75ff40 de75ff48
[ 3767.190155] fe40: 000000a0 c00eba08 00000001 00000000 0000000c c006fb88 00000002 dcff4b78
[ 3767.198364] fe60: 00000002 dc0ee000 dc0efee8 c0071800 00000002 dcff4b78 de66bda8 dc0ee000
[ 3767.206573] fe80: 00000002 dc0ee000 dc0efee8 dc0eff68 000000a0 c0071cf8 c003e0c4 dc0dfb84
[ 3767.214813] fea0: 00000009 c008116c dc0effb0 dc0dfae4 dc0effb0 c003e0c4 00000000 dc0effb0
[ 3767.223022] fec0: 00000036 c003e0c4 dc0ee000 40025000 be8deaf4 c0040164 00000001 00000001
[ 3767.231231] fee0: 00000001 de614f78 00000009 00000000 00000000 00000000 00000000 40025000
[ 3767.239471] ff00: be8deaf4 c0364ca4 de614f78 be8deb08 c0445611 c00fb5f4 dcee6ea0 de614f78
[ 3767.247680] ff20: 00000003 c00fbcd4 c0297034 00000000 00000002 dcaf1ea0 dcb77f70 00000002
[ 3767.255889] ff40: 00000000 dcb77f70 dcaf1ea0 0000000c dc0ee000 00000964 0000a068 c00ee320
[ 3767.264129] ff60: 00000000 00000000 00000003 be8deb08 c0445611 de614f78 c003e0c4 dc0ee000
[ 3767.272338] ff80: 40025000 c00fbd50 00000003 00009fb8 00000000 000088cc 00000036 c003e0c4
[ 3767.280548] ffa0: dc0ee000 40025000 be8deaf4 c003df8c fffffe00 c0445611 be8deb08 c0445611
[ 3767.288787] ffc0: 00009fb8 00000000 000088cc 00000036 00000000 00000000 40025000 be8deaf4
[ 3767.296997] ffe0: 00000000 be8dead8 00008a04 400f5aec 60000010 00000003 aaaaaaaa aaaaaaaa
[ 3767.305236] [<c0370e80>] (isp_buf_init+0x20/0x7c) from [<c0371570>] (__isp_disable_modules+0x1f0/0x208)
[ 3767.314666] [<c0371570>] (__isp_disable_modules+0x1f0/0x208) from [<c037383c>] (isp_stop+0x40/0x64)
[ 3767.323760] [<c037383c>] (isp_stop+0x40/0x64) from [<c0381a94>] (omap34xxcam_release+0x34/0xf8)
[ 3767.332519] [<c0381a94>] (omap34xxcam_release+0x34/0xf8) from [<c0364d9c>] (v4l2_release+0x2c/0x3c)
[ 3767.341613] [<c0364d9c>] (v4l2_release+0x2c/0x3c) from [<c00eef84>] (__fput+0x104/0x1f4)
[ 3767.349761] [<c00eef84>] (__fput+0x104/0x1f4) from [<c00eba08>] (filp_close+0x70/0x7c)
[ 3767.357727] [<c00eba08>] (filp_close+0x70/0x7c) from [<c006fb88>] (put_files_struct+0x80/0xd4)
[ 3767.366394] [<c006fb88>] (put_files_struct+0x80/0xd4) from [<c0071800>] (do_exit+0x250/0x6a0)
[ 3767.374969] [<c0071800>] (do_exit+0x250/0x6a0) from [<c0071cf8>] (do_group_exit+0xa8/0xd4)
[ 3767.383270] [<c0071cf8>] (do_group_exit+0xa8/0xd4) from [<c008116c>] (get_signal_to_deliver+0x400/0x458)
[ 3767.392791] [<c008116c>] (get_signal_to_deliver+0x400/0x458) from [<c0040164>] (do_notify_resume+0x74/0x620)
[ 3767.402679] [<c0040164>] (do_notify_resume+0x74/0x620) from [<c003df8c>] (work_pending+0x1c/0x20)
[ 3767.411590] Code: e59020c0 e1a04000 e58033d0 e58033d4 (e5923024)
[ 3767.795532] ---[ end trace 183fb2dea75d41ef ]---
[ 3767.800201] Fixing recursive fault but reboot is needed!
i need capture frames in 8bit YUV mode
any suggestions?