config TTPCI_EEPROM
	tristate
	default n

config DVB_AV7110
	tristate "AV7110 cards"
	depends on DVB_CORE && PCI && I2C
	depends on HOTPLUG
	select FW_LOADER if !DVB_AV7110_FIRMWARE
	select TTPCI_EEPROM
	select VIDEO_SAA7146_VV
	depends on VIDEO_DEV	# dependencies of VIDEO_SAA7146_VV
	select DVB_VES1820 if !DVB_FE_CUSTOMISE
	select DVB_VES1X93 if !DVB_FE_CUSTOMISE
	select DVB_STV0299 if !DVB_FE_CUSTOMISE
	select DVB_TDA8083 if !DVB_FE_CUSTOMISE
	select DVB_SP8870 if !DVB_FE_CUSTOMISE
	select DVB_STV0297 if !DVB_FE_CUSTOMISE
	select DVB_L64781 if !DVB_FE_CUSTOMISE
	select DVB_LNBP21 if !DVB_FE_CUSTOMISE
	help
	  Support for SAA7146 and AV7110 based DVB cards as produced
	  by Fujitsu-Siemens, Technotrend, Hauppauge and others.

	  This driver only supports the fullfeatured cards with
	  onboard MPEG2 decoder.

	  This driver needs an external firmware. Please use the script
	  "<kerneldir>/Documentation/dvb/get_dvb_firmware av7110" to
	  download/extract it, and then copy it to /usr/lib/hotplug/firmware
	  or /lib/firmware (depending on configuration of firmware hotplug).

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

config DVB_AV7110_FIRMWARE
	bool "Compile AV7110 firmware into the driver"
	depends on DVB_AV7110 && !STANDALONE
	default y if DVB_AV7110=y
	help
	  The AV7110 firmware is normally loaded by the firmware hotplug manager.
	  If you want to compile the firmware into the driver you need to say
	  Y here and provide the correct path of the firmware. You need this
	  option if you want to compile the whole driver statically into the
	  kernel.

	  All other people say N.

config DVB_AV7110_FIRMWARE_FILE
	string "Full pathname of av7110 firmware file"
	depends on DVB_AV7110_FIRMWARE
	default "/usr/lib/hotplug/firmware/dvb-ttpci-01.fw"

config DVB_AV7110_OSD
	bool "AV7110 OSD support"
	depends on DVB_AV7110
	default y if DVB_AV7110=y || DVB_AV7110=m
	help
	  The AV7110 firmware provides some code to generate an OnScreenDisplay
	  on the video output. This is kind of nonstandard and not guaranteed to
	  be maintained.

	  Anyway, some popular DVB software like VDR uses this OSD to render
	  its menus, so say Y if you want to use this software.

	  All other people say N.

config DVB_BUDGET_CORE
	tristate "SAA7146 DVB cards (aka Budget, Nova-PCI)"
	depends on DVB_CORE && PCI && I2C
	select VIDEO_SAA7146
	select TTPCI_EEPROM
	help
	  Support for simple SAA7146 based DVB cards
	  (so called Budget- or Nova-PCI cards) without onboard
	  MPEG2 decoder.

config DVB_BUDGET
	tristate "Budget cards"
	depends on DVB_BUDGET_CORE && I2C
	select DVB_STV0299 if !DVB_FE_CUSTOMISE
	select DVB_VES1X93 if !DVB_FE_CUSTOMISE
	select DVB_VES1820 if !DVB_FE_CUSTOMISE
	select DVB_L64781 if !DVB_FE_CUSTOMISE
	select DVB_TDA8083 if !DVB_FE_CUSTOMISE
	select DVB_TDA10021 if !DVB_FE_CUSTOMISE
	select DVB_TDA10023 if !DVB_FE_CUSTOMISE
	select DVB_S5H1420 if !DVB_FE_CUSTOMISE
	select DVB_TDA10086 if !DVB_FE_CUSTOMISE
	select DVB_TDA826X if !DVB_FE_CUSTOMISE
	select DVB_LNBP21 if !DVB_FE_CUSTOMISE
	help
	  Support for simple SAA7146 based DVB cards (so called Budget-
	  or Nova-PCI cards) without onboard MPEG2 decoder, and without
	  analog inputs or an onboard Common Interface connector.

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

	  To compile this driver as a module, choose M here: the
	  module will be called budget.

config DVB_BUDGET_CI
	tristate "Budget cards with onboard CI connector"
	depends on DVB_BUDGET_CORE && I2C
	depends on INPUT # due to IR
	select DVB_STV0297 if !DVB_FE_CUSTOMISE
	select DVB_STV0299 if !DVB_FE_CUSTOMISE
	select DVB_TDA1004X if !DVB_FE_CUSTOMISE
	select DVB_LNBP21 if !DVB_FE_CUSTOMISE
	select DVB_TDA10023 if !DVB_FE_CUSTOMISE
	select MEDIA_TUNER_TDA827X if !DVB_FE_CUSTOMISE
	select VIDEO_IR
	help
	  Support for simple SAA7146 based DVB cards
	  (so called Budget- or Nova-PCI cards) without onboard
	  MPEG2 decoder, but with onboard Common Interface connector.

	  Note: The Common Interface is not yet supported by this driver
	  due to lack of information from the vendor.

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

	  To compile this driver as a module, choose M here: the
	  module will be called budget-ci.

config DVB_BUDGET_AV
	tristate "Budget cards with analog video inputs"
	depends on DVB_BUDGET_CORE && I2C
	select VIDEO_SAA7146_VV
	depends on VIDEO_DEV	# dependencies of VIDEO_SAA7146_VV
	depends on HOTPLUG	# dependency of FW_LOADER
	select DVB_PLL if !DVB_FE_CUSTOMISE
	select DVB_STV0299 if !DVB_FE_CUSTOMISE
	select DVB_TDA1004X if !DVB_FE_CUSTOMISE
	select DVB_TDA10021 if !DVB_FE_CUSTOMISE
	select DVB_TDA10023 if !DVB_FE_CUSTOMISE
	select DVB_TUA6100 if !DVB_FE_CUSTOMISE
	select FW_LOADER
	help
	  Support for simple SAA7146 based DVB cards
	  (so called Budget- or Nova-PCI cards) without onboard
	  MPEG2 decoder, but with one or more analog video inputs.

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

	  To compile this driver as a module, choose M here: the
	  module will be called budget-av.

config DVB_BUDGET_PATCH
	tristate "AV7110 cards with Budget Patch"
	depends on DVB_BUDGET_CORE && I2C
	depends on DVB_AV7110
	select DVB_STV0299 if !DVB_FE_CUSTOMISE
	select DVB_VES1X93 if !DVB_FE_CUSTOMISE
	select DVB_TDA8083 if !DVB_FE_CUSTOMISE
	help
	  Support for Budget Patch (full TS) modification on
	  SAA7146+AV7110 based cards (DVB-S cards). This
	  driver doesn't use onboard MPEG2 decoder. The
	  card is driven in Budget-only mode. Card is
	  required to have loaded firmware to tune properly.
	  Firmware can be loaded by insertion and removal of
	  standard AV7110 driver prior to loading this
	  driver.

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

	  To compile this driver as a module, choose M here: the
	  module will be called budget-patch.
