Add camera (CSI) driver for MX1
PATCH v4 1/1 Add camera (CSI) driver for MX1
From: Paulius Zaleckas <[email protected]>
---
arch/arm/mach-mx1/Makefile | 5 arch/arm/mach-mx1/devices.c | 2 arch/arm/mach-mx1/ksym_mx1.c | 18 + arch/arm/mach-mx1/mx1_camera_fiq.S | 35 + arch/arm/plat-mxc/include/mach/memory.h | 8 arch/arm/plat-mxc/include/mach/mx1_camera.h | 35 + drivers/media/video/Kconfig | 13 drivers/media/video/Makefile | 1 drivers/media/video/mx1_camera.c | 827 +++++++++++++++++++++++++++ 9 files changed, 941 insertions(+), 3 deletions(-) create mode 100644 arch/arm/mach-mx1/ksym_mx1.c create mode 100644 arch/arm/mach-mx1/mx1_camera_fiq.S create mode 100644 arch/arm/plat-mxc/include/mach/mx1_camera.h create mode 100644 drivers/media/video/mx1_camera.c
arch/arm/mach-mx1/Makefile +4 -1
@@ -6,6 +6,9 @@ obj-y += generic.o clock.o devices.o +# Support for CMOS sensor interface +obj-$(CONFIG_MX1_VIDEO) += ksym_mx1.o mx1_camera_fiq.o + # Power management obj-$(CONFIG_PM) += pm.o
@@ -15,4 +18,4 @@ endif # Specific board support obj-$(CONFIG_ARCH_MX1ADS) += mx1ads.o -obj-$(CONFIG_MACH_SCB9328) += scb9328.o +obj-$(CONFIG_MACH_SCB9328) += scb9328.o
arch/arm/mach-mx1/devices.c +1 -1
@@ -44,7 +44,7 @@ static struct resource imx_csi_resources[] = {static u64 imx_csi_dmamask =0xffffffffUL ;struct platform_device imx_csi_device = { - .name ="imx-csi" , + .name ="mx1-camera" , .id =0 ,/* This is used to put cameras on this interface */ .dev = { .dma_mask = &imx_csi_dmamask,
arch/arm/mach-mx1/ksym_mx1.c new file +18 -0
@@ -0,0 +1,18 @@ +/* +* Exported ksyms of ARCH_MX1 +* +* Copyright (C) 2008, Darius Augulis <[email protected]> +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License version 2 as +* published by the Free Software Foundation. +*/ + +#include <linux/platform_device.h> +#include <linux/module.h> + +#include <mach/mx1_camera.h> + +/* IMX camera FIQ handler */ +EXPORT_SYMBOL (mx1_camera_sof_fiq_start); +EXPORT_SYMBOL (mx1_camera_sof_fiq_end);
arch/arm/mach-mx1/mx1_camera_fiq.S new file +35 -0
@@ -0,0 +1,35 @@ +/* + * Copyright (C) 2008 Paulius Zaleckas <[email protected]> + * + * Based on linux/arch/arm/lib/floppydma.S + * Copyright (C) 1995, 1996 Russell King + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + */ +#include <linux/linkage.h> +#include <asm/assembler.h> + + .text + .global mx1_camera_sof_fiq_end + .global mx1_camera_sof_fiq_start +mx1_camera_sof_fiq_start: + @ enable dma + ldr r12, [r9] + orr r12, r12, #0x00000001 + str r12, [r9] + @ unmask DMA interrupt + ldr r12, [r8] + bic r12, r12, r13 + str r12, [r8] + @ disable SOF interrupt + ldr r12, [r10] + bic r12, r12, #0x00010000 + str r12, [r10] + @ clear SOF flag + mov r12, #0x00010000 + str r12, [r11] + @ return from FIQ + subs pc, lr, #4 +mx1_camera_sof_fiq_end:
arch/arm/plat-mxc/include/mach/memory.h +8 -0
@@ -24,4 +24,12 @@#define PHYS_OFFSET UL(0x80000000)#endif +#if defined(CONFIG_MX1_VIDEO ) +/* +* 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 /* __ASM_ARCH_MXC_MEMORY_H__ */
arch/arm/plat-mxc/include/mach/mx1_camera.h new file +35 -0
@@ -0,0 +1,35 @@ +/* +* mx1_camera.h - i.MX1/i.MXL camera driver header file +* +* Copyright (c) 2008, Paulius Zaleckas <[email protected]> +* Copyright (C) 2009, Darius Augulis <[email protected]> +* +* Based on PXA camera.h file: +* Copyright (C) 2003, Intel Corporation +* Copyright (C) 2008, Guennadi Liakhovetski <[email protected]> +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License version 2 as +* published by the Free Software Foundation. +*/ + +#ifndef __ASM_ARCH_CAMERA_H_ +#define __ASM_ARCH_CAMERA_H_ + +#define MX1_CAMERA_DATA_HIGH 1 +#define MX1_CAMERA_PCLK_RISING 2 +#define MX1_CAMERA_VSYNC_HIGH 4 + +extern unsigned char mx1_camera_sof_fiq_start, mx1_camera_sof_fiq_end; + +/** +* struct mx1_camera_pdata - i.MX1/i.MXL camera platform data +* @mclk_10khz: master clock frequency in 10kHz units +* @flags: MX1 camera platform flags +*/ +struct mx1_camera_pdata { +unsigned long mclk_10khz; +unsigned long flags; +}; + +#endif /* __ASM_ARCH_CAMERA_H_ */
drivers/media/video/Kconfig +12 -1
@@ -746,6 +746,18 @@ config SOC_CAMERA_OV772X help This is a ov772x camera driver +config MX1_VIDEO + bool + +config VIDEO_MX1 + tristate "i.MX1/i.MXL CMOS Sensor Interface driver" + depends on VIDEO_DEV && ARCH_MX1 && SOC_CAMERA + select FIQ + select VIDEOBUF_DMA_CONTIG + select MX1_VIDEO + ---help--- + This is a v4l2 driver for the i.MX1/i.MXL CMOS Sensor Interface + config VIDEO_MX3 tristate "i.MX3x Camera Sensor Interface driver" depends on VIDEO_DEV && MX3_IPU && SOC_CAMERA
@@ -904,5 +916,4 @@ config USB_S2255 This driver can be compiled as a module, called s2255drv. endif # V4L_USB_DRIVERS - endif # VIDEO_CAPTURE_DRIVERS
drivers/media/video/Makefile +1 -0
@@ -133,6 +133,7 @@ obj-$(CONFIG_VIDEO_CX18) += cx18/ obj-$(CONFIG_VIDEO_VIVI) += vivi.o obj-$(CONFIG_VIDEO_CX23885) += cx23885/ +obj-$(CONFIG_VIDEO_MX1) += mx1_camera.o obj-$(CONFIG_VIDEO_MX3) += mx3_camera.o obj-$(CONFIG_VIDEO_PXA27x) += pxa_camera.o obj-$(CONFIG_VIDEO_SH_MOBILE_CEU) += sh_mobile_ceu_camera.o
drivers/media/video/mx1_camera.c new file +827 -0
827 lines not on this page · raw message
Changelog since V3:
- DMA buffer size decreased to 4Mbytes
- Added pdata test in set_bus_param()
Quoted 4 lines · Darius Augulis
From: Paulius Zaleckas <[email protected]>
Signed-off-by Darius Augulis <[email protected]>Signed-off-by Paulius Zaleckas <[email protected]>
Ok, I'll just swap these two Sob's to reflect the processing chain, add a description like
Add support for CMOS Sensor Interface on i.MX1 and i.MXL SoCs.
and fix a couple of trivial conflicts, which probably appear, because you based your patches on an MXC tree, and not on current linux-next. Wondering, if it still will work then... At least it compiles. BTW, should it really also work with IMX? Then you might want to change this
depends on VIDEO_DEV && ARCH_MX1 && SOC_CAMERA
to
depends on VIDEO_DEV && (ARCH_MX1 || ARCH_IMX) && SOC_CAMERA
but you can do this later, maybe, when you actually get a chance to test it on IMX (if you haven't done so yet).
Sascha, we need your ack for the ARM part.
Thanks
Guennadi
---
Guennadi Liakhovetski, Ph.D.
Freelance Open-Source Software Developer
Sascha Hauer
maintainerQuoted 17 lines · Guennadi Liakhovetski
Quoted 4 lines · Darius Augulis
From: Paulius Zaleckas <[email protected]>
Signed-off-by Darius Augulis <[email protected]>Signed-off-by Paulius Zaleckas <[email protected]>Ok, I'll just swap these two Sob's to reflect the processing chain, add a description like
Add support for CMOS Sensor Interface on i.MX1 and i.MXL SoCs.
and fix a couple of trivial conflicts, which probably appear, because you based your patches on an MXC tree, and not on current linux-next. Wondering, if it still will work then... At least it compiles. BTW, should it really also work with IMX? Then you might want to change this
Quoted 5 lines
depends on VIDEO_DEV && ARCH_MX1 && SOC_CAMERAto
depends on VIDEO_DEV && (ARCH_MX1 || ARCH_IMX) && SOC_CAMERA
This shouldn't be necessary. ARCH_IMX does not have the platform part to make use of this driver and will never get it.
Quoted 5 lines
but you can do this later, maybe, when you actually get a chance to test it on IMX (if you haven't done so yet).
Sascha, we need your ack for the ARM part.
I'm OK with this driver: I have never worked with FIQs though so I can't say much to it.
Sascha
Signature · 4 lines
Pengutronix e.K. | | Industrial Linux Solutions | http://www.pengutronix.de/ | Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
Quoted 22 lines · Sascha Hauer
Quoted 10 lines · Guennadi Liakhovetski
Quoted 4 lines · Darius Augulis
From: Paulius Zaleckas <[email protected]>
Signed-off-by Darius Augulis <[email protected]>Signed-off-by Paulius Zaleckas <[email protected]>Ok, I'll just swap these two Sob's to reflect the processing chain, add a description like
Add support for CMOS Sensor Interface on i.MX1 and i.MXL SoCs.
Quoted 7 lines
and fix a couple of trivial conflicts, which probably appear, because you based your patches on an MXC tree, and not on current linux-next. Wondering, if it still will work then... At least it compiles. BTW, should it really also work with IMX? Then you might want to change this
depends on VIDEO_DEV && ARCH_MX1 && SOC_CAMERAto
depends on VIDEO_DEV && (ARCH_MX1 || ARCH_IMX) && SOC_CAMERAThis shouldn't be necessary.
ARCH_IMXdoes not have the platform part to make use of this driver and will never get it.
Quoted 6 lines
Quoted 3 lines
but you can do this later, maybe, when you actually get a chance to test it on IMX (if you haven't done so yet).
Sascha, we need your ack for the ARM part.
I'm OK with this driver: I have never worked with FIQs though so I can't say much to it.
At least I can confirm it worked well with 2.6.28.5 kernel version.
Quoted 3 lines
Sascha
Quoted 4 lines · Sascha Hauer
Quoted 3 lines · Guennadi Liakhovetski
Wondering, if it still will work then... At least it compiles. BTW, should it really also work with IMX? Then you might want to change this
Quoted 8 lines
Quoted 5 lines
depends on VIDEO_DEV && ARCH_MX1 && SOC_CAMERAto
depends on VIDEO_DEV && (ARCH_MX1 || ARCH_IMX) && SOC_CAMERAThis shouldn't be necessary.
ARCH_IMXdoes not have the platform part to make use of this driver and will never get it.
Confused... Then why the whole that "IMX/MX1" in the driver? And why will it never get it - are they compatible or not? Or just there's no demand / chips are EOLed or something...
Quoted 7 lines
Quoted 4 lines
but you can do this later, maybe, when you actually get a chance to test it on IMX (if you haven't done so yet).
Sascha, we need your ack for the ARM part.
I'm OK with this driver: I have never worked with FIQs though so I can't say much to it.
Ok, I take it as an "Acked-by" then:-)
Thanks
Guennadi
---
Guennadi Liakhovetski, Ph.D.
Freelance Open-Source Software Developer
Sascha Hauer
maintainerQuoted 10 lines · Guennadi Liakhovetski
Quoted 8 lines · Sascha Hauer
Quoted 7 lines · Guennadi Liakhovetski
Wondering, if it still will work then... At least it compiles. BTW, should it really also work with IMX? Then you might want to change this
depends on VIDEO_DEV && ARCH_MX1 && SOC_CAMERAto
Quoted 7 lines
Quoted 4 lines
Quoted 1 line
depends on VIDEO_DEV && (ARCH_MX1 || ARCH_IMX) && SOC_CAMERAThis shouldn't be necessary.
ARCH_IMXdoes not have the platform part to make use of this driver and will never get it.Confused... Then why the whole that "IMX/MX1" in the driver? And why will it never get it - are they compatible or not?
Not just compatible, they are the same. A little bit of history: I originally brought i.MX1 support to the kernel in the early 2.6 days. around 2.6.25 Freescale pushed initial i.MX31 support using plat-mxc. We in turn based our i.MX27 port on this code and since then it evolved further. Darius based a new i.MX1 support on this code and now we can remove arch-imx.
Sascha
Signature · 4 lines
Pengutronix e.K. | | Industrial Linux Solutions | http://www.pengutronix.de/ | Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
Quoted 11 lines · Guennadi Liakhovetski
Quoted 8 lines · Sascha Hauer
Quoted 6 lines · Guennadi Liakhovetski
Wondering, if it still will work then... At least it compiles. BTW, should it really also work with IMX? Then you might want to change this
depends on VIDEO_DEV && ARCH_MX1 && SOC_CAMERAto
Quoted 9 lines
Quoted 5 lines
Quoted 2 lines
depends on VIDEO_DEV && (ARCH_MX1 || ARCH_IMX) && SOC_CAMERAThis shouldn't be necessary.
ARCH_IMXdoes not have the platform part to make use of this driver and will never get it.Confused... Then why the whole that "IMX/MX1" in the driver? And why will it never get it - are they compatible or not? Or just there's no demand / chips are EOLed or something...
in Linux kernel "imx" is the old name of "mx1".
mx1 contains of two processors: i.MX1 and i.MXL.
Quoted 17 lines
Quoted 7 lines
Quoted 4 lines
but you can do this later, maybe, when you actually get a chance to test it on IMX (if you haven't done so yet).
Sascha, we need your ack for the ARM part.
I'm OK with this driver: I have never worked with FIQs though so I can't say much to it.
Ok, I take it as an "Acked-by" then:-)
Thanks
Guennadi
---
Guennadi Liakhovetski, Ph.D.
Freelance Open-Source Software Developer
Quoted 8 lines · Darius Augulis
Quoted 4 lines · Guennadi Liakhovetski
Confused... Then why the whole that "IMX/MX1" in the driver? And why will it never get it - are they compatible or not? Or just there's no demand / chips are EOLed or something...
in Linux kernel "imx" is the old name of "mx1".
mx1 contains of two processors: i.MX1 and i.MXL.
Ah, ok, I see now. I thought i.MXL was under ARCH_IMX and _not_ ARCH_MX1. That was my confusion.
Thanks
Guennadi
---
Guennadi Liakhovetski, Ph.D.
Freelance Open-Source Software Developer