#
# Platform drivers
#	Most 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 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/cadence/Kconfig"

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

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

source "drivers/media/platform/mxc/capture/Kconfig"

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

config VIDEO_VIU
	tristate "Freescale VIU Video Driver"
	depends on VIDEO_V4L2 && (PPC_MPC512x || COMPILE_TEST) && I2C
	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_MUX
	tristate "Video Multiplexer"
	select MULTIPLEXER
	depends on VIDEO_V4L2 && OF && VIDEO_V4L2_SUBDEV_API && MEDIA_CONTROLLER
	select REGMAP
	help
	  This driver provides support for N:1 video bus multiplexers.

config VIDEO_OMAP3
	tristate "OMAP 3 Camera support"
	depends on VIDEO_V4L2 && I2C && VIDEO_V4L2_SUBDEV_API
	depends on (ARCH_OMAP3 && OMAP_IOMMU) || COMPILE_TEST
	depends on COMMON_CLK && OF
	select ARM_DMA_USE_IOMMU if OMAP_IOMMU
	select VIDEOBUF2_DMA_CONTIG
	select MFD_SYSCON
	select V4L2_FWNODE
	---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_PXA27x
	tristate "PXA27x Quick Capture Interface driver"
	depends on VIDEO_DEV && VIDEO_V4L2
	depends on PXA27x || COMPILE_TEST
	select VIDEOBUF2_DMA_SG
	select SG_SPLIT
	select V4L2_FWNODE
	---help---
	  This is a v4l2 driver for the PXA27x Quick Capture Interface

config VIDEO_QCOM_CAMSS
	tristate "Qualcomm V4L2 Camera Subsystem driver"
	depends on VIDEO_V4L2 && VIDEO_V4L2_SUBDEV_API
	depends on (ARCH_QCOM && IOMMU_DMA) || COMPILE_TEST
	select VIDEOBUF2_DMA_SG
	select V4L2_FWNODE

config VIDEO_S3C_CAMIF
	tristate "Samsung S3C24XX/S3C64XX SoC Camera Interface driver"
	depends on VIDEO_V4L2 && I2C && VIDEO_V4L2_SUBDEV_API
	depends on PM
	depends on ARCH_S3C64XX || PLAT_S3C24XX || COMPILE_TEST
	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.

config VIDEO_STM32_DCMI
	tristate "STM32 Digital Camera Memory Interface (DCMI) support"
	depends on VIDEO_V4L2 && OF
	depends on ARCH_STM32 || COMPILE_TEST
	select VIDEOBUF2_DMA_CONTIG
	select V4L2_FWNODE
	---help---
	  This module makes the STM32 Digital Camera Memory Interface (DCMI)
	  available as a v4l2 device.

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

config VIDEO_RENESAS_CEU
	tristate "Renesas Capture Engine Unit (CEU) driver"
	depends on VIDEO_DEV && VIDEO_V4L2
	depends on ARCH_SHMOBILE || ARCH_R7S72100 || COMPILE_TEST
	select VIDEOBUF2_DMA_CONTIG
	select V4L2_FWNODE
	---help---
	  This is a v4l2 driver for the Renesas CEU Interface

source "drivers/media/platform/soc_camera/Kconfig"
source "drivers/media/platform/exynos4-is/Kconfig"
source "drivers/media/platform/am437x/Kconfig"
source "drivers/media/platform/xilinx/Kconfig"
source "drivers/media/platform/rcar-vin/Kconfig"
source "drivers/media/platform/atmel/Kconfig"

config VIDEO_TI_CAL
	tristate "TI CAL (Camera Adaptation Layer) driver"
	depends on VIDEO_DEV && VIDEO_V4L2 && VIDEO_V4L2_SUBDEV_API
	depends on SOC_DRA7XX || COMPILE_TEST
	select VIDEOBUF2_DMA_CONTIG
	select V4L2_FWNODE
	default n
	---help---
	  Support for the TI CAL (Camera Adaptation Layer) block
	  found on DRA72X SoC.
	  In TI Technical Reference Manual this module is referred as
	  Camera Interface Subsystem (CAMSS).

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 VIDEO_DEV && VIDEO_V4L2 && (ARCH_MXC || COMPILE_TEST)
	select SRAM
	select VIDEOBUF2_DMA_CONTIG
	select VIDEOBUF2_VMALLOC
	select V4L2_MEM2MEM_DEV
	select GENERIC_ALLOCATOR
	---help---
	   Coda is a range of video codec IPs that supports
	   H.264, MPEG-4, and other video formats.

config VIDEO_IMX_VDOA
	def_tristate VIDEO_CODA if SOC_IMX6Q || COMPILE_TEST

config VIDEO_MEDIATEK_JPEG
	tristate "Mediatek JPEG Codec driver"
	depends on MTK_IOMMU_V1 || COMPILE_TEST
	depends on VIDEO_DEV && VIDEO_V4L2
	depends on ARCH_MEDIATEK || COMPILE_TEST
	select VIDEOBUF2_DMA_CONTIG
	select V4L2_MEM2MEM_DEV
	---help---
	  Mediatek jpeg codec driver provides HW capability to decode
	  JPEG format

	  To compile this driver as a module, choose M here: the
	  module will be called mtk-jpeg

config VIDEO_MEDIATEK_VPU
	tristate "Mediatek Video Processor Unit"
	depends on VIDEO_DEV && VIDEO_V4L2
	depends on ARCH_MEDIATEK || COMPILE_TEST
	---help---
	    This driver provides downloading VPU firmware and
	    communicating with VPU. This driver for hw video
	    codec embedded in Mediatek's MT8173 SOCs. It is able
	    to handle video decoding/encoding in a range of formats.

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

config VIDEO_MEDIATEK_MDP
	tristate "Mediatek MDP driver"
	depends on MTK_IOMMU || COMPILE_TEST
	depends on VIDEO_DEV && VIDEO_V4L2
	depends on ARCH_MEDIATEK || COMPILE_TEST
	select VIDEOBUF2_DMA_CONTIG
	select V4L2_MEM2MEM_DEV
	select VIDEO_MEDIATEK_VPU
	default n
	---help---
	    It is a v4l2 driver and present in Mediatek MT8173 SoCs.
	    The driver supports for scaling and color space conversion.

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

config VIDEO_MEDIATEK_VCODEC
	tristate "Mediatek Video Codec driver"
	depends on MTK_IOMMU || COMPILE_TEST
	depends on VIDEO_DEV && VIDEO_V4L2
	depends on ARCH_MEDIATEK || COMPILE_TEST
	select VIDEOBUF2_DMA_CONTIG
	select V4L2_MEM2MEM_DEV
	select VIDEO_MEDIATEK_VPU
	default n
	---help---
	    Mediatek video codec driver provides HW capability to
	    encode and decode in a range of video formats
	    This driver rely on VPU driver to communicate with VPU.

	    To compile this driver as a module, choose M here: the
	    module will be called mtk-vcodec

config VIDEO_MEDIATEK_VCODEC_MT8167
	tristate "Mediatek Video Codec driver for MT8167 SoC"
	depends on MTK_IOMMU || COMPILE_TEST
	depends on VIDEO_DEV && VIDEO_V4L2
	depends on ARCH_MEDIATEK || COMPILE_TEST
	depends on !VIDEO_MEDIATEK_VCODEC
	select VIDEOBUF2_DMA_CONTIG
	select V4L2_MEM2MEM_DEV
	select VIDEO_MEDIATEK_VPU
	default n
	---help---
	    Mediatek MT8167 video codec driver provides HW capability to
	    encode and decode in a range of video formats
	    This driver rely on VPU driver to communicate with VPU.

	    To compile this driver as a module, choose M here: the
	    module will be called mtk-vcodec

config VIDEO_MEM2MEM_DEINTERLACE
	tristate "Deinterlace support"
	depends on VIDEO_DEV && VIDEO_V4L2
	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 VIDEO_DEV && VIDEO_V4L2
	depends on ARCH_S5PV210 || ARCH_EXYNOS || COMPILE_TEST
	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 VIDEO_DEV && VIDEO_V4L2
	depends on ARCH_S5PV210 || ARCH_EXYNOS || COMPILE_TEST
	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 VIDEO_DEV && VIDEO_V4L2
	depends on ARCH_S5PV210 || ARCH_EXYNOS || COMPILE_TEST
	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 VIDEO_DEV && VIDEO_V4L2
	depends on SOC_IMX27 || COMPILE_TEST
	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 VIDEO_DEV && VIDEO_V4L2
	depends on ARCH_EXYNOS || COMPILE_TEST
	select VIDEOBUF2_DMA_CONTIG
	select V4L2_MEM2MEM_DEV
	help
	  This is a v4l2 driver for Samsung EXYNOS5 SoC G-Scaler.

config VIDEO_STI_BDISP
	tristate "STMicroelectronics BDISP 2D blitter driver"
	depends on VIDEO_DEV && VIDEO_V4L2
	depends on ARCH_STI || COMPILE_TEST
	select VIDEOBUF2_DMA_CONTIG
	select V4L2_MEM2MEM_DEV
	help
	  This v4l2 mem2mem driver is a 2D blitter for STMicroelectronics SoC.

config VIDEO_STI_HVA
	tristate "STMicroelectronics HVA multi-format video encoder V4L2 driver"
	depends on VIDEO_DEV && VIDEO_V4L2
	depends on ARCH_STI || COMPILE_TEST
	select VIDEOBUF2_DMA_CONTIG
	select V4L2_MEM2MEM_DEV
	help
	  This V4L2 driver enables HVA (Hardware Video Accelerator) multi-format
	  video encoder of STMicroelectronics SoC, allowing hardware encoding of
	  raw uncompressed formats in various compressed video bitstreams format.

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

config VIDEO_STI_HVA_DEBUGFS
	bool "Export STMicroelectronics HVA internals in debugfs"
	depends on VIDEO_STI_HVA
	depends on DEBUG_FS
	help
	  Select this to see information about the internal state and the last
	  operation of STMicroelectronics HVA multi-format video encoder in
	  debugfs.

	  Choose N unless you know you need this.

config VIDEO_STI_DELTA
	tristate "STMicroelectronics DELTA multi-format video decoder V4L2 driver"
	depends on VIDEO_DEV && VIDEO_V4L2
	depends on ARCH_STI || COMPILE_TEST
	help
		This V4L2 driver enables DELTA multi-format video decoder
		of STMicroelectronics STiH4xx SoC series allowing hardware
		decoding of various compressed video bitstream format in
		raw uncompressed format.

		Use this option to see the decoders available for such
		hardware.

		Please notice that the driver will only be built if
		at least one of the DELTA decoder below is selected.

if VIDEO_STI_DELTA

config VIDEO_STI_DELTA_MJPEG
	bool "STMicroelectronics DELTA MJPEG support"
	default y
	help
		Enables DELTA MJPEG hardware support.

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

config VIDEO_STI_DELTA_DRIVER
	tristate
	depends on VIDEO_STI_DELTA
	depends on VIDEO_STI_DELTA_MJPEG
	default VIDEO_STI_DELTA_MJPEG
	select VIDEOBUF2_DMA_CONTIG
	select V4L2_MEM2MEM_DEV
	select RPMSG

endif # VIDEO_STI_DELTA

config VIDEO_SH_VEU
	tristate "SuperH VEU mem2mem video processing driver"
	depends on VIDEO_DEV && VIDEO_V4L2 && 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_FDP1
	tristate "Renesas Fine Display Processor"
	depends on VIDEO_DEV && VIDEO_V4L2
	depends on ARCH_RENESAS || COMPILE_TEST
	depends on (!ARM64 && !VIDEO_RENESAS_FCP) || VIDEO_RENESAS_FCP
	select VIDEOBUF2_DMA_CONTIG
	select V4L2_MEM2MEM_DEV
	---help---
	  This is a V4L2 driver for the Renesas Fine Display Processor
	  providing colour space conversion, and de-interlacing features.

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

config VIDEO_RENESAS_JPU
	tristate "Renesas JPEG Processing Unit"
	depends on VIDEO_DEV && VIDEO_V4L2
	depends on ARCH_RENESAS || COMPILE_TEST
	select VIDEOBUF2_DMA_CONTIG
	select V4L2_MEM2MEM_DEV
	---help---
	  This is a V4L2 driver for the Renesas JPEG Processing Unit.

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

config VIDEO_RENESAS_FCP
	tristate "Renesas Frame Compression Processor"
	depends on ARCH_RENESAS || COMPILE_TEST
	depends on OF
	---help---
	  This is a driver for the Renesas Frame Compression Processor (FCP).
	  The FCP is a companion module of video processing modules in the
	  Renesas R-Car Gen3 SoCs. It handles memory access for the codec,
	  VSP and FDP modules.

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

config VIDEO_RENESAS_VSP1
	tristate "Renesas VSP1 Video Processing Engine"
	depends on VIDEO_V4L2 && VIDEO_V4L2_SUBDEV_API
	depends on ARCH_RENESAS || COMPILE_TEST
	depends on (!ARM64 && !VIDEO_RENESAS_FCP) || VIDEO_RENESAS_FCP
	select VIDEOBUF2_DMA_CONTIG
	select VIDEOBUF2_VMALLOC
	---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_ROCKCHIP_RGA
	tristate "Rockchip Raster 2d Graphic Acceleration Unit"
	depends on VIDEO_DEV && VIDEO_V4L2
	depends on ARCH_ROCKCHIP || COMPILE_TEST
	select VIDEOBUF2_DMA_SG
	select V4L2_MEM2MEM_DEV
	default n
	---help---
	  This is a v4l2 driver for Rockchip SOC RGA 2d graphics accelerator.
	  Rockchip RGA is a separate 2D raster graphic acceleration unit.
	  It accelerates 2D graphics operations, such as point/line drawing,
	  image scaling, rotation, BitBLT, alpha blending and image blur/sharpness.

	  To compile this driver as a module choose m here.

config VIDEO_TI_VPE
	tristate "TI VPE (Video Processing Engine) driver"
	depends on VIDEO_DEV && VIDEO_V4L2
	depends on SOC_DRA7XX || COMPILE_TEST
	select VIDEOBUF2_DMA_CONTIG
	select V4L2_MEM2MEM_DEV
	select VIDEO_TI_VPDMA
	select VIDEO_TI_SC
	select VIDEO_TI_CSC
	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.

config VIDEO_QCOM_VENUS
	tristate "Qualcomm Venus V4L2 encoder/decoder driver"
	depends on VIDEO_DEV && VIDEO_V4L2
	depends on (ARCH_QCOM && IOMMU_DMA) || COMPILE_TEST
	select QCOM_MDT_LOADER if ARCH_QCOM
	select QCOM_SCM if ARCH_QCOM
	select VIDEOBUF2_DMA_SG
	select V4L2_MEM2MEM_DEV
	---help---
	  This is a V4L2 driver for Qualcomm Venus video accelerator
	  hardware. It accelerates encoding and decoding operations
	  on various Qualcomm SoCs.
	  To compile this driver as a module choose m here.

endif # V4L_MEM2MEM_DRIVERS

# TI VIDEO PORT Helper Modules
# These will be selected by VPE and VIP
config VIDEO_TI_VPDMA
	tristate

config VIDEO_TI_SC
	tristate

config VIDEO_TI_CSC
	tristate

menuconfig V4L_TEST_DRIVERS
	bool "Media test drivers"
	depends on MEDIA_CAMERA_SUPPORT

if V4L_TEST_DRIVERS

source "drivers/media/platform/vimc/Kconfig"

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

config VIDEO_VIM2M
	tristate "Virtual Memory-to-Memory Driver"
	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.

source "drivers/media/platform/vicodec/Kconfig"

endif #V4L_TEST_DRIVERS

menuconfig DVB_PLATFORM_DRIVERS
	bool "DVB platform devices"
	depends on MEDIA_DIGITAL_TV_SUPPORT
	default n
	---help---
	  Say Y here to enable support for platform-specific Digital TV drivers.

if DVB_PLATFORM_DRIVERS
source "drivers/media/platform/sti/c8sectpfe/Kconfig"
endif #DVB_PLATFORM_DRIVERS

menuconfig CEC_PLATFORM_DRIVERS
	bool "CEC platform devices"
	depends on MEDIA_CEC_SUPPORT

if CEC_PLATFORM_DRIVERS

config VIDEO_CROS_EC_CEC
	tristate "ChromeOS EC CEC driver"
	depends on MFD_CROS_EC
	select CEC_CORE
	select CEC_NOTIFIER
	select CHROME_PLATFORMS
	select CROS_EC_PROTO
	---help---
	  If you say yes here you will get support for the
	  ChromeOS Embedded Controller's CEC.
	  The CEC bus is present in the HDMI connector and enables communication
	  between compatible devices.

config VIDEO_MESON_AO_CEC
	tristate "Amlogic Meson AO CEC driver"
	depends on ARCH_MESON || COMPILE_TEST
	select CEC_CORE
	select CEC_NOTIFIER
	---help---
	  This is a driver for Amlogic Meson SoCs AO CEC interface. It uses the
	  generic CEC framework interface.
	  CEC bus is present in the HDMI connector and enables communication

config CEC_GPIO
	tristate "Generic GPIO-based CEC driver"
	depends on PREEMPT || COMPILE_TEST
	select CEC_CORE
	select CEC_PIN
	select GPIOLIB
	---help---
	  This is a generic GPIO-based CEC driver.
	  The CEC bus is present in the HDMI connector and enables communication
	  between compatible devices.

config VIDEO_SAMSUNG_S5P_CEC
       tristate "Samsung S5P CEC driver"
       depends on ARCH_EXYNOS || COMPILE_TEST
       select CEC_CORE
       select CEC_NOTIFIER
       ---help---
	 This is a driver for Samsung S5P HDMI CEC interface. It uses the
	 generic CEC framework interface.
	 CEC bus is present in the HDMI connector and enables communication
	 between compatible devices.

config VIDEO_STI_HDMI_CEC
       tristate "STMicroelectronics STiH4xx HDMI CEC driver"
       depends on ARCH_STI || COMPILE_TEST
       select CEC_CORE
       select CEC_NOTIFIER
       ---help---
	 This is a driver for STIH4xx HDMI CEC interface. It uses the
	 generic CEC framework interface.
	 CEC bus is present in the HDMI connector and enables communication
	 between compatible devices.

config VIDEO_STM32_HDMI_CEC
       tristate "STMicroelectronics STM32 HDMI CEC driver"
       depends on ARCH_STM32 || COMPILE_TEST
       select REGMAP
       select REGMAP_MMIO
       select CEC_CORE
       ---help---
	 This is a driver for STM32 interface. It uses the
	 generic CEC framework interface.
	 CEC bus is present in the HDMI connector and enables communication
	 between compatible devices.

config VIDEO_TEGRA_HDMI_CEC
       tristate "Tegra HDMI CEC driver"
       depends on ARCH_TEGRA || COMPILE_TEST
       select CEC_CORE
       select CEC_NOTIFIER
       ---help---
	 This is a driver for the Tegra HDMI CEC interface. It uses the
	 generic CEC framework interface.
	 The CEC bus is present in the HDMI connector and enables communication
	 between compatible devices.

endif #CEC_PLATFORM_DRIVERS

menuconfig SDR_PLATFORM_DRIVERS
	bool "SDR platform devices"
	depends on MEDIA_SDR_SUPPORT
	default n
	---help---
	  Say Y here to enable support for platform-specific SDR Drivers.

if SDR_PLATFORM_DRIVERS

config VIDEO_RCAR_DRIF
	tristate "Renesas Digitial Radio Interface (DRIF)"
	depends on VIDEO_V4L2
	depends on ARCH_RENESAS || COMPILE_TEST
	select VIDEOBUF2_VMALLOC
	---help---
	  Say Y if you want to enable R-Car Gen3 DRIF support. DRIF is Digital
	  Radio Interface that interfaces with an RF front end chip. It is a
	  receiver of digital data which uses DMA to transfer received data to
	  a configured location for an application to use.

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

endif # SDR_PLATFORM_DRIVERS
