# SPDX-License-Identifier: GPL-2.0-only
#
# Multimedia device configuration
#

#
# NOTE: CEC and Remote Controller support should not depend on MEDIA_SUPPORT
#
source "drivers/media/rc/Kconfig"
source "drivers/media/cec/Kconfig"

menuconfig MEDIA_SUPPORT
	tristate "Multimedia support"
	depends on HAS_IOMEM
	help
	  If you want to use media devices, including Webcams, Video grabber
	  devices and/or TV devices, V4L2 codecs, etc, enable this option
	  and other options below.

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

if MEDIA_SUPPORT

config MEDIA_SUPPORT_FILTER
	bool "Filter media drivers"
	default y if !EMBEDDED && !EXPERT
	help
	   Configuring the media subsystem can be complex, as there are
	   hundreds of drivers and other config options.

	   This menu offers option that will help the Kernel's config
	   system to hide drivers that are out of the scope of the
	   user needs, and disabling core support for unused APIs.

	   If not selected, all non-optional media core functionality
	   needed to support media drivers will be enabled. Also, all
	   media device drivers should be shown.

config MEDIA_SUBDRV_AUTOSELECT
	bool "Autoselect ancillary drivers (tuners, sensors, i2c, spi, frontends)"
	depends on HAS_IOMEM
	select I2C
	select I2C_MUX
	default y if MEDIA_SUPPORT_FILTER
	help
	  By default, a media driver auto-selects all possible ancillary
	  devices such as tuners, sensors, video encoders/decoders and
	  frontends, 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 needed demodulators).

	  If unsure say Y.

menu "Media device types"

#
# Multimedia support - automatically enable V4L2 and DVB core
#
config MEDIA_CAMERA_SUPPORT
	bool "Cameras and video grabbers"
	default y if !MEDIA_SUPPORT_FILTER
	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"
	default y if !MEDIA_SUPPORT_FILTER
	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"
	default y if !MEDIA_SUPPORT_FILTER
	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"
	default y if !MEDIA_SUPPORT_FILTER
	help
	  Enable AM/FM radio support.

	  Additional info and docs are available on the web at
	  <https://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_SDR_SUPPORT
	bool "Software defined radio"
	default y if !MEDIA_SUPPORT_FILTER
	help
	  Enable software defined radio support.

	  Say Y when you have a software defined radio device.

config MEDIA_PLATFORM_SUPPORT
	bool "Platform-specific devices"
	default y if !MEDIA_SUPPORT_FILTER
	help
	  Enable support for complex cameras, codecs, and other hardware
	  that are integrated at the CPU, GPU or on Image Signalling Processor
	  and don't use PCI, USB or Firewire buses.

	  This is found on Embedded hardware (SoC), on V4L2 codecs and
	  on some GPU and newer CPU chipsets.

	  Say Y when you want to be able to see such devices.

config MEDIA_TEST_SUPPORT
	bool "Test drivers"
	default y if !MEDIA_SUPPORT_FILTER
	help
	  These drivers should not be used on production kernels, but
	  can be useful on debug ones. This option enables several dummy drivers
	  that simulate real hardware. Very useful to test userspace
	  applications and to validate if the subsystem core doesn't
	  have regressions.

	  Say Y if you want to use some virtual test driver.

	  In case of doubts, say N.
	  Say Y when you have a software defined radio device.
endmenu # media device types


menu "Media core support"
	visible if !MEDIA_SUPPORT_FILTER

config VIDEO_DEV
	tristate "Video4Linux core"
	default MEDIA_CAMERA_SUPPORT || MEDIA_ANALOG_TV_SUPPORT || MEDIA_RADIO_SUPPORT || MEDIA_SDR_SUPPORT || MEDIA_PLATFORM_SUPPORT || MEDIA_TEST_SUPPORT
	help
	  Enables the V4L2 API, used by cameras, analog TV, video grabbers,
	  radio devices and by some input devices.

config MEDIA_CONTROLLER
	bool "Media Controller API"
	default MEDIA_CAMERA_SUPPORT || MEDIA_ANALOG_TV_SUPPORT || MEDIA_DIGITAL_TV_SUPPORT || MEDIA_PLATFORM_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.

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

config DVB_CORE
	tristate "DVB Core"
	depends on MEDIA_DIGITAL_TV_SUPPORT
	depends on (I2C || I2C=n)
	default MEDIA_DIGITAL_TV_SUPPORT
	select CRC32
	help
	  Enables the DVB API, used by Digital TV devices. Supports several
	  standards, including DVB, ATSC, ISDB and CMDB.

endmenu # Media core support

#
# Extra per-media API core functionality

menu "Video4Linux options"
	visible if VIDEO_DEV

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

menu "Media controller options"
	visible if MEDIA_CONTROLLER

source "drivers/media/mc/Kconfig"
endmenu

menu "Digital TV options"
	visible if DVB_CORE

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

menu "Media drivers"

comment "Drivers filtered as selected at 'Filter media drivers'"
	depends on MEDIA_SUPPORT_FILTER

source "drivers/media/usb/Kconfig"
source "drivers/media/pci/Kconfig"
source "drivers/media/radio/Kconfig"

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

if MEDIA_PLATFORM_SUPPORT
source "drivers/media/platform/Kconfig"
source "drivers/media/mmc/Kconfig"
endif

if MEDIA_TEST_SUPPORT
source "drivers/media/test-drivers/Kconfig"
endif

source "drivers/media/firewire/Kconfig"

endmenu

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

config MEDIA_HIDE_ANCILLARY_SUBDRV
	bool
	depends on MEDIA_SUBDRV_AUTOSELECT && !COMPILE_TEST && !EXPERT
	default y

menu "Media ancillary drivers"

config MEDIA_ATTACH
	bool
	depends on MEDIA_ANALOG_TV_SUPPORT || MEDIA_DIGITAL_TV_SUPPORT || MEDIA_RADIO_SUPPORT
	depends on MODULES
	default MODULES

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

endmenu

endif # MEDIA_SUPPORT
