#
# Multimedia device configuration
#

menuconfig MEDIA_SUPPORT
	tristate "Multimedia support"
	depends on HAS_IOMEM
	help
	  If you want to use Webcams, Video grabber devices and/or TV devices
	  enable this option and other options below.
	  Additional info and docs are available on the web at
	  <http://linuxtv.org>

if MEDIA_SUPPORT

comment "Multimedia core support"

#
# Multimedia support - automatically enable V4L2 and DVB core
#
config MEDIA_CAMERA_SUPPORT
	bool "Cameras/video grabbers support"
	---help---
	  Enable support for webcams and video grabbers.

	  Say Y when you have a webcam or a video capture grabber board.

config MEDIA_ANALOG_TV_SUPPORT
	bool "Analog TV support"
	---help---
	  Enable analog TV support.

	  Say Y when you have a TV board with analog support or with a
	  hybrid analog/digital TV chipset.

	  Note: There are several DVB cards that are based on chips that
		support both analog and digital TV. Disabling this option
		will disable support for them.

config MEDIA_DIGITAL_TV_SUPPORT
	bool "Digital TV support"
	---help---
	  Enable digital TV support.

	  Say Y when you have a board with digital support or a board with
	  hybrid digital TV and analog TV.

config MEDIA_RADIO_SUPPORT
	bool "AM/FM radio receivers/transmitters support"
	---help---
	  Enable AM/FM radio support.

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

	  Say Y when you have a board with radio support.

	  Note: There are several TV cards that are based on chips that
		support radio reception. Disabling this option will
		disable support for them.

config MEDIA_RC_SUPPORT
	bool "Remote Controller support"
	depends on INPUT
	---help---
	  Enable support for Remote Controllers on Linux. This is
	  needed in order to support several video capture adapters,
	  standalone IR receivers/transmitters, and RF receivers.

	  Enable this option if you have a video capture board even
	  if you don't need IR, as otherwise, you may not be able to
	  compile the driver for your adapter.

	  Say Y when you have a TV or an IR device.

#
# Media controller
#	Selectable only for webcam/grabbers, as other drivers don't use it
#

config MEDIA_CONTROLLER
	bool "Media Controller API"
	depends on MEDIA_CAMERA_SUPPORT
	---help---
	  Enable the media controller API used to query media devices internal
	  topology and configure it dynamically.

	  This API is mostly used by camera interfaces in embedded platforms.

#
# Video4Linux support
#	Only enables if one of the V4L2 types (ATV, webcam, radio) is selected
#

config VIDEO_DEV
	tristate
	depends on MEDIA_SUPPORT
	depends on MEDIA_CAMERA_SUPPORT || MEDIA_ANALOG_TV_SUPPORT || MEDIA_RADIO_SUPPORT
	default y

config VIDEO_V4L2_SUBDEV_API
	bool "V4L2 sub-device userspace API"
	depends on VIDEO_DEV && MEDIA_CONTROLLER
	---help---
	  Enables the V4L2 sub-device pad-level userspace API used to configure
	  video format, size and frame rate between hardware blocks.

	  This API is mostly used by camera interfaces in embedded platforms.

source "drivers/media/v4l2-core/Kconfig"

#
# DVB Core
#	Only enables if one of DTV is selected
#

config DVB_CORE
	tristate
	depends on MEDIA_SUPPORT
	depends on MEDIA_DIGITAL_TV_SUPPORT
	default y
	select CRC32

config DVB_NET
	bool "DVB Network Support"
	default (NET && INET)
	depends on NET && INET && DVB_CORE
	help
	  This option enables DVB Network Support which is a part of the DVB
	  standard. It is used, for example, by automatic firmware updates used
	  on Set-Top-Boxes. It can also be used to access the Internet via the
	  DVB card, if the network provider supports it.

	  You may want to disable the network support on embedded devices. If
	  unsure say Y.

source "drivers/media/dvb-core/Kconfig"

comment "Media drivers"
source "drivers/media/rc/Kconfig"

#
# V4L platform/mem2mem drivers
#

source "drivers/media/usb/Kconfig"
source "drivers/media/pci/Kconfig"
source "drivers/media/platform/Kconfig"
source "drivers/media/mmc/Kconfig"
source "drivers/media/parport/Kconfig"
source "drivers/media/radio/Kconfig"

comment "Supported FireWire (IEEE 1394) Adapters"
	depends on DVB_CORE && FIREWIRE
source "drivers/media/firewire/Kconfig"

# Common driver options
source "drivers/media/common/Kconfig"

#
# Ancillary drivers (tuners, i2c, frontends)
#

config MEDIA_SUBDRV_AUTOSELECT
	bool "Autoselect tuners and i2c modules to build"
	depends on MEDIA_ANALOG_TV_SUPPORT || MEDIA_DIGITAL_TV_SUPPORT || MEDIA_CAMERA_SUPPORT
	default y
	help
	  By default, a media driver auto-selects all possible i2c
	  devices that are used by any of the supported devices.

	  This is generally the right thing to do, except when there
	  are strict constraints with regards to the kernel size,
	  like on embedded systems.

	  Use this option with care, as deselecting ancillary drivers which
	  are, in fact, necessary will result in the lack of the needed
	  functionality for your device (it may not tune or may not have
	  the need demodulers).

	  If unsure say Y.

comment "Media ancillary drivers (tuners, sensors, i2c, frontends)"

source "drivers/media/i2c/Kconfig"
source "drivers/media/tuners/Kconfig"
source "drivers/media/dvb-frontends/Kconfig"

endif # MEDIA_SUPPORT
