config DVB_AV7110
	tristate "AV7110 cards"
	depends on DVB_CORE && PCI && I2C && VIDEO_V4L1
	select FW_LOADER
	select VIDEO_SAA7146_VV
	select DVB_PLL
	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
	tristate "Budget cards"
	depends on DVB_CORE && PCI && I2C && VIDEO_V4L1
	select VIDEO_SAA7146
	select DVB_PLL
	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_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.

	  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_CORE && PCI && I2C && VIDEO_V4L1
	select VIDEO_SAA7146
	select DVB_PLL
	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
	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_CORE && PCI && I2C && VIDEO_V4L1
	select VIDEO_SAA7146_VV
	select DVB_PLL
	select DVB_STV0299 if !DVB_FE_CUSTOMISE
	select DVB_TDA1004X if !DVB_FE_CUSTOMISE
	select DVB_TDA10021 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_CORE && DVB_BUDGET && VIDEO_V4L1
	select DVB_AV7110
	select DVB_PLL
	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.
