#
#  USB-Audio.conf - configuration for USB Audio devices
#
#
#  DO NO EDIT; this is an internal ALSA file.
#  If you want to add your own definitions, put them into /etc/asound.conf or
#  ~/.asoundrc, with "cards." before the "USB-Audio", e.g.:
#
#  cards.USB-Audio.pcm.use_dmix."NoiseBlaster 3000" no
#
#  If your device requires such a definition to work correctly, please report it
#  to <alsa-devel@alsa-project.org>.


# If a device has sample formats not supported by dmix, dmix can be disabled
# here.
USB-Audio.pcm.use_dmix {
	"AudioPhile" no    # uses big-endian 24-bit samples
	"Audiophile USB (tm)" no
}

# If a device does not have a four-channel mode for the front/rear outputs,
# other modes can be selected here.
# six_channels       - for devices that route the last two of the four channels
#                      to the center/LFE outputs
# two_stereo_devices - for devices that have two stereo audio interfaces
USB-Audio.pcm.surround40_type {
	"AudioPhile" two_stereo_devices
	"Audiophile USB (tm)" two_stereo_devices
	"OmniStudio" two_stereo_devices
	"Quattro" two_stereo_devices
	"SB Audigy 2 NX" six_channels
	"USB AudioSport Quattro (tm)" two_stereo_devices
}

# If a device does not use the first PCM device for digital data, the device
# number for the iec958 device can be changed here.
USB-Audio.pcm.iec958_device {
	# "NoiseBlaster 3000" 42
	"USB Sound Blaster HD" 1

	# The below don't have digital in/out, so prevent them from being opened.
	"Andrea PureAudio USB-SA Headset" 999
	"Blue Snowball" 999
	"HP Digital Stereo Headset" 999
	"GN 9330" 999
	"Logitech Speaker Lapdesk N700" 999
	"Logitech G35 Headset" 999
	"Logitech USB Headset" 999
	"Logitech USB Headset H540" 999
	"Logitech Wireless Headset" 999
	"Plantronics GameCom 780" 999
	"Plantronics USB Headset" 999
	"Plantronics Wireless Audio" 999
	"SB WoW Headset" 999
	"Scarlett 2i2 USB" 999
	"Scarlett 2i4 USB" 999
	"Sennheiser USB headset" 999
	"SWTOR Gaming Headset by Razer" 999
	"USB Device 0x46d_0x821" 999
	"USB Device 0x46d_0x992" 999
}

# Second iec958 device number, if any.
USB-Audio.pcm.iec958_2_device {
	"PHIREE U2" 1  # 0 = PCM S/PDIF, 1 = non-PCM S/PDIF
}


# If a device requires non-standard definitions for front, surround40,
# surround51, surround71 or iec958, they can be defined here.

# M-Audio AudioPhile USB:
# device 0: analog output, digital input
# device 1: digital output, analog input
USB-Audio."AudioPhile".pcm.default "cards.USB-Audio.Audiophile USB (tm).pcm.default"
USB-Audio."Audiophile USB (tm)".pcm.default {
	@args [ CARD ]
	@args.CARD { type string }
	type asym
	playback.pcm {
		type plug
		slave.pcm {
			type hw
			card $CARD
			device 0
		}
	}
	capture.pcm {
		type plug
		slave.pcm {
			@func concat
			strings [ "dsnoop:DEVICE=1,CARD=" $CARD ]
		}
	}
}
USB-Audio."AudioPhile".pcm.iec958 "cards.USB-Audio.Audiophile USB (tm).pcm.iec958"
USB-Audio."Audiophile USB (tm)".pcm.iec958 {
	@args [ CARD AES0 AES1 AES2 AES3 ]
	@args.CARD { type string }
	@args.AES0 { type integer }
	@args.AES1 { type integer }
	@args.AES2 { type integer }
	@args.AES3 { type integer }
	type asym
	playback.pcm {
		type hw
		card $CARD
		device 1
	}
	capture.pcm {
		type hw
		card $CARD
		device 0
	}
}

# For this card we can (and must to get IEC61937) set AES bits
USB-Audio."MicroII".pcm.iec958 "cards.USB-Audio.Audio Advantage MicroII.pcm.iec958"
USB-Audio."Audio Advantage MicroII".pcm.iec958 {
	@args [ CARD AES0 AES1 AES2 AES3 ]
	@args.CARD { type string }
	@args.AES0 { type integer }
	@args.AES1 { type integer }
	@args.AES2 { type integer }
	@args.AES3 { type integer }

    type hooks
    slave.pcm {
		type hw
		card $CARD
    }

    hooks.0 {
		type ctl_elems
		hook_args [
			{
				interface PCM
				name "IEC958 Playback Default"
				preserve true
				optional true
				value [ $AES0 $AES1 $AES2 $AES3 ]
			}
			{
				name "IEC958 Playback Switch"
				lock true
				preserve true
				value 1
			}
		]
	}
}

################################################################################

<confdir:pcm/front.conf>

USB-Audio.pcm.front.0 {
	@args [ CARD ]
	@args.CARD { type string }
	@func refer
	name {
		@func concat
		strings [
			"cards.USB-Audio."
			{ @func card_name card $CARD }
			".pcm.front:CARD=" $CARD
		]
	}
	default {
		# We could use softvol, but the driver might have guessed a
		# wrong name for the real volume control.
		type hw
		card $CARD
		device 0
	}
}	

USB-Audio.pcm.default {
	@args [ CARD ]
	@args.CARD { type string }
	type asym
	playback.pcm {
		type plug
		slave.pcm {
			@func refer
			name {
				@func concat
				strings [
					"cards.USB-Audio.pcm.default_playback_dmix_"
					{
						@func refer
						name {
							@func concat
							strings [
								"cards.USB-Audio.pcm.use_dmix."
								{ @func card_name card $CARD }
							]
						}
						default yes
					}
					":CARD=" $CARD
				]
			}
		}
	}
	capture.pcm {
		type plug
		slave.pcm {
			@func concat
			strings [ "dsnoop:" $CARD ]
		}
	}
}

USB-Audio.pcm.default_playback_dmix_yes {
	@args [ CARD ]
	@args.CARD { type string }
	@func concat
	strings [ "dmix:" $CARD ]
}

USB-Audio.pcm.default_playback_dmix_no {
	@args [ CARD ]
	@args.CARD { type string }
	type hw
	card $CARD
	device 0
}

<confdir:pcm/surround40.conf>

USB-Audio.pcm.surround40.0 {
	@args [ CARD ]
	@args.CARD { type string }
	@func refer
	name {
		@func concat
		strings [
			"cards.USB-Audio."
			{ @func card_name card $CARD }
			".pcm.surround40:CARD=" $CARD
		]
	}
	default {
		@func refer
		name {
			@func concat
			strings [
				"cards.USB-Audio.pcm.surround40_"
				{
					@func refer
					name {
						@func concat
						strings [
							"cards.USB-Audio.pcm.surround40_type."
							{ @func card_name card $CARD }
						]
					}
					default default
				}
				":CARD=" $CARD
			]
		}
	}
}

USB-Audio.pcm.surround40_default {
	@args [ CARD ]
	@args.CARD { type string }
	type hw
	card $CARD
	device 0
}

USB-Audio.pcm.surround40_six_channels {
	@args [ CARD ]
	@args.CARD { type string }
	type route
	ttable.0.0 1
	ttable.1.1 1
	ttable.2.4 1
	ttable.3.5 1
	slave {
		pcm {
			type hw
			card $CARD
			device 0
		}
		channels 6
	}
}

USB-Audio.pcm.surround40_two_stereo_devices {
	@args [ CARD ]
	@args.CARD { type string }
	type route
	ttable.0.0 1
	ttable.1.1 1
	ttable.2.2 1
	ttable.3.3 1
	slave.pcm {
		type multi
		slaves {
			a {
				pcm {
					type hw
					card $CARD
					device 0
				}
				channels 2
			}
			b {
				pcm {
					type hw
					card $CARD
					device 1
				}
				channels 2
			}
		}
		bindings [
			{ slave a channel 0 }
			{ slave a channel 1 }
			{ slave b channel 0 }
			{ slave b channel 1 }
		]
	}
}

<confdir:pcm/surround21.conf>
<confdir:pcm/surround41.conf>
<confdir:pcm/surround50.conf>
<confdir:pcm/surround51.conf>

USB-Audio.pcm.surround51.0 {
	@args [ CARD ]
	@args.CARD { type string }
	@func refer
	name {
		@func concat
		strings [
			"cards.USB-Audio."
			{ @func card_name card $CARD }
			".pcm.surround51:CARD=" $CARD
		]
	}
	default {
		type route
		ttable.0.0 1
		ttable.1.1 1
		ttable.2.4 1
		ttable.3.5 1
		ttable.4.2 1
		ttable.5.3 1
		slave {
			pcm {
				type hw
				card $CARD
				device 0
			}
			channels 6
		}
	}
}

<confdir:pcm/surround71.conf>

USB-Audio.pcm.surround71.0 {
	@args [ CARD ]
	@args.CARD { type string }
	@func refer
	name {
		@func concat
		strings [
			"cards.USB-Audio."
			{ @func card_name card $CARD }
			".pcm.surround71:CARD=" $CARD
		]
	}
	default {
		type route
		ttable.0.0 1
		ttable.1.1 1
		ttable.2.4 1
		ttable.3.5 1
		ttable.4.2 1
		ttable.5.3 1
		ttable.6.6 1
		ttable.7.7 1
		slave {
			pcm {
				type hw
				card $CARD
				device 0
			}
			channels 8
		}
	}
}

<confdir:pcm/iec958.conf>

USB-Audio.pcm.iec958.0 {
	@args [ CARD AES0 AES1 AES2 AES3 ]
	@args.CARD { type string }
	@args.AES0 { type integer }
	@args.AES1 { type integer }
	@args.AES2 { type integer }
	@args.AES3 { type integer }
	@func refer
	name {
		@func concat
		strings [
			"cards.USB-Audio."
			{ @func card_name card $CARD }
			".pcm.iec958:CARD=" $CARD
			",AES0=" $AES0 ",AES1=" $AES1 ",AES2=" $AES2 ",AES3=" $AES3
		]
	}
	default {
		# FIXME: we cannot set the AES parameters
		type hw
		card $CARD
		device {
			@func refer
			name {
				@func concat
				strings [
					"cards.USB-Audio.pcm.iec958_device."
					{ @func card_name card $CARD }
				]
			}
			default 0
		}
	}
}

USB-Audio.pcm.iec958.1 {
	@args [ CARD AES0 AES1 AES2 AES3 ]
	@args.CARD { type string }
	@args.AES0 { type integer }
	@args.AES1 { type integer }
	@args.AES2 { type integer }
	@args.AES3 { type integer }
	@func refer
	name {
		@func concat
		strings [
			"cards.USB-Audio."
			{ @func card_name card $CARD }
			".pcm.iec958_2:CARD=" $CARD
			",AES0=" $AES0 ",AES1=" $AES1 ",AES2=" $AES2 ",AES3=" $AES3
		]
	}
	default {
		# FIXME: we cannot set the AES parameters
		type hw
		card $CARD
		device {
			@func refer
			name {
				@func concat
				strings [
					"cards.USB-Audio.pcm.iec958_2_device."
					{ @func card_name card $CARD }
				]
			}
			default 999
		}
	}
}

# vim: ft=alsaconf
