#
# Configuration for the ENS1370 chip
#

<confdir:pcm/front.conf>

ENS1371.pcm.front.0 {
	@args [ CARD ]
	@args.CARD {
		type string
	}
	type hw
	card $CARD
}	

# default with dmix/dsnoop
ENS1371.pcm.default {
	@args [ CARD ]
	@args.CARD {
		type string
	}
	type asym
	playback.pcm {
		type plug
		slave.pcm {
			@func concat
			strings [ "dmix:" $CARD ]
		}
	}
	capture.pcm {
		type plug
		slave.pcm {
			@func concat
			strings [ "dsnoop:" $CARD ]
		}
	}
}

<confdir:pcm/rear.conf>

ENS1371.pcm.rear.0 {
	@args [ CARD ]
	@args.CARD {
		type string
	}
	type hooks
	slave.pcm {
		type hw
		card $CARD
		device 1
	}
	hooks.0 {
		type ctl_elems
		hook_args [
			{
				interface MIXER
				name "AC97 2ch->4ch Copy Switch"
				lock true
				preserve true
				value 0
			}
		]
	}
}	

<confdir:pcm/surround40.conf>

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

ENS1371.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
	}
	hooks.0 {
		type ctl_elems
		hook_args [
			{
				interface PCM
				name "IEC958 Playback PCM Stream"
				lock true
				preserve true
				value [ $AES0 $AES1 $AES2 $AES3 ]
			}
		]
	}
}
