# sound/Config.in
#

menuconfig SOUND
	tristate "Sound card support"
	depends on HAS_IOMEM
	help
	  If you have a sound card in your computer, i.e. if it can say more
	  than an occasional beep, say Y.  Be sure to have all the information
	  about your sound card and its configuration down (I/O port,
	  interrupt and DMA channel), because you will be asked for it.

	  You want to read the Sound-HOWTO, available from
	  <http://www.tldp.org/docs.html#howto>. General information about
	  the modular sound system is contained in the files
	  <file:Documentation/sound/oss/Introduction>.  The file
	  <file:Documentation/sound/oss/README.OSS> contains some slightly
	  outdated but still useful information as well.  Newer sound
	  driver documentation is found in <file:Documentation/sound/alsa/*>.

	  If you have a PnP sound card and you want to configure it at boot
	  time using the ISA PnP tools (read
	  <http://www.roestock.demon.co.uk/isapnptools/>), then you need to
	  compile the sound card support as a module and load that module
	  after the PnP configuration is finished.  To do this, choose M here
	  and read <file:Documentation/sound/oss/README.modules>; the module
	  will be called soundcore.

if SOUND

source "sound/oss/dmasound/Kconfig"

if !M68K

menuconfig SND
	tristate "Advanced Linux Sound Architecture"
	help
	  Say 'Y' or 'M' to enable ALSA (Advanced Linux Sound Architecture),
	  the new base sound system.

	  For more information, see <http://www.alsa-project.org/>

if SND

source "sound/core/Kconfig"

source "sound/drivers/Kconfig"

source "sound/isa/Kconfig"

source "sound/pci/Kconfig"

source "sound/ppc/Kconfig"

source "sound/aoa/Kconfig"

source "sound/arm/Kconfig"

source "sound/spi/Kconfig"

source "sound/mips/Kconfig"

source "sound/sh/Kconfig"

# the following will depend on the order of config.
# here assuming USB is defined before ALSA
source "sound/usb/Kconfig"

# the following will depend on the order of config.
# here assuming PCMCIA is defined before ALSA
source "sound/pcmcia/Kconfig"

source "sound/sparc/Kconfig"

source "sound/parisc/Kconfig"

source "sound/soc/Kconfig"

endif # SND

menuconfig SOUND_PRIME
	tristate "Open Sound System (DEPRECATED)"
	help
	  Say 'Y' or 'M' to enable Open Sound System drivers.

if SOUND_PRIME

source "sound/oss/Kconfig"

endif # SOUND_PRIME

endif # !M68K

config AC97_BUS
	tristate
	help
	  This is used to avoid config and link hard dependencies between the
	  sound subsystem and other function drivers completely unrelated to
	  sound although they're sharing the AC97 bus. Concerned drivers
	  should "select" this.

endif # SOUND
