# SPDX-License-Identifier: GPL-2.0-only
config DVB_USB_V2
	tristate "Support for various USB DVB devices v2"
	depends on DVB_CORE && USB && I2C && (RC_CORE || RC_CORE=n)
	help
	  By enabling this you will be able to choose the various supported
	  USB1.1 and USB2.0 DVB devices.

	  Almost every USB device needs a firmware, please look into
	  <file:Documentation/driver-api/media/drivers/dvb-usb.rst>.

	  For a complete list of supported USB devices see the LinuxTV DVB Wiki:
	  <https://linuxtv.org/wiki/index.php/DVB_USB>

	  Say Y if you own a USB DVB device.

config DVB_USB_AF9015
	tristate "Afatech AF9015 DVB-T USB2.0 support"
	depends on DVB_USB_V2 && I2C_MUX
	select REGMAP
	select DVB_AF9013
	select DVB_PLL              if MEDIA_SUBDRV_AUTOSELECT
	select MEDIA_TUNER_MT2060   if MEDIA_SUBDRV_AUTOSELECT
	select MEDIA_TUNER_QT1010   if MEDIA_SUBDRV_AUTOSELECT
	select MEDIA_TUNER_TDA18271 if MEDIA_SUBDRV_AUTOSELECT
	select MEDIA_TUNER_MXL5005S if MEDIA_SUBDRV_AUTOSELECT
	select MEDIA_TUNER_MC44S803 if MEDIA_SUBDRV_AUTOSELECT
	select MEDIA_TUNER_TDA18218 if MEDIA_SUBDRV_AUTOSELECT
	select MEDIA_TUNER_MXL5007T if MEDIA_SUBDRV_AUTOSELECT
	help
	  Say Y here to support the Afatech AF9015 based DVB-T USB2.0 receiver

config DVB_USB_AF9035
	tristate "Afatech AF9035 DVB-T USB2.0 support"
	depends on DVB_USB_V2
	select DVB_AF9033
	select MEDIA_TUNER_TUA9001 if MEDIA_SUBDRV_AUTOSELECT
	select MEDIA_TUNER_FC0011 if MEDIA_SUBDRV_AUTOSELECT
	select MEDIA_TUNER_MXL5007T if MEDIA_SUBDRV_AUTOSELECT
	select MEDIA_TUNER_TDA18218 if MEDIA_SUBDRV_AUTOSELECT
	select MEDIA_TUNER_FC2580 if (MEDIA_SUBDRV_AUTOSELECT && VIDEO_V4L2)
	select MEDIA_TUNER_IT913X if MEDIA_SUBDRV_AUTOSELECT
	help
	  Say Y here to support the Afatech AF9035 based DVB USB receiver.

config DVB_USB_ANYSEE
	tristate "Anysee DVB-T/C USB2.0 support"
	depends on DVB_USB_V2
	select DVB_PLL if MEDIA_SUBDRV_AUTOSELECT
	select DVB_MT352 if MEDIA_SUBDRV_AUTOSELECT
	select DVB_ZL10353 if MEDIA_SUBDRV_AUTOSELECT
	select DVB_TDA10023 if MEDIA_SUBDRV_AUTOSELECT
	select MEDIA_TUNER_TDA18212 if MEDIA_SUBDRV_AUTOSELECT
	select DVB_CX24116 if MEDIA_SUBDRV_AUTOSELECT
	select DVB_STV0900 if MEDIA_SUBDRV_AUTOSELECT
	select DVB_STV6110 if MEDIA_SUBDRV_AUTOSELECT
	select DVB_ISL6423 if MEDIA_SUBDRV_AUTOSELECT
	select DVB_CXD2820R if MEDIA_SUBDRV_AUTOSELECT
	help
	  Say Y here to support the Anysee E30, Anysee E30 Plus or
	  Anysee E30 C Plus DVB USB2.0 receiver.

config DVB_USB_AU6610
	tristate "Alcor Micro AU6610 USB2.0 support"
	depends on DVB_USB_V2
	select DVB_ZL10353 if MEDIA_SUBDRV_AUTOSELECT
	select MEDIA_TUNER_QT1010 if MEDIA_SUBDRV_AUTOSELECT
	help
	  Say Y here to support the Sigmatek DVB-110 DVB-T USB2.0 receiver.

config DVB_USB_AZ6007
	tristate "AzureWave 6007 and clones DVB-T/C USB2.0 support"
	depends on DVB_USB_V2
	select CYPRESS_FIRMWARE
	select DVB_DRXK if MEDIA_SUBDRV_AUTOSELECT
	select MEDIA_TUNER_MT2063 if MEDIA_SUBDRV_AUTOSELECT
	help
	  Say Y here to support the AZ6007 receivers like Terratec H7.

config DVB_USB_CE6230
	tristate "Intel CE6230 DVB-T USB2.0 support"
	depends on DVB_USB_V2
	select DVB_ZL10353
	select MEDIA_TUNER_MXL5005S if MEDIA_SUBDRV_AUTOSELECT
	help
	  Say Y here to support the Intel CE6230 DVB-T USB2.0 receiver

config DVB_USB_EC168
	tristate "E3C EC168 DVB-T USB2.0 support"
	depends on DVB_USB_V2
	select DVB_EC100
	select MEDIA_TUNER_MXL5005S if MEDIA_SUBDRV_AUTOSELECT
	help
	  Say Y here to support the E3C EC168 DVB-T USB2.0 receiver.

config DVB_USB_GL861
	tristate "Genesys Logic GL861 USB2.0 support"
	depends on DVB_USB_V2
	select DVB_ZL10353 if MEDIA_SUBDRV_AUTOSELECT
	select DVB_TC90522 if MEDIA_SUBDRV_AUTOSELECT
	select MEDIA_TUNER_QT1010 if MEDIA_SUBDRV_AUTOSELECT
	select DVB_PLL if MEDIA_SUBDRV_AUTOSELECT
	help
	  Say Y here to support the MSI Megasky 580 (55801) DVB-T USB2.0
	  receiver with USB ID 0db0:5581, Friio White ISDB-T receiver
	  with USB ID 0x7a69:0001.

config DVB_USB_LME2510
	tristate "LME DM04/QQBOX DVB-S USB2.0 support"
	depends on DVB_USB_V2
	depends on RC_CORE
	select DVB_TDA10086 if MEDIA_SUBDRV_AUTOSELECT
	select DVB_TDA826X if MEDIA_SUBDRV_AUTOSELECT
	select DVB_STV0288 if MEDIA_SUBDRV_AUTOSELECT
	select DVB_IX2505V if MEDIA_SUBDRV_AUTOSELECT
	select DVB_STV0299 if MEDIA_SUBDRV_AUTOSELECT
	select DVB_PLL if MEDIA_SUBDRV_AUTOSELECT
	select DVB_M88RS2000 if MEDIA_SUBDRV_AUTOSELECT
	select DVB_TS2020 if MEDIA_SUBDRV_AUTOSELECT
	help
	  Say Y here to support the LME DM04/QQBOX DVB-S USB2.0

config DVB_USB_MXL111SF
	tristate "MxL111SF DTV USB2.0 support"
	depends on DVB_USB_V2
	select DVB_LGDT3305 if MEDIA_SUBDRV_AUTOSELECT
	select DVB_LG2160 if MEDIA_SUBDRV_AUTOSELECT
	select VIDEO_TVEEPROM
	help
	  Say Y here to support the MxL111SF USB2.0 DTV receiver.

config DVB_USB_RTL28XXU
	tristate "Realtek RTL28xxU DVB USB support"
	depends on DVB_USB_V2 && I2C_MUX
	select DVB_MN88472 if MEDIA_SUBDRV_AUTOSELECT
	select DVB_MN88473 if MEDIA_SUBDRV_AUTOSELECT
	select DVB_CXD2841ER if MEDIA_SUBDRV_AUTOSELECT
	select DVB_RTL2830
	select DVB_RTL2832
	select DVB_RTL2832_SDR if (MEDIA_SUBDRV_AUTOSELECT && MEDIA_SDR_SUPPORT && VIDEO_V4L2)
	select DVB_SI2168 if MEDIA_SUBDRV_AUTOSELECT
	select MEDIA_TUNER_E4000 if (MEDIA_SUBDRV_AUTOSELECT && VIDEO_V4L2)
	select MEDIA_TUNER_FC0012 if MEDIA_SUBDRV_AUTOSELECT
	select MEDIA_TUNER_FC0013 if MEDIA_SUBDRV_AUTOSELECT
	select MEDIA_TUNER_FC2580 if (MEDIA_SUBDRV_AUTOSELECT && VIDEO_V4L2)
	select MEDIA_TUNER_MT2060 if MEDIA_SUBDRV_AUTOSELECT
	select MEDIA_TUNER_MXL5005S if MEDIA_SUBDRV_AUTOSELECT
	select MEDIA_TUNER_QT1010 if MEDIA_SUBDRV_AUTOSELECT
	select MEDIA_TUNER_R820T if MEDIA_SUBDRV_AUTOSELECT
	select MEDIA_TUNER_SI2157 if MEDIA_SUBDRV_AUTOSELECT
	select MEDIA_TUNER_TUA9001 if MEDIA_SUBDRV_AUTOSELECT
	help
	  Say Y here to support the Realtek RTL28xxU DVB USB receiver.

config DVB_USB_DVBSKY
	tristate "DVBSky USB support"
	depends on DVB_USB_V2
	select DVB_M88DS3103 if MEDIA_SUBDRV_AUTOSELECT
	select DVB_SI2168 if MEDIA_SUBDRV_AUTOSELECT
	select DVB_TS2020 if MEDIA_SUBDRV_AUTOSELECT
	select MEDIA_TUNER_SI2157 if MEDIA_SUBDRV_AUTOSELECT
	select DVB_SP2 if MEDIA_SUBDRV_AUTOSELECT
	help
	  Say Y here to support the USB receivers from DVBSky.

config DVB_USB_ZD1301
	tristate "ZyDAS ZD1301"
	depends on DVB_USB_V2
	select DVB_ZD1301_DEMOD if MEDIA_SUBDRV_AUTOSELECT
	select MEDIA_TUNER_MT2060 if MEDIA_SUBDRV_AUTOSELECT
	help
	  Say Y here to support the ZyDAS ZD1301 DVB USB receiver.
