# SPDX-License-Identifier: GPL-2.0-only
# ALSA PCI drivers

menuconfig SND_PCI
	bool "PCI sound devices"
	depends on PCI
	default y
	help
	  Support for sound devices connected via the PCI bus.

if SND_PCI

config SND_AD1889
	tristate "Analog Devices AD1889"
	select SND_AC97_CODEC
	help
	  Say Y here to include support for the integrated AC97 sound
	  device found in particular on the Hewlett-Packard [BCJ]-xxx0
	  class PA-RISC workstations, using the AD1819 codec.

	  To compile this as a module, choose M here: the module
	  will be called snd-ad1889.

config SND_ALS300
	tristate "Avance Logic ALS300/ALS300+"
	select SND_PCM
	select SND_AC97_CODEC
	select SND_OPL3_LIB
	depends on ZONE_DMA && HAS_IOPORT
	help
	  Say 'Y' or 'M' to include support for Avance Logic ALS300/ALS300+

	  To compile this driver as a module, choose M here: the module
	  will be called snd-als300

config SND_ALS4000
	tristate "Avance Logic ALS4000"
	depends on ISA_DMA_API
	depends on HAS_IOPORT
	select SND_OPL3_LIB
	select SND_MPU401_UART
	select SND_PCM
	select SND_SB_COMMON
	help
	  Say Y here to include support for soundcards based on Avance Logic
	  ALS4000 chips.

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

config SND_ALI5451
	tristate "ALi M5451 PCI Audio Controller"
	select SND_MPU401_UART
	select SND_AC97_CODEC
	depends on ZONE_DMA && HAS_IOPORT
	help
	  Say Y here to include support for the integrated AC97 sound
	  device on motherboards using the ALi M5451 Audio Controller
	  (M1535/M1535D/M1535+/M1535D+ south bridges).  Newer chipsets
	  use the "Intel/SiS/nVidia/AMD/ALi AC97 Controller" driver.

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

config SND_ASIHPI
	tristate "AudioScience ASIxxxx"
	depends on X86
	select FW_LOADER
	select SND_PCM
	select SND_HWDEP
	help
	  Say Y here to include support for AudioScience ASI sound cards.

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

config SND_ATIIXP
	tristate "ATI IXP AC97 Controller"
	select SND_AC97_CODEC
	help
	  Say Y here to include support for the integrated AC97 sound
	  device on motherboards with ATI chipsets (ATI IXP 150/200/250/
	  300/400).

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

config SND_ATIIXP_MODEM
	tristate "ATI IXP Modem"
	select SND_AC97_CODEC
	help
	  Say Y here to include support for the integrated MC97 modem on
	  motherboards with ATI chipsets (ATI IXP 150/200/250).

	  To compile this driver as a module, choose M here: the module
	  will be called snd-atiixp-modem.

config SND_AU8810
	tristate "Aureal Advantage"
	depends on HAS_IOPORT
	select SND_MPU401_UART
	select SND_AC97_CODEC
	help
	  Say Y here to include support for Aureal Advantage soundcards.

	  Supported features: Hardware Mixer, SRC, EQ and SPDIF output.
	  3D support code is in place, but not yet useable. For more info,
	  email the ALSA developer list, or <mjander@users.sourceforge.net>.

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

config SND_AU8820
	tristate "Aureal Vortex"
	depends on HAS_IOPORT
	select SND_MPU401_UART
	select SND_AC97_CODEC
	help
	  Say Y here to include support for Aureal Vortex soundcards.

	  Supported features: Hardware Mixer and SRC. For more info, email
	  the ALSA developer list, or <mjander@users.sourceforge.net>.

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

config SND_AU8830
	tristate "Aureal Vortex 2"
	depends on HAS_IOPORT
	select SND_MPU401_UART
	select SND_AC97_CODEC
	help
	  Say Y here to include support for Aureal Vortex 2 soundcards.

	  Supported features: Hardware Mixer, SRC, EQ and SPDIF output.
	  3D support code is in place, but not yet useable. For more info,
	  email the ALSA developer list, or <mjander@users.sourceforge.net>.

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

config SND_AW2
	tristate "Emagic Audiowerk 2"
	help
	  Say Y here to include support for Emagic Audiowerk 2 soundcards.

	  Supported features: Analog and SPDIF output. Analog or SPDIF input.
	  Note: Switch between analog and digital input does not always work.
	  It can produce continuous noise. The workaround is to switch again
	  (and again) between digital and analog input until it works.

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


config SND_AZT3328
	tristate "Aztech AZF3328 / PCI168"
	select SND_OPL3_LIB
	select SND_MPU401_UART
	select SND_PCM
	select SND_RAWMIDI
	select SND_AC97_CODEC
	select SND_TIMER
	depends on ZONE_DMA && HAS_IOPORT
	help
	  Say Y here to include support for Aztech AZF3328 (PCI168)
	  soundcards.

	  Supported features: AC97-"conformant" mixer, MPU401/OPL3, analog I/O
	  (16bit/8bit, many sample rates [<= 66.2kHz], NO hardware mixing),
	  Digital Enhanced Game Port, 1.024MHz multimedia sequencer timer,
	  ext. codec (I2S port), onboard amp (4W/4Ohms/ch), suspend/resume.

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

config SND_BT87X
	tristate "Bt87x Audio Capture"
	select SND_PCM
	help
	  If you want to record audio from TV cards based on
	  Brooktree Bt878/Bt879 chips, say Y here and read
	  <file:Documentation/sound/cards/bt87x.rst>.

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

config SND_BT87X_OVERCLOCK
	bool "Bt87x Audio overclocking"
	depends on SND_BT87X
	help
	  Say Y here if 448000 Hz isn't enough for you and you want to
	  record from the analog input with up to 1792000 Hz.

	  Higher sample rates won't hurt your hardware, but audio
	  quality may suffer.

config SND_CA0106
	tristate "SB Audigy LS / Live 24bit"
	depends on HAS_IOPORT
	select SND_AC97_CODEC
	select SND_RAWMIDI
	select SND_VMASTER
	help
	  Say Y here to include support for the Sound Blaster Audigy LS
	  and Live 24bit.

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

config SND_CMIPCI
	tristate "C-Media 8338, 8738, 8768, 8770"
	depends on HAS_IOPORT
	select SND_OPL3_LIB
	select SND_MPU401_UART
	select SND_PCM
	help
	  If you want to use soundcards based on C-Media CMI8338, CMI8738,
	  CMI8768 or CMI8770 chips, say Y here and read
	  <file:Documentation/sound/cards/cmipci.rst>.

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

config SND_OXYGEN_LIB
	tristate

config SND_OXYGEN
	tristate "C-Media 8786, 8787, 8788 (Oxygen)"
	depends on HAS_IOPORT
	select SND_OXYGEN_LIB
	select SND_PCM
	select SND_MPU401_UART
	help
	  Say Y here to include support for sound cards based on the
	  C-Media CMI8788 (Oxygen HD Audio) chip:
	   * Asound A-8788
	   * Asus Xonar DG/DGX
	   * AuzenTech X-Meridian
	   * AuzenTech X-Meridian 2G
	   * Bgears b-Enspirer
	   * Club3D Theatron DTS
	   * HT-Omega Claro (plus)
	   * HT-Omega Claro halo (XT)
	   * Kuroutoshikou CMI8787-HG2PCI
	   * Razer Barracuda AC-1
	   * Sondigo Inferno
	   * TempoTec/MediaTek HiFier Fantasia
	   * TempoTec/MediaTek HiFier Serenade

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

config SND_CS4281
	tristate "Cirrus Logic (Sound Fusion) CS4281"
	depends on HAS_IOPORT
	select SND_OPL3_LIB
	select SND_RAWMIDI
	select SND_AC97_CODEC
	help
	  Say Y here to include support for Cirrus Logic CS4281 chips.

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

config SND_CS46XX
	tristate "Cirrus Logic (Sound Fusion) CS4280/CS461x/CS462x/CS463x"
	depends on HAS_IOPORT
	select SND_RAWMIDI
	select SND_AC97_CODEC
	select FW_LOADER
	help
	  Say Y here to include support for Cirrus Logic CS4610/CS4612/
	  CS4614/CS4615/CS4622/CS4624/CS4630/CS4280 chips.

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

config SND_CS46XX_NEW_DSP
	bool "Cirrus Logic (Sound Fusion) New DSP support"
	depends on SND_CS46XX
	default y
	help
	  Say Y here to use a new DSP image for SPDIF and dual codecs.

	  This works better than the old code, so say Y.

config SND_CS5530
	tristate "CS5530 Audio"
	depends on ISA_DMA_API && (X86_32 || COMPILE_TEST)
	depends on !M68K
	select SND_SB16_DSP
	help
	  Say Y here to include support for audio on Cyrix/NatSemi CS5530 chips.

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

config SND_CS5535AUDIO
	tristate "CS5535/CS5536 Audio"
	depends on X86_32 || MIPS || COMPILE_TEST
	depends on HAS_IOPORT
	select SND_PCM
	select SND_AC97_CODEC
	help
	  Say Y here to include support for audio on CS5535 chips. It is
	  referred to as NS CS5535 IO or AMD CS5535 IO companion in
	  various literature. This driver also supports the CS5536 audio
	  device. However, for both chips, on certain boards, you may
	  need to use ac97_quirk=hp_only if your board has physically
	  mapped headphone out to master output. If that works for you,
	  send lspci -vvv output to the mailing list so that your board
	  can be identified in the quirks list.

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

config SND_CTXFI
	tristate "Creative Sound Blaster X-Fi"
	depends on HAS_IOPORT
	select SND_PCM
	help
	  If you want to use soundcards based on Creative Sound Blastr X-Fi
	  boards with 20k1 or 20k2 chips, say Y here.

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

config SND_DARLA20
	tristate "(Echoaudio) Darla20"
	select FW_LOADER
	select SND_PCM
	help
	  Say 'Y' or 'M' to include support for Echoaudio Darla.

	  To compile this driver as a module, choose M here: the module
	  will be called snd-darla20

config SND_GINA20
	tristate "(Echoaudio) Gina20"
	select FW_LOADER
	select SND_PCM
	help
	  Say 'Y' or 'M' to include support for Echoaudio Gina.

	  To compile this driver as a module, choose M here: the module
	  will be called snd-gina20

config SND_LAYLA20
	tristate "(Echoaudio) Layla20"
	select FW_LOADER
	select SND_RAWMIDI
	select SND_PCM
	help
	  Say 'Y' or 'M' to include support for Echoaudio Layla.

	  To compile this driver as a module, choose M here: the module
	  will be called snd-layla20

config SND_DARLA24
	tristate "(Echoaudio) Darla24"
	select FW_LOADER
	select SND_PCM
	help
	  Say 'Y' or 'M' to include support for Echoaudio Darla24.

	  To compile this driver as a module, choose M here: the module
	  will be called snd-darla24

config SND_GINA24
	tristate "(Echoaudio) Gina24"
	select FW_LOADER
	select SND_PCM
	help
	  Say 'Y' or 'M' to include support for Echoaudio Gina24.

	  To compile this driver as a module, choose M here: the module
	  will be called snd-gina24

config SND_LAYLA24
	tristate "(Echoaudio) Layla24"
	select FW_LOADER
	select SND_RAWMIDI
	select SND_PCM
	help
	  Say 'Y' or 'M' to include support for Echoaudio Layla24.

	  To compile this driver as a module, choose M here: the module
	  will be called snd-layla24

config SND_MONA
	tristate "(Echoaudio) Mona"
	select FW_LOADER
	select SND_RAWMIDI
	select SND_PCM
	help
	  Say 'Y' or 'M' to include support for Echoaudio Mona.

	  To compile this driver as a module, choose M here: the module
	  will be called snd-mona

config SND_MIA
	tristate "(Echoaudio) Mia"
	select FW_LOADER
	select SND_RAWMIDI
	select SND_PCM
	help
	  Say 'Y' or 'M' to include support for Echoaudio Mia and Mia-midi.

	  To compile this driver as a module, choose M here: the module
	  will be called snd-mia

config SND_ECHO3G
	tristate "(Echoaudio) 3G cards"
	select FW_LOADER
	select SND_RAWMIDI
	select SND_PCM
	help
	  Say 'Y' or 'M' to include support for Echoaudio Gina3G and Layla3G.

	  To compile this driver as a module, choose M here: the module
	  will be called snd-echo3g

config SND_INDIGO
	tristate "(Echoaudio) Indigo"
	select FW_LOADER
	select SND_PCM
	help
	  Say 'Y' or 'M' to include support for Echoaudio Indigo.

	  To compile this driver as a module, choose M here: the module
	  will be called snd-indigo

config SND_INDIGOIO
	tristate "(Echoaudio) Indigo IO"
	select FW_LOADER
	select SND_PCM
	help
	  Say 'Y' or 'M' to include support for Echoaudio Indigo IO.

	  To compile this driver as a module, choose M here: the module
	  will be called snd-indigoio

config SND_INDIGODJ
	tristate "(Echoaudio) Indigo DJ"
	select FW_LOADER
	select SND_PCM
	help
	  Say 'Y' or 'M' to include support for Echoaudio Indigo DJ.

	  To compile this driver as a module, choose M here: the module
	  will be called snd-indigodj

config SND_INDIGOIOX
	tristate "(Echoaudio) Indigo IOx"
	select FW_LOADER
	select SND_PCM
	help
	  Say 'Y' or 'M' to include support for Echoaudio Indigo IOx.

	  To compile this driver as a module, choose M here: the module
	  will be called snd-indigoiox

config SND_INDIGODJX
	tristate "(Echoaudio) Indigo DJx"
	select FW_LOADER
	select SND_PCM
	help
	  Say 'Y' or 'M' to include support for Echoaudio Indigo DJx.

	  To compile this driver as a module, choose M here: the module
	  will be called snd-indigodjx

config SND_EMU10K1
	tristate "Emu10k1 (SB Live!, Audigy, E-MU APS/0404/1010/1212/1616/1820)"
	select FW_LOADER
	select SND_HWDEP
	select SND_RAWMIDI
	select SND_AC97_CODEC
	select SND_TIMER
	select SND_SEQ_DEVICE if SND_SEQUENCER != n
	depends on ZONE_DMA && HAS_IOPORT
	help
	  Say Y to include support for Sound Blaster PCI 512, Live!,
	  Audigy and E-MU APS/0404/1010/1212/1616/1820 soundcards.

	  The confusing multitude of mixer controls is documented in
	  <file:Documentation/sound/cards/sb-live-mixer.rst> and
	  <file:Documentation/sound/cards/audigy-mixer.rst>.

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

# select SEQ stuff to min(SND_SEQUENCER,SND_XXX)
config SND_EMU10K1_SEQ
	def_tristate SND_SEQUENCER && SND_EMU10K1
	select SND_SEQ_MIDI_EMUL
	select SND_SEQ_VIRMIDI
	select SND_SYNTH_EMUX

config SND_EMU10K1X
	tristate "Emu10k1X (Dell OEM Version)"
	select SND_AC97_CODEC
	select SND_RAWMIDI
	depends on ZONE_DMA && HAS_IOPORT
	help
	  Say Y here to include support for the Dell OEM version of the
	  Sound Blaster Live!.

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

config SND_ENS1370
	tristate "(Creative) Ensoniq AudioPCI 1370"
	depends on HAS_IOPORT
	select SND_RAWMIDI
	select SND_PCM
	help
	  Say Y here to include support for Ensoniq AudioPCI ES1370 chips.

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

config SND_ENS1371
	tristate "(Creative) Ensoniq AudioPCI 1371/1373"
	depends on HAS_IOPORT
	select SND_RAWMIDI
	select SND_AC97_CODEC
	help
	  Say Y here to include support for Ensoniq AudioPCI ES1371 chips and
	  Sound Blaster PCI 64 or 128 soundcards.

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

config SND_ES1938
	tristate "ESS ES1938/1946/1969 (Solo-1)"
	select SND_OPL3_LIB
	select SND_MPU401_UART
	select SND_AC97_CODEC
	depends on ZONE_DMA && HAS_IOPORT
	help
	  Say Y here to include support for soundcards based on ESS Solo-1
	  (ES1938, ES1946, ES1969) chips.

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

config SND_ES1968
	tristate "ESS ES1968/1978 (Maestro-1/2/2E)"
	select SND_MPU401_UART
	select SND_AC97_CODEC
	depends on ZONE_DMA && HAS_IOPORT
	help
	  Say Y here to include support for soundcards based on ESS Maestro
	  1/2/2E chips.

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

config SND_ES1968_INPUT
	bool "Enable input device for es1968 volume buttons"
	depends on SND_ES1968
	depends on INPUT=y || INPUT=SND_ES1968
	help
	  If you say Y here, you will get an input device which reports
	  keypresses for the volume buttons connected to the es1968 chip.
	  If you say N the buttons will directly control the master volume.
	  It is recommended to say Y.

config SND_ES1968_RADIO
	bool "Enable TEA5757 radio tuner support for es1968"
	depends on SND_ES1968
	depends on MEDIA_RADIO_SUPPORT
	depends on VIDEO_DEV=y || VIDEO_DEV=SND_ES1968
	select RADIO_ADAPTERS
	select RADIO_TEA575X

	help
	  Say Y here to include support for TEA5757 radio tuner integrated on
	  some MediaForte cards (e.g. SF64-PCE2).

config SND_FM801
	tristate "ForteMedia FM801"
	depends on HAS_IOPORT
	select SND_OPL3_LIB
	select SND_MPU401_UART
	select SND_AC97_CODEC
	help
	  Say Y here to include support for soundcards based on the ForteMedia
	  FM801 chip.

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

config SND_FM801_TEA575X_BOOL
	bool "ForteMedia FM801 + TEA5757 tuner"
	depends on SND_FM801
	depends on MEDIA_RADIO_SUPPORT
	depends on VIDEO_DEV=y || VIDEO_DEV=SND_FM801
	select RADIO_ADAPTERS
	select RADIO_TEA575X
	help
	  Say Y here to include support for soundcards based on the ForteMedia
	  FM801 chip with a TEA5757 tuner (MediaForte SF256-PCS, SF256-PCP and
	  SF64-PCR) into the snd-fm801 driver.

config SND_HDSP
	tristate "RME Hammerfall DSP Audio"
	select FW_LOADER
	select SND_HWDEP
	select SND_RAWMIDI
	select SND_PCM
	help
	  Say Y here to include support for RME Hammerfall DSP Audio
	  soundcards.

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

comment "Don't forget to add built-in firmwares for HDSP driver"
	depends on SND_HDSP=y

config SND_HDSPM
	tristate "RME Hammerfall DSP MADI/RayDAT/AIO"
	select SND_HWDEP
	select SND_RAWMIDI
	select SND_PCM
	help
	  Say Y here to include support for RME Hammerfall DSP MADI,
	  RayDAT and AIO soundcards.

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

config SND_ICE1712
	tristate "ICEnsemble ICE1712 (Envy24)"
	select SND_MPU401_UART
	select SND_AC97_CODEC
	select BITREVERSE
	depends on ZONE_DMA && HAS_IOPORT
	help
	  Say Y here to include support for soundcards based on the
	  ICE1712 (Envy24) chip.

	  Currently supported hardware is: M-Audio Delta 1010(LT),
	  DiO 2496, 66, 44, 410, Audiophile 24/96; Digigram VX442;
	  TerraTec EWX 24/96, EWS 88MT/D, DMX 6Fire, Phase 88;
	  Hoontech SoundTrack DSP 24/Value/Media7.1; Event EZ8;
	  Lionstracs Mediastation, Terrasoniq TS 88.

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

config SND_ICE1724
	tristate "ICE/VT1724/1720 (Envy24HT/PT)"
	depends on HAS_IOPORT
	select SND_RAWMIDI
	select SND_AC97_CODEC
	select SND_VMASTER
	help
	  Say Y here to include support for soundcards based on
	  ICE/VT1724/1720 (Envy24HT/PT) chips.

	  Currently supported hardware is: AMP AUDIO2000; M-Audio
	  Revolution 5.1, 7.1, Audiophile 192; TerraTec Aureon 5.1 Sky,
	  7.1 Space/Universe, Phase 22/28; Onkyo SE-90PCI, SE-200PCI;
	  AudioTrak Prodigy 192, 7.1 (HIFI/LT/XT), HD2; Hercules
	  Fortissimo IV; ESI Juli@; Pontis MS300; EGO-SYS WaveTerminal
	  192M; Albatron K8X800 Pro II; Chaintech ZNF3-150/250, 9CJS,
	  AV-710; Shuttle SN25P; Philips PSC724 Ultimate Edge.

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

config SND_INTEL8X0
	tristate "Intel/SiS/nVidia/AMD/ALi AC97 Controller"
	select SND_AC97_CODEC
	help
	  Say Y here to include support for the integrated AC97 sound
	  device on motherboards with Intel/SiS/nVidia/AMD chipsets, or
	  ALi chipsets using the M5455 Audio Controller.  (There is a
	  separate driver for ALi M5451 Audio Controllers.)

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

config SND_INTEL8X0M
	tristate "Intel/SiS/nVidia/AMD MC97 Modem"
	select SND_AC97_CODEC
	help
	  Say Y here to include support for the integrated MC97 modem on
	  motherboards with Intel/SiS/nVidia/AMD chipsets.

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

config SND_KORG1212
	tristate "Korg 1212 IO"
	select SND_PCM
	help
	  Say Y here to include support for Korg 1212IO soundcards.

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

config SND_LOLA
	tristate "Digigram Lola"
	select SND_PCM
	help
	  Say Y to include support for Digigram Lola boards.

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

config SND_LX6464ES
	tristate "Digigram LX6464ES"
	depends on HAS_IOPORT_MAP
	select SND_PCM
	help
	  Say Y here to include support for Digigram LX6464ES boards.

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


config SND_MAESTRO3
	tristate "ESS Allegro/Maestro3"
	select SND_AC97_CODEC
	depends on ZONE_DMA && HAS_IOPORT
	help
	  Say Y here to include support for soundcards based on ESS Maestro 3
	  (Allegro) chips.

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

config SND_MAESTRO3_INPUT
	bool "Enable input device for maestro3 volume buttons"
	depends on SND_MAESTRO3
	depends on INPUT=y || INPUT=SND_MAESTRO3
	help
	  If you say Y here, you will get an input device which reports
	  keypresses for the volume buttons connected to the maestro3 chip.
	  If you say N the buttons will directly control the master volume.
	  It is recommended to say Y.

config SND_MIXART
	tristate "Digigram miXart"
	select FW_LOADER
	select SND_HWDEP
	select SND_PCM
	help
	  If you want to use Digigram miXart soundcards, say Y here and
	  read <file:Documentation/sound/cards/mixart.rst>.

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

config SND_NM256
	tristate "NeoMagic NM256AV/ZX"
	select SND_AC97_CODEC
	help
	  Say Y here to include support for NeoMagic NM256AV/ZX chips.

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

config SND_PCXHR
	tristate "Digigram PCXHR"
	depends on HAS_IOPORT
	select FW_LOADER
	select SND_PCM
	select SND_HWDEP
	help
	  Say Y here to include support for Digigram PCXHR boards.

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

config SND_RIPTIDE
	tristate "Conexant Riptide"
	depends on HAS_IOPORT
	select FW_LOADER
	select SND_OPL3_LIB
	select SND_MPU401_UART
	select SND_AC97_CODEC
	help
	  Say 'Y' or 'M' to include support for Conexant Riptide chip.

	  To compile this driver as a module, choose M here: the module
	  will be called snd-riptide

config SND_RME32
	tristate "RME Digi32, 32/8, 32 PRO"
	select SND_PCM
	help
	  Say Y to include support for RME Digi32, Digi32 PRO and
	  Digi32/8 (Sek'd Prodif32, Prodif96 and Prodif Gold) audio
	  devices.

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

config SND_RME96
	tristate "RME Digi96, 96/8, 96/8 PRO"
	select SND_PCM
	help
	  Say Y here to include support for RME Digi96, Digi96/8 and
	  Digi96/8 PRO/PAD/PST soundcards.

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

config SND_RME9652
	tristate "RME Digi9652 (Hammerfall)"
	select SND_PCM
	help
	  Say Y here to include support for RME Hammerfall (RME
	  Digi9652/Digi9636) soundcards.

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

config SND_SE6X
	tristate "Studio Evolution SE6X"
	depends on SND_OXYGEN=n && SND_VIRTUOSO=n  # PCI ID conflict
	depends on HAS_IOPORT
	select SND_OXYGEN_LIB
	select SND_PCM
	select SND_MPU401_UART
	help
	  Say Y or M here only if you actually have this sound card.

config SND_SIS7019
	tristate "SiS 7019 Audio Accelerator"
	depends on X86_32
	select SND_AC97_CODEC
	depends on ZONE_DMA
	help
	  Say Y here to include support for the SiS 7019 Audio Accelerator.

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

config SND_SONICVIBES
	tristate "S3 SonicVibes"
	select SND_OPL3_LIB
	select SND_MPU401_UART
	select SND_AC97_CODEC
	depends on ZONE_DMA && HAS_IOPORT
	help
	  Say Y here to include support for soundcards based on the S3
	  SonicVibes chip.

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

config SND_TRIDENT
	tristate "Trident 4D-Wave DX/NX; SiS 7018"
	select SND_MPU401_UART
	select SND_AC97_CODEC
	depends on ZONE_DMA && HAS_IOPORT
	help
	  Say Y here to include support for soundcards based on Trident
	  4D-Wave DX/NX or SiS 7018 chips.

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

config SND_VIA82XX
	tristate "VIA 82C686A/B, 8233/8235 AC97 Controller"
	depends on HAS_IOPORT
	select SND_MPU401_UART
	select SND_AC97_CODEC
	help
	  Say Y here to include support for the integrated AC97 sound
	  device on motherboards with VIA chipsets.

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

config SND_VIA82XX_MODEM
	tristate "VIA 82C686A/B, 8233 based Modems"
	depends on HAS_IOPORT
	select SND_AC97_CODEC
	help
	  Say Y here to include support for the integrated MC97 modem on
	  motherboards with VIA chipsets.

	  To compile this driver as a module, choose M here: the module
	  will be called snd-via82xx-modem.

config SND_VIRTUOSO
	tristate "Asus Virtuoso 66/100/200 (Xonar)"
	depends on HAS_IOPORT
	select SND_OXYGEN_LIB
	select SND_PCM
	select SND_MPU401_UART
	select SND_JACK
	help
	  Say Y here to include support for sound cards based on the
	  Asus AV66/AV100/AV200 chips, i.e., Xonar D1, DX, D2, D2X, DS, DSX,
	  Essence ST (Deluxe), and Essence STX (II).
	  Support for the HDAV1.3 (Deluxe) and HDAV1.3 Slim is experimental;
	  for the Xense, missing.

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

config SND_VX222
	tristate "Digigram VX222"
	depends on HAS_IOPORT
	select SND_VX_LIB
	help
	  Say Y here to include support for Digigram VX222 soundcards.

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

config SND_YMFPCI
	tristate "Yamaha YMF724/740/744/754"
	depends on HAS_IOPORT
	select SND_OPL3_LIB
	select SND_MPU401_UART
	select SND_AC97_CODEC
	select SND_TIMER
	help
	  Say Y here to include support for Yamaha PCI audio chips -
	  YMF724, YMF724F, YMF740, YMF740C, YMF744, YMF754.

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

endif	# SND_PCI

source "sound/pci/hda/Kconfig"
