# 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 SND_UMP if SND_USB_AUDIO_MIDI_V2
	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_MIDI_V2
	bool "MIDI 2.0 support by USB Audio driver"
	depends on SND_USB_AUDIO
	help
	  Say Y here to include the support for MIDI 2.0 by USB Audio driver.
	  When the config is set, the driver tries to probe MIDI 2.0 interface
	  at first, then falls back to MIDI 1.0 interface as default.
	  The MIDI 2.0 support can be disabled dynamically via midi2_enable
	  module option, too.

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_US144MKII
	tristate "Tascam US-144MKII USB driver"
	depends on X86 || COMPILE_TEST
	select SND_RAWMIDI
	select SND_PCM
	help
	  Say Y here to include support for Tascam US-144MKII USB Audio/MIDI
	  interface.

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

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.

config SND_USB_AUDIO_QMI
	tristate "Qualcomm Audio Offload driver"
	depends on QCOM_QMI_HELPERS && SND_USB_AUDIO && SND_SOC_USB
	depends on USB_XHCI_HCD && USB_XHCI_SIDEBAND
	select AUXILIARY_BUS
	help
	  Say Y here to enable the Qualcomm USB audio offloading feature.

	  This module sets up the required QMI stream enable/disable
	  responses to requests generated by the audio DSP.  It passes the
	  USB transfer resource references, so that the audio DSP can issue
	  USB transfers to the host controller.

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

source "sound/usb/line6/Kconfig"

endif	# SND_USB

