#
# Multimedia device configuration
#

menuconfig MEDIA_SUPPORT
	tristate "Multimedia support"
	depends on HAS_IOMEM
	help
	  If you want to use Video for Linux, DVB for Linux, or DAB adapters,
	  enable this option and other options below.

if MEDIA_SUPPORT

comment "Multimedia core support"

#
# V4L core and enabled API's
#

config VIDEO_DEV
	tristate "Video For Linux"
	---help---
	  V4L core support for video capture and overlay devices, webcams and
	  AM/FM radio cards.

	  This kernel includes support for the new Video for Linux Two API,
	  (V4L2).

	  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_ALLOW_V4L1
	bool "Enable Video For Linux API 1 (DEPRECATED)"
	depends on VIDEO_DEV && VIDEO_V4L2_COMMON
	default VIDEO_DEV && VIDEO_V4L2_COMMON
	---help---
	  Enables drivers based on the legacy V4L1 API.

	  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.

	  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" if !VIDEO_ALLOW_V4L1
	depends on VIDEO_DEV
	default y
	---help---
	  Enables a compatibility API used by most V4L2 devices to allow
	  its usage with legacy applications that supports only V4L1 api.

	  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.

#
# DVB Core
#

config DVB_CORE
	tristate "DVB for Linux"
	depends on NET && INET
	select CRC32
	help
	  DVB core utility functions for device handling, software fallbacks etc.

	  Enable this if you own a DVB/ATSC adapter and want to use it or if
	  you compile Linux for a digital SetTopBox.

	  Say Y when you have a DVB or an ATSC card and want to use it.

	  API specs and user tools are available from <http://www.linuxtv.org/>.

	  Please report problems regarding this support to the LinuxDVB
	  mailing list.

	  If unsure say N.

config VIDEO_MEDIA
	tristate
	default (DVB_CORE && (VIDEO_DEV = n)) || (VIDEO_DEV && (DVB_CORE = n)) || (DVB_CORE && VIDEO_DEV)

comment "Multimedia drivers"

source "drivers/media/common/Kconfig"

#
# Tuner drivers for DVB and V4L
#

source "drivers/media/common/tuners/Kconfig"

#
# Video/Radio/Hybrid adapters
#

source "drivers/media/video/Kconfig"

source "drivers/media/radio/Kconfig"

#
# DVB adapters
#

source "drivers/media/dvb/Kconfig"

config DAB
	boolean "DAB adapters"
	---help---
	  Allow selecting support 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

endif # MEDIA_SUPPORT
