Hello Vasan,
I've had experience of configuring and running several cameras on MX6 using SabreLite clone boards from BoundaryDevices.
I was able to configure and program the following sensor configurations:
1. Two Parallel OV5642 sensors on different I2C bus.
2. One Parallel OV5642 and one MIPI OV5640 sensors
Sensors are configured for MX6 dual core lite and MX6 quad core
I've just finished working on integrating our own application and image conversion with MX6 hardware CSI/IPU/VPU
If you have more questions about image conversion, compression, I'll be glad to help also.
Tomorrow I'm going to prepare patch for two parallel OV5642 sensors for boundary devices kernel and send it to you. You can download BoundaryDevices kernel from their website.
Also, just to look in a meantime:
1. Check board support package arch/arm/mach-mx6/board-mx6_[your board]
- Check for ov5642 initialization init/power functions.
- Check I2C bus initialization for ov5642. I'm using separate I2C busses (2 and 3) to avoid ID collision.
- Check "capture_data" structure for initialization of sensor capture info such as IPU/CSI ids, clock.
- Check pads-mx6_...... pads confguration for your board to make sure all sensor pads configured correctly.
2. Check IPU configuration in drivers/mxc/ipu3
- Make sure you enable proper channels for CSI0 and CSI1 either parallel or MIPI. (ipu_common.c)
3. MXC V4L and CSI Encoder drivers (mxc_v4l2_capture, ipu_csi_enc) in drivers/media/video/mxc/capture
- I've duplicated ipu_csi_enc encoder driver to work with different memory channels for several sensors.
- In a nutshell, for several sensors to work in parallel I've separated memory channels and IRQs by duplicating encoder driver. There is probably other way to do it but that was easiest.
- I would suggest to use IPU streaming all the time switching modes in run-time, I couldn't get IPU_still working for both sensors. Also I added more working resolutions to OV5642 initialization tables. Now I've got 2592x1944, 1600x1200, 1024x768, 800x600, 1080p, 720p, 640x480 and 320x240 working and I can dynamically switch between them.
- Also for MXC V4L layer I've implemented another memory allocation model called DMAMAP which is direct physical memory map for DMA operations. The physical memory area is reserved during kernel boot and used by kernel drivers to map DMA buffers without dynamic allocations. Note that raw YUYV 2592x1944 x 16bits is close to 10MBytes and it is painful to allocate contiguous space for DMA in run-time.
Also I'm doing color conversion in IPU hardware and VPU encoding of still JPEGs and motion JPEG. Now I'm working on H.264 video stream from both sensors.
Regards,
Konstantyn