# 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
	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_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
	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

