# drivers/sound/Config.in
#
# 18 Apr 1998, Michael Elizabeth Chastain, <mailto:mec@shout.net>
# More hacking for modularisation.
#
# Prompt user for primary drivers.

config SOUND_BCM_CS4297A
	tristate "Crystal Sound CS4297a (for Swarm)"
	depends on SIBYTE_SWARM
	help
	  The BCM91250A has a Crystal CS4297a on synchronous serial
	  port B (in addition to the DB-9 serial port).  Say Y or M
	  here to enable the sound chip instead of the UART.  Also
	  note that CONFIG_KGDB should not be enabled at the same
	  time, since it also attempts to use this UART port.

config SOUND_VWSND
	tristate "SGI Visual Workstation Sound"
	depends on X86_VISWS
	help
	  Say Y or M if you have an SGI Visual Workstation and you want to be
	  able to use its on-board audio.  Read
	  <file:Documentation/sound/oss/vwsnd> for more info on this driver's
	  capabilities.

config SOUND_HAL2
	tristate "SGI HAL2 sound (EXPERIMENTAL)"
	depends on SGI_IP22 && EXPERIMENTAL
	help
	  Say Y or M if you have an SGI Indy or Indigo2 system and want to be able to
	  use its on-board A2 audio system.

config SOUND_AU1550_AC97
	tristate "Au1550/Au1200 AC97 Sound"
	depends on SOC_AU1550 || SOC_AU1200

config SOUND_MSNDCLAS
	tristate "Support for Turtle Beach MultiSound Classic, Tahiti, Monterey"
	depends on (m || !STANDALONE) && ISA
	help
	  Say M here if you have a Turtle Beach MultiSound Classic, Tahiti or
	  Monterey (not for the Pinnacle or Fiji).

	  See <file:Documentation/sound/oss/MultiSound> for important information
	  about this driver.  Note that it has been discontinued, but the
	  Voyetra Turtle Beach knowledge base entry for it is still available
	  at <http://www.turtlebeach.com/site/kb_ftp/790.asp>.

comment "Compiled-in MSND Classic support requires firmware during compilation."
	depends on SOUND_PRIME && SOUND_MSNDCLAS=y

config MSNDCLAS_HAVE_BOOT
	bool
	depends on SOUND_MSNDCLAS=y && !STANDALONE
	default y

config MSNDCLAS_INIT_FILE
	string "Full pathname of MSNDINIT.BIN firmware file"
	depends on SOUND_MSNDCLAS
	default "/etc/sound/msndinit.bin"
	help
	  The MultiSound cards have two firmware files which are required for
	  operation, and are not currently included. These files can be
	  obtained from Turtle Beach. See
	  <file:Documentation/sound/oss/MultiSound> for information on how to
	  obtain this.

config MSNDCLAS_PERM_FILE
	string "Full pathname of MSNDPERM.BIN firmware file"
	depends on SOUND_MSNDCLAS
	default "/etc/sound/msndperm.bin"
	help
	  The MultiSound cards have two firmware files which are required for
	  operation, and are not currently included. These files can be
	  obtained from Turtle Beach. See
	  <file:Documentation/sound/oss/MultiSound> for information on how to
	  obtain this.

config MSNDCLAS_IRQ
	int "MSND Classic IRQ 5, 7, 9, 10, 11, 12"
	depends on SOUND_MSNDCLAS=y
	default "5"
	help
	  Interrupt Request line for the MultiSound Classic and related cards.

config MSNDCLAS_MEM
	hex "MSND Classic memory B0000, C8000, D0000, D8000, E0000, E8000"
	depends on SOUND_MSNDCLAS=y
	default "D0000"
	help
	  Memory-mapped I/O base address for the MultiSound Classic and
	  related cards.

config MSNDCLAS_IO
	hex "MSND Classic I/O 210, 220, 230, 240, 250, 260, 290, 3E0"
	depends on SOUND_MSNDCLAS=y
	default "290"
	help
	  I/O port address for the MultiSound Classic and related cards.

config SOUND_MSNDPIN
	tristate "Support for Turtle Beach MultiSound Pinnacle, Fiji"
	depends on (m || !STANDALONE) && ISA
	help
	  Say M here if you have a Turtle Beach MultiSound Pinnacle or Fiji.
	  See <file:Documentation/sound/oss/MultiSound> for important information
	  about this driver. Note that it has been discontinued, but the
	  Voyetra Turtle Beach knowledge base entry for it is still available
	  at <http://www.turtlebeach.com/site/kb_ftp/600.asp>.

comment "Compiled-in MSND Pinnacle support requires firmware during compilation."
	depends on SOUND_PRIME && SOUND_MSNDPIN=y

config MSNDPIN_HAVE_BOOT
	bool
	depends on SOUND_MSNDPIN=y
	default y

config MSNDPIN_INIT_FILE
	string "Full pathname of PNDSPINI.BIN firmware file"
	depends on SOUND_MSNDPIN
	default "/etc/sound/pndspini.bin"
	help
	  The MultiSound cards have two firmware files which are required
	  for operation, and are not currently included. These files can be
	  obtained from Turtle Beach. See
	  <file:Documentation/sound/oss/MultiSound> for information on how to
	  obtain this.

config MSNDPIN_PERM_FILE
	string "Full pathname of PNDSPERM.BIN firmware file"
	depends on SOUND_MSNDPIN
	default "/etc/sound/pndsperm.bin"
	help
	  The MultiSound cards have two firmware files which are required for
	  operation, and are not currently included. These files can be
	  obtained from Turtle Beach. See
	  <file:Documentation/sound/oss/MultiSound> for information on how to
	  obtain this.

config MSNDPIN_IRQ
	int "MSND Pinnacle IRQ 5, 7, 9, 10, 11, 12"
	depends on SOUND_MSNDPIN=y
	default "5"
	help
	  Interrupt request line for the primary synthesizer on MultiSound
	  Pinnacle and Fiji sound cards.

config MSNDPIN_MEM
	hex "MSND Pinnacle memory B0000, C8000, D0000, D8000, E0000, E8000"
	depends on SOUND_MSNDPIN=y
	default "D0000"
	help
	  Memory-mapped I/O base address for the primary synthesizer on
	  MultiSound Pinnacle and Fiji sound cards.

config MSNDPIN_IO
	hex "MSND Pinnacle I/O 210, 220, 230, 240, 250, 260, 290, 3E0"
	depends on SOUND_MSNDPIN=y
	default "290"
	help
	  Memory-mapped I/O base address for the primary synthesizer on
	  MultiSound Pinnacle and Fiji sound cards.

config MSNDPIN_DIGITAL
	bool "MSND Pinnacle has S/PDIF I/O"
	depends on SOUND_MSNDPIN=y
	help
	  If you have the S/PDIF daughter board for the Pinnacle or Fiji,
	  answer Y here; otherwise, say N. If you have this, you will be able
	  to play and record from the S/PDIF port (digital signal). See
	  <file:Documentation/sound/oss/MultiSound> for information on how to make
	  use of this capability.

config MSNDPIN_NONPNP
	bool "MSND Pinnacle non-PnP Mode"
	depends on SOUND_MSNDPIN=y
	help
	  The Pinnacle and Fiji card resources can be configured either with
	  PnP, or through a configuration port. Say Y here if your card is NOT
	  in PnP mode. For the Pinnacle, configuration in non-PnP mode allows
	  use of the IDE and joystick peripherals on the card as well; these
	  do not show up when the card is in PnP mode. Specifying zero for any
	  resource of a device will disable the device. If you are running the
	  card in PnP mode, you must say N here and use isapnptools to
	  configure the card's resources.

comment "MSND Pinnacle DSP section will be configured to above parameters."
	depends on SOUND_MSNDPIN=y && MSNDPIN_NONPNP

config MSNDPIN_CFG
	hex "MSND Pinnacle config port 250,260,270"
	depends on MSNDPIN_NONPNP
	default "250"
	help
	  This is the port which the Pinnacle and Fiji uses to configure the
	  card's resources when not in PnP mode. If your card is in PnP mode,
	  then be sure to say N to the previous option, "MSND Pinnacle Non-PnP
	  Mode".

comment "Pinnacle-specific Device Configuration (0 disables)"
	depends on SOUND_MSNDPIN=y && MSNDPIN_NONPNP

config MSNDPIN_MPU_IO
	hex "MSND Pinnacle MPU I/O (e.g. 330)"
	depends on MSNDPIN_NONPNP
	default "0"
	help
	  Memory-mapped I/O base address for the Kurzweil daughterboard
	  synthesizer on MultiSound Pinnacle and Fiji sound cards.

config MSNDPIN_MPU_IRQ
	int "MSND Pinnacle MPU IRQ (e.g. 9)"
	depends on MSNDPIN_NONPNP
	default "0"
	help
	  Interrupt request number for the Kurzweil daughterboard
	  synthesizer on MultiSound Pinnacle and Fiji sound cards.

config MSNDPIN_IDE_IO0
	hex "MSND Pinnacle IDE I/O 0 (e.g. 170)"
	depends on MSNDPIN_NONPNP
	default "0"
	help
	  CD-ROM drive 0 memory-mapped I/O base address for the MultiSound
	  Pinnacle and Fiji sound cards.

config MSNDPIN_IDE_IO1
	hex "MSND Pinnacle IDE I/O 1 (e.g. 376)"
	depends on MSNDPIN_NONPNP
	default "0"
	help
	  CD-ROM drive 1 memory-mapped I/O base address for the MultiSound
	  Pinnacle and Fiji sound cards.

config MSNDPIN_IDE_IRQ
	int "MSND Pinnacle IDE IRQ (e.g. 15)"
	depends on MSNDPIN_NONPNP
	default "0"
	help
	  Interrupt request number for the IDE CD-ROM interface on the
	  MultiSound Pinnacle and Fiji sound cards.

config MSNDPIN_JOYSTICK_IO
	hex "MSND Pinnacle joystick I/O (e.g. 200)"
	depends on MSNDPIN_NONPNP
	default "0"
	help
	  Memory-mapped I/O base address for the joystick port on MultiSound
	  Pinnacle and Fiji sound cards.

config MSND_FIFOSIZE
	int "MSND buffer size (kB)"
	depends on SOUND_MSNDPIN=y || SOUND_MSNDCLAS=y
	default "128"
	help
	  Configures the size of each audio buffer, in kilobytes, for
	  recording and playing in the MultiSound drivers (both the Classic
	  and Pinnacle). Larger values reduce the chance of data overruns at
	  the expense of overall latency. If unsure, use the default.

menuconfig SOUND_OSS
	tristate "OSS sound modules"
	depends on ISA_DMA_API && VIRT_TO_BUS
	help
	  OSS is the Open Sound System suite of sound card drivers.  They make
	  sound programming easier since they provide a common API.  Say Y or
	  M here (the module will be called sound) if you haven't found a
	  driver for your sound card above, then pick your driver from the
	  list below.

if SOUND_OSS

config SOUND_TRACEINIT
	bool "Verbose initialisation"
	help
	  Verbose soundcard initialization -- affects the format of autoprobe
	  and initialization messages at boot time.

config SOUND_DMAP
	bool "Persistent DMA buffers"
	---help---
	  Linux can often have problems allocating DMA buffers for ISA sound
	  cards on machines with more than 16MB of RAM. This is because ISA
	  DMA buffers must exist below the 16MB boundary and it is quite
	  possible that a large enough free block in this region cannot be
	  found after the machine has been running for a while. If you say Y
	  here the DMA buffers (64Kb) will be allocated at boot time and kept
	  until the shutdown. This option is only useful if you said Y to
	  "OSS sound modules", above. If you said M to "OSS sound modules"
	  then you can get the persistent DMA buffer functionality by passing
	  the command-line argument "dmabuf=1" to the sound module.

	  Say Y unless you have 16MB or more RAM or a PCI sound card.

config SOUND_SSCAPE
	tristate "Ensoniq SoundScape support"
	help
	  Answer Y if you have a sound card based on the Ensoniq SoundScape
	  chipset. Such cards are being manufactured at least by Ensoniq, Spea
	  and Reveal (Reveal makes also other cards).

	  If you compile the driver into the kernel, you have to add
	  "sscape=<io>,<irq>,<dma>,<mpuio>,<mpuirq>" to the kernel command
	  line.


config SOUND_VMIDI
	tristate "Loopback MIDI device support"
	help
	  Support for MIDI loopback on port 1 or 2.

config SOUND_TRIX
	tristate "MediaTrix AudioTrix Pro support"
	help
	  Answer Y if you have the AudioTriX Pro sound card manufactured
	  by MediaTrix.

config TRIX_HAVE_BOOT
	bool "Have TRXPRO.HEX firmware file"
	depends on SOUND_TRIX=y && !STANDALONE
	help
	  The MediaTrix AudioTrix Pro has an on-board microcontroller which
	  needs to be initialized by downloading the code from the file
	  TRXPRO.HEX in the DOS driver directory. If you don't have the
	  TRXPRO.HEX file handy you may skip this step. However, the SB and
	  MPU-401 modes of AudioTrix Pro will not work without this file!

config TRIX_BOOT_FILE
	string "Full pathname of TRXPRO.HEX firmware file"
	depends on TRIX_HAVE_BOOT
	default "/etc/sound/trxpro.hex"
	help
	  Enter the full pathname of your TRXPRO.HEX file, starting from /.

config SOUND_MSS
	tristate "Microsoft Sound System support"
	---help---
	  Again think carefully before answering Y to this question.  It's
	  safe to answer Y if you have the original Windows Sound System card
	  made by Microsoft or Aztech SG 16 Pro (or NX16 Pro).  Also you may
	  say Y in case your card is NOT among these:

	  ATI Stereo F/X, AdLib, Audio Excell DSP16, Cardinal DSP16,
	  Ensoniq SoundScape (and compatibles made by Reveal and Spea),
	  Gravis Ultrasound, Gravis Ultrasound ACE, Gravis Ultrasound Max,
	  Gravis Ultrasound with 16 bit option, Logitech Sound Man 16,
	  Logitech SoundMan Games, Logitech SoundMan Wave, MAD16 Pro (OPTi
	  82C929), Media Vision Jazz16, MediaTriX AudioTriX Pro, Microsoft
	  Windows Sound System (MSS/WSS), Mozart (OAK OTI-601), Orchid
	  SW32, Personal Sound System (PSS), Pro Audio Spectrum 16, Pro
	  Audio Studio 16, Pro Sonic 16, Roland MPU-401 MIDI interface,
	  Sound Blaster 1.0, Sound Blaster 16, Sound Blaster 16ASP, Sound
	  Blaster 2.0, Sound Blaster AWE32, Sound Blaster Pro, TI TM4000M
	  notebook, ThunderBoard, Turtle Beach Tropez, Yamaha FM
	  synthesizers (OPL2, OPL3 and OPL4), 6850 UART MIDI Interface.

	  For cards having native support in VoxWare, consult the card
	  specific instructions in <file:Documentation/sound/oss/README.OSS>.
	  Some drivers have their own MSS support and saying Y to this option
	  will cause a conflict.

	  If you compile the driver into the kernel, you have to add
	  "ad1848=<io>,<irq>,<dma>,<dma2>[,<type>]" to the kernel command
	  line.

config SOUND_MPU401
	tristate "MPU-401 support (NOT for SB16)"
	---help---
	  Be careful with this question.  The MPU401 interface is supported by
	  all sound cards.  However, some natively supported cards have their
	  own driver for MPU401.  Enabling this MPU401 option with these cards
	  will cause a conflict.  Also, enabling MPU401 on a system that
	  doesn't really have a MPU401 could cause some trouble.  If your card
	  was in the list of supported cards, look at the card specific
	  instructions in the <file:Documentation/sound/oss/README.OSS> file.  It
	  is safe to answer Y if you have a true MPU401 MIDI interface card.

	  If you compile the driver into the kernel, you have to add
	  "mpu401=<io>,<irq>" to the kernel command line.

config SOUND_PAS
	tristate "ProAudioSpectrum 16 support"
	---help---
	  Answer Y only if you have a Pro Audio Spectrum 16, ProAudio Studio
	  16 or Logitech SoundMan 16 sound card. Answer N if you have some
	  other card made by Media Vision or Logitech since those are not
	  PAS16 compatible. Please read <file:Documentation/sound/oss/PAS16>.
	  It is not necessary to add Sound Blaster support separately; it
	  is included in PAS support.

	  If you compile the driver into the kernel, you have to add
	  "pas2=<io>,<irq>,<dma>,<dma2>,<sbio>,<sbirq>,<sbdma>,<sbdma2>
	  to the kernel command line.

config PAS_JOYSTICK
	bool "Enable PAS16 joystick port"
	depends on SOUND_PAS=y
	help
	  Say Y here to enable the Pro Audio Spectrum 16's auxiliary joystick
	  port.

config SOUND_PSS
	tristate "PSS (AD1848, ADSP-2115, ESC614) support"
	help
	  Answer Y or M if you have an Orchid SW32, Cardinal DSP16, Beethoven
	  ADSP-16 or some other card based on the PSS chipset (AD1848 codec +
	  ADSP-2115 DSP chip + Echo ESC614 ASIC CHIP). For more information on
	  how to compile it into the kernel or as a module see the file
	  <file:Documentation/sound/oss/PSS>.

	  If you compile the driver into the kernel, you have to add
	  "pss=<io>,<mssio>,<mssirq>,<mssdma>,<mpuio>,<mpuirq>" to the kernel
	  command line.

config PSS_MIXER
	bool "Enable PSS mixer (Beethoven ADSP-16 and other compatible)"
	depends on SOUND_PSS
	help
	  Answer Y for Beethoven ADSP-16. You may try to say Y also for other
	  cards if they have master volume, bass, treble, and you can't
	  control it under Linux. If you answer N for Beethoven ADSP-16, you
	  can't control master volume, bass, treble and synth volume.

	  If you said M to "PSS support" above, you may enable or disable this
	  PSS mixer with the module parameter pss_mixer. For more information
	  see the file <file:Documentation/sound/oss/PSS>.

config PSS_HAVE_BOOT
	bool "Have DSPxxx.LD firmware file"
	depends on SOUND_PSS && !STANDALONE
	help
	  If you have the DSPxxx.LD file or SYNTH.LD file for you card, say Y
	  to include this file. Without this file the synth device (OPL) may
	  not work.

config PSS_BOOT_FILE
	string "Full pathname of DSPxxx.LD firmware file"
	depends on PSS_HAVE_BOOT
	default "/etc/sound/dsp001.ld"
	help
	  Enter the full pathname of your DSPxxx.LD file or SYNTH.LD file,
	  starting from /.

config SOUND_SB
	tristate "100% Sound Blaster compatibles (SB16/32/64, ESS, Jazz16) support"
	---help---
	  Answer Y if you have an original Sound Blaster card made by Creative
	  Labs or a 100% hardware compatible clone (like the Thunderboard or
	  SM Games). For an unknown card you may answer Y if the card claims
	  to be Sound Blaster-compatible.

	  Please read the file <file:Documentation/sound/oss/Soundblaster>.

	  You should also say Y here for cards based on the Avance Logic
	  ALS-007 and ALS-1X0 chips (read <file:Documentation/sound/oss/ALS>) and
	  for cards based on ESS chips (read
	  <file:Documentation/sound/oss/ESS1868> and
	  <file:Documentation/sound/oss/ESS>). If you have an SB AWE 32 or SB AWE
	  64, say Y here and also to "AWE32 synth" below and read
	  <file:Documentation/sound/oss/INSTALL.awe>. If you have an IBM Mwave
	  card, say Y here and read <file:Documentation/sound/oss/mwave>.

	  If you compile the driver into the kernel and don't want to use
	  isapnp, you have to add "sb=<io>,<irq>,<dma>,<dma2>" to the kernel
	  command line.

	  You can say M here to compile this driver as a module; the module is
	  called sb.

config SOUND_YM3812
	tristate "Yamaha FM synthesizer (YM3812/OPL-3) support"
	---help---
	  Answer Y if your card has a FM chip made by Yamaha (OPL2/OPL3/OPL4).
	  Answering Y is usually a safe and recommended choice, however some
	  cards may have software (TSR) FM emulation. Enabling FM support with
	  these cards may cause trouble (I don't currently know of any such
	  cards, however). Please read the file
	  <file:Documentation/sound/oss/OPL3> if your card has an OPL3 chip.

	  If you compile the driver into the kernel, you have to add
	  "opl3=<io>" to the kernel command line.

	  If unsure, say Y.

config SOUND_UART6850
	tristate "6850 UART support"
	help
	  This option enables support for MIDI interfaces based on the 6850
	  UART chip. This interface is rarely found on sound cards. It's safe
	  to answer N to this question.

	  If you compile the driver into the kernel, you have to add
	  "uart6850=<io>,<irq>" to the kernel command line.

config SOUND_AEDSP16
	tristate "Gallant Audio Cards (SC-6000 and SC-6600 based)"
	---help---
	  Answer Y if you have a Gallant's Audio Excel DSP 16 card. This
	  driver supports Audio Excel DSP 16 but not the III nor PnP versions
	  of this card.

	  The Gallant's Audio Excel DSP 16 card can emulate either an SBPro or
	  a Microsoft Sound System card, so you should have said Y to either
	  "100% Sound Blaster compatibles (SB16/32/64, ESS, Jazz16) support"
	  or "Microsoft Sound System support", above, and you need to answer
	  the "MSS emulation" and "SBPro emulation" questions below
	  accordingly. You should say Y to one and only one of these two
	  questions.

	  Read the <file:Documentation/sound/oss/README.OSS> file and the head of
	  <file:sound/oss/aedsp16.c> as well as
	  <file:Documentation/sound/oss/AudioExcelDSP16> to get more information
	  about this driver and its configuration.

config SC6600
	bool "SC-6600 based audio cards (new Audio Excel DSP 16)"
	depends on SOUND_AEDSP16
	help
	  The SC6600 is the new version of DSP mounted on the Audio Excel DSP
	  16 cards. Find in the manual the FCC ID of your audio card and
	  answer Y if you have an SC6600 DSP.

config SC6600_JOY
	bool "Activate SC-6600 Joystick Interface"
	depends on SC6600
	help
	  Say Y here in order to use the joystick interface of the Audio Excel
	  DSP 16 card.

config SC6600_CDROM
	int "SC-6600 CDROM Interface (4=None, 3=IDE, 1=Panasonic, 0=?Sony?)"
	depends on SC6600
	default "4"
	help
	  This is used to activate the CD-ROM interface of the Audio Excel
	  DSP 16 card. Enter: 0 for Sony, 1 for Panasonic, 2 for IDE, 4 for no
	  CD-ROM present.

config SC6600_CDROMBASE
	hex "SC-6600 CDROM Interface I/O Address"
	depends on SC6600
	default "0"
	help
	  Base I/O port address for the CD-ROM interface of the Audio Excel
	  DSP 16 card.

choice
	prompt "Audio Excel DSP 16"
	optional
	depends on SOUND_AEDSP16

config AEDSP16_MSS
	bool "MSS emulation"
	depends on SOUND_MSS
	help
	  Answer Y if you want your audio card to emulate Microsoft Sound
	  System. You should then say Y to "Microsoft Sound System support"
	  and say N to "Audio Excel DSP 16 (SBPro emulation)".

config AEDSP16_SBPRO
	bool "SBPro emulation"
	depends on SOUND_SB
	help
	  Answer Y if you want your audio card to emulate Sound Blaster Pro.
	  You should then say Y to "100% Sound Blaster compatibles
	  (SB16/32/64, ESS, Jazz16) support" and N to "Audio Excel DSP 16 (MSS
	  emulation)".

	  If you compile the driver into the kernel, you have to add
	  "aedsp16=<io>,<irq>,<dma>,<mssio>,<mpuio>,<mouirq>" to the kernel
	  command line.

endchoice

config SOUND_VIDC
	tristate "VIDC 16-bit sound"
	depends on ARM && (ARCH_ACORN || ARCH_CLPS7500)
	help
	  16-bit support for the VIDC onboard sound hardware found on Acorn
	  machines.

config SOUND_WAVEARTIST
	tristate "Netwinder WaveArtist"
	depends on ARM && ARCH_NETWINDER
	help
	  Say Y here to include support for the Rockwell WaveArtist sound
	  system.  This driver is mainly for the NetWinder.

config SOUND_KAHLUA
	tristate "XpressAudio Sound Blaster emulation"
	depends on SOUND_SB

endif	# SOUND_OSS

config SOUND_SH_DAC_AUDIO
	tristate "SuperH DAC audio support"
	depends on CPU_SH3

config SOUND_SH_DAC_AUDIO_CHANNEL
	int "DAC channel"
	default "1"
	depends on SOUND_SH_DAC_AUDIO
