#
# Multimedia device configuration
#

menu "Multimedia devices"
	depends on HAS_IOMEM

config VIDEO_DEV
	tristate "Video For Linux"
	---help---
	  Support for audio/video capture and overlay devices and FM radio
	  cards. The exact capabilities of each device vary.

	  This kernel includes support for the new Video for Linux Two API,
	  (V4L2) as well as the original system. Drivers and applications
	  need to be rewritten to use V4L2, but drivers for popular cards
	  and applications for most video capture functions already exist.

	  Additional info and docs are available on the web at
	  <http://linuxtv.org>

	  Documentation for V4L2 is also available on the web at
	  <http://bytesex.org/v4l/>.

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

config VIDEO_V4L2_COMMON
	tristate
	depends on (I2C || I2C=n) && VIDEO_DEV
	default (I2C || I2C=n) && VIDEO_DEV

config VIDEO_V4L1
	bool "Enable Video For Linux API 1 (DEPRECATED)"
	depends on VIDEO_DEV && VIDEO_V4L2_COMMON
	default VIDEO_DEV && VIDEO_V4L2_COMMON
	select VIDEO_V4L1_COMPAT
	---help---
	  Enables a compatibility API used by most V4L2 devices to allow
	  its usage with legacy applications that supports only V4L1 api.

	  If you are unsure as to whether this is required, answer Y.

config VIDEO_V4L1_COMPAT
	bool "Enable Video For Linux API 1 compatible Layer"
	depends on VIDEO_DEV
	default VIDEO_DEV
	---help---
	  This api were developed to be used at Kernel 2.2 and 2.4, but
	  lacks support for several video standards. There are several
	  drivers at kernel that still depends on it.

	  Documentation for the original API is included in the file
	  <Documentation/video4linux/API.html>.

	  User tools for this are available from
	  <ftp://ftp.uk.linux.org/pub/linux/video4linux/>.

	  If you are unsure as to whether this is required, answer Y.

config VIDEO_V4L2
	bool
	depends on VIDEO_DEV && VIDEO_V4L2_COMMON
	default VIDEO_DEV && VIDEO_V4L2_COMMON

source "drivers/media/video/Kconfig"

source "drivers/media/radio/Kconfig"

source "drivers/media/dvb/Kconfig"

source "drivers/media/common/Kconfig"

config VIDEO_TUNER
	tristate
	depends on I2C
	select TUNER_XC2028 if !VIDEO_TUNER_CUSTOMIZE
	select TUNER_MT20XX if !VIDEO_TUNER_CUSTOMIZE
	select TUNER_TDA8290 if !VIDEO_TUNER_CUSTOMIZE
	select TUNER_TEA5761 if !VIDEO_TUNER_CUSTOMIZE
	select TUNER_TEA5767 if !VIDEO_TUNER_CUSTOMIZE
	select TUNER_SIMPLE if !VIDEO_TUNER_CUSTOMIZE
	select TUNER_TDA9887 if !VIDEO_TUNER_CUSTOMIZE

menuconfig VIDEO_TUNER_CUSTOMIZE
	bool "Customize analog tuner modules to build"
	depends on VIDEO_TUNER
	help
	  This allows the user to deselect tuner drivers unnecessary
	  for their hardware from the build. Use this option with care
	  as deselecting tuner drivers which are in fact necessary will
	  result in V4L devices which cannot be tuned due to lack of
	  driver support

	  If unsure say N.

if VIDEO_TUNER_CUSTOMIZE

config TUNER_XC2028
	tristate "XCeive xc2028/xc3028 tuners"
	depends on I2C && FW_LOADER
	default m if VIDEO_TUNER_CUSTOMIZE
	help
	  Say Y here to include support for the xc2028/xc3028 tuners.

config TUNER_MT20XX
	tristate "Microtune 2032 / 2050 tuners"
	depends on I2C
	default m if VIDEO_TUNER_CUSTOMIZE
	help
	  Say Y here to include support for the MT2032 / MT2050 tuner.

config TUNER_TDA8290
	tristate "TDA 8290/8295 + 8275(a)/18271 tuner combo"
	depends on I2C
	select DVB_TDA827X
	select DVB_TDA18271
	default m if VIDEO_TUNER_CUSTOMIZE
	help
	  Say Y here to include support for Philips TDA8290+8275(a) tuner.

config TUNER_TEA5761
	tristate "TEA 5761 radio tuner (EXPERIMENTAL)"
	depends on I2C && EXPERIMENTAL
	default m if VIDEO_TUNER_CUSTOMIZE
	help
	  Say Y here to include support for the Philips TEA5761 radio tuner.

config TUNER_TEA5767
	tristate "TEA 5767 radio tuner"
	depends on I2C
	default m if VIDEO_TUNER_CUSTOMIZE
	help
	  Say Y here to include support for the Philips TEA5767 radio tuner.

config TUNER_SIMPLE
	tristate "Simple tuner support"
	depends on I2C
	select TUNER_TDA9887
	default m if VIDEO_TUNER_CUSTOMIZE
	help
	  Say Y here to include support for various simple tuners.

config TUNER_TDA9887
	tristate "TDA 9885/6/7 analog IF demodulator"
	depends on I2C
	default m if VIDEO_TUNER_CUSTOMIZE
	help
	  Say Y here to include support for Philips TDA9885/6/7
	  analog IF demodulator.

endif # VIDEO_TUNER_CUSTOMIZE

config VIDEOBUF_GEN
	tristate

config VIDEOBUF_DMA_SG
	depends on PCI
	select VIDEOBUF_GEN
	tristate

config VIDEOBUF_VMALLOC
	select VIDEOBUF_GEN
	tristate

config VIDEOBUF_DVB
	tristate
	select VIDEOBUF_GEN
	select VIDEOBUF_DMA_SG

config VIDEO_BTCX
	tristate

config VIDEO_IR_I2C
	tristate

config VIDEO_IR
	tristate
	depends on INPUT
	select VIDEO_IR_I2C if I2C

config VIDEO_TVEEPROM
	tristate
	depends on I2C

config DAB
	boolean "DAB adapters"
	---help---
	  Allow selecting support for for Digital Audio Broadcasting (DAB)
	  Receiver adapters.

if DAB
config USB_DABUSB
	tristate "DABUSB driver"
	depends on USB
	---help---
	  A Digital Audio Broadcasting (DAB) Receiver for USB and Linux
	  brought to you by the DAB-Team
	  <http://wwwbode.cs.tum.edu/Par/arch/dab/>.  This driver can be taken
	  as an example for URB-based bulk, control, and isochronous
	  transactions. URB's are explained in
	  <Documentation/usb/URB.txt>.

	  To compile this driver as a module, choose M here: the
	  module will be called dabusb.
endif # DAB

endmenu
