#
# Configuration for the ICE1712 (Envy24) chip
#

# default with dmix & dsnoop
ICE1712.pcm.default {
	@args [ CARD ]
	@args.CARD {
		type string
	}
	type asym
	playback.pcm {
		type plug
		slave.pcm {
			@func concat
			strings [ "dmix:" $CARD ",FORMAT=S32_LE" ]
		}
	}
	capture.pcm {
		type plug
		slave.pcm {
			@func concat
			strings [ "dsnoop:" $CARD ",FORMAT=S32_LE" ]
		}
	}
}

<confdir:pcm/front.conf>

ICE1712.pcm.front.0 {
	@args [ CARD ]
	@args.CARD {
		type string
	}
	type asym
	playback.pcm {
		type route
		ttable.0.0 1
		ttable.1.1 1
		slave.pcm {
			type hw
			card $CARD
		}
		slave.channels 10
	}
	capture.pcm {
		type route
		ttable.0.0 1
		ttable.1.1 1
		slave.pcm {
			type hw
			card $CARD
		}
		slave.channels 12
	}
}	

<confdir:pcm/surround40.conf>

ICE1712.pcm.surround40.0 {
	@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 hw
		card $CARD
	}
	slave.channels 10
}	

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

ICE1712.pcm.surround51.0 {
	@args [ CARD ]
	@args.CARD {
		type string
	}
	type route
	ttable.0.0 1
	ttable.1.1 1
	ttable.2.2 1
	ttable.3.3 1
	ttable.4.4 1
	ttable.5.5 1
	slave.pcm {
		type hw
		card $CARD
	}
	slave.channels 10
}

ICE1712.pcm.surround71.0 {
	@args [ CARD ]
	@args.CARD {
		type string
	}
	type route
	ttable.0.0 1
	ttable.1.1 1
	ttable.2.2 1
	ttable.3.3 1
	ttable.4.4 1
	ttable.5.5 1
	ttable.6.6 1
	ttable.7.7 1
	slave.pcm {
		type hw
		card $CARD
	}
	slave.channels 10
}

<confdir:pcm/iec958.conf>

ICE1712.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 asym
	playback.pcm {
		type hooks
		slave.pcm {
			type route
			ttable.0.8 1
			ttable.1.9 1
			slave.pcm {
				type hw
				card $CARD
			}
			slave.format S32_LE
			slave.channels 10
		}
		hooks.0 {
			type ctl_elems
			hook_args [
				{
					interface PCM
					name "IEC958 Playback PCM Stream"
					lock true
					preserve true
					value [ $AES0 $AES1 $AES2 $AES3 ]
				}
			]
		}
	}
	capture.pcm {
		type route
		ttable.0.8 1
		ttable.1.9 1
		slave.pcm {
			type hw
			card $CARD
		}
		slave.format S32_LE
		slave.channels 12
	}
}
