# SPDX-License-Identifier: GPL-2.0-only
#
# 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"

config VIDEO_ASPEED
	tristate "Aspeed AST2400 and AST2500 Video Engine driver"
	depends on VIDEO_V4L2
	select VIDEOBUF2_DMA_CONTIG
	help
	  Support for the Aspeed Video Engine (VE) embedded in the Aspeed
	  AST2400 and AST2500 SOCs. The VE can capture and compress video data
	  from digital or analog sources.

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
	select V4L2_FWNODE
	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/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"
source "drivers/media/platform/sunxi/sun6i-csi/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_IMX_PXP
	tristate "i.MX Pixel Pipeline (PXP)"
	depends on VIDEO_DEV && VIDEO_V4L2 && (ARCH_MXC || COMPILE_TEST)
	select VIDEOBUF2_DMA_CONTIG
	select V4L2_MEM2MEM_DEV
	help
	  The i.MX Pixel Pipeline is a memory-to-memory engine for scaling,
	  color space conversion, and rotation.

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_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 VIDEO_MESON_G12A_AO_CEC
	tristate "Amlogic Meson G12A AO CEC driver"
	depends on ARCH_MESON || COMPILE_TEST
	depends on COMMON_CLK && OF
	select REGMAP
	select REGMAP_MMIO
	select CEC_CORE
	select CEC_NOTIFIER
	---help---
	  This is a driver for Amlogic Meson G12A SoCs AO CEC interface.
	  This driver if for the new AO-CEC module found in G12A SoCs,
	  usually named AO_CEC_B in documentation.
	  It uses the generic CEC framework interface.
	  CEC bus is present in the HDMI connector and enables communication
	  between compatible devices.

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.

config VIDEO_SECO_CEC
	tristate "SECO Boards HDMI CEC driver"
	depends on (X86 || IA64) || COMPILE_TEST
	depends on PCI && DMI
	select CEC_CORE
	select CEC_NOTIFIER
	help
	  This is a driver for SECO Boards integrated CEC interface.
	  Selecting it will enable support for this device.
	  CEC bus is present in the HDMI connector and enables communication
	  between compatible devices.

config VIDEO_SECO_RC
	bool "SECO Boards IR RC5 support"
	depends on VIDEO_SECO_CEC
	depends on RC_CORE=y || RC_CORE = VIDEO_SECO_CEC
	help
	  If you say yes here you will get support for the
	  SECO Boards Consumer-IR in seco-cec driver.
	  The embedded controller supports RC5 protocol only, default mapping
	  is set to rc-hauppauge.

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 Digital 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
