[media] SoC Camera: add driver for OMAP1 camera interface
This is a V4L2 driver for TI OMAP1 SoC camera interface. Both videobuf-dma versions are supported, contig and sg, selectable with a module option. The former uses less processing power, but often fails to allocate contignuous buffer memory. The latter is free of this problem, but generates tens of DMA interrupts per frame. If contig memory allocation ever fails, the driver falls back to sg automatically on next open, but still can be switched back to contig manually. Both paths work stable for me, even under heavy load, on my OMAP1510 based Amstrad Delta videophone, that is the oldest, least powerfull OMAP1 implementation. The interface generally works in pass-through mode. Since input data byte endianess can be swapped, it provides up to two v4l2 pixel formats per each of several soc_mbus formats that have their swapped endian counterparts. Boards using this driver can provide it with the following platform data: - if and what freqency clock is expected by an on-board camera sensor, - what is the maximum pixel clock that should be accepted from the sensor, - what is the polarity of the sensor provided pixel clock, - if the interface GPIO line is connected to a sensor reset/powerdown input and what is the input polarity. Created and tested against linux-2.6.36-rc5 on Amstrad Delta. Signed-off-by: Janusz Krzysztofik <jkrzyszt@tis.icnet.pl> Signed-off-by: Guennadi Liakhovetski <g.liakhovetski@gmx.de> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
This commit is contained in:
parent
0915d559a0
commit
bdc621fced
|
@ -822,6 +822,14 @@ config VIDEO_SH_MOBILE_CEU
|
||||||
---help---
|
---help---
|
||||||
This is a v4l2 driver for the SuperH Mobile CEU Interface
|
This is a v4l2 driver for the SuperH Mobile CEU Interface
|
||||||
|
|
||||||
|
config VIDEO_OMAP1
|
||||||
|
tristate "OMAP1 Camera Interface driver"
|
||||||
|
depends on VIDEO_DEV && ARCH_OMAP1 && SOC_CAMERA
|
||||||
|
select VIDEOBUF_DMA_CONTIG
|
||||||
|
select VIDEOBUF_DMA_SG
|
||||||
|
---help---
|
||||||
|
This is a v4l2 driver for the TI OMAP1 camera interface
|
||||||
|
|
||||||
config VIDEO_OMAP2
|
config VIDEO_OMAP2
|
||||||
tristate "OMAP2 Camera Capture Interface driver"
|
tristate "OMAP2 Camera Capture Interface driver"
|
||||||
depends on VIDEO_DEV && ARCH_OMAP2
|
depends on VIDEO_DEV && ARCH_OMAP2
|
||||||
|
|
|
@ -157,6 +157,7 @@ obj-$(CONFIG_VIDEO_MX3) += mx3_camera.o
|
||||||
obj-$(CONFIG_VIDEO_PXA27x) += pxa_camera.o
|
obj-$(CONFIG_VIDEO_PXA27x) += pxa_camera.o
|
||||||
obj-$(CONFIG_VIDEO_SH_MOBILE_CSI2) += sh_mobile_csi2.o
|
obj-$(CONFIG_VIDEO_SH_MOBILE_CSI2) += sh_mobile_csi2.o
|
||||||
obj-$(CONFIG_VIDEO_SH_MOBILE_CEU) += sh_mobile_ceu_camera.o
|
obj-$(CONFIG_VIDEO_SH_MOBILE_CEU) += sh_mobile_ceu_camera.o
|
||||||
|
obj-$(CONFIG_VIDEO_OMAP1) += omap1_camera.o
|
||||||
obj-$(CONFIG_VIDEO_SAMSUNG_S5P_FIMC) += s5p-fimc/
|
obj-$(CONFIG_VIDEO_SAMSUNG_S5P_FIMC) += s5p-fimc/
|
||||||
|
|
||||||
obj-$(CONFIG_ARCH_DAVINCI) += davinci/
|
obj-$(CONFIG_ARCH_DAVINCI) += davinci/
|
||||||
|
|
1702
drivers/media/video/omap1_camera.c
Normal file
1702
drivers/media/video/omap1_camera.c
Normal file
File diff suppressed because it is too large
Load diff
35
include/media/omap1_camera.h
Normal file
35
include/media/omap1_camera.h
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
/*
|
||||||
|
* Header for V4L2 SoC Camera driver for OMAP1 Camera Interface
|
||||||
|
*
|
||||||
|
* Copyright (C) 2010, Janusz Krzysztofik <jkrzyszt@tis.icnet.pl>
|
||||||
|
*
|
||||||
|
* 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 __MEDIA_OMAP1_CAMERA_H_
|
||||||
|
#define __MEDIA_OMAP1_CAMERA_H_
|
||||||
|
|
||||||
|
#include <linux/bitops.h>
|
||||||
|
|
||||||
|
#define OMAP1_CAMERA_IOSIZE 0x1c
|
||||||
|
|
||||||
|
enum omap1_cam_vb_mode {
|
||||||
|
OMAP1_CAM_DMA_CONTIG = 0,
|
||||||
|
OMAP1_CAM_DMA_SG,
|
||||||
|
};
|
||||||
|
|
||||||
|
#define OMAP1_CAMERA_MIN_BUF_COUNT(x) ((x) == OMAP1_CAM_DMA_CONTIG ? 3 : 2)
|
||||||
|
|
||||||
|
struct omap1_cam_platform_data {
|
||||||
|
unsigned long camexclk_khz;
|
||||||
|
unsigned long lclk_khz_max;
|
||||||
|
unsigned long flags;
|
||||||
|
};
|
||||||
|
|
||||||
|
#define OMAP1_CAMERA_LCLK_RISING BIT(0)
|
||||||
|
#define OMAP1_CAMERA_RST_LOW BIT(1)
|
||||||
|
#define OMAP1_CAMERA_RST_HIGH BIT(2)
|
||||||
|
|
||||||
|
#endif /* __MEDIA_OMAP1_CAMERA_H_ */
|
Loading…
Reference in a new issue