[PATCHv5] mx2_camera: Add soc_camera support for i.MX25/i.MX27

Baruch Siach baruch at tkos.co.il
Thu Jul 1 10:01:59 EDT 2010


Hi Uwe,

On Thu, Jul 01, 2010 at 02:28:03PM +0200, Uwe Kleine-König wrote:
> On Thu, Jul 01, 2010 at 02:03:19PM +0300, Baruch Siach wrote:
> > This is the soc_camera support developed by Sascha Hauer for the i.MX27.  Alan
> > Carvalho de Assis modified the original driver to get it working on more recent
> > kernels. I modified it further to add support for i.MX25. This driver has been
> > tested on i.MX25 and i.MX27 based platforms.
> > 
> > Signed-off-by: Baruch Siach <baruch at tkos.co.il>
> > Acked-by: Guennadi Liakhovetski <g.liakhovetski at gmx.de>
> > ---
> > Changes v4 -> v5
> >     Comments from Uwe Kleine-König:
> > 
> >     Enclose mx27 DMA related stuff in #ifdefs since the dma-mx1-mx2.h is no 
> >     longer accessible to mx25 builds
> > 
> >     s/MX2_VIDEO/VIDEO_MX2_HOSTSUPPORT/
> > 
> > Changes v3 -> v4
> >     Address more comments from Guennadi Liakhovetski, including:
> > 
> >     * Fix the double trigger handling of mx27 eMMA
> > 
> >     * Add a FIXME comment in the code of eMMA overflow handling
> > 
> > Changes v2 -> v3
> >     Address more comments from Guennadi Liakhovetski.
> > 
> >     Applied part of Sashca's patch that I forgot in v2.
> > 
> > Changes v1 -> v2
> >     Addressed the comments of Guennadi Liakhovetski except from the following:
> > 
> >     1. The mclk_get_divisor implementation, since I don't know what this code 
> >        is good for
> > 
> >     2. mx2_videobuf_release should not set pcdev->active on i.MX27, because 
> >        mx27_camera_frame_done needs this pointer
> > 
> >     3. In mx27_camera_emma_buf_init I don't know the meaning of those hard 
> >        coded magic numbers
> > 
> >     Applied i.MX27 fixes from Sascha.
> > 
> >  arch/arm/plat-mxc/include/mach/memory.h  |    4 +-
> >  arch/arm/plat-mxc/include/mach/mx2_cam.h |   46 +
> >  drivers/media/video/Kconfig              |   13 +
> >  drivers/media/video/Makefile             |    1 +
> >  drivers/media/video/mx2_camera.c         | 1513 ++++++++++++++++++++++++++++++
> >  5 files changed, 1575 insertions(+), 2 deletions(-)
> >  create mode 100644 arch/arm/plat-mxc/include/mach/mx2_cam.h
> >  create mode 100644 drivers/media/video/mx2_camera.c
> > 
> > diff --git a/arch/arm/plat-mxc/include/mach/memory.h b/arch/arm/plat-mxc/include/mach/memory.h
> > index c4b40c3..849d891 100644
> > --- a/arch/arm/plat-mxc/include/mach/memory.h
> > +++ b/arch/arm/plat-mxc/include/mach/memory.h
> > @@ -44,12 +44,12 @@
> >   */
> >  #define CONSISTENT_DMA_SIZE SZ_8M
> >  
> > -#elif defined(CONFIG_MX1_VIDEO)
> > +#elif defined(CONFIG_MX1_VIDEO) || defined(CONFIG_VIDEO_MX2_HOSTSUPPORT)
> >  /*
> >   * Increase size of DMA-consistent memory region.
> >   * This is required for i.MX camera driver to capture at least four VGA frames.
> >   */
> >  #define CONSISTENT_DMA_SIZE SZ_4M
> > -#endif /* CONFIG_MX1_VIDEO */
> > +#endif /* CONFIG_MX1_VIDEO || CONFIG_MX2_VIDEO */
> s/CONFIG_MX2_VIDEO/CONFIG_VIDEO_MX2_HOSTSUPPORT/ please

Oops. Will fix.

> >  #endif /* __ASM_ARCH_MXC_MEMORY_H__ */
> > diff --git a/arch/arm/plat-mxc/include/mach/mx2_cam.h b/arch/arm/plat-mxc/include/mach/mx2_cam.h
> > new file mode 100644
> > index 0000000..3c080a3
> > --- /dev/null
> > +++ b/arch/arm/plat-mxc/include/mach/mx2_cam.h
> Do you expect users of this header other than your driver?  If not you
> can fold it into the latter.

This header contains mx2_camera_platform_data. Platform code needs this.

> [...snip...]
> 
> > diff --git a/drivers/media/video/Kconfig b/drivers/media/video/Kconfig
> > index bdbc9d3..27e2acc 100644
> > --- a/drivers/media/video/Kconfig
> > +++ b/drivers/media/video/Kconfig
> > @@ -969,6 +969,19 @@ config VIDEO_OMAP2
> >  	---help---
> >  	  This is a v4l2 driver for the TI OMAP2 camera capture interface
> >  
> > +config VIDEO_MX2_HOSTSUPPORT
> > +        bool
> > +
> > +config VIDEO_MX2
> > +	tristate "i.MX27/i.MX25 Camera Sensor Interface driver"
> > +	depends on VIDEO_DEV && SOC_CAMERA && (MACH_MX27 || ARCH_MX25)
> > +	select VIDEOBUF_DMA_CONTIG
> CONTIG?

This selects the physically contiguous DMA implementation of the videobuf API.  
See drivers/media/video/videobuf-dma-contig.c.

> [...snap...]
> 
> > diff --git a/drivers/media/video/mx2_camera.c b/drivers/media/video/mx2_camera.c
> > new file mode 100644
> > index 0000000..98c93fa
> > --- /dev/null
> > +++ b/drivers/media/video/mx2_camera.c
> > @@ -0,0 +1,1513 @@
> 
> [...snip...]
> 
> > +static int __devexit mx2_camera_remove(struct platform_device *pdev)
> > +{
> > +	struct soc_camera_host *soc_host = to_soc_camera_host(&pdev->dev);
> > +	struct mx2_camera_dev *pcdev = container_of(soc_host,
> > +			struct mx2_camera_dev, soc_host);
> > +	struct resource *res;
> > +
> > +	clk_put(pcdev->clk_csi);
> > +#ifdef CONFIG_MACH_MX27
> > +	if (cpu_is_mx27())
> > +		imx_dma_free(pcdev->dma);
> > +#endif /* CONFIG_MACH_MX27 */
> > +	free_irq(pcdev->irq_csi, pcdev);
> > +	if (mx27_camera_emma(pcdev))
> > +		free_irq(pcdev->irq_emma, pcdev);
> > +
> > +	soc_camera_host_unregister(&pcdev->soc_host);
> > +
> > +	iounmap(pcdev->base_csi);
> > +
> > +	if (mx27_camera_emma(pcdev)) {
> > +		clk_disable(pcdev->clk_emma);
> > +		clk_put(pcdev->clk_emma);
> > +		iounmap(pcdev->base_emma);
> > +		res = pcdev->res_emma;
> > +		release_mem_region(res->start, resource_size(res));
> > +	}
> > +
> > +	res = pcdev->res_csi;
> > +	release_mem_region(res->start, resource_size(res));
> > +
> > +	kfree(pcdev);
> > +
> > +	dev_info(&pdev->dev, "MX2 Camera driver unloaded\n");
> > +
> > +	return 0;
> > +}
> > +
> > +static struct platform_driver mx2_camera_driver = {
> > +	.driver 	= {
> > +		.name	= MX2_CAM_DRV_NAME,
> I'm always unsure if you need
> 
> 		.owner  = THIS_MODULE,
> 
> here.

It shouldn't heart. Will add.

baruch

-- 
                                                     ~. .~   Tk Open Systems
=}------------------------------------------------ooO--U--Ooo------------{=
   - baruch at tkos.co.il - tel: +972.2.679.5364, http://www.tkos.co.il -



More information about the linux-arm-kernel mailing list