# SPDX-License-Identifier: GPL-2.0-only
config SND_MPU401_UART
	tristate
	select SND_RAWMIDI

config SND_OPL3_LIB
	tristate
	select SND_TIMER
	select SND_HWDEP
	select SND_SEQ_DEVICE if SND_SEQUENCER != n

config SND_OPL4_LIB
	tristate
	select SND_TIMER
	select SND_HWDEP
	select SND_SEQ_DEVICE if SND_SEQUENCER != n

# select SEQ stuff to min(SND_SEQUENCER,SND_XXX)
config SND_OPL3_LIB_SEQ
	def_tristate SND_SEQUENCER && SND_OPL3_LIB
	select SND_SEQ_MIDI_EMUL
	select SND_SEQ_MIDI_EVENT

config SND_OPL4_LIB_SEQ
	def_tristate SND_SEQUENCER && SND_OPL4_LIB
	select SND_SEQ_MIDI_EMUL
	select SND_SEQ_MIDI_EVENT

config SND_VX_LIB
	tristate
	select FW_LOADER
	select SND_HWDEP
	select SND_PCM

config SND_AC97_CODEC
	tristate
	select SND_PCM
	select AC97_BUS
	select SND_VMASTER

menuconfig SND_DRIVERS
	bool "Generic sound devices"
	default y
	help
	  Support for generic sound devices.
  
if SND_DRIVERS

config SND_PCSP
	tristate "PC-Speaker support (READ HELP!)"
	depends on PCSPKR_PLATFORM && X86 && HIGH_RES_TIMERS
	depends on INPUT
	select SND_PCM
	help
	  If you don't have a sound card in your computer, you can include a
	  driver for the PC speaker which allows it to act like a primitive
	  sound card.
	  This driver also replaces the pcspkr driver for beeps.

	  You can compile this as a module which will be called snd-pcsp.

	  WARNING: if you already have a soundcard, enabling this
	  driver may lead to a problem. Namely, it may get loaded
	  before the other sound driver of yours, making the
	  pc-speaker a default sound device. Which is likely not
	  what you want. To make this driver play nicely with other
	  sound driver, you can add this in a configuration file under
	  /etc/modprobe.d/ directory:
	  options snd-pcsp index=2

	  You don't need this driver if you only want your pc-speaker to beep.
	  You don't need this driver if you have a tablet piezo beeper
	  in your PC instead of the real speaker.

	  Say N if you have a sound card.
	  Say M if you don't.
	  Say Y only if you really know what you do.

config SND_DUMMY
	tristate "Dummy (/dev/null) soundcard"
	select SND_PCM
	help
	  Say Y here to include the dummy driver.  This driver does
	  nothing, but emulates various mixer controls and PCM devices.

	  You don't need this unless you're testing the hardware support
	  of programs using the ALSA API.

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

config SND_ALOOP
	tristate "Generic loopback driver (PCM)"
	select SND_PCM
	select SND_TIMER
	help
	  Say 'Y' or 'M' to include support for the PCM loopback device.
	  This module returns played samples back to the user space using
	  the standard ALSA PCM device. The devices are routed 0->1 and
	  1->0, where first number is the playback PCM device and second
	  number is the capture device. Module creates two PCM devices and
	  configured number of substreams (see the pcm_substreams module
	  parameter).

	  The loopback device allows time sychronization with an external
	  timing source using the time shift universal control (+-20%
	  of system time).

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

config SND_VIRMIDI
	tristate "Virtual MIDI soundcard"
	depends on SND_SEQUENCER
	select SND_TIMER
	select SND_RAWMIDI
	select SND_SEQ_VIRMIDI
	select SND_SEQ_MIDI_EVENT
	help
	  Say Y here to include the virtual MIDI driver.  This driver
	  allows to connect applications using raw MIDI devices to
	  sequencer clients.

	  If you don't know what MIDI is, say N here.

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

config SND_MTPAV
	tristate "MOTU MidiTimePiece AV multiport MIDI"
	select SND_RAWMIDI
	help
	  To use a MOTU MidiTimePiece AV multiport MIDI adapter
	  connected to the parallel port, say Y here and make sure that
	  the standard parallel port driver isn't used for the port.

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

config SND_MTS64
	tristate "ESI Miditerminal 4140 driver"
	depends on PARPORT
	select SND_RAWMIDI
	help
	  The ESI Miditerminal 4140 is a 4 In 4 Out MIDI Interface with 
	  additional SMPTE Timecode capabilities for the parallel port.

	  Say 'Y' to include support for this device.

	  To compile this driver as a module, chose 'M' here: the module 
	  will be called snd-mts64.

config SND_SERIAL_U16550
	tristate "UART16550 serial MIDI driver"
	select SND_RAWMIDI
	help
	  To include support for MIDI serial port interfaces, say Y here
	  and read <file:Documentation/sound/cards/serial-u16550.rst>.
	  This driver works with serial UARTs 16550 and better.

	  This driver accesses the serial port hardware directly, so
	  make sure that the standard serial driver isn't used or
	  deactivated with setserial before loading this driver.

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

config SND_MPU401
	tristate "Generic MPU-401 UART driver"
	select SND_MPU401_UART
	help
	  Say Y here to include support for MIDI ports compatible with
	  the Roland MPU-401 interface in UART mode.

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

config SND_PORTMAN2X4
	tristate "Portman 2x4 driver"
	depends on PARPORT
	select SND_RAWMIDI
	help
	  Say Y here to include support for Midiman Portman 2x4 parallel
	  port MIDI device.

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

config SND_AC97_POWER_SAVE
	bool "AC97 Power-Saving Mode"
	depends on SND_AC97_CODEC
	default n
	help
	  Say Y here to enable the aggressive power-saving support of
	  AC97 codecs.  In this mode, the power-mode is dynamically
	  controlled at each open/close.

	  The mode is activated by passing 'power_save=X' to the
	  snd-ac97-codec driver module, where 'X' is the time-out
	  value, a nonnegative integer that specifies how many
	  seconds of idle time the driver must count before it may
	  put the AC97 into power-save mode;  a value of 0 (zero)
	  disables the use of this power-save mode.

	  After the snd-ac97-codec driver module has been loaded,
	  the 'power_save' parameter can be set via sysfs as follows:

	    echo 10 > /sys/module/snd_ac97_codec/parameters/power_save

	  In this case, the time-out is set to 10 seconds; setting
	  the time-out to 1 second (the minimum activation value)
	  isn't recommended because many applications try to reopen
	  the device frequently.  A value of 10 seconds would be a
	  good choice for normal operations.

	  See Documentation/sound/designs/powersave.rst for more details.

config SND_AC97_POWER_SAVE_DEFAULT
	int "Default time-out for AC97 power-save mode"
	depends on SND_AC97_POWER_SAVE
	default 0
	help
	  The default time-out value in seconds for AC97 automatic
	  power-save mode.  0 means to disable the power-save mode.

	  See SND_AC97_POWER_SAVE for more details.

endif	# SND_DRIVERS
