# SPDX-License-Identifier: GPL-2.0-only
menuconfig SND_FIREWIRE
	bool "FireWire sound devices"
	depends on FIREWIRE
	default y
	help
	  Support for IEEE-1394/FireWire/iLink sound devices.

if SND_FIREWIRE && FIREWIRE

config SND_FIREWIRE_LIB
	tristate
	select SND_PCM
	select SND_RAWMIDI

config SND_DICE
	tristate "DICE-based DACs support"
	select SND_HWDEP
	select SND_FIREWIRE_LIB
	help
	  Say Y here to include support for many DACs based on the DICE
	  chip family (DICE-II/Jr/Mini) which TC Applied Technologies produces.

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

config SND_OXFW
	tristate "Oxford Semiconductor FW970/971 chipset support"
	select SND_FIREWIRE_LIB
	select SND_HWDEP
	help
	  Say Y here to include support for FireWire devices based on
	  Oxford Semiconductor FW970/971 chipset.
	   * Griffin Firewave
	   * LaCie Firewire Speakers
	   * Behringer F-Control Audio 202
	   * Mackie(Loud) Onyx-i series (former models)
	   * Mackie(Loud) Onyx 1640i (former model)
	   * Mackie(Loud) Onyx Satellite
	   * Mackie(Loud) Tapco Link.Firewire
	   * Mackie(Loud) d.4 pro
	   * Mackie(Loud) U.420/U.420d
	   * TASCAM FireOne
	   * Stanton Controllers & Systems 1 Deck/Mixer
	   * APOGEE duet FireWire

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

config SND_ISIGHT
	tristate "Apple iSight microphone"
	select SND_FIREWIRE_LIB
	help
	  Say Y here to include support for the front and rear microphones
	  of the Apple iSight web camera.

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

config SND_FIREWORKS
	tristate "Echo Fireworks board module support"
	select SND_FIREWIRE_LIB
	select SND_HWDEP
	help
	  Say Y here to include support for FireWire devices based
	  on Echo Digital Audio Fireworks board:
	   * Mackie Onyx 400F/1200F
	   * Echo AudioFire12/8(until 2009 July)
	   * Echo AudioFire2/4/Pre8/8(since 2009 July)
	   * Echo Fireworks 8/HDMI
	   * Gibson Robot Interface Pack/GoldTop

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

config SND_BEBOB
	tristate "BridgeCo DM1000/DM1100/DM1500 with BeBoB firmware"
	select SND_FIREWIRE_LIB
	select SND_HWDEP
	help
	 Say Y here to include support for FireWire devices based
	 on BridgeCo DM1000/DM1100/DM1500 with BeBoB firmware:
	  * Edirol FA-66/FA-101
	  * PreSonus FIREBOX/FIREPOD/FP10/Inspire1394
	  * BridgeCo RDAudio1/Audio5
	  * Mackie Onyx 1220/1620/1640 (FireWire I/O Card)
	  * Mackie d.2 (FireWire Option) and d.2 Pro
	  * Stanton FinalScratch 2 (ScratchAmp)
	  * Tascam IF-FW/DM
	  * Behringer XENIX UFX 1204/1604
	  * Behringer Digital Mixer X32 series (X-UF Card)
	  * Behringer FCA610/1616
	  * Apogee Rosetta 200/400 (X-FireWire card)
	  * Apogee DA/AD/DD-16X (X-FireWire card)
	  * Apogee Ensemble
	  * ESI QuataFire 610
	  * AcousticReality eARMasterOne
	  * CME MatrixKFW
	  * Phonic Helix Board 12 MkII/18 MkII/24 MkII
	  * Phonic Helix Board 12 Universal/18 Universal/24 Universal
	  * Lynx Aurora 8/16 (LT-FW)
	  * ICON FireXon
	  * PrismSound Orpheus/ADA-8XR
	  * TerraTec PHASE 24 FW/PHASE X24 FW/PHASE 88 Rack FW
	  * TerraTec EWS MIC2/EWS MIC8
	  * TerraTec Aureon 7.1 FireWire
	  * Yamaha GO44/GO46
	  * Focusrite Saffire/Saffire LE/SaffirePro10 IO/SaffirePro26 IO
	  * M-Audio FireWire410/AudioPhile/Solo
	  * M-Audio Ozonic/NRV10/ProfireLightBridge
	  * M-Audio FireWire 1814/ProjectMix IO
	  * Digidesign Mbox 2 Pro

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

config SND_FIREWIRE_DIGI00X
	tristate "Digidesign Digi 002/003 family support"
	select SND_FIREWIRE_LIB
	select SND_HWDEP
	help
	 Say Y here to include support for Digidesign Digi 002/003 family.
	  * Digi 002 Console
	  * Digi 002 Rack
	  * Digi 003 Console
	  * Digi 003 Rack
	  * Digi 003 Rack+

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

config SND_FIREWIRE_TASCAM
	tristate "TASCAM FireWire series support"
	select SND_FIREWIRE_LIB
	select SND_HWDEP
	help
	 Say Y here to include support for TASCAM.
	  * FW-1884
	  * FW-1082
	  * FW-1804

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

config SND_FIREWIRE_MOTU
	tristate "Mark of the unicorn FireWire series support"
	select SND_FIREWIRE_LIB
	select SND_HWDEP
	help
	 Say Y here to enable support for FireWire devices which MOTU produced:
	  * 828mk2
	  * Traveler
	  * Ultralite
	  * 8pre
	  * 828mk3 (FireWire only)
	  * 828mk3 (Hybrid)
	  * Audio Express
	  * 4pre

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

config SND_FIREFACE
	tristate "RME Fireface series support"
	select SND_FIREWIRE_LIB
	select SND_HWDEP
	help
	 Say Y here to include support for RME fireface series.
	  * Fireface 400
	  * Fireface 800
	  * Fireface UFX
	  * Fireface UCX
	  * Fireface 802

endif # SND_FIREWIRE
