#
# Configuration for the ICE1724 (Envy24HT) chip
#

# default with dmix & dsnoop
ICE1724.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>

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

<confdir:pcm/rear.conf>

ICE1724.pcm.rear.0 {
	@args [ CARD ]
	@args.CARD {
		type string
	}
	type hw
	card $CARD
	device 2
	subdevice 1
}	

<confdir:pcm/center_lfe.conf>

ICE1724.pcm.center_lfe.0 {
	@args [ CARD ]
	@args.CARD {
		type string
	}
	type hw
	card $CARD
	device 2
}	

<confdir:pcm/side.conf>

ICE1724.pcm.side.0 {
	@args [ CARD ]
	@args.CARD {
		type string
	}
	type hw
	card $CARD
	device 2
	subdevice 2
}

<confdir:pcm/surround40.conf>

ICE1724.pcm.surround40.0 {
	@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 {
		channels 6
		pcm {
			type hw
			card $CARD
		}
	}
}	

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

ICE1724.pcm.surround51.0 {
	@args [ CARD ]
	@args.CARD {
		type string
	}
	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 {
		channels 6
                pcm {
			type hw
	 		card $CARD
		}
	}
}

<confdir:pcm/surround71.conf>

ICE1724.pcm.surround71.0 {
	@args [ CARD ]
	@args.CARD {
		type string
	}
	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 {
		channels 8
		pcm {
			type hw
			card $CARD
		}
	}
}

<confdir:pcm/iec958.conf>

ICE1724.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 linear
	    slave.pcm {
		type hooks
		slave.pcm {
			type hw
			card $CARD
			device 1
		}
		hooks.0 {
			type ctl_elems
			hook_args [
				{
					interface MIXER
					name "IEC958 Output Switch"
					lock true
					preserve true
					value true
				}
				{
					interface PCM
					name "IEC958 Playback Default"
					device 1
					lock true
					preserve true
					value [ $AES0 $AES1 $AES2 $AES3 ]
				}
			]
		}
	    }
	    slave.format S32_LE
	}
	capture.pcm {
	    type linear
	    slave.pcm {
		type hooks
		slave.pcm {
			type hw
			card $CARD
			device 1
		}
		hooks.0 {
			type ctl_elems
			hook_args [
				{
					interface MIXER
					name "IEC958 Capture Switch"
					lock true
					preserve true
					value true
				}
			]
		}
	    }
	    slave.format S32_LE
	}
}
