#
# Multimedia Video device configuration
#

menuconfig RADIO_ADAPTERS
	bool "Radio Adapters"
	depends on VIDEO_V4L2
	depends on MEDIA_RADIO_SUPPORT
	default y
	---help---
	  Say Y here to enable selecting AM/FM radio adapters.

if RADIO_ADAPTERS && VIDEO_V4L2

config RADIO_TEA575X
	tristate

config RADIO_SI470X
	bool "Silicon Labs Si470x FM Radio Receiver support"
	depends on VIDEO_V4L2

source "drivers/media/radio/si470x/Kconfig"

config RADIO_SI4713
	tristate "Silicon Labs Si4713 FM Radio with RDS Transmitter support"
	depends on VIDEO_V4L2

source "drivers/media/radio/si4713/Kconfig"

config RADIO_SI476X
	tristate "Silicon Laboratories Si476x I2C FM Radio"
	depends on I2C && VIDEO_V4L2
	depends on MFD_SI476X_CORE
	depends on SND_SOC
	select SND_SOC_SI476X
	---help---
	  Choose Y here if you have this FM radio chip.

	  In order to control your radio card, you will need to use programs
	  that are compatible with the Video For Linux 2 API.  Information on
	  this API and pointers to "v4l2" programs may be found at
	  <file:Documentation/video4linux/API.html>.

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

config USB_MR800
	tristate "AverMedia MR 800 USB FM radio support"
	depends on USB && VIDEO_V4L2
	---help---
	  Say Y here if you want to connect this type of radio to your
	  computer's USB port. Note that the audio is not digital, and
	  you must connect the line out connector to a sound card or a
	  set of speakers.

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

config USB_DSBR
	tristate "D-Link/GemTek USB FM radio support"
	depends on USB && VIDEO_V4L2
	---help---
	  Say Y here if you want to connect this type of radio to your
	  computer's USB port. Note that the audio is not digital, and
	  you must connect the line out connector to a sound card or a
	  set of speakers.

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

config RADIO_MAXIRADIO
	tristate "Guillemot MAXI Radio FM 2000 radio"
	depends on VIDEO_V4L2 && PCI
	select RADIO_TEA575X
	---help---
	  Choose Y here if you have this radio card.  This card may also be
	  found as Gemtek PCI FM.

	  In order to control your radio card, you will need to use programs
	  that are compatible with the Video For Linux API.  Information on
	  this API and pointers to "v4l" programs may be found at
	  <file:Documentation/video4linux/API.html>.

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

config RADIO_SHARK
	tristate "Griffin radioSHARK USB radio receiver"
	depends on USB
	select RADIO_TEA575X
	---help---
	  Choose Y here if you have this radio receiver.

	  There are 2 versions of this device, this driver is for version 1,
	  which is white.

	  In order to control your radio card, you will need to use programs
	  that are compatible with the Video For Linux API.  Information on
	  this API and pointers to "v4l" programs may be found at
	  <file:Documentation/video4linux/API.html>.

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

config RADIO_SHARK2
	tristate "Griffin radioSHARK2 USB radio receiver"
	depends on USB
	---help---
	  Choose Y here if you have this radio receiver.

	  There are 2 versions of this device, this driver is for version 2,
	  which is black.

	  In order to control your radio card, you will need to use programs
	  that are compatible with the Video For Linux API.  Information on
	  this API and pointers to "v4l" programs may be found at
	  <file:Documentation/video4linux/API.html>.

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

config USB_KEENE
	tristate "Keene FM Transmitter USB support"
	depends on USB && VIDEO_V4L2
	---help---
	  Say Y here if you want to connect this type of FM transmitter
	  to your computer's USB port.

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

config USB_RAREMONO
	tristate "Thanko's Raremono AM/FM/SW radio support"
	depends on USB && VIDEO_V4L2
	---help---
	  The 'Thanko's Raremono' device contains the Si4734 chip from Silicon Labs Inc.
	  It is one of the very few or perhaps the only consumer USB radio device
	  to receive the AM/FM/SW bands.

	  Say Y here if you want to connect this type of AM/FM/SW receiver
	  to your computer's USB port.

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

config USB_MA901
	tristate "Masterkit MA901 USB FM radio support"
	depends on USB && VIDEO_V4L2
	---help---
	  Say Y here if you want to connect this type of radio to your
	  computer's USB port. Note that the audio is not digital, and
	  you must connect the line out connector to a sound card or a
	  set of speakers or headphones.

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

config RADIO_TEA5764
	tristate "TEA5764 I2C FM radio support"
	depends on I2C && VIDEO_V4L2
	---help---
	  Say Y here if you want to use the TEA5764 FM chip found in
	  EZX phones. This FM chip is present in EZX phones from Motorola,
	  connected to internal pxa I2C bus.

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

config RADIO_TEA5764_XTAL
	bool "TEA5764 crystal reference"
	depends on RADIO_TEA5764=y
	default y
	help
	  Say Y here if TEA5764 have a 32768 Hz crystal in circuit, say N
	  here if TEA5764 reference frequency is connected in FREQIN.

config RADIO_SAA7706H
	tristate "SAA7706H Car Radio DSP"
	depends on I2C && VIDEO_V4L2
	---help---
	  Say Y here if you want to use the SAA7706H Car radio Digital
	  Signal Processor, found for instance on the Russellville development
	  board. On the russellville the device is connected to internal
	  timberdale I2C bus.

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

config RADIO_TEF6862
	tristate "TEF6862 Car Radio Enhanced Selectivity Tuner"
	depends on I2C && VIDEO_V4L2
	---help---
	  Say Y here if you want to use the TEF6862 Car Radio Enhanced
	  Selectivity Tuner, found for instance on the Russellville development
	  board. On the russellville the device is connected to internal
	  timberdale I2C bus.

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

config RADIO_TIMBERDALE
	tristate "Enable the Timberdale radio driver"
	depends on MFD_TIMBERDALE && VIDEO_V4L2
	depends on I2C	# for RADIO_SAA7706H
	select RADIO_TEF6862
	select RADIO_SAA7706H
	---help---
	  This is a kind of umbrella driver for the Radio Tuner and DSP
	  found behind the Timberdale FPGA on the Russellville board.
	  Enabling this driver will automatically select the DSP and tuner.

config RADIO_WL1273
	tristate "Texas Instruments WL1273 I2C FM Radio"
	depends on I2C && VIDEO_V4L2
	select MFD_CORE
	select MFD_WL1273_CORE
	select FW_LOADER
	---help---
	  Choose Y here if you have this FM radio chip.

	  In order to control your radio card, you will need to use programs
	  that are compatible with the Video For Linux 2 API.  Information on
	  this API and pointers to "v4l2" programs may be found at
	  <file:Documentation/video4linux/API.html>.

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

# TI's ST based wl128x FM radio
source "drivers/media/radio/wl128x/Kconfig"

#
# ISA drivers configuration
#

menuconfig V4L_RADIO_ISA_DRIVERS
	bool "ISA radio devices"
	depends on ISA
	default n
	---help---
	  Say Y here to enable support for these ISA drivers.

if V4L_RADIO_ISA_DRIVERS

config RADIO_ISA
	depends on ISA
	tristate

config RADIO_CADET
	tristate "ADS Cadet AM/FM Tuner"
	depends on ISA && VIDEO_V4L2
	---help---
	  Choose Y here if you have one of these AM/FM radio cards, and then
	  fill in the port address below.

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

config RADIO_RTRACK
	tristate "AIMSlab RadioTrack (aka RadioReveal) support"
	depends on ISA && VIDEO_V4L2
	select RADIO_ISA
	---help---
	  Choose Y here if you have one of these FM radio cards, and then fill
	  in the port address below.

	  Note that newer AIMSlab RadioTrack cards have a different chipset
	  and are not supported by this driver.  For these cards, use the
	  RadioTrack II driver below.

	  If you have a GemTeks combined (PnP) sound- and radio card you must
	  use this driver as a module and setup the card with isapnptools.
	  You must also pass the module a suitable io parameter, 0x248 has
	  been reported to be used by these cards.

	  More information is contained in the file
	  <file:Documentation/video4linux/radiotrack.txt>.

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

config RADIO_RTRACK_PORT
	hex "RadioTrack i/o port (0x20f or 0x30f)"
	depends on RADIO_RTRACK=y
	default "30f"
	help
	  Enter either 0x30f or 0x20f here.  The card default is 0x30f, if you
	  haven't changed the jumper setting on the card.

config RADIO_RTRACK2
	tristate "AIMSlab RadioTrack II support"
	depends on ISA && VIDEO_V4L2
	select RADIO_ISA
	---help---
	  Choose Y here if you have this FM radio card, and then fill in the
	  port address below.

	  Note: this driver hasn't been tested since a long time due to lack
	  of hardware. If you have this hardware, then please contact the
	  linux-media mailinglist.

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

config RADIO_RTRACK2_PORT
	hex "RadioTrack II i/o port (0x20c or 0x30c)"
	depends on RADIO_RTRACK2=y
	default "30c"
	help
	  Enter either 0x30c or 0x20c here.  The card default is 0x30c, if you
	  haven't changed the jumper setting on the card.

config RADIO_AZTECH
	tristate "Aztech/Packard Bell Radio"
	depends on ISA && VIDEO_V4L2
	select RADIO_ISA
	---help---
	  Choose Y here if you have one of these FM radio cards, and then fill
	  in the port address below.

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

config RADIO_AZTECH_PORT
	hex "Aztech/Packard Bell I/O port (0x350 or 0x358)"
	depends on RADIO_AZTECH=y
	default "350"
	help
	  Enter either 0x350 or 0x358 here.  The card default is 0x350, if you
	  haven't changed the setting of jumper JP3 on the card.  Removing the
	  jumper sets the card to 0x358.

config RADIO_GEMTEK
	tristate "GemTek Radio card (or compatible) support"
	depends on ISA && VIDEO_V4L2
	select RADIO_ISA
	---help---
	  Choose Y here if you have this FM radio card, and then fill in the
	  I/O port address and settings below. The following cards either have
	  GemTek Radio tuner or are rebranded GemTek Radio cards:

	  - Sound Vision 16 Gold with FM Radio
	  - Typhoon Radio card (some models)
	  - Hama Radio card

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

config RADIO_GEMTEK_PORT
	hex "Fixed I/O port (0x20c, 0x30c, 0x24c, 0x34c, 0x248 or 0x28c)"
	depends on RADIO_GEMTEK=y
	default "34c"
	help
	  Enter either 0x20c, 0x30c, 0x24c, 0x34c, 0x248 or 0x28c here. The
	  card default is 0x34c, if you haven't changed the jumper setting
	  on the card.

	  On Sound Vision 16 Gold PnP with FM Radio (ESS1869+FM Gemtek), the I/O
	  port is 0x20c, 0x248 or 0x28c.

	  If automatic I/O port probing is enabled this port will be used only
	  in case of automatic probing failure, ie. as a fallback.

config RADIO_GEMTEK_PROBE
	bool "Automatic I/O port probing"
	depends on RADIO_GEMTEK=y
	default y
	help
	  Say Y here to enable automatic probing for GemTek Radio card. The
	  following ports will be probed: 0x20c, 0x30c, 0x24c, 0x34c, 0x248 and
	  0x28c.

config RADIO_MIROPCM20
	tristate "miroSOUND PCM20 radio"
	depends on ISA && ISA_DMA_API && VIDEO_V4L2 && SND
	select SND_ISA
	select SND_MIRO
	---help---
	  Choose Y here if you have this FM radio card. You also need to enable
	  the ALSA sound system. This choice automatically selects the ALSA
	  sound card driver "Miro miroSOUND PCM1pro/PCM12/PCM20radio" as this
	  is required for the radio-miropcm20.

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

config RADIO_SF16FMI
	tristate "SF16-FMI/SF16-FMP/SF16-FMD Radio"
	depends on ISA && VIDEO_V4L2
	---help---
	  Choose Y here if you have one of these FM radio cards.

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

config RADIO_SF16FMR2
	tristate "SF16-FMR2/SF16-FMD2 Radio"
	depends on ISA && VIDEO_V4L2
	select RADIO_TEA575X
	---help---
	  Choose Y here if you have one of these FM radio cards.

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

config RADIO_TERRATEC
	tristate "TerraTec ActiveRadio ISA Standalone"
	depends on ISA && VIDEO_V4L2
	select RADIO_ISA
	---help---
	  Choose Y here if you have this FM radio card.

	  Note: this driver hasn't been tested since a long time due to lack
	  of hardware. If you have this hardware, then please contact the
	  linux-media mailinglist.

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

config RADIO_TRUST
	tristate "Trust FM radio card"
	depends on ISA && VIDEO_V4L2
	select RADIO_ISA
	help
	  This is a driver for the Trust FM radio cards. Say Y if you have
	  such a card and want to use it under Linux.

	  Note: this driver hasn't been tested since a long time due to lack
	  of hardware. If you have this hardware, then please contact the
	  linux-media mailinglist.

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

config RADIO_TRUST_PORT
	hex "Trust i/o port (usually 0x350 or 0x358)"
	depends on RADIO_TRUST=y
	default "350"
	help
	  Enter the I/O port of your Trust FM radio card. If unsure, try the
	  values "0x350" or "0x358".

config RADIO_TYPHOON
	tristate "Typhoon Radio (a.k.a. EcoRadio)"
	depends on ISA && VIDEO_V4L2
	select RADIO_ISA
	---help---
	  Choose Y here if you have one of these FM radio cards, and then fill
	  in the port address and the frequency used for muting below.

	  Note: this driver hasn't been tested since a long time due to lack
	  of hardware. If you have this hardware, then please contact the
	  linux-media mailinglist.

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

config RADIO_TYPHOON_PORT
	hex "Typhoon I/O port (0x316 or 0x336)"
	depends on RADIO_TYPHOON=y
	default "316"
	help
	  Enter the I/O port of your Typhoon or EcoRadio radio card.

config RADIO_TYPHOON_MUTEFREQ
	int "Typhoon frequency set when muting the device (kHz)"
	depends on RADIO_TYPHOON=y
	default "87500"
	help
	  Enter the frequency used for muting the radio. The device is never
	  completely silent. If the volume is just turned down, you can still
	  hear silent voices and music. For that reason, the frequency of the
	  radio device is set to the frequency you can enter here whenever
	  the device is muted. There should be no local radio station at that
	  frequency.

config RADIO_ZOLTRIX
	tristate "Zoltrix Radio"
	depends on ISA && VIDEO_V4L2
	select RADIO_ISA
	---help---
	  Choose Y here if you have one of these FM radio cards, and then fill
	  in the port address below.

	  Note: this driver hasn't been tested since a long time due to lack
	  of hardware. If you have this hardware, then please contact the
	  linux-media mailinglist.

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

config RADIO_ZOLTRIX_PORT
	hex "ZOLTRIX I/O port (0x20c or 0x30c)"
	depends on RADIO_ZOLTRIX=y
	default "20c"
	help
	  Enter the I/O port of your Zoltrix radio card.

endif # V4L_RADIO_ISA_DRIVERS

endif # RADIO_ADAPTERS
