#
# Configuration for the Aureon71 (Envy24HT) chip
#

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

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

<confdir:pcm/rear.conf>

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

<confdir:pcm/center_lfe.conf>

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

<confdir:pcm/side.conf>

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

<confdir:pcm/surround40.conf>

Aureon71.pcm.surround40.0 {
	@args [ CARD ]
	@args.CARD {
		type string
	}
	type hw
	card $CARD
	channels 4
}	

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

Aureon71.pcm.surround51.0 {
	@args [ CARD ]
	@args.CARD {
		type string
	}
	type hw
	card $CARD
	channels 6
}

<confdir:pcm/surround71.conf>

Aureon71.pcm.surround71.0 {
	@args [ CARD ]
	@args.CARD {
		type string
	}
	type hw
	card $CARD
}

<confdir:pcm/iec958.conf>

Aureon71.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
	}
}
