#
# Configuration for the VIA8233/VIA8233C/VIA8235 chip with 4/6 multi-channel support
#

<confdir:pcm/front.conf>

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

# default with softvol/dsnoop
# VIA8233 supports multi-playback
VIA8233.pcm.default {
	@args [ CARD ]
	@args.CARD {
		type string
	}
	type asym
	playback.pcm {
		type plug
		slave.pcm {
			type softvol
			slave.pcm {
				type hw
				card $CARD
			}
			control {
				name "PCM Playback Volume"
				card $CARD
			}
		}
	}
	capture.pcm {
		type plug
		slave.pcm {
			@func concat
			strings [ "dsnoop:" $CARD ]
		}
	}
}

<confdir:pcm/surround40.conf>

VIA8233.pcm.surround40.0 {
	@args [ CARD ]
	@args.CARD {
		type string
	}
	type hooks
	slave.pcm {
		type hw
		card $CARD
		device 1
		channels 4
	}
	hooks.0 {
		type ctl_elems
		hook_args [
			{
				name "Channel Mode"
				preserve true
				value "4ch"
				lock true
				optional true
			}
			# for old drivers
			{
				name "Line-In As Surround"
				preserve true
				value true
				optional true
			}
			{
				name "Surround Down Mix"
				preserve true
				value off
				lock true
				optional true
			}
		]
	}
}

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

VIA8233.pcm.surround51.0 {
	@args [ CARD ]
	@args.CARD {
		type string
	}
	type hooks
	slave.pcm {
		type hw
		card $CARD
		device 1
		channels 6
	}
	hooks.0 {
		type ctl_elems
		hook_args [
			{
				name "Channel Mode"
				preserve true
				value "6ch"
				lock true
				optional true
			}
			# for old drivers
			{
				name "Line-In As Surround"
				preserve true
				value true
				optional true
			}
			{
				name "Mic As Center/LFE"
				preserve true
				value true
				optional true
			}
			{
				name "Surround Down Mix"
				preserve true
				value off
				lock true
				optional true
			}
			{
				name "Center/LFE Down Mix"
				preserve true
				value off
				lock true
				optional true
			}
		]
	}
}

<confdir:pcm/iec958.conf>

VIA8233.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
		subdevice 3
	}
	hooks.0 {
		type ctl_elems
		hook_args [
			{
				name "IEC958 Playback AC97-SPSA"
				lock true
				preserve true
				value 3
			}
			{
				name "IEC958 Playback Default"
				lock true
				preserve true
				value [ $AES0 $AES1 $AES2 $AES3 ]
			}
			{
				name "IEC958 Playback Switch"
				lock true
				preserve true
				value true
			}
			{
				name "IEC958 Output Switch"
				lock true
				preserve true
				value true
			}
		]
	}
}
