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

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

if SND_USB && USB

config SND_USB_AUDIO
	tristate "USB Audio/MIDI driver"
	select SND_HWDEP
	select SND_RAWMIDI
	select SND_PCM
	select BITREVERSE
	select SND_USB_AUDIO_USE_MEDIA_CONTROLLER if MEDIA_CONTROLLER && (MEDIA_SUPPORT=y || MEDIA_SUPPORT=SND_USB_AUDIO)
	help
	  Say Y here to include support for USB audio and USB MIDI
	  devices.

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

config SND_USB_AUDIO_USE_MEDIA_CONTROLLER
	bool

config SND_USB_UA101
	tristate "Edirol UA-101/UA-1000 driver"
	select SND_PCM
	select SND_RAWMIDI
	help
	  Say Y here to include support for the Edirol UA-101 and UA-1000
	  audio/MIDI interfaces.

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

config SND_USB_USX2Y
	tristate "Tascam US-122, US-224 and US-428 USB driver"
	depends on X86 || PPC || ALPHA
	select SND_HWDEP
	select SND_RAWMIDI
	select SND_PCM
	help
	  Say Y here to include support for Tascam USB Audio/MIDI
	  interfaces or controllers US-122, US-224 and US-428.

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

config SND_USB_CAIAQ
	tristate "Native Instruments USB audio devices"
	select SND_HWDEP
	select SND_RAWMIDI
	select SND_PCM
	help
	   Say Y here to include support for caiaq USB audio interfaces,
	   namely:

	    * Native Instruments RigKontrol2
	    * Native Instruments RigKontrol3
	    * Native Instruments Kore Controller
	    * Native Instruments Kore Controller 2
	    * Native Instruments Audio Kontrol 1
	    * Native Instruments Audio 2 DJ
	    * Native Instruments Audio 4 DJ
	    * Native Instruments Audio 8 DJ
	    * Native Instruments Traktor Audio 2
	    * Native Instruments Guitar Rig Session I/O
	    * Native Instruments Guitar Rig mobile
	    * Native Instruments Traktor Kontrol X1
	    * Native Instruments Traktor Kontrol S4
	    * Native Instruments Maschine Controller

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

config SND_USB_CAIAQ_INPUT
	bool "enable input device for controllers"
	depends on SND_USB_CAIAQ
	depends on INPUT=y || INPUT=SND_USB_CAIAQ
	help
	  Say Y here to support input controllers like buttons, knobs,
	  alpha dials and analog pedals on the following products:

	   * Native Instruments RigKontrol2
	   * Native Instruments RigKontrol3
	   * Native Instruments Kore Controller
	   * Native Instruments Kore Controller 2
	   * Native Instruments Audio Kontrol 1
	   * Native Instruments Traktor Kontrol S4
	   * Native Instruments Maschine Controller

config SND_USB_US122L
	tristate "Tascam US-122L USB driver"
	depends on X86 || COMPILE_TEST
	select SND_HWDEP
	select SND_RAWMIDI
	help
	  Say Y here to include support for Tascam US-122L USB Audio/MIDI
	  interfaces.

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

config SND_USB_6FIRE
	tristate "TerraTec DMX 6Fire USB"
	select FW_LOADER
	select BITREVERSE
	select SND_RAWMIDI
	select SND_PCM
	select SND_VMASTER
	help
	  Say Y here to include support for TerraTec 6fire DMX USB interface.

	  You will need firmware files in order to be able to use the device
	  after it has been coldstarted. An install script for the firmware
	  and further help can be found at
	  http://sixfireusb.sourceforge.net

config SND_USB_HIFACE
	tristate "M2Tech hiFace USB-SPDIF driver"
	select SND_PCM
	help
	  Select this option to include support for M2Tech hiFace USB-SPDIF
	  interface.

	  This driver supports the original M2Tech hiFace and some other
	  compatible devices. The supported products are:

	    * M2Tech Young
	    * M2Tech hiFace
	    * M2Tech North Star
	    * M2Tech W4S Young
	    * M2Tech Corrson
	    * M2Tech AUDIA
	    * M2Tech SL Audio
	    * M2Tech Empirical
	    * M2Tech Rockna
	    * M2Tech Pathos
	    * M2Tech Metronome
	    * M2Tech CAD
	    * M2Tech Audio Esclusive
	    * M2Tech Rotel
	    * M2Tech Eeaudio
	    * The Chord Company CHORD
	    * AVA Group A/S Vitus

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

config SND_BCD2000
	tristate "Behringer BCD2000 MIDI driver"
	select SND_RAWMIDI
	help
	  Say Y here to include MIDI support for the Behringer BCD2000 DJ
	  controller.

	  Audio support is still work-in-progress at
	  https://github.com/anyc/snd-usb-bcd2000

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

source "sound/usb/line6/Kconfig"

endif	# SND_USB

