# SPDX-License-Identifier: GPL-2.0-only
config VIDEO_BT848
	tristate "BT848 Video For Linux"
	depends on VIDEO_DEV && PCI && I2C && VIDEO_V4L2
	select I2C_ALGOBIT
	select VIDEOBUF_DMA_SG
	depends on RC_CORE
	depends on MEDIA_RADIO_SUPPORT
	select VIDEO_TUNER
	select VIDEO_TVEEPROM
	select VIDEO_MSP3400 if MEDIA_SUBDRV_AUTOSELECT
	select VIDEO_TVAUDIO if MEDIA_SUBDRV_AUTOSELECT
	select VIDEO_TDA7432 if MEDIA_SUBDRV_AUTOSELECT
	select VIDEO_SAA6588 if MEDIA_SUBDRV_AUTOSELECT
	select RADIO_ADAPTERS
	select RADIO_TEA575X
	help
	  Support for BT848 based frame grabber/overlay boards. This includes
	  the Miro, Hauppauge and STB boards. Please read the material in
	  <file:Documentation/admin-guide/media/bttv.rst> for more information.

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

config DVB_BT8XX
	tristate "DVB/ATSC Support for bt878 based TV cards"
	depends on DVB_CORE && PCI && I2C && VIDEO_BT848
	select DVB_MT352 if MEDIA_SUBDRV_AUTOSELECT
	select DVB_SP887X if MEDIA_SUBDRV_AUTOSELECT
	select DVB_NXT6000 if MEDIA_SUBDRV_AUTOSELECT
	select DVB_CX24110 if MEDIA_SUBDRV_AUTOSELECT
	select DVB_OR51211 if MEDIA_SUBDRV_AUTOSELECT
	select DVB_LGDT330X if MEDIA_SUBDRV_AUTOSELECT
	select DVB_ZL10353 if MEDIA_SUBDRV_AUTOSELECT
	select MEDIA_TUNER_SIMPLE if MEDIA_SUBDRV_AUTOSELECT
	help
	  Support for PCI cards based on the Bt8xx PCI bridge. Examples are
	  the Nebula cards, the Pinnacle PCTV cards, the Twinhan DST cards,
	  the pcHDTV HD2000 cards, the DViCO FusionHDTV Lite cards, and
	  some AVerMedia cards.

	  Since these cards have no MPEG decoder onboard, they transmit
	  only compressed MPEG data over the PCI bus, so you need
	  an external software decoder to watch TV on your computer.

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