config DVB_USB
	tristate "Support for various USB DVB devices"
	depends on DVB_CORE && USB && I2C && RC_CORE
	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/dvb/README.dvb-usb>.

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

	  Say Y if you own a USB DVB device.

config DVB_USB_DEBUG
	bool "Enable extended debug support for all DVB-USB devices"
	depends on DVB_USB
	help
	  Say Y if you want to enable debugging. See modinfo dvb-usb (and the
	  appropriate drivers) for debug levels.

config DVB_USB_A800
	tristate "AVerMedia AverTV DVB-T USB 2.0 (A800)"
	depends on DVB_USB
	select DVB_DIB3000MC
	select DVB_PLL if !DVB_FE_CUSTOMISE
	select MEDIA_TUNER_MT2060 if !MEDIA_TUNER_CUSTOMISE
	help
	  Say Y here to support the AVerMedia AverTV DVB-T USB 2.0 (A800) receiver.

config DVB_USB_DIBUSB_MB
	tristate "DiBcom USB DVB-T devices (based on the DiB3000M-B) (see help for device list)"
	depends on DVB_USB
	select DVB_PLL if !DVB_FE_CUSTOMISE
	select DVB_DIB3000MB
	select MEDIA_TUNER_MT2060 if !MEDIA_TUNER_CUSTOMISE
	help
	  Support for USB 1.1 and 2.0 DVB-T receivers based on reference designs made by
	  DiBcom (<http://www.dibcom.fr>) equipped with a DiB3000M-B demodulator.

	  For an up-to-date list of devices supported by this driver, have a look
	  on the Linux-DVB Wiki at www.linuxtv.org.

	  Say Y if you own such a device and want to use it. You should build it as
	  a module.

config DVB_USB_DIBUSB_MB_FAULTY
	bool "Support faulty USB IDs"
	depends on DVB_USB_DIBUSB_MB
	help
	  Support for faulty USB IDs due to an invalid EEPROM on some Artec devices.

config DVB_USB_DIBUSB_MC
	tristate "DiBcom USB DVB-T devices (based on the DiB3000M-C/P) (see help for device list)"
	depends on DVB_USB
	select DVB_DIB3000MC
	select MEDIA_TUNER_MT2060 if !MEDIA_TUNER_CUSTOMISE
	help
	  Support for USB2.0 DVB-T receivers based on reference designs made by
	  DiBcom (<http://www.dibcom.fr>) equipped with a DiB3000M-C/P demodulator.

	  For an up-to-date list of devices supported by this driver, have a look
	  on the Linux-DVB Wiki at www.linuxtv.org.

	  Say Y if you own such a device and want to use it. You should build it as
	  a module.

config DVB_USB_DIB0700
	tristate "DiBcom DiB0700 USB DVB devices (see help for supported devices)"
	depends on DVB_USB
	select DVB_DIB7000P if !DVB_FE_CUSTOMISE
	select DVB_DIB7000M if !DVB_FE_CUSTOMISE
	select DVB_DIB8000 if !DVB_FE_CUSTOMISE
	select DVB_DIB3000MC if !DVB_FE_CUSTOMISE
	select DVB_S5H1411 if !DVB_FE_CUSTOMISE
	select DVB_LGDT3305 if !DVB_FE_CUSTOMISE
	select DVB_TUNER_DIB0070 if !DVB_FE_CUSTOMISE
	select DVB_TUNER_DIB0090 if !DVB_FE_CUSTOMISE
	select MEDIA_TUNER_MT2060 if !MEDIA_TUNER_CUSTOMISE
	select MEDIA_TUNER_MT2266 if !MEDIA_TUNER_CUSTOMISE
	select MEDIA_TUNER_XC2028 if !MEDIA_TUNER_CUSTOMISE
	select MEDIA_TUNER_XC5000 if !MEDIA_TUNER_CUSTOMISE
	select MEDIA_TUNER_XC4000 if !MEDIA_TUNER_CUSTOMISE
	select MEDIA_TUNER_MXL5007T if !MEDIA_TUNER_CUSTOMISE
	help
	  Support for USB2.0/1.1 DVB receivers based on the DiB0700 USB bridge. The
	  USB bridge is also present in devices having the DiB7700 DVB-T-USB
	  silicon. This chip can be found in devices offered by Hauppauge,
	  Avermedia and other big and small companies.

	  For an up-to-date list of devices supported by this driver, have a look
	  on the LinuxTV Wiki at www.linuxtv.org.

	  Say Y if you own such a device and want to use it. You should build it as
	  a module.

config DVB_USB_UMT_010
	tristate "HanfTek UMT-010 DVB-T USB2.0 support"
	depends on DVB_USB
	select DVB_PLL if !DVB_FE_CUSTOMISE
	select DVB_DIB3000MC
	select MEDIA_TUNER_MT2060 if !MEDIA_TUNER_CUSTOMISE
	select DVB_MT352 if !DVB_FE_CUSTOMISE
	help
	  Say Y here to support the HanfTek UMT-010 USB2.0 stick-sized DVB-T receiver.

config DVB_USB_CXUSB
	tristate "Conexant USB2.0 hybrid reference design support"
	depends on DVB_USB
	select DVB_PLL if !DVB_FE_CUSTOMISE
	select DVB_CX22702 if !DVB_FE_CUSTOMISE
	select DVB_LGDT330X if !DVB_FE_CUSTOMISE
	select DVB_MT352 if !DVB_FE_CUSTOMISE
	select DVB_ZL10353 if !DVB_FE_CUSTOMISE
	select DVB_DIB7000P if !DVB_FE_CUSTOMISE
	select DVB_TUNER_DIB0070 if !DVB_FE_CUSTOMISE
	select DVB_ATBM8830 if !DVB_FE_CUSTOMISE
	select DVB_LGS8GXX if !DVB_FE_CUSTOMISE
	select MEDIA_TUNER_SIMPLE if !MEDIA_TUNER_CUSTOMISE
	select MEDIA_TUNER_XC2028 if !MEDIA_TUNER_CUSTOMISE
	select MEDIA_TUNER_MXL5005S if !MEDIA_TUNER_CUSTOMISE
	select MEDIA_TUNER_MAX2165 if !MEDIA_TUNER_CUSTOMISE
	help
	  Say Y here to support the Conexant USB2.0 hybrid reference design.
	  Currently, only DVB and ATSC modes are supported, analog mode
	  shall be added in the future. Devices that require this module:

	  Medion MD95700 hybrid USB2.0 device.
	  DViCO FusionHDTV (Bluebird) USB2.0 devices

config DVB_USB_M920X
	tristate "Uli m920x DVB-T USB2.0 support"
	depends on DVB_USB
	select DVB_MT352 if !DVB_FE_CUSTOMISE
	select DVB_TDA1004X if !DVB_FE_CUSTOMISE
	select MEDIA_TUNER_QT1010 if !MEDIA_TUNER_CUSTOMISE
	select MEDIA_TUNER_TDA827X if !MEDIA_TUNER_CUSTOMISE
	select MEDIA_TUNER_SIMPLE if !MEDIA_TUNER_CUSTOMISE
	help
	  Say Y here to support the MSI Mega Sky 580 USB2.0 DVB-T receiver.
	  Currently, only devices with a product id of
	  "DTV USB MINI" (in cold state) are supported.
	  Firmware required.

config DVB_USB_GL861
	tristate "Genesys Logic GL861 USB2.0 support"
	depends on DVB_USB
	select DVB_ZL10353 if !DVB_FE_CUSTOMISE
	select MEDIA_TUNER_QT1010 if !MEDIA_TUNER_CUSTOMISE
	help
	  Say Y here to support the MSI Megasky 580 (55801) DVB-T USB2.0
	  receiver with USB ID 0db0:5581.

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

config DVB_USB_DIGITV
	tristate "Nebula Electronics uDigiTV DVB-T USB2.0 support"
	depends on DVB_USB
	select DVB_PLL if !DVB_FE_CUSTOMISE
	select DVB_NXT6000 if !DVB_FE_CUSTOMISE
	select DVB_MT352 if !DVB_FE_CUSTOMISE
	help
	  Say Y here to support the Nebula Electronics uDigitV USB2.0 DVB-T receiver.

config DVB_USB_VP7045
	tristate "TwinhanDTV Alpha/MagicBoxII, DNTV tinyUSB2, Beetle USB2.0 support"
	depends on DVB_USB
	help
	  Say Y here to support the

	    TwinhanDTV Alpha (stick) (VP-7045),
		TwinhanDTV MagicBox II (VP-7046),
		DigitalNow TinyUSB 2 DVB-t,
		DigitalRise USB 2.0 Ter (Beetle) and
		TYPHOON DVB-T USB DRIVE

	  DVB-T USB2.0 receivers.

config DVB_USB_VP702X
	tristate "TwinhanDTV StarBox and clones DVB-S USB2.0 support"
	depends on DVB_USB
	help
	  Say Y here to support the

	    TwinhanDTV StarBox,
		DigitalRise USB Starbox and
		TYPHOON DVB-S USB 2.0 BOX

	  DVB-S USB2.0 receivers.

config DVB_USB_GP8PSK
	tristate "GENPIX 8PSK->USB module support"
	depends on DVB_USB
	help
	  Say Y here to support the
	    GENPIX 8psk module

	  DVB-S USB2.0 receivers.

config DVB_USB_NOVA_T_USB2
	tristate "Hauppauge WinTV-NOVA-T usb2 DVB-T USB2.0 support"
	depends on DVB_USB
	select DVB_DIB3000MC
	select DVB_PLL if !DVB_FE_CUSTOMISE
	select MEDIA_TUNER_MT2060 if !MEDIA_TUNER_CUSTOMISE
	help
	  Say Y here to support the Hauppauge WinTV-NOVA-T usb2 DVB-T USB2.0 receiver.

config DVB_USB_TTUSB2
	tristate "Pinnacle 400e DVB-S USB2.0 support"
	depends on DVB_USB
	select DVB_TDA10086 if !DVB_FE_CUSTOMISE
	select DVB_LNBP21 if !DVB_FE_CUSTOMISE
	select DVB_TDA826X if !DVB_FE_CUSTOMISE
	help
	  Say Y here to support the Pinnacle 400e DVB-S USB2.0 receiver. The
	  firmware protocol used by this module is similar to the one used by the
	  old ttusb-driver - that's why the module is called dvb-usb-ttusb2.

config DVB_USB_DTT200U
	tristate "WideView WT-200U and WT-220U (pen) DVB-T USB2.0 support (Yakumo/Hama/Typhoon/Yuan)"
	depends on DVB_USB
	help
	  Say Y here to support the WideView/Yakumo/Hama/Typhoon/Yuan DVB-T USB2.0 receiver.

	  The receivers are also known as DTT200U (Yakumo) and UB300 (Yuan).

	  The WT-220U and its clones are pen-sized.

config DVB_USB_OPERA1
	tristate "Opera1 DVB-S USB2.0 receiver"
	depends on DVB_USB
	select DVB_STV0299 if !DVB_FE_CUSTOMISE
	select DVB_PLL if !DVB_FE_CUSTOMISE
	help
	  Say Y here to support the Opera DVB-S USB2.0 receiver.

config DVB_USB_AF9005
	tristate "Afatech AF9005 DVB-T USB1.1 support"
	depends on DVB_USB && EXPERIMENTAL
	select MEDIA_TUNER_MT2060 if !MEDIA_TUNER_CUSTOMISE
	select MEDIA_TUNER_QT1010 if !MEDIA_TUNER_CUSTOMISE
	help
	  Say Y here to support the Afatech AF9005 based DVB-T USB1.1 receiver
	  and the TerraTec Cinergy T USB XE (Rev.1)

config DVB_USB_AF9005_REMOTE
	tristate "Afatech AF9005 default remote control support"
	depends on DVB_USB_AF9005
	help
	  Say Y here to support the default remote control decoding for the
	  Afatech AF9005 based receiver.

config DVB_USB_PCTV452E
	tristate "Pinnacle PCTV HDTV Pro USB device/TT Connect S2-3600"
	depends on DVB_USB
	select TTPCI_EEPROM
	select DVB_LNBP22 if !DVB_FE_CUSTOMISE
	select DVB_STB0899 if !DVB_FE_CUSTOMISE
	select DVB_STB6100 if !DVB_FE_CUSTOMISE
	help
	  Support for external USB adapter designed by Pinnacle,
	  shipped under the brand name 'PCTV HDTV Pro USB'.
	  Also supports TT Connect S2-3600/3650 cards.
	  Say Y if you own such a device and want to use it.

config DVB_USB_DW2102
	tristate "DvbWorld & TeVii DVB-S/S2 USB2.0 support"
	depends on DVB_USB
	select DVB_PLL if !DVB_FE_CUSTOMISE
	select DVB_STV0299 if !DVB_FE_CUSTOMISE
	select DVB_STV0288 if !DVB_FE_CUSTOMISE
	select DVB_STB6000 if !DVB_FE_CUSTOMISE
	select DVB_CX24116 if !DVB_FE_CUSTOMISE
	select DVB_M88DS3103 if !DVB_FE_CUSTOMISE
	select DVB_SI21XX if !DVB_FE_CUSTOMISE
	select DVB_TDA10023 if !DVB_FE_CUSTOMISE
	select DVB_MT312 if !DVB_FE_CUSTOMISE
	select DVB_ZL10039 if !DVB_FE_CUSTOMISE
	select DVB_DS3000 if !DVB_FE_CUSTOMISE
	select DVB_STB6100 if !DVB_FE_CUSTOMISE
	select DVB_STV6110 if !DVB_FE_CUSTOMISE
	select DVB_STV0900 if !DVB_FE_CUSTOMISE
	help
	  Say Y here to support the DvbWorld, TeVii, Prof DVB-S/S2 USB2.0
	  receivers.

config DVB_USB_CINERGY_T2
	tristate "Terratec CinergyT2/qanu USB 2.0 DVB-T receiver"
	depends on DVB_USB
	help
	  Support for "TerraTec CinergyT2" USB2.0 Highspeed DVB Receivers

	  Say Y if you own such a device and want to use it.

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

config DVB_USB_DTV5100
	tristate "AME DTV-5100 USB2.0 DVB-T support"
	depends on DVB_USB
	select DVB_ZL10353 if !DVB_FE_CUSTOMISE
	select MEDIA_TUNER_QT1010 if !MEDIA_TUNER_CUSTOMISE
	help
	  Say Y here to support the AME DTV-5100 USB2.0 DVB-T receiver.

config DVB_USB_AF9015
	tristate "Afatech AF9015 DVB-T USB2.0 support"
	depends on DVB_USB
	select DVB_AF9013
	select DVB_PLL              if !DVB_FE_CUSTOMISE
	select MEDIA_TUNER_MT2060   if !MEDIA_TUNER_CUSTOMISE
	select MEDIA_TUNER_QT1010   if !MEDIA_TUNER_CUSTOMISE
	select MEDIA_TUNER_TDA18271 if !MEDIA_TUNER_CUSTOMISE
	select MEDIA_TUNER_MXL5005S if !MEDIA_TUNER_CUSTOMISE
	select MEDIA_TUNER_MC44S803 if !MEDIA_TUNER_CUSTOMISE
	select MEDIA_TUNER_TDA18218 if !MEDIA_TUNER_CUSTOMISE
	select MEDIA_TUNER_MXL5007T if !MEDIA_TUNER_CUSTOMISE
	help
	  Say Y here to support the Afatech AF9015 based DVB-T USB2.0 receiver

config DVB_USB_CE6230
	tristate "Intel CE6230 DVB-T USB2.0 support"
	depends on DVB_USB && EXPERIMENTAL
	select DVB_ZL10353
	select MEDIA_TUNER_MXL5005S if !MEDIA_TUNER_CUSTOMISE
	help
	  Say Y here to support the Intel CE6230 DVB-T USB2.0 receiver

config DVB_USB_FRIIO
	tristate "Friio ISDB-T USB2.0 Receiver support"
	depends on DVB_USB
	help
	  Say Y here to support the Japanese DTV receiver Friio.

config DVB_USB_EC168
	tristate "E3C EC168 DVB-T USB2.0 support"
	depends on DVB_USB && EXPERIMENTAL
	select DVB_EC100
	select MEDIA_TUNER_MXL5005S if !MEDIA_TUNER_CUSTOMISE
	help
	  Say Y here to support the E3C EC168 DVB-T USB2.0 receiver.

config DVB_USB_AZ6027
	tristate "Azurewave DVB-S/S2 USB2.0 AZ6027 support"
	depends on DVB_USB
	select DVB_STB0899 if !DVB_FE_CUSTOMISE
	select DVB_STB6100 if !DVB_FE_CUSTOMISE
	help
	  Say Y here to support the AZ6027 device

config DVB_USB_LME2510
	tristate "LME DM04/QQBOX DVB-S USB2.0 support"
	depends on DVB_USB
	select DVB_TDA10086 if !DVB_FE_CUSTOMISE
	select DVB_TDA826X if !DVB_FE_CUSTOMISE
	select DVB_STV0288 if !DVB_FE_CUSTOMISE
	select DVB_IX2505V if !DVB_FE_CUSTOMISE
	select DVB_STV0299 if !DVB_FE_CUSTOMISE
	select DVB_PLL if !DVB_FE_CUSTOMISE
	help
	  Say Y here to support the LME DM04/QQBOX DVB-S USB2.0 .

config DVB_USB_TECHNISAT_USB2
	tristate "Technisat DVB-S/S2 USB2.0 support"
	depends on DVB_USB
	select DVB_STV090x if !DVB_FE_CUSTOMISE
	select DVB_STV6110x if !DVB_FE_CUSTOMISE
	help
	  Say Y here to support the Technisat USB2 DVB-S/S2 device

config DVB_USB_IT913X
	tristate "it913x driver"
	depends on DVB_USB
	select DVB_IT913X_FE
	help
	  Say Y here to support the it913x device

config DVB_USB_MXL111SF
	tristate "MxL111SF DTV USB2.0 support"
	depends on DVB_USB
	select DVB_LGDT3305 if !DVB_FE_CUSTOMISE
	select VIDEO_TVEEPROM
	help
	  Say Y here to support the MxL111SF USB2.0 DTV receiver.

config DVB_USB_SC100
	tristate "Google SC100 DVB-S/S2 USB2.0 support"
	depends on DVB_USB && GOOGLE_SPACECAST
	select DVB_DVBSKY_M88RS6000 if !DVB_FE_CUSTOMISE
	help
	  Say Y here to support the Google SC100 DVB-S/S2 USB2.0 receiver.
