#
# Platform drivers
#	All drivers here are currently for webcam support

menuconfig V4L_PLATFORM_DRIVERS
	bool "V4L platform devices"
	depends on MEDIA_CAMERA_SUPPORT
	default n
	---help---
	  Say Y here to enable support for platform-specific V4L drivers.

if V4L_PLATFORM_DRIVERS

source "drivers/media/platform/marvell-ccic/Kconfig"

config VIDEO_VIA_CAMERA
	tristate "VIAFB camera controller support"
	depends on m
	depends on FB_VIA
	select VIDEOBUF_DMA_SG
	select VIDEO_OV7670
	help
	   Driver support for the integrated camera controller in VIA
	   Chrome9 chipsets.  Currently only tested on OLPC xo-1.5 systems
	   with ov7670 sensors.

#
# Platform multimedia device configuration
#

source "drivers/media/platform/davinci/Kconfig"

source "drivers/media/platform/omap/Kconfig"

source "drivers/media/platform/blackfin/Kconfig"

config VIDEO_SH_VOU
	tristate "SuperH VOU video output driver"
	depends on m
	depends on MEDIA_CAMERA_SUPPORT
	depends on VIDEO_DEV && I2C && HAS_DMA
	depends on ARCH_SHMOBILE || COMPILE_TEST
	select VIDEOBUF_DMA_CONTIG
	help
	  Support for the Video Output Unit (VOU) on SuperH SoCs.

config VIDEO_VIU
	tristate "Freescale VIU Video Driver"
	depends on m
	depends on VIDEO_V4L2 && PPC_MPC512x
	select VIDEOBUF_DMA_CONTIG
	default y
	---help---
	  Support for Freescale VIU video driver. This device captures
	  video data, or overlays video on DIU frame buffer.

	  Say Y here if you want to enable VIU device on MPC5121e Rev2+.
	  In doubt, say N.

config VIDEO_TIMBERDALE
	depends on !KERNEL_3_4
	tristate "Support for timberdale Video In/LogiWIN"
	depends on m
	depends on VIDEO_V4L2 && I2C && DMADEVICES
	depends on MFD_TIMBERDALE || COMPILE_TEST
	depends on DMA_ENGINE
	depends on TIMB_DMA
	select VIDEO_ADV7180
	select VIDEOBUF_DMA_CONTIG
	---help---
	  Add support for the Video In peripherial of the timberdale FPGA.

config VIDEO_M32R_AR
	tristate "AR devices"
	depends on m
	depends on VIDEO_V4L2
	depends on M32R || COMPILE_TEST
	---help---
	  This is a video4linux driver for the Renesas AR (Artificial Retina)
	  camera module.

config VIDEO_M32R_AR_M64278
	tristate "AR device with color module M64278(VGA)"
	depends on m
	depends on PLAT_M32700UT
	select VIDEO_M32R_AR
	---help---
	  This is a video4linux driver for the Renesas AR (Artificial
	  Retina) with M64278E-800 camera module.
	  This module supports VGA(640x480 pixels) resolutions.

	  To compile this driver as a module, choose M here: the
	  module will be called arv.

config VIDEO_OMAP3
	tristate "OMAP 3 Camera support"
	depends on m
	depends on VIDEO_V4L2 && I2C && VIDEO_V4L2_SUBDEV_API && ARCH_OMAP3
	depends on HAS_DMA
	depends on ARM_DMA_USE_IOMMU
	depends on OMAP_IOMMU
	select VIDEOBUF2_DMA_CONTIG
	---help---
	  Driver for an OMAP 3 camera controller.

config VIDEO_OMAP3_DEBUG
	bool "OMAP 3 Camera debug messages"
	depends on VIDEO_OMAP3
	---help---
	  Enable debug messages on OMAP 3 camera controller driver.

config VIDEO_S3C_CAMIF
	tristate "Samsung S3C24XX/S3C64XX SoC Camera Interface driver"
	depends on m
	depends on VIDEO_V4L2 && I2C && VIDEO_V4L2_SUBDEV_API
	depends on PM
	depends on ARCH_S3C64XX || PLAT_S3C24XX || COMPILE_TEST
	depends on HAS_DMA
	select VIDEOBUF2_DMA_CONTIG
	---help---
	  This is a v4l2 driver for s3c24xx and s3c64xx SoC series camera
	  host interface (CAMIF).

	  To compile this driver as a module, choose M here: the module
	  will be called s3c-camif.

source "drivers/media/platform/soc_camera/Kconfig"
source "drivers/media/platform/exynos4-is/Kconfig"
source "drivers/media/platform/s5p-tv/Kconfig"

endif # V4L_PLATFORM_DRIVERS

menuconfig V4L_MEM2MEM_DRIVERS
	bool "Memory-to-memory multimedia devices"
	depends on VIDEO_V4L2
	depends on MEDIA_CAMERA_SUPPORT
	default n
	---help---
	  Say Y here to enable selecting drivers for V4L devices that
	  use system memory for both source and destination buffers, as opposed
	  to capture and output drivers, which use memory buffers for just
	  one of those.

if V4L_MEM2MEM_DRIVERS

config VIDEO_CODA
	tristate "Chips&Media Coda multi-standard codec IP"
	depends on m
	depends on VIDEO_DEV && VIDEO_V4L2 && ARCH_MXC
	depends on HAS_DMA
	depends on SRAM
	select VIDEOBUF2_DMA_CONTIG
	select V4L2_MEM2MEM_DEV
	depends on GENERIC_ALLOCATOR
	---help---
	   Coda is a range of video codec IPs that supports
	   H.264, MPEG-4, and other video formats.

config VIDEO_MEM2MEM_DEINTERLACE
	depends on !KERNEL_3_3
	tristate "Deinterlace support"
	depends on m
	depends on VIDEO_DEV && VIDEO_V4L2 && DMA_ENGINE
	depends on HAS_DMA
	select VIDEOBUF2_DMA_CONTIG
	select V4L2_MEM2MEM_DEV
	help
	    Generic deinterlacing V4L2 driver.

config VIDEO_SAMSUNG_S5P_G2D
	tristate "Samsung S5P and EXYNOS4 G2D 2d graphics accelerator driver"
	depends on m
	depends on VIDEO_DEV && VIDEO_V4L2
	depends on ARCH_S5PV210 || ARCH_EXYNOS || COMPILE_TEST
	depends on HAS_DMA
	select VIDEOBUF2_DMA_CONTIG
	select V4L2_MEM2MEM_DEV
	default n
	---help---
	  This is a v4l2 driver for Samsung S5P and EXYNOS4 G2D
	  2d graphics accelerator.

config VIDEO_SAMSUNG_S5P_JPEG
	tristate "Samsung S5P/Exynos3250/Exynos4 JPEG codec driver"
	depends on m
	depends on VIDEO_DEV && VIDEO_V4L2
	depends on ARCH_S5PV210 || ARCH_EXYNOS || COMPILE_TEST
	depends on HAS_DMA
	select VIDEOBUF2_DMA_CONTIG
	select V4L2_MEM2MEM_DEV
	---help---
	  This is a v4l2 driver for Samsung S5P, EXYNOS3250
	  and EXYNOS4 JPEG codec

config VIDEO_SAMSUNG_S5P_MFC
	tristate "Samsung S5P MFC Video Codec"
	depends on m
	depends on VIDEO_DEV && VIDEO_V4L2
	depends on ARCH_S5PV210 || ARCH_EXYNOS || COMPILE_TEST
	depends on HAS_DMA
	select VIDEOBUF2_DMA_CONTIG
	default n
	help
	    MFC 5.1 and 6.x driver for V4L2

config VIDEO_MX2_EMMAPRP
	tristate "MX2 eMMa-PrP support"
	depends on m
	depends on VIDEO_DEV && VIDEO_V4L2
	depends on SOC_IMX27 || COMPILE_TEST
	depends on HAS_DMA
	select VIDEOBUF2_DMA_CONTIG
	select V4L2_MEM2MEM_DEV
	help
	    MX2X chips have a PrP that can be used to process buffers from
	    memory to memory. Operations include resizing and format
	    conversion.

config VIDEO_SAMSUNG_EXYNOS_GSC
	tristate "Samsung Exynos G-Scaler driver"
	depends on m
	depends on VIDEO_DEV && VIDEO_V4L2
	depends on ARCH_EXYNOS5 || COMPILE_TEST
	depends on HAS_DMA
	select VIDEOBUF2_DMA_CONTIG
	select V4L2_MEM2MEM_DEV
	help
	  This is a v4l2 driver for Samsung EXYNOS5 SoC G-Scaler.

config VIDEO_SH_VEU
	tristate "SuperH VEU mem2mem video processing driver"
	depends on m
	depends on VIDEO_DEV && VIDEO_V4L2 && HAS_DMA
	depends on HAS_DMA
	select VIDEOBUF2_DMA_CONTIG
	select V4L2_MEM2MEM_DEV
	help
	    Support for the Video Engine Unit (VEU) on SuperH and
	    SH-Mobile SoCs.

config VIDEO_RENESAS_VSP1
	depends on !KERNEL_3_4
	tristate "Renesas VSP1 Video Processing Engine"
	depends on m
	depends on VIDEO_V4L2 && VIDEO_V4L2_SUBDEV_API && HAS_DMA
	depends on ARCH_SHMOBILE || COMPILE_TEST
	select VIDEOBUF2_DMA_CONTIG
	---help---
	  This is a V4L2 driver for the Renesas VSP1 video processing engine.

	  To compile this driver as a module, choose M here: the module
	  will be called vsp1.

config VIDEO_TI_VPE
	tristate "TI VPE (Video Processing Engine) driver"
	depends on m
	depends on VIDEO_DEV && VIDEO_V4L2
	depends on SOC_DRA7XX || COMPILE_TEST
	depends on HAS_DMA
	select VIDEOBUF2_DMA_CONTIG
	select V4L2_MEM2MEM_DEV
	default n
	---help---
	  Support for the TI VPE(Video Processing Engine) block
	  found on DRA7XX SoC.

config VIDEO_TI_VPE_DEBUG
	bool "VPE debug messages"
	depends on VIDEO_TI_VPE
	---help---
	  Enable debug messages on VPE driver.

endif # V4L_MEM2MEM_DRIVERS

menuconfig V4L_TEST_DRIVERS
	bool "Media test drivers"
	depends on MEDIA_CAMERA_SUPPORT

if V4L_TEST_DRIVERS

source "drivers/media/platform/vivid/Kconfig"

config VIDEO_VIM2M
	tristate "Virtual Memory-to-Memory Driver"
	depends on m
	depends on VIDEO_DEV && VIDEO_V4L2
	select VIDEOBUF2_VMALLOC
	select V4L2_MEM2MEM_DEV
	default n
	---help---
	  This is a virtual test device for the memory-to-memory driver
	  framework.
endif #V4L_TEST_DRIVERS
