Laurent Pinchart <laurent.pinchart <at> ideasonboard.com> writes: > > Hi Tom, > > On Tuesday 16 July 2013 14:24:59 Tom wrote: > > Laurent Pinchart <laurent.pinchart <at> ideasonboard.com> writes: > > > On Monday 15 July 2013 09:23:19 Tom wrote: > > > > Hello, > > > > > > > > I am working with a gumstix overo board connected with a e-con-systems > > > > camera module using a ov3640 camera sensor. > > > > > > > > Along with the board I got a camera driver > > > > (https://github.com/scottellis/econ-cam-driver) > > > > which can be used with linux kernel 2.6.34, but I want to use the camera > > > > along with the linux kernel 3.5. > > > > > > > > So I tried to implement the driver into the kernel sources by referring > > > > to a existing drivers like /driver/media/video/ov9640.c and > > > > /driver/media/video/mt9v032.c. > > > > > > > > The old driver has an isp implementation integrated and it registers > > > > itself once as a video device. So the application which is going to use > > > > the camera sensor just needs to open the right video device and by > > > > calling ioctl the corresponding functions will be called. > > > > > > > > By going through the linux 3.5 kernel sources I found out that the > > > > omap3-isp registers itself as an video-device and should support > > > > sensors using the v4l2-subdev interface. > > > > > > > > So am I right when I think that I just need to add the ov3640 subdev to > > > > the isp_v4l2_subdevs_group in the board-overo.c file and then just open > > > > thevideo device of the isp to use it via application (ioctl)? > > > > > > > > I read an article which told me that I need to use the > > > > v4l2_subdev_pad_ops to interact from isp with the ov3640 subdev, but it > > > > does not work. I don't know what I am doing wrong. > > > > > > > > Is there already an implemenation of the ov3640 using subdev-api which I > > > > couldn't find or can someone give me a hint what I need to do to get the > > > > sensor with the isp working? > > > > > > As a matter of fact there's one. You can't be blamed for not finding it, > > > as it was stored on my computer. > > > > > > I've rebased the patches on top of the latest linuxtv master branch and > > > pushed the patches to > > > > > > git://linuxtv.org/pinchartl/media.git sensors/ov3640 > > > > > > Two caveats: > > > > > > - The rebased patches have been compile-tested only, I haven't had time to > > > test them on the hardware. One particular point that might break is the > > > use of the clock API as a replacement for the OMAP3 ISP .set_xclk() > > > callback. Any problem that may arise from this shouldn't be too difficult > > > to fix. > > > > > > - The driver doesn't work in all resolutions and formats. This is really > > > work in progress that I haven't had time to finish. The code should be > > > relatively clean, but the lack of support from Omnivision killed the > > > schedule (which I've planned too optimistically I have to confess). > > > > > > Fixes would be very welcome. I'd like to push this driver to mainline at > > > some point, I'd hate to waste the time I've spent on this. > > > > Hello Laurent, > > > > many thanks for the quick reply. > > > > I'm still a beginner, so please excuse that I have to ask you once again > > just to understand the subdev-api and the isp exactly. > > No worries. As long as people do a bit of research and read documentation by > themselves beforehand, I'm happy to answer questions and share knowledge. > > > Is the implementation within the board-overo.c file correct to use the isp > > along with your camera driver? > > > > And would it be enough to just open the isp video device within my > > application or do I need to open the subdev-device, too when calling ioctl? > > You will need to access the subdevs directly to configure the OMAP3 ISP > pipeline before starting the video stream. This task can be performed directly > in a custom application using the media controller and V4L2 subdevs userspace > APIs, or using the media-ctl command line tool > (http://git.ideasonboard.org/media-ctl.git). The topic has been discussed > extensively before and information is available online, both in web pages or > in the linux-media mailing list archives. I don't have exact URLs, so it would > be nice if you could post a couple of pointers in reply to this thread after > searching for information, to help future newcomers. > > Once the pipeline is configured you can then capture video frames from the > OMAP3 ISP output using the V4L2 API on the appropriate video node. > > > Best Regards, Tom > > > > > > My Code Snippet board-overo.c: > > > > #define LM3553_SLAVE_ADDRESS 0x53 > > #define OV3640_I2C_ADDR (0x78 >> 1) > > int omap3evm_ov3640_platform_data; > > int lm3553_platform_data; > > > > static struct i2c_board_info omap3_i2c_boardinfo_ov3640 = { > > I2C_BOARD_INFO("ov3640", OV3640_I2C_ADDR), > > .platform_data = &omap3evm_ov3640_platform_data, > > }; > > > > static struct i2c_board_info omap3_i2c_boardinfo_lm3553 = { > > I2C_BOARD_INFO("lm3553",LM3553_SLAVE_ADDRESS), > > .platform_data = &lm3553_platform_data, > > }; > > > > static struct i2c_board_info mt9v032_i2c_device = { > > I2C_BOARD_INFO("mt9v032", MT9V032_I2C_ADDR), > > .platform_data = &mt9v032_platform_data, > > }; > > > > /*static struct isp_subdev_i2c_board_info mt9v032_subdevs[] = { > > { > > .board_info = &mt9v032_i2c_device, > > .i2c_adapter_id = MT9V032_I2C_BUS_NUM, > > }, > > { NULL, 0, }, > > };*/ > > > > static struct isp_subdev_i2c_board_info overo_subdevs[] = { > > /*{ > > .board_info = &mt9v032_i2c_device, > > .i2c_adapter_id = MT9V032_I2C_BUS_NUM, > > },*/ > > { > > .board_info = &omap3_i2c_boardinfo_ov3640, > > .i2c_adapter_id = MT9V032_I2C_BUS_NUM, > > }, > > { NULL, 0, }, > > }; > > > > static struct isp_v4l2_subdevs_group overo_camera_subdevs[] = { > > { > > //.subdevs = mt9v032_subdevs, > > .subdevs = overo_subdevs, > > .interface = ISP_INTERFACE_PARALLEL, > > .bus = { > > .parallel = { > > .data_lane_shift = 0, > > .clk_pol = 0, > > .bridge = ISPCTRL_PAR_BRIDGE_DISABLE, > > } > > }, > > }, > > { NULL, 0, }, > > }; > > > > static struct isp_platform_data overo_isp_platform_data = { > > I had forgotten to update the ISP platform data in the patches available in my > sensors/ov3640 branch. I've pushed the (still untested) updated code to my git > tree. Only the "board-omap3beagle: Add support for the OV3640 sensor module" > patch has been modified. You need to add > > .xclks = { > [0] = { > .dev_id = "3-003c", > }, > }, > > here. 3 should be the I2C bus number your sensor is connected to, and 003c > should be the sensor I2C address. Please fix that if I got the bus number > wrong. > > > .subdevs = overo_camera_subdevs, > > }; > > > static int __init overo_camera_init(void) > > { > > return omap3_init_camera(&overo_isp_platform_data); > > } > Hello Laurent, many thanks for your advise. Due to illness I was unable to continue the tests with the ov3640 sensor. You said that at first I need to configure the pipeline for the isp. I tried that, but unfortunately some errors and ambiguity emerged. I tried to manually set the pipeline like this: VS_printf(_T("TOM APPL 1 ##########\n")); if ((cam->fd_v4l2_media = open("/dev/media0", O_RDWR, 0)) < 0) { //if ((cam->fd_v4l2 = open("/dev/video0", O_RDWR, 0)) < 0) printf("TOM APPL OPEN MEDIA0 FAILED ##########\n"); return ERR_ERROR; } VS_printf(_T("TOM APPL 2 ##########\n")); #define ENTITY_COUNT 20 #define MEDIA_ENT_ID_FLAG_NEXT (1 << 31) #define MEDIA_PAD_FL_INPUT (1 << 0) #define MEDIA_PAD_FL_OUTPUT (1 << 1) #define P_CCDC_SOURCE 1 #define P_VIDEO 0 //#define OV3640_FORMAT_DEF V4L2_MBUS_FMT_YUYV8_2X8 #define OV3640_FORMAT_DEF V4L2_PIX_FMT_RGB565 #define OV3640_WIDTH_DEF 640 #define OV3640_HEIGHT_DEF 480 //#define OV3640_WIDTH_DEF 2048 //#define OV3640_HEIGHT_DEF 1536 #define P_CCDC_SINK 0 /* sink pad of ccdc */ struct media_entity_desc entity[ENTITY_COUNT]; int E_VIDEO; int E_OV3640; int E_CCDC; int ret; int entities_count; int index = 0; do { memset(&entity[index], 0, sizeof(struct media_entity_desc)); entity[index].id = index | MEDIA_ENT_ID_FLAG_NEXT; ret = ioctl(cam->fd_v4l2_media, MEDIA_IOC_ENUM_ENTITIES, &entity[index]); if (ret < 0) { if (errno == EINVAL) break; }else { VS_printf(_T("TOM APPL ENTITY NAME: %s ##########\n"),entity[index].name); //printf("TOM APPL ENTITY NAME: %s ##########\n",entity[index].name); if (!strcmp(entity[index].name, "OMAP3 ISP CCDC output")) { E_VIDEO = entity[index].id; } else if (!strcmp(entity[index].name, "ov3640 3-003c")) { E_OV3640 = entity[index].id; } else if (!strcmp(entity[index].name, "OMAP3 ISP CCDC")) { E_CCDC = entity[index].id; } printf("[%x]:%s\n", entity[index].id, entity[index].name); } index++; } while (ret == 0 && index < ENTITY_COUNT); entities_count = index; printf("total number of entities: %x\n", entities_count); VS_printf(_T("TOM APPL 3 ##########\n")); // 6. enable 'ov3640-->ccdc' link struct media_link_desc link; //link = calloc(sizeof(struct media_link),sizeof(UINT8)); //*link = (struct media_link*)calloc(sizeof(struct media_link),sizeof(UINT8)); printf("6. ENABLEing link [ov3640]----------->[ccdc]\n"); memset(&link, 0, sizeof(link)); link.flags |= MEDIA_LNK_FL_ENABLED; link.source.entity = E_OV3640; link.source.index = 0; //nur ein pad link.source.flags = MEDIA_PAD_FL_OUTPUT; link.sink.entity = E_CCDC; link.sink.index = 0; link.sink.flags = MEDIA_PAD_FL_INPUT; ret = ioctl(cam->fd_v4l2_media, MEDIA_IOC_SETUP_LINK, &link); if(ret) { VS_printf(_T("failed to enable link between ov3640 and ccdc\n")); return ERR_ERROR; } else VS_printf(_T("[ov3640]----------->[ccdc]\tENABLED\n")); VS_printf(_T("TOM APPL 4 ##########\n")); // 7. enable 'ccdc->memory' link printf("7. ENABLEing link [ccdc]----------->[video_node]\n"); memset(&link, 0, sizeof(link)); link.flags |= MEDIA_LNK_FL_ENABLED; link.source.entity = E_CCDC; link.source.index = P_CCDC_SOURCE; link.source.flags = MEDIA_PAD_FL_OUTPUT; link.sink.entity = E_VIDEO; link.sink.index = P_VIDEO; link.sink.flags = MEDIA_PAD_FL_INPUT; ret = ioctl(cam->fd_v4l2_media, MEDIA_IOC_SETUP_LINK, &link); if(ret) { VS_printf(_T("failed to enable link between ccdc and video node\n")); return ERR_ERROR; } else VS_printf(_T("[ccdc]----------->[video_node]\t ENABLED\n")); printf("**********************************************\n"); // 14.open capture device if ((cam->fd_v4l2 = open("/dev/video2", O_RDWR | O_NONBLOCK, 0)) <= -1) { VS_printf(_T("failed to open /dev/video2")); return ERR_ERROR; } struct v4l2_input input; /* 15.enumerate inputs supported by capture*/ printf("15.enumerating INPUTS\n"); bzero(&input, sizeof(struct v4l2_input)); input.type = V4L2_INPUT_TYPE_CAMERA; input.index = 0; index = 0; while (1) { ret = ioctl(cam->fd_v4l2, VIDIOC_ENUMINPUT, &input); if(ret != 0) break; printf("[%x].%s\n", index, input.name); bzero(&input, sizeof(struct v4l2_input)); index++; input.index = index; } /* 16.setting CAMERA as input */ printf("16. setting CAMERA as input. . .\n"); bzero(&input, sizeof(struct v4l2_input)); input.type = V4L2_INPUT_TYPE_CAMERA; input.index = 0; if (-1 == ioctl (cam->fd_v4l2, VIDIOC_S_INPUT, &input.index)) { VS_printf(_T("failed to set CAMERA with capture device\n")); //goto cleanup; return ERR_ERROR; } else VS_printf(_T("successfully set CAMERA input\n")); /* 8. set format on pad of mt9p031 */ cam->fd_v4l2_ov3640 = open("/dev/v4l-subdev8", O_RDWR); if(cam->fd_v4l2_ov3640 == -1) { VS_printf(_T("failed to open /dev/v4l-subdev8")); //goto cleanup; return ERR_ERROR; } struct v4l2_subdev_format fmt; VS_printf(_T("8. setting format on pad of mt9p031 entity. . .\n")); memset(&fmt, 0, sizeof(fmt)); fmt.pad = 0; fmt.which = V4L2_SUBDEV_FORMAT_ACTIVE; fmt.format.code = OV3640_FORMAT_DEF; fmt.format.width = OV3640_WIDTH_DEF; fmt.format.height = OV3640_HEIGHT_DEF; fmt.format.field = V4L2_FIELD_NONE; ret = ioctl(cam->fd_v4l2_ov3640, VIDIOC_SUBDEV_S_FMT, &fmt); if(ret) { VS_printf(_T("failed to set format on pad %x\n"), fmt.pad); //goto cleanup; return ERR_ERROR; } else VS_printf(_T("successfully format is set on pad %x\n"), fmt.pad); /* 9. set format on sink-pad of ccdc */ cam->fd_v4l2_isp_ccdc = open("/dev/v4l-subdev2", O_RDWR); if(cam->fd_v4l2_isp_ccdc == -1) { VS_printf(_T("failed to open /dev/v4l-subdev2")); //goto cleanup; return ERR_ERROR; } // set format on sink pad of ccdc VS_printf(_T("12. setting format on sink-pad of ccdc entity. . .\n")); memset(&fmt, 0, sizeof(fmt)); fmt.pad = P_CCDC_SINK; fmt.which = V4L2_SUBDEV_FORMAT_ACTIVE; fmt.format.code = OV3640_FORMAT_DEF; fmt.format.width = OV3640_WIDTH_DEF; fmt.format.height = OV3640_HEIGHT_DEF; fmt.format.field = V4L2_FIELD_NONE; ret = ioctl(cam->fd_v4l2_isp_ccdc, VIDIOC_SUBDEV_S_FMT, &fmt); if(ret) { VS_printf(_T("failed to set format on pad %x\n"), fmt.pad); //goto cleanup; return ERR_ERROR; } else VS_printf(_T("successfully format is set on pad %x\n"), fmt.pad); /* 13. set format on source-pad of ccdc */ printf("13. setting format on OF-pad of ccdc entity. . . \n"); memset(&fmt, 0, sizeof(fmt)); fmt.pad = P_CCDC_SOURCE; fmt.which = V4L2_SUBDEV_FORMAT_ACTIVE; fmt.format.code = OV3640_FORMAT_DEF; fmt.format.width = OV3640_WIDTH_DEF; fmt.format.height = OV3640_HEIGHT_DEF; fmt.format.colorspace = V4L2_COLORSPACE_JPEG; fmt.format.field = V4L2_FIELD_NONE; ret = ioctl(cam->fd_v4l2_isp_ccdc, VIDIOC_SUBDEV_S_FMT, &fmt); if(ret) { VS_printf(_T("failed to set format on pad %x\n"), fmt.pad); //goto cleanup; return ERR_ERROR; } else VS_printf(_T("successfully format is set on pad %x\n"), fmt.pad); struct v4l2_format v4l2_fmt; int capture_pitch; VS_printf(_T("17. setting format V4L2_PIX_FMT_SBGGR16\n")); //CLEAR(v4l2_fmt); v4l2_fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; v4l2_fmt.fmt.pix.width = OV3640_WIDTH_DEF; v4l2_fmt.fmt.pix.height = OV3640_HEIGHT_DEF; //v4l2_fmt.fmt.pix.pixelformat = V4L2_PIX_FMT_SBGGR16; v4l2_fmt.fmt.pix.pixelformat = V4L2_PIX_FMT_RGB565; v4l2_fmt.fmt.pix.field = V4L2_FIELD_NONE; if (-1 == ioctl(cam->fd_v4l2, VIDIOC_S_FMT, &v4l2_fmt)) { VS_printf(_T("failed to set format on captute device \n")); return ERR_ERROR; } else VS_printf(_T("successfully set the format\n")); /* 15.call G_FMT for knowing picth */ if (-1 == ioctl(cam->fd_v4l2, VIDIOC_G_FMT, &v4l2_fmt)) { VS_printf(_T("failed to get format from captute device \n")); return ERR_ERROR; } else { VS_printf(_T("capture_pitch: %x\n"), v4l2_fmt.fmt.pix.bytesperline); capture_pitch = v4l2_fmt.fmt.pix.bytesperline; } /* 18.make sure 3 buffers are supported for streaming */ printf("18. Requesting for 3 buffers\n"); struct v4l2_requestbuffers req; //CLEAR(req); req.count = 3; req.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; req.memory = V4L2_MEMORY_USERPTR; if (-1 == ioctl(cam->fd_v4l2, VIDIOC_REQBUFS, &req)) { VS_printf(_T("call to VIDIOC_REQBUFS failed\n")); return ERR_ERROR; } if (req.count != 3) { VS_printf(_T("3 buffers not supported by capture device")); return ERR_ERROR; } else VS_printf(_T("3 buffers are supported for streaming\n")); VS_printf(_T("TOM APPL 900 ##########\n")); /* 20.start streaming */ enum v4l2_buf_type type; type = V4L2_BUF_TYPE_VIDEO_CAPTURE; if (-1 == ioctl(cam->fd_v4l2, VIDIOC_STREAMON, &type)) { VS_printf(_T("failed to start streaming on capture device")); return ERR_ERROR; } else VS_printf(_T("streaming started successfully\n")); /* ENDE */ VS_printf(_T("TOM APPL 1000 ##########\n")); my output loglooks like this: TOM APPL 1 ########## TOM APPL 2 ########## TOM APPL ENTITY NAME: OMAP3 ISP CCP2 ########## TOM APPL ENTITY NAME: OMAP3 ISP CCP2 input ########## TOM APPL ENTITY NAME: OMAP3 ISP CSI2a ########## TOM APPL ENTITY NAME: OMAP3 ISP CSI2a output ########## TOM APPL ENTITY NAME: OMAP3 ISP CCDC ########## TOM APPL ENTITY NAME: OMAP3 ISP CCDC output ########## TOM APPL ENTITY NAME: OMAP3 ISP preview ########## TOM APPL ENTITY NAME: OMAP3 ISP preview input ########## TOM APPL ENTITY NAME: OMAP3 ISP preview output ########## TOM APPL ENTITY NAME: OMAP3 ISP resizer ########## TOM APPL ENTITY NAME: OMAP3 ISP resizer input ########## TOM APPL ENTITY NAME: OMAP3 ISP resizer output ########## TOM APPL ENTITY NAME: OMAP3 ISP AEWB ########## TOM APPL ENTITY NAME: OMAP3 ISP AF ########## TOM APPL ENTITY NAME: OMAP3 ISP histogram ########## TOM APPL ENTITY NAME: ov3640 3-003c ########## TOM APPL 3 ########## [tvp7002]----------->[ccdc] ENABLED TOM APPL 4 ########## [ccdc]----------->[video_node] ENABLED successfully set CAMERA input 8. setting format on pad of mt9p031 entity. . . successfully format is set on pad 0 12. setting format on sink-pad of ccdc entity. . . successfully format is set on pad 0 successfully format is set on pad 1 17. setting format V4L2_PIX_FMT_SBGGR16 successfully set the format capture_pitch: 500 3 buffers are supported for streaming TOM APPL 900 ########## overo2 [ 916.723297] Internal error: Oops: 17 [#1] PREEMPT ARM overo2 [ 916.798278] Process MBVisionCameraS (pid: 1309, stack limit = 0xcd9122f0) overo2 [ 916.805358] Stack: (0xcd913a00 to 0xcd914000) overo2 [ 916.809906] 3a00: ceec6440 cd913a68 cd913a10 bf01d320 00000001 00000000 00000280 000001e0 overo2 [ 916.818420] 3a20: 00002008 00000000 00000000 00000000 00000000 00000000 00000000 00000000 overo2 [ 916.826965] 3a40: 00000000 00000000 00000004 00000101 00000009 c0765b80 cd912000 c003a448 overo2 [ 916.835510] 3a60: cec06170 c025d4b4 00000001 00000000 00000280 000001e0 0000300a 00000001 overo2 [ 916.844024] 3a80: 00000008 00000000 00000000 00000000 00000000 00000000 00000000 00000000 overo2 [ 916.852569] 3aa0: cd913ac4 cdaf02ac 00000001 cd913ad4 cd92da10 cdaf9148 cdaf9148 cdaf02ac overo2 [ 916.861114] 3ac0: 00000009 cdaf8fd8 cdaf9148 bf0013f8 c06d943c 00000000 00000001 cdaf9148 overo2 [ 916.869628] 3ae0: 00000001 cdaf8fd8 00000009 cd92da10 00000001 00000000 60000013 cd913b10 overo2 [ 916.878173] 3b00: c0033b4c c0034584 60000013 ffffffff 00000000 00000000 00000000 00000000 overo2 [ 916.886718] 3b20: c0725248 00000021 ccc4c080 00000000 cd913e68 cd913b40 c048eb6c c005db38 overo2 [ 916.895233] 3b40: 22222222 22222222 22222222 22222222 cd933000 00000001 00000001 cccb1bc0 overo2 [ 916.903778] 3b60: 00000001 cdaf9148 cccb1bc0 cdaf93f4 cd933000 cdaf9148 cd913e68 bf03d92c overo2 [ 916.912292] 3b80: cdaf942c 00000402 00000000 00000000 4ae3160d 12b63f0f 00000000 000001c9 overo2 [ 916.920837] 3ba0: 00000008 ccc4c080 60000113 c00e0b00 ccc4c080 00000020 ccc4c080 cd8e1c80 overo2 [ 916.929382] 3bc0: 00000020 c0424340 00000020 cd8e1c80 ccc4c080 cd8e1c80 ccc4c080 cda29de4 overo2 [ 916.937896] 3be0: 00000016 32c213ac 00000002 c042bd08 ccc4c080 c0416064 00000000 00000000 overo2 [ 916.946441] 3c00: cd8e1c80 c0710b20 00000000 ccc4c080 cda29dd0 cd913c20 c042c474 c005db38 overo2 [ 916.954986] 3c20: 32c213ac 00000016 00000002 00000101 00000009 c0765b80 cd912000 c0710b20 overo2 [ 916.963500] 3c40: cec06170 00000006 c0710b20 c04edac4 00000000 cd8e1c80 c06c5b30 c0710b20 overo2 [ 916.972045] 3c60: 00000001 c040e110 cda29dd0 00000008 cd8e1c80 00000000 c06c51f8 cd913cb4 overo2 [ 916.980590] 3c80: cd913cbc c040dbe0 cee91800 00000001 00000008 c06c51d8 00000008 cee91800 overo2 [ 916.989105] 3ca0: c06c51d8 c03ea784 cee91c80 00000046 00000001 cd8e1c80 00000010 c06c51f8 overo2 [ 916.997650] 3cc0: 00000010 cd913cd0 c030a484 c005db38 00000010 cd913ce0 c030c950 c005db38 overo2 [ 917.006195] 3ce0: 00000000 c0765b80 cee91d4c cd912000 00000010 00000101 c0864860 c00afd10 overo2 [ 917.014709] 3d00: cdb68b78 cd913d10 c00b0944 c005db38 cd912000 00000003 cd913d58 ceac7e30 overo2 [ 917.023254] 3d20: 0000000a 85ac318f 00085ac3 c00dad54 00000000 c0016514 c0864860 00000000 overo2 [ 917.031799] 3d40: 00000000 c00cd138 00025000 00000001 cd933000 00000000 cccb1bc0 bf04c1dc overo2 [ 917.040313] 3d60: ffffffe7 cdaf9148 cd913e68 bf0143ac cdad8000 cce08e40 00025000 00000000 overo2 [ 917.048858] 3d80: 00025000 cdb68b78 00000028 c00cde14 0000001d c06c8878 00000000 c0057a98 overo2 [ 917.057403] 3da0: 000000d5 40045612 cccb1bc0 cd933000 c0723b88 cce08e40 cd913dec cd913dc8 overo2 [ 917.065948] 3dc0: c005f364 c005db38 cee95570 00000000 00000019 ced69ac0 cee95540 cce08e40 overo2 [ 917.074462] 3de0: cd913e7c cd913df0 c048fe78 c005db38 a0000093 00000000 00000000 c0059f24 overo2 [ 917.083007] 3e00: c0490004 cd912000 cee95540 00000000 cd913e44 cd913e20 c005fcf0 c005db38 overo2 [ 917.091552] 3e20: cd913ee4 cd92fcd8 00000000 00000001 cd92fce4 00000000 40045612 00000000 overo2 [ 917.100067] 3e40: cccb1bc0 00000000 00000000 cd913e68 00000000 bf012774 00000004 bf012908 overo2 [ 917.108612] 3e60: be9755fc 00000001 00000001 cd913e78 c005eccc c005db38 00000004 c048f8d8 overo2 [ 917.117156] 3e80: c004ca7c 00000002 cd92fc00 cdbe3000 00000001 cd912000 cd92f400 cd913ea8 overo2 [ 917.125671] 3ea0: c029e2b8 c005ec84 0000000a 00001f00 00000002 c048e7a0 cd92f400 cd913ec8 overo2 [ 917.134216] 3ec0: c0052530 cefd7e08 00000003 00000001 00000000 60000013 00000000 00000018 overo2 [ 917.142761] 3ee0: cceff248 cd913ef0 c0057588 cccb1bc0 cdaf9148 00000000 40045612 be9755fc overo2 [ 917.151306] 3f00: cd912000 00000000 be97564c bf010708 ccc5a0e8 cccb1bc0 00000004 00000004 overo2 [ 917.159820] 3f20: be9755fc c00f9c18 c0299a28 00000000 00000000 00000000 00000006 cceff248 overo2 [ 917.168365] 3f40: 00000018 00000002 c8906148 00000000 cd912000 00000000 be974024 c00ea8ec overo2 [ 917.176910] 3f60: 00000000 00000000 00000000 be9755fc 40045612 00000004 cccb1bc0 cd912000 overo2 [ 917.185424] 3f80: 00000000 c00f9ccc cd913fb0 00000000 010deae0 00000000 0000ceb8 00000036 overo2 [ 917.193969] 3fa0: c000e984 c000e800 010deae0 00000000 00000004 40045612 be9755fc 00000004 overo2 [ 917.202514] 3fc0: 010deae0 00000000 0000ceb8 00000036 00000000 00000000 b6fd3000 be97564c overo2 [ 917.211029] 3fe0: 00000000 be974040 0000f66c b671e45c 60000010 00000004 8f2fe821 8f2fec21 overo2 [ 917.321228] Code: ebffebaf e1a05000 e1a00004 ebffebac (e595200c) Do you see what is missing or what I might have done wrong? And I have one additional question. When I want to change the format through my application. Do I need to change the format on all three pads or would it be enought to call the ioctl just for the video device (video2)? I still hope that I don't annoy you too much. Best Regards, Tom -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html