#
# Configuration for the EMU10K1 chip
#

<confdir:pcm/front.conf>

EMU10K1.pcm.front.0 {
	@args [ CARD ]
	@args.CARD {
		type string
	}
	type asym
	playback.pcm {
		type hooks
		slave.pcm {
			type hw
			card $CARD
			chmap [ "UNKNOWN" "FL,FR" ]
		}
		hooks.0 {
			type ctl_elems
			hook_args [
				{
					interface PCM
					name "EMU10K1 PCM Send Volume"
					index { @func private_pcm_subdevice }
					# lock true
					optional true
					value [ 255 255 0 0 255 0 0 0 0 255 0 0 ]
				}
				{
					# for compatibility with older drivers
					name "EMU10K1 PCM Send Volume"
					index { @func private_pcm_subdevice }
					# lock true
					optional true
					value [ 255 255 0 0 255 0 0 0 0 255 0 0 ]
				}
				{
					interface PCM
					name "EMU10K1 PCM Send Routing"
					index { @func private_pcm_subdevice }
					# lock true
					optional true
					value [ 8 9 0 0 8 9 0 0 8 9 0 0 ]
				}
				{
					# for compatibility with older drivers
					name "EMU10K1 PCM Send Routing"
					index { @func private_pcm_subdevice }
					# lock true
					optional true
					value [ 8 9 0 0 8 9 0 0 8 9 0 0 ]
				}
			]
		}
	}
	capture.pcm {
		type hw
		card $CARD
	}
}	

<confdir:pcm/rear.conf>

EMU10K1.pcm.rear.0 {
	@args [ CARD ]
	@args.CARD {
		type string
	}
	type asym
	playback.pcm {
		type hooks
		slave.pcm {
			type hw
			card $CARD
			chmap [ "UNKNOWN" "RL,RR" ]
		}
		hooks.0 {
			type ctl_elems
			hook_args [
				{
					interface PCM
					name "EMU10K1 PCM Send Volume"
					index { @func private_pcm_subdevice }
					# lock true
					optional true
					value [ 0 0 255 255 0 0 255 0 0 0 0 255 ]
				}
				{
					# for compatibility with older drivers
					name "EMU10K1 PCM Send Volume"
					index { @func private_pcm_subdevice }
					# lock true
					optional true
					value [ 0 0 255 255 0 0 255 0 0 0 0 255 ]
				}
			]
		}
	}
}	

<confdir:pcm/center_lfe.conf>

EMU10K1.pcm.center_lfe.0 {
	@args [ CARD ]
	@args.CARD {
		type string
	}
	type asym
	playback.pcm {
		type hooks
		slave.pcm {
			type hw
			card $CARD
			chmap [ "UNKNOWN" "FC,LFE" ]
		}
		hooks.0 {
			type ctl_elems
			hook_args [
				{
					name "Headphone Center Playback Switch"
					index 1
					preserve true
					# lock true
					optional true
					value true
				}
				{
					name "Headphone LFE Playback Switch"
					index 1
					preserve true
					# lock true
					optional true
					value true
				}
# if you have a creative's digital receiver, you can get surround/center/lfe
# output through the digital jack.  so, the following is commented out.
# pay attention in case of analog output from the shared center/digital
# jack!
#				{
#					name "SB Live Analog/Digital Output Jack"
#					preserve true
#					lock true
#					value 0
#				}
				{
					interface PCM
					name "EMU10K1 PCM Send Volume"
					index { @func private_pcm_subdevice }
					# lock true
					optional true
					value [ 255 255 0 0 255 0 0 0 0 255 0 0 ]
				}
				{
					# for compatibility with older drivers
					name "EMU10K1 PCM Send Volume"
					index { @func private_pcm_subdevice }
					# lock true
					optional true
					value [ 255 255 0 0 255 0 0 0 0 255 0 0 ]
				}
				{
					interface PCM
					name "EMU10K1 PCM Send Routing"
					index { @func private_pcm_subdevice }
					# lock true
					optional true
					value [ 6 7 0 0 6 7 0 0 6 7 0 0 ]
				}
				{
					# for compatibility with older drivers
					name "EMU10K1 PCM Send Routing"
					index { @func private_pcm_subdevice }
					# lock true
					optional true
					value [ 6 7 0 0 6 7 0 0 6 7 0 0 ]
				}
			]
		}
	}
}	

<confdir:pcm/surround40.conf>

EMU10K1.pcm.surround40.0 {
	@args [ CARD ]
	@args.CARD {
		type string
	}
	type multi
	slaves [
		{
			pcm {
				@func concat
				strings [
					"cards.EMU10K1.pcm.front.0:CARD=" $CARD
				]
			}
			channels 2
		}
		{
			pcm {
				@func concat
				strings [
					"cards.EMU10K1.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/surround41.conf>
<confdir:pcm/surround50.conf>
<confdir:pcm/surround51.conf>

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

<confdir:pcm/iec958.conf>

EMU10K1.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 Default"
				device 2
				lock true
				preserve true
				optional true
				value [ $AES0 $AES1 $AES2 $AES3 ]
			}
			{
				# for compatibility with older drivers
				name "IEC958 Playback Default"
				lock true
				preserve true
				optional true
				value [ $AES0 $AES1 $AES2 $AES3 ]
			}
			{
				name "IEC958 Optical Raw Playback Switch"
				lock true
				preserve true
				value [ 1 1 ]
			}
			{
				name "SB Live Analog/Digital Output Jack"
				lock true
				preserve true
				value 1
			}
		]
	}
}
