how to disable mail sending in this ML?
Hi All, subj. Want to still subscribed, but don't need all these posts in my mailbox. How to disable? Thanks. -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH V2 5/9] New drivers for MXC: add CSI support for MX1
u_camera.o obj-$(CONFIG_VIDEO_OMAP2) += omap2cam.o Index: linux-2.6.29/arch/arm/mach-mx1/Makefile === --- linux-2.6.29.orig/arch/arm/mach-mx1/Makefile +++ linux-2.6.29/arch/arm/mach-mx1/Makefile @@ -4,7 +4,7 @@ # Object file lists. -obj-y += generic.o clock.o devices.o +obj-y += generic.o clock.o devices.o ksym_mx1.o # Power management obj-$(CONFIG_PM) += pm.o @@ -13,5 +13,10 @@ ifeq ($(CONFIG_PM_DEBUG),y) CFLAGS_pm.o += -DDEBUG endif +# Support for CMOS sensor interface +ifdef CONFIG_VIDEO_IMX +obj-y += imx_camera_fiq.o +endif + # Specific board support obj-$(CONFIG_ARCH_MX1ADS) += mx1ads.o Index: linux-2.6.29/arch/arm/plat-mxc/include/mach/memory.h === --- linux-2.6.29.orig/arch/arm/plat-mxc/include/mach/memory.h +++ linux-2.6.29/arch/arm/plat-mxc/include/mach/memory.h @@ -19,4 +19,12 @@ #define PHYS_OFFSETUL(0x8000) #endif +#if defined(CONFIG_VIDEO_IMX) || defined(CONFIG_VIDEO_IMX_MODULE) +/* + * 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_8M +#endif /* CONFIG_VIDEO_IMX */ + #endif /* __ASM_ARCH_MXC_MEMORY_H__ */ Index: linux-2.6.29/arch/arm/plat-mxc/include/mach/camera.h === --- /dev/null +++ linux-2.6.29/arch/arm/plat-mxc/include/mach/camera.h @@ -0,0 +1,27 @@ +/* + * camera.h - i.MX camera driver header file + * + * Copyright (c) 2008, Paulius Zaleckas + * + * Based on PXA camera.h file: + * Copyright (C) 2003, Intel Corporation + * Copyright (C) 2008, Guennadi Liakhovetski + * + * This file is released under the GPLv2 + */ + +#ifndef __ASM_ARCH_CAMERA_H_ +#define __ASM_ARCH_CAMERA_H_ + +extern unsigned char imx_camera_sof_fiq_start, imx_camera_sof_fiq_end; + +struct imxcamera_platform_data { + int (*init)(struct device *); + int (*exit)(struct device *); + int (*power)(struct device *, int); + int (*reset)(struct device *, int); + + unsigned long mclk_10khz; +}; + +#endif /* __ASM_ARCH_CAMERA_H_ */ Index: linux-2.6.29/arch/arm/mach-mx1/imx_camera_fiq.S === --- /dev/null +++ linux-2.6.29/arch/arm/mach-mx1/imx_camera_fiq.S @@ -0,0 +1,35 @@ +/* + * Copyright (C) 2008 Paulius Zaleckas + * + * 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 +#include + + .text + .global imx_camera_sof_fiq_end + .global imx_camera_sof_fiq_start +imx_camera_sof_fiq_start: + @ enable dma + ldr r12, [r9] + orr r12, r12, #0x0001 + 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, #0x0001 + str r12, [r10] + @ clear SOF flag + mov r12, #0x0001 + str r12, [r11] + @ return from FIQ + subspc, lr, #4 +imx_camera_sof_fiq_end: Index: linux-2.6.29/arch/arm/mach-mx1/ksym_mx1.c === --- /dev/null +++ linux-2.6.29/arch/arm/mach-mx1/ksym_mx1.c @@ -0,0 +1,23 @@ +/* + * Exported ksyms of ARCH_MX1 + * + * Copyright (C) 2008, Darius Augulis + * + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + */ + +#include +#include + + +#if defined(CONFIG_VIDEO_IMX) || defined(CONFIG_VIDEO_IMX_MODULE) +#include + +/* IMX camera FIQ handler */ +EXPORT_SYMBOL(imx_camera_sof_fiq_start); +EXPORT_SYMBOL(imx_camera_sof_fiq_end); +#endif
Re: [PATCH V2 5/9] New drivers for MXC: add CSI support for MX1
Changes since prev. version: - Rebased on 2.6.29 -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH 1/5] CSI camera interface driver for MX1
= --- linux-2.6.29.orig/arch/arm/mach-mx1/Makefile +++ linux-2.6.29/arch/arm/mach-mx1/Makefile @@ -4,7 +4,7 @@ # Object file lists. -obj-y += generic.o clock.o devices.o +obj-y += generic.o clock.o devices.o ksym_mx1.o # Power management obj-$(CONFIG_PM) += pm.o @@ -13,5 +13,10 @@ ifeq ($(CONFIG_PM_DEBUG),y) CFLAGS_pm.o += -DDEBUG endif +# Support for CMOS sensor interface +ifdef CONFIG_VIDEO_IMX +obj-y += imx_camera_fiq.o +endif + # Specific board support obj-$(CONFIG_ARCH_MX1ADS) += mx1ads.o Index: linux-2.6.29/arch/arm/plat-mxc/include/mach/memory.h === --- linux-2.6.29.orig/arch/arm/plat-mxc/include/mach/memory.h +++ linux-2.6.29/arch/arm/plat-mxc/include/mach/memory.h @@ -19,4 +19,12 @@ #define PHYS_OFFSETUL(0x8000) #endif +#if defined(CONFIG_VIDEO_IMX) || defined(CONFIG_VIDEO_IMX_MODULE) +/* + * 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_8M +#endif /* CONFIG_VIDEO_IMX */ + #endif /* __ASM_ARCH_MXC_MEMORY_H__ */ Index: linux-2.6.29/arch/arm/plat-mxc/include/mach/camera.h === --- /dev/null +++ linux-2.6.29/arch/arm/plat-mxc/include/mach/camera.h No, you have to select a more specific name for it. There is already an mx3_camera.h there. @@ -0,0 +1,27 @@ +/* + * camera.h - i.MX camera driver header file + * + * Copyright (c) 2008, Paulius Zaleckas + * + * Based on PXA camera.h file: + * Copyright (C) 2003, Intel Corporation + * Copyright (C) 2008, Guennadi Liakhovetski + * + * This file is released under the GPLv2 + */ + +#ifndef __ASM_ARCH_CAMERA_H_ +#define __ASM_ARCH_CAMERA_H_ + +extern unsigned char imx_camera_sof_fiq_start, imx_camera_sof_fiq_end; + +struct imxcamera_platform_data { + int (*init)(struct device *); + int (*exit)(struct device *); + int (*power)(struct device *, int); + int (*reset)(struct device *, int); Just remove power and reset here. Remember, you might have more than one camera attached, even if only one of them can be active at any given time. + + unsigned long mclk_10khz; +}; + +#endif /* __ASM_ARCH_CAMERA_H_ */ Index: linux-2.6.29/arch/arm/mach-mx1/imx_camera_fiq.S === --- /dev/null +++ linux-2.6.29/arch/arm/mach-mx1/imx_camera_fiq.S @@ -0,0 +1,35 @@ +/* + * Copyright (C) 2008 Paulius Zaleckas + * + * 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. Here you have GPL v2 only + */ +#include +#include + + .text + .global imx_camera_sof_fiq_end + .global imx_camera_sof_fiq_start +imx_camera_sof_fiq_start: + @ enable dma + ldr r12, [r9] + orr r12, r12, #0x0001 + 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, #0x0001 + str r12, [r10] + @ clear SOF flag + mov r12, #0x0001 + str r12, [r11] + @ return from FIQ + subspc, lr, #4 +imx_camera_sof_fiq_end: Index: linux-2.6.29/arch/arm/mach-mx1/ksym_mx1.c === --- /dev/null +++ linux-2.6.29/arch/arm/mach-mx1/ksym_mx1.c @@ -0,0 +1,23 @@ +/* + * Exported ksyms of ARCH_MX1 + * + * Copyright (C) 2008, Darius Augulis + * + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. Here >= 2 again + */ + +#include +#include + + +#if defined(CONFIG_VIDEO_IMX) || defined(CONFIG_VIDEO_IMX_MODULE) +#include + +/* IMX camera FIQ handler */ +EXPORT_SYMBOL(imx_camera_sof_fiq_start); +EXPORT_SYMBOL(imx_camera_sof_fiq_end); +#endif Thanks Guennadi --- Guennadi Liakhovetski -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH 1/5] CSI camera interface driver for MX1
Mauro Carvalho Chehab wrote: Hi Darius, Please always base your patches against the last v4l-dvb tree or linux-next. This is specially important those days, where v4l core is suffering several changes. Hi, could you please advice which v4l-dvb Git repository I should pull from? Because git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/devel.git does not have any new stuff now. git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-next.git is marked as "unstable" for testing purposes. What is better to base my patches on? Darius. -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH 1/5] CSI camera interface driver for MX1
Mauro Carvalho Chehab wrote: > On Fri, 27 Mar 2009 11:37:23 +0200 > Darius Augulis wrote: > >> Mauro Carvalho Chehab wrote: >>> Hi Darius, >>> >>> Please always base your patches against the last v4l-dvb tree or linux-next. >>> This is specially important those days, where v4l core is suffering several >>> changes. > > Btw, you shouldn't be c/c a list that requires subscription. Every time I send > something, I got such errors: I sent it to ARM Linux ML, because it has lot of ARM stuff and there are people who maintain ARM/MXC. You probably could remove some CC from your reply message? -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH 1/5] CSI camera interface driver for MX1
Hi Guennadi, +/* + * Videobuf operations + */ +static int imx_videobuf_setup(struct videobuf_queue *vq, unsigned int *count, + unsigned int *size) +{ + struct soc_camera_device *icd = vq->priv_data; + + *size = icd->width * icd->height * + ((icd->current_fmt->depth + 7) >> 3); + + if (0 == *count) + *count = 32; Doesn't look like a good idea to me. You don't restrict picture sizes in your try_fmt / set_fmt and here you default to 32 buffers... I'm not sure about this one. Should I leave this unchanged? + struct imx_camera_dev *pcdev = ici->priv; + struct imx_buffer *buf = container_of(vb, struct imx_buffer, vb); + unsigned long flags; + + dev_dbg(&icd->dev, "%s (vb=0x%p) 0x%08lx %d\n", __func__, + vb, vb->baddr, vb->bsize); + spin_lock_irqsave(&pcdev->lock, flags); You use an FIQ for SoF, and spin_lock_irqsave() to protect. Don't they only disable IRQs and not FIQs? But it seems your FIQ cannot cause any trouble, so, it should be fine. Do you really need an FIQ? yes, FIQ is necessary. Because IRQ is to slow. When SoF is detected, DMA must be activated immediately, but not to early. Whe tried to use IRQ, and many starts of frames were missed. May I remove these spin_lock_irqsave's? + + list_add_tail(&vb->queue, &pcdev->capture); + + vb->state = VIDEOBUF_ACTIVE; + + if (!pcdev->active) { + pcdev->active = buf; + + /* setup sg list for future DMA */ + if (!imx_camera_setup_dma(pcdev)) { + unsigned int temp; + /* enable SOF irq */ + temp = __raw_readl(pcdev->base + CSICR1) | + CSICR1_SOF_INTEN; Hm, looks like an error in the datasheet: SOF_INTEN Start Of Frame Interrupt--SOF interrupt status bit; set Read: Bit 16 when interrupt occurs. 0 = No interrupt 1 = SOF interrupt occurred Write: 0 = No action 1 = Clears bit This is not a status bit, but a control "SoF interrupt enable" bit, right? Yes, probably it's only 'small' error in datasheet :) +static void imx_camera_dma_irq(int channel, void *data) +{ + struct imx_camera_dev *pcdev = data; + struct imx_buffer *buf; + unsigned long flags; + struct videobuf_buffer *vb; + + spin_lock_irqsave(&pcdev->lock, flags); + + imx_dma_disable(channel); + + if (unlikely(!pcdev->active)) { + dev_err(pcdev->dev, "DMA End IRQ with no active buffer\n"); + goto out; + } + + vb = &pcdev->active->vb; + buf = container_of(vb, struct imx_buffer, vb); + WARN_ON(buf->inwork || list_empty(&vb->queue)); + dev_dbg(pcdev->dev, "%s (vb=0x%p) 0x%08lx %d\n", __func__, + vb, vb->baddr, vb->bsize); + + imx_camera_wakeup(pcdev, vb, buf); AFAIU, your flow looks as follows: 1. configure DMA, enable Start of Frame FIQ 2. enable DMA, DMA IRQ, disable SoF FIQ 3. disable DMA, report completed buffer, goto 1 is it ok? +static int imx_camera_set_bus_param(struct soc_camera_device *icd, __u32 pixfmt) +{ + struct soc_camera_host *ici = + to_soc_camera_host(icd->dev.parent); + struct imx_camera_dev *pcdev = ici->priv; + unsigned long camera_flags, common_flags; + unsigned int csicr1; + int ret; + + camera_flags = icd->ops->query_bus_param(icd); + + common_flags = soc_camera_bus_param_compatible(camera_flags, + CSI_BUS_FLAGS); + if (!common_flags) + return -EINVAL; + + if (!(common_flags & SOCAM_DATAWIDTH_8)) { I don't understand this. In your CSI_BUS_FLAGS you only support 8 bits. If the camera doesn't support it, you get a 0 back in common_flags and return -EINVAL above. So, this test seems redundant. yes, this is uneeded. I removed this already. +static struct soc_camera_host_ops imx_soc_camera_host_ops = { + .owner = THIS_MODULE, + .add= imx_camera_add_device, + .remove = imx_camera_remove_device, + .set_fmt= imx_camera_set_fmt, + .try_fmt= imx_camera_try_fmt, + .init_videobuf = imx_camera_init_videobuf, + .reqbufs= imx_camera_reqbufs, + .poll = imx_camera_poll, + .querycap = imx_camera_querycap, + .set_bus_param = imx_camera_set_bus_param, You are not implementing this against a current v4l tree. Please, rebase onto, e.g., linux-next. You will have to
[RFC PATCH V2] Add camera (CSI) driver for MX1
From: Paulius Zaleckas Signed-off-by: Paulius Zaleckas --- arch/arm/mach-mx1/Makefile |7 arch/arm/mach-mx1/ksym_mx1.c| 20 + 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 | 39 + drivers/media/video/Kconfig |9 drivers/media/video/Makefile|1 drivers/media/video/mx1_camera.c| 838 +++ 8 files changed, 955 insertions(+), 2 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 diff --git a/arch/arm/mach-mx1/Makefile b/arch/arm/mach-mx1/Makefile index b969719..4fbdbbd 100644 --- a/arch/arm/mach-mx1/Makefile +++ b/arch/arm/mach-mx1/Makefile @@ -4,7 +4,12 @@ # Object file lists. -obj-y += generic.o clock.o devices.o +obj-y += generic.o clock.o devices.o ksym_mx1.o + +# Support for CMOS sensor interface +ifdef CONFIG_VIDEO_MX1 +obj-y += mx1_camera_fiq.o +endif # Specific board support obj-$(CONFIG_ARCH_MX1ADS) += mx1ads.o diff --git a/arch/arm/mach-mx1/ksym_mx1.c b/arch/arm/mach-mx1/ksym_mx1.c new file mode 100644 index 000..d771b2c --- /dev/null +++ b/arch/arm/mach-mx1/ksym_mx1.c @@ -0,0 +1,20 @@ +/* + * Exported ksyms of ARCH_MX1 + * + * Copyright (C) 2008, Darius Augulis + * + * 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 +#include + +#if defined(CONFIG_VIDEO_MX1) || defined(CONFIG_VIDEO_MX1_MODULE) +#include + +/* IMX camera FIQ handler */ +EXPORT_SYMBOL(mx1_camera_sof_fiq_start); +EXPORT_SYMBOL(mx1_camera_sof_fiq_end); +#endif diff --git a/arch/arm/mach-mx1/mx1_camera_fiq.S b/arch/arm/mach-mx1/mx1_camera_fiq.S new file mode 100644 index 000..9c69aa6 --- /dev/null +++ b/arch/arm/mach-mx1/mx1_camera_fiq.S @@ -0,0 +1,35 @@ +/* + * Copyright (C) 2008 Paulius Zaleckas + * + * 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 +#include + + .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, #0x0001 + 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, #0x0001 + str r12, [r10] + @ clear SOF flag + mov r12, #0x0001 + str r12, [r11] + @ return from FIQ + subspc, lr, #4 +mx1_camera_sof_fiq_end: diff --git a/arch/arm/plat-mxc/include/mach/memory.h b/arch/arm/plat-mxc/include/mach/memory.h index 0b80839..c6f2170 100644 --- a/arch/arm/plat-mxc/include/mach/memory.h +++ b/arch/arm/plat-mxc/include/mach/memory.h @@ -19,4 +19,12 @@ #define PHYS_OFFSETUL(0x8000) #endif +#if defined(CONFIG_VIDEO_MX1) || defined(CONFIG_VIDEO_MX1_MODULE) +/* + * 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_8M +#endif /* CONFIG_VIDEO_MX1 */ + #endif /* __ASM_ARCH_MXC_MEMORY_H__ */ diff --git a/arch/arm/plat-mxc/include/mach/mx1_camera.h b/arch/arm/plat-mxc/include/mach/mx1_camera.h new file mode 100644 index 000..1bf03e8 --- /dev/null +++ b/arch/arm/plat-mxc/include/mach/mx1_camera.h @@ -0,0 +1,39 @@ +/* + * mx1_camera.h - i.MX1/i.MXL camera driver header file + * + * Copyright (c) 2008, Paulius Zaleckas + * Copyright (C) 2009, Darius Augulis + * + * Based on PXA camera.h file: + * Copyright (C) 2003, Intel Corporation + * Copyright (C) 2008, Guennadi Liakhovetski + * + * 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_DP 1 +#define MX1_CAMERA_PCP 2 +#define MX1_CAMERA_VSP 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 + * @init: Init board resources + * @exit
Re: [RFC PATCH V2] Add camera (CSI) driver for MX1
Changelog since V1: - Licensing fixed (GPL V2) - Includes sorted - Code indentation fixed - Fixed errors listed by checkpatch - Most of Guennadi comments fixed - Spinlocks removed - .power and .reset removed from pdata - Redundant test "if (!(common_flags & SOCAM_DATAWIDTH_8))" removed - Setup bus parameters in imx_camera_set_bus_param() based on pdata choice - .set_crop method added - Driver based on newest v4l-dvb tree - Suspend and resume moved to soc_camera_host_ops - Driver dependencies fixed - Driver renamed to mx1_camera - My signed-off line added Notes: - Buffer count unfixed (if (!*count) *count = 32;). Don't know how to fix correctly. - Suspend and resume are almost redundant. Maybe remove them at all? - Several WARN_ON warning still here, not sure about removing them. Waiting for further comments and recommendations. Darius Augulis wrote: From: Paulius Zaleckas Signed-off-by: Paulius Zaleckas --- arch/arm/mach-mx1/Makefile |7 arch/arm/mach-mx1/ksym_mx1.c| 20 + 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 | 39 + drivers/media/video/Kconfig |9 drivers/media/video/Makefile|1 drivers/media/video/mx1_camera.c| 838 +++ 8 files changed, 955 insertions(+), 2 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 diff --git a/arch/arm/mach-mx1/Makefile b/arch/arm/mach-mx1/Makefile index b969719..4fbdbbd 100644 --- a/arch/arm/mach-mx1/Makefile +++ b/arch/arm/mach-mx1/Makefile @@ -4,7 +4,12 @@ # Object file lists. -obj-y += generic.o clock.o devices.o +obj-y += generic.o clock.o devices.o ksym_mx1.o + +# Support for CMOS sensor interface +ifdef CONFIG_VIDEO_MX1 +obj-y += mx1_camera_fiq.o +endif # Specific board support obj-$(CONFIG_ARCH_MX1ADS) += mx1ads.o diff --git a/arch/arm/mach-mx1/ksym_mx1.c b/arch/arm/mach-mx1/ksym_mx1.c new file mode 100644 index 000..d771b2c --- /dev/null +++ b/arch/arm/mach-mx1/ksym_mx1.c @@ -0,0 +1,20 @@ +/* + * Exported ksyms of ARCH_MX1 + * + * Copyright (C) 2008, Darius Augulis + * + * 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 +#include + +#if defined(CONFIG_VIDEO_MX1) || defined(CONFIG_VIDEO_MX1_MODULE) +#include + +/* IMX camera FIQ handler */ +EXPORT_SYMBOL(mx1_camera_sof_fiq_start); +EXPORT_SYMBOL(mx1_camera_sof_fiq_end); +#endif diff --git a/arch/arm/mach-mx1/mx1_camera_fiq.S b/arch/arm/mach-mx1/mx1_camera_fiq.S new file mode 100644 index 000..9c69aa6 --- /dev/null +++ b/arch/arm/mach-mx1/mx1_camera_fiq.S @@ -0,0 +1,35 @@ +/* + * Copyright (C) 2008 Paulius Zaleckas + * + * 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 +#include + + .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, #0x0001 + 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, #0x0001 + str r12, [r10] + @ clear SOF flag + mov r12, #0x0001 + str r12, [r11] + @ return from FIQ + subspc, lr, #4 +mx1_camera_sof_fiq_end: diff --git a/arch/arm/plat-mxc/include/mach/memory.h b/arch/arm/plat-mxc/include/mach/memory.h index 0b80839..c6f2170 100644 --- a/arch/arm/plat-mxc/include/mach/memory.h +++ b/arch/arm/plat-mxc/include/mach/memory.h @@ -19,4 +19,12 @@ #define PHYS_OFFSETUL(0x8000) #endif +#if defined(CONFIG_VIDEO_MX1) || defined(CONFIG_VIDEO_MX1_MODULE) +/* + * 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_8M +#endif /* CONFIG_VIDEO_MX1 */ + #endif /* __ASM_ARCH_MXC_MEMORY_H__ */ diff --git a/arch/arm/plat-mxc/include/mach/mx1_camera.h b/arch/arm/plat-mxc/include/mach/mx1_camera.h new file mode 100644 index 000..1bf03e8 --- /dev/null +++
suspend and resume in MX3_CAMERA are missing
subj. -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
soc_camera_open() not called
Hi, I'm trying to launch mx1_camera based on new v4l and soc-camera tree. After loading mx1_camera module, I see that .add callback is not called. In debug log I see that soc_camera_open() is not called too. What should call this function? Is this my driver problem? p.s. loading sensor driver does not change situation. -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: soc_camera_open() not called
Darius Augulis wrote: Hi, I'm trying to launch mx1_camera based on new v4l and soc-camera tree. After loading mx1_camera module, I see that .add callback is not called. In debug log I see that soc_camera_open() is not called too. What should call this function? Is this my driver problem? p.s. loading sensor driver does not change situation. -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html actually I thought about soc_camera_probe(), not soc_camera_open(). But the problem still the same. video_probe in my driver is not called. -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: soc_camera_open() not called
Robert Jarzmik wrote: Darius Augulis writes: Darius Augulis wrote: Hi, I'm trying to launch mx1_camera based on new v4l and soc-camera tree. After loading mx1_camera module, I see that .add callback is not called. In debug log I see that soc_camera_open() is not called too. What should call this function? Is this my driver problem? p.s. loading sensor driver does not change situation. Are you by any chance using last 2.6.29 kernel ? If so, would [1] be the answer to your question ? thanks. it means we should expect soc-camera fix for this? I'm using 2.6.29-git8, but seems it's not fixed yet. Cheers -- Robert [1] http://lkml.org/lkml/2009/3/24/625 -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: soc_camera_open() not called
Guennadi Liakhovetski wrote: On Wed, 1 Apr 2009, Robert Jarzmik wrote: Darius Augulis writes: Darius Augulis wrote: Hi, I'm trying to launch mx1_camera based on new v4l and soc-camera tree. After loading mx1_camera module, I see that .add callback is not called. In debug log I see that soc_camera_open() is not called too. What should call this function? Is this my driver problem? p.s. loading sensor driver does not change situation. Are you by any chance using last 2.6.29 kernel ? If so, would [1] be the answer to your question ? [1] http://lkml.org/lkml/2009/3/24/625 thanks. it means we should expect soc-camera fix for this? I'm using 2.6.29-git8, but seems it's not fixed yet. No, I don't think so. You're right. The last time I checked there had to be an amendement to the patch which introduced the driver core regression, as it touches other areas as well (sound/soc and mtd from memory). I think Guennadi can confirm this, as he's the one who raised the issue in the first place. If Darius had followed the thread you referred to he would have come down to this message http://lkml.org/lkml/2009/3/26/202 which provides a reply as to "what should be fixed," and yes, Ming Lei has already provided a patch to fix this, it should hit mainstream... some time before -rc1. could you please send me this patch or show where is it available? Thanks Guennadi --- Guennadi Liakhovetski, Ph.D. Freelance Open-Source Software Developer -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH] mt9t031: use platform power hook
Guennadi Liakhovetski wrote: Use platform power hook to turn the camera on and off. Signed-off-by: Guennadi Liakhovetski --- diff --git a/drivers/media/video/mt9t031.c b/drivers/media/video/mt9t031.c index 23f9ce9..2b0927b 100644 --- a/drivers/media/video/mt9t031.c +++ b/drivers/media/video/mt9t031.c @@ -141,8 +141,19 @@ static int get_shutter(struct soc_camera_device *icd, u32 *data) static int mt9t031_init(struct soc_camera_device *icd) { + struct mt9t031 *mt9t031 = container_of(icd, struct mt9t031, icd); + struct soc_camera_link *icl = mt9t031->client->dev.platform_data; int ret; + if (icl->power) { + ret = icl->power(&mt9t031->client->dev, 1); + if (ret < 0) { + dev_err(icd->vdev->parent, + "Platform failed to power-on the camera.\n"); + return ret; + } + } probably you would have to call icl->reset there too? I guess this camera sensor does have a reset pin? + /* Disable chip output, synchronous option update */ ret = reg_write(icd, MT9T031_RESET, 1); if (ret >= 0) @@ -150,13 +161,23 @@ static int mt9t031_init(struct soc_camera_device *icd) if (ret >= 0) ret = reg_clear(icd, MT9T031_OUTPUT_CONTROL, 2); + if (ret < 0 && icl->power) + icl->power(&mt9t031->client->dev, 0); + return ret >= 0 ? 0 : -EIO; } static int mt9t031_release(struct soc_camera_device *icd) { + struct mt9t031 *mt9t031 = container_of(icd, struct mt9t031, icd); + struct soc_camera_link *icl = mt9t031->client->dev.platform_data; + /* Disable the chip */ reg_clear(icd, MT9T031_OUTPUT_CONTROL, 2); + + if (icl->power) + icl->power(&mt9t031->client->dev, 0); + return 0; } -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [RFC PATCH V2] Add camera (CSI) driver for MX1
+ * struct mx1_camera_pdata - i.MX1/i.MXL camera platform data + * @init: Init board resources + * @exit: Release board resources + * @mclk_10khz:master clock frequency in 10kHz units + * @flags: MX1 camera platform flags + */ +struct mx1_camera_pdata { + int (*init)(struct device *); + int (*exit)(struct device *); I thought the agreement was to avoid these .init() and .exit() hooks in new code... Should I config board statically during system start-up? +static void mx1_videobuf_queue(struct videobuf_queue *vq, + struct videobuf_buffer *vb) +{ + struct soc_camera_device *icd = vq->priv_data; + struct soc_camera_host *ici = to_soc_camera_host(icd->dev.parent); + struct mx1_camera_dev *pcdev = ici->priv; + struct mx1_buffer *buf = container_of(vb, struct mx1_buffer, vb); + + dev_dbg(&icd->dev, "%s (vb=0x%p) 0x%08lx %d\n", __func__, + vb, vb->baddr, vb->bsize); + + list_add_tail(&vb->queue, &pcdev->capture); No, you had a spinlock here and in DMA ISR in the previous version, and it was correct. Without that lock the above list_add races with list_del_init() in mx1_camera_wakeup(). what can save and help for the spinlock on single-core system? mx3 there does not have spinlock. -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH V3] Add camera (CSI) driver for MX1
From: Paulius Zaleckas Changelog since V2: - My signed-off line added - Makefile updated - .init and .exit removed from pdata - includes sorted - Video memory limit added - Pointers in free_buffer() fixed - Indentation fixed - Spinlocks added - PM implementation removed - Added missed clk_put() - pdata test added - CSI device renamed - Platform flags fixed - "i.MX" replaced by "MX1" in debug prints Signed-off-by: Darius Augulis Signed-off-by: Paulius Zaleckas --- arch/arm/mach-mx1/Makefile |5 arch/arm/mach-mx1/devices.c |2 arch/arm/mach-mx1/ksym_mx1.c| 20 + 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| 824 +++ 9 files changed, 940 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 diff --git a/arch/arm/mach-mx1/Makefile b/arch/arm/mach-mx1/Makefile index 5e85456..2097021 100644 --- a/arch/arm/mach-mx1/Makefile +++ b/arch/arm/mach-mx1/Makefile @@ -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 \ No newline at end of file +obj-$(CONFIG_MACH_SCB9328) += scb9328.o diff --git a/arch/arm/mach-mx1/devices.c b/arch/arm/mach-mx1/devices.c index 97f42d9..76d1ffb 100644 --- a/arch/arm/mach-mx1/devices.c +++ b/arch/arm/mach-mx1/devices.c @@ -44,7 +44,7 @@ static struct resource imx_csi_resources[] = { static u64 imx_csi_dmamask = 0xUL; 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, diff --git a/arch/arm/mach-mx1/ksym_mx1.c b/arch/arm/mach-mx1/ksym_mx1.c new file mode 100644 index 000..9f1116b --- /dev/null +++ b/arch/arm/mach-mx1/ksym_mx1.c @@ -0,0 +1,20 @@ +/* + * Exported ksyms of ARCH_MX1 + * + * Copyright (C) 2008, Darius Augulis + * + * 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 +#include + +#if defined(CONFIG_MX1_VIDEO) +#include + +/* IMX camera FIQ handler */ +EXPORT_SYMBOL(mx1_camera_sof_fiq_start); +EXPORT_SYMBOL(mx1_camera_sof_fiq_end); +#endif diff --git a/arch/arm/mach-mx1/mx1_camera_fiq.S b/arch/arm/mach-mx1/mx1_camera_fiq.S new file mode 100644 index 000..9c69aa6 --- /dev/null +++ b/arch/arm/mach-mx1/mx1_camera_fiq.S @@ -0,0 +1,35 @@ +/* + * Copyright (C) 2008 Paulius Zaleckas + * + * 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 +#include + + .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, #0x0001 + 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, #0x0001 + str r12, [r10] + @ clear SOF flag + mov r12, #0x0001 + str r12, [r11] + @ return from FIQ + subspc, lr, #4 +mx1_camera_sof_fiq_end: diff --git a/arch/arm/plat-mxc/include/mach/memory.h b/arch/arm/plat-mxc/include/mach/memory.h index e0783e6..7113b3e 100644 --- a/arch/arm/plat-mxc/include/mach/memory.h +++ b/arch/arm/plat-mxc/include/mach/memory.h @@ -24,4 +24,12 @@ #define PHYS_OFFSETUL(0x8000) #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_8M +#endif /* CONFIG_MX1_VID
Re: [PATCH V3] Add camera (CSI) driver for MX1
Guennadi Liakhovetski wrote: Ok, we're almost there:-) Should be the last iteration. On Fri, 3 Apr 2009, Darius Augulis wrote: From: Paulius Zaleckas Changelog since V2: - My signed-off line added - Makefile updated - .init and .exit removed from pdata - includes sorted - Video memory limit added - Pointers in free_buffer() fixed - Indentation fixed - Spinlocks added - PM implementation removed - Added missed clk_put() - pdata test added - CSI device renamed - Platform flags fixed - "i.MX" replaced by "MX1" in debug prints I usually put such changelogs below the "---" line, so it doesn't appear in the git commit message, and here you just put a short description of the patch. Signed-off-by: Darius Augulis Signed-off-by: Paulius Zaleckas --- [snip] diff --git a/arch/arm/plat-mxc/include/mach/memory.h b/arch/arm/plat-mxc/include/mach/memory.h index e0783e6..7113b3e 100644 --- a/arch/arm/plat-mxc/include/mach/memory.h +++ b/arch/arm/plat-mxc/include/mach/memory.h @@ -24,4 +24,12 @@ #define PHYS_OFFSETUL(0x8000) #endif +#if defined(CONFIG_MX1_VIDEO) This #ifdef is not needed any more now, the file is not compiled if CONFIG_MX1_VIDEO is not defined. this header file is included by arch/arm/include/asm/memory.h By default dma bufer size is only 2Mbytes. If we remove this ifdef, this bufer will be increased to re-defined size. Therefore I suggest to leave this ifdef. + /* Make choises, based on platform choice */ + if ((common_flags & SOCAM_VSYNC_ACTIVE_HIGH) && + (common_flags & SOCAM_VSYNC_ACTIVE_LOW)) { + if (pcdev->pdata->flags & MX1_CAMERA_VSYNC_HIGH) + common_flags &= ~SOCAM_VSYNC_ACTIVE_LOW; + else + common_flags &= ~SOCAM_VSYNC_ACTIVE_HIGH; + } + + if ((common_flags & SOCAM_PCLK_SAMPLE_RISING) && + (common_flags & SOCAM_PCLK_SAMPLE_FALLING)) { + if (pcdev->pdata->flags & MX1_CAMERA_PCLK_RISING) + common_flags &= ~SOCAM_PCLK_SAMPLE_FALLING; + else + common_flags &= ~SOCAM_PCLK_SAMPLE_RISING; + } + + if ((common_flags & SOCAM_DATA_ACTIVE_HIGH) && + (common_flags & SOCAM_DATA_ACTIVE_LOW)) { + if (pcdev->pdata->flags & MX1_CAMERA_DATA_HIGH) + common_flags &= ~SOCAM_DATA_ACTIVE_LOW; + else + common_flags &= ~SOCAM_DATA_ACTIVE_HIGH; + } In all three clauses above pdata can be NULL. Thanks Guennadi --- Guennadi Liakhovetski, Ph.D. Freelance Open-Source Software Developer -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH V3] Add camera (CSI) driver for MX1
Guennadi Liakhovetski wrote: On Fri, 3 Apr 2009, Darius Augulis wrote: Guennadi Liakhovetski wrote: Ok, we're almost there:-) Should be the last iteration. On Fri, 3 Apr 2009, Darius Augulis wrote: From: Paulius Zaleckas Changelog since V2: - My signed-off line added - Makefile updated - .init and .exit removed from pdata - includes sorted - Video memory limit added - Pointers in free_buffer() fixed - Indentation fixed - Spinlocks added - PM implementation removed - Added missed clk_put() - pdata test added - CSI device renamed - Platform flags fixed - "i.MX" replaced by "MX1" in debug prints I usually put such changelogs below the "---" line, so it doesn't appear in the git commit message, and here you just put a short description of the patch. I'm using Stgit and I can't put anything below --- with "stg edit", because Stgit automatically removes everything what is below ---. I don't want to send patches manually, so I will add changelog in the reply message. Signed-off-by: Darius Augulis Signed-off-by: Paulius Zaleckas --- [snip] -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH V4] Add camera (CSI) driver for MX1
From: Paulius Zaleckas Signed-off-by: Darius Augulis Signed-off-by: Paulius Zaleckas --- 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 diff --git a/arch/arm/mach-mx1/Makefile b/arch/arm/mach-mx1/Makefile index 5e85456..2097021 100644 --- a/arch/arm/mach-mx1/Makefile +++ b/arch/arm/mach-mx1/Makefile @@ -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 \ No newline at end of file +obj-$(CONFIG_MACH_SCB9328) += scb9328.o diff --git a/arch/arm/mach-mx1/devices.c b/arch/arm/mach-mx1/devices.c index 97f42d9..76d1ffb 100644 --- a/arch/arm/mach-mx1/devices.c +++ b/arch/arm/mach-mx1/devices.c @@ -44,7 +44,7 @@ static struct resource imx_csi_resources[] = { static u64 imx_csi_dmamask = 0xUL; 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, diff --git a/arch/arm/mach-mx1/ksym_mx1.c b/arch/arm/mach-mx1/ksym_mx1.c new file mode 100644 index 000..b09ee12 --- /dev/null +++ b/arch/arm/mach-mx1/ksym_mx1.c @@ -0,0 +1,18 @@ +/* + * Exported ksyms of ARCH_MX1 + * + * Copyright (C) 2008, Darius Augulis + * + * 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 +#include + +#include + +/* IMX camera FIQ handler */ +EXPORT_SYMBOL(mx1_camera_sof_fiq_start); +EXPORT_SYMBOL(mx1_camera_sof_fiq_end); diff --git a/arch/arm/mach-mx1/mx1_camera_fiq.S b/arch/arm/mach-mx1/mx1_camera_fiq.S new file mode 100644 index 000..9c69aa6 --- /dev/null +++ b/arch/arm/mach-mx1/mx1_camera_fiq.S @@ -0,0 +1,35 @@ +/* + * Copyright (C) 2008 Paulius Zaleckas + * + * 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 +#include + + .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, #0x0001 + 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, #0x0001 + str r12, [r10] + @ clear SOF flag + mov r12, #0x0001 + str r12, [r11] + @ return from FIQ + subspc, lr, #4 +mx1_camera_sof_fiq_end: diff --git a/arch/arm/plat-mxc/include/mach/memory.h b/arch/arm/plat-mxc/include/mach/memory.h index e0783e6..eca37d0 100644 --- a/arch/arm/plat-mxc/include/mach/memory.h +++ b/arch/arm/plat-mxc/include/mach/memory.h @@ -24,4 +24,12 @@ #define PHYS_OFFSETUL(0x8000) #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__ */ diff --git a/arch/arm/plat-mxc/include/mach/mx1_camera.h b/arch/arm/plat-mxc/include/mach/mx1_camera.h new file mode 100644 index 000..4fd6c70 --- /dev/null +++ b/arch/arm/plat-mxc/include/mach/mx1_camera.h @@ -0,0 +1,35 @@ +/* + * mx1_camera.h - i.MX1/i.MXL camera driver header file + * + * Copyright (c) 2008, Paulius Zaleckas + * Copyright (C) 2009, Darius Augulis + * + * Ba
Re: [PATCH V4] Add camera (CSI) driver for MX1
Changelog since V3: - DMA buffer size decreased to 4Mbytes - Added pdata test in set_bus_param() -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH V4] Add camera (CSI) driver for MX1
Sascha Hauer wrote: On Fri, Apr 03, 2009 at 02:15:34PM +0200, Guennadi Liakhovetski wrote: On Fri, 3 Apr 2009, Darius Augulis wrote: From: Paulius Zaleckas Signed-off-by: Darius Augulis Signed-off-by: Paulius Zaleckas 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 This shouldn't be necessary. ARCH_IMX does not have the platform part to make use of this driver and will never get it. 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. Sascha -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH V4] Add camera (CSI) driver for MX1
Guennadi Liakhovetski wrote: On Fri, 3 Apr 2009, Sascha Hauer wrote: On Fri, Apr 03, 2009 at 02:15:34PM +0200, Guennadi Liakhovetski wrote: 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 This shouldn't be necessary. ARCH_IMX does 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. 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 -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH] soc-camera: ov7670 merged multiple drivers and moved over to v4l2-subdev
On 06/16/2009 05:45 PM, Jonathan Cameron wrote: Guennadi Liakhovetski wrote: On Mon, 15 Jun 2009, Jonathan Cameron wrote: From: Jonathan Cameron OV7670 soc-camera driver. Merge of drivers from Jonathan Corbet, Darius Augulis and Jonathan Cameron Could you please, describe in more detail how you merged them? Mostly by combining the various register sets and then adding pretty much all the functionality in each of them, testing pretty much everything. Note that a lot of what was in those drivers (usually labeled as untested) simply doesn't work and is based on 'magic' register sets provided by omnivision. However, I am not sure this is the best way to go. I think, a better approach would be to take a driver currently in the mainline, perhaps, the most feature-complete one if there are several of them there, That is more or less what I've done (it's based on Jonathan Corbet's driver). Darius' driver and mine have never been in mainline. Darius' was a complete rewrite based on doc's he has under NDA. Mine was based on Jonathan Corbet's one with a few bits leveraged from a working tinyos driver for the platform I'm using (principally because Omnivision are ignoring both myself and the board supplier). It's very difficult to write 'normal' driver for it. Omnivision does not provide useful documentation, only long constant arrays with few strange comments. Beside documentation is poor, there are lot of errors in register description. Many things are mistery, not documented and seems Omnivision does not have such documentation. I thing this sensor isn't perfect for embedded projects. It's 'designed' for webcams, where reliability and quality are not needed. With ov7720 similar situation... convert it and its user(s) to v4l2-subdev, extend it with any features missing in it and present in other drivers, then switch users of all other ov7670 drivers over to this one, That's the problem. The only mainlined driver is specifically for an OLPC machine. The driver is tied to specific i2c device and doesn't use anything anywhere near soc-camera or v4l2-subdev. While it would be nice to get a single driver working for this hardware as well as more conventional soc-camera devices, it isn't going to happen without a lot of input from someone with an olpc. The chip is interfaced through a Marvell 88alp101 'cafe' chip which does a whole host of random things alongside being video processor and taking a quick look at that would be written in a completely different fashion if it were done now (mfd with subdevices etc, v4l2-sudev) So basically in the ideal world it would happen exactly as you've suggested, but I doubt it'll happen any time soon and in the meantime there is no in kernel support for those of us using the chip on other platforms. *looks hopefully in the direction of Jonathan Corbet and other olpc owners* and finally make it work with soc-camera. This way you get a series of smaller and reviewable patches, instead of a completely new driver, that reproduces a lot of existing code but has to be reviewed anew. How does this sound? Would be fine if the original driver (or anything terribly close to it) were useable on a platform I actually have without more or less being rewritten. I can back track the driver to be as close to that as possible and still functional, but I'm not entirely sure it will make the code any easier to review and you'll loose a lot the functionality lifted from Darius' as my original drivers. The original posting I made was as close as you can reasonably get to Jonathan's original driver. http://patchwork.kernel.org/patch/12192/ At the time it wasn't really reviewed (beyond a few comments) as you were just commencing the soc-camera conversion and it made sense to wait for after that. I'm not really sure how we should proceed with this. I'm particularly loath to touch the olpc driver unless we have a reasonable number of people willing to test. Jonathan -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html