# 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 !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
	prompt "Cameras and video grabbers" if MEDIA_SUPPORT_FILTER
	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
	prompt "Analog TV" if MEDIA_SUPPORT_FILTER
	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
	prompt "Digital TV" if MEDIA_SUPPORT_FILTER
	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
	prompt "AM/FM radio receivers/transmitters" if MEDIA_SUPPORT_FILTER
	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
	prompt "Software defined radio" if MEDIA_SUPPORT_FILTER
	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
	prompt "Platform-specific devices" if MEDIA_SUPPORT_FILTER
	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
	prompt "Test drivers" if MEDIA_SUPPORT_FILTER
	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
	depends on (I2C || I2C=n)
	select RATIONAL
	select VIDEOBUF2_V4L2 if VIDEOBUF2_CORE
	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

comment "Media drivers"

source "drivers/media/usb/Kconfig"
source "drivers/media/pci/Kconfig"
source "drivers/media/radio/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"

# Common driver options
source "drivers/media/common/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
