#
# Configuration for the Trident 4D-Wave NX chip
#

<confdir:pcm/front.conf>

TRID4DWAVENX.pcm.front.0 {
	@args [ CARD ]
	@args.CARD {
		type string
	}
	type hw
	card $CARD
	chmap [ "UNKNOWN" "FL,FR" ]
}	

<confdir:pcm/rear.conf>

TRID4DWAVENX.pcm.rear.0 {
	@args [ CARD ]
	@args.CARD {
		type string
	}
	type hooks
	slave.pcm {
		type hw
		card $CARD
		chmap [ "UNKNOWN" "RL,RR" ]
	}
	hooks.0 {
		type ctl_elems
		hook_args [
			{
				name "Rear Path"
				lock true
				preserve true
				value true
			}
			{
				name "PCM Front Playback Volume"
				index { @func private_pcm_subdevice }
				lock true
				preserve true
				value 0
			}
			{
				name "PCM Reverb Playback Volume"
				index { @func private_pcm_subdevice }
				lock true
				preserve true
				value 127
			}
		]
	}
}	

<confdir:pcm/surround40.conf>

TRID4DWAVENX.pcm.surround40.0 {
	@args [ CARD ]
	@args.CARD {
		type string
	}
	type multi
	slaves [
		{
			pcm {
				@func concat
				strings [
					"cards.TRID4DWAVENX.pcm.front.0:CARD=" $CARD
				]
			}
			channels 2
		}
		{
			pcm {
				@func concat
				strings [
					"cards.TRID4DWAVENX.pcm.rear.0:CARD=" $CARD
				]
			}
			channels 2
		}
	]
	bindings [
		{ slave 0 channel 0 }
		{ slave 0 channel 1 }
		{ slave 1 channel 0 }
		{ slave 1 channel 1 }
	]
}

<confdir:pcm/iec958.conf>

TRID4DWAVENX.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
	}
	type hooks
	slave.pcm {
		type hw
		card $CARD
		device 2
	}
	hooks.0 {
		type ctl_elems
		hook_args [
			{
				interface PCM
				name "IEC958 Playback PCM Stream"
				value [ $AES0 $AES1 $AES2 $AES3 ]
				device 2
				lock true
				preserve true
			}
		]
	}
}
