# sound/Config.in
#

menu "Sound"
	depends on HAS_IOMEM

config SOUND
	tristate "Sound card support"
	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.

	  I'm told that even without a sound card, you can make your computer
	  say more than an occasional beep, by programming the PC speaker.
	  Kernel patches and supporting utilities to do that are in the pcsp
	  package, available at <ftp://ftp.infradead.org/pub/pcsp/>.

source "sound/oss/dmasound/Kconfig"

if !M68K

menu "Advanced Linux Sound Architecture"
	depends on SOUND!=n

config SND
	tristate "Advanced Linux Sound Architecture"
	depends on SOUND
	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/>

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"

if SPI
source "sound/spi/Kconfig"
endif

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"

endmenu

menu "Open Sound System"
	depends on SOUND!=n

config SOUND_PRIME
	tristate "Open Sound System (DEPRECATED)"
	depends on SOUND
	help
	  Say 'Y' or 'M' to enable Open Sound System drivers.

source "sound/oss/Kconfig"

endmenu

endif

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.

endmenu
