#
# Configuration for the Intel ICH/ICH2/ICH3 chips
#

<confdir:pcm/front.conf>

ICH.pcm.front.0 {
	@args [ CARD ]
	@args.CARD {
		type string
	}
	type softvol
	slave.pcm {
		type hw
		card $CARD
	}
	control {
		name "PCM Playback Volume"
		card $CARD
	}
}	

# default with dmix+softvol & dsnoop
ICH.pcm.default {
	@args [ CARD ]
	@args.CARD {
		type string
	}
	type asym
	playback.pcm {
		type plug
		slave.pcm {
			type softvol
			slave.pcm {
				@func concat
				strings [ "dmix:" $CARD ]
			}
			control {
				name "PCM Playback Volume"
				card $CARD
			}
		}
	}
	capture.pcm {
		type plug
		slave.pcm {
			@func concat
			strings [ "dsnoop:" $CARD ]
		}
	}
}

<confdir:pcm/surround40.conf>

ICH.pcm.surround40.0 {
	@args [ CARD ]
	@args.CARD {
		type string
	}
	type softvol
	slave.pcm {
		type hooks
		slave.pcm {
			type hw
			card $CARD
			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
			}
			]
		}
	}
	control {
		name "PCM Playback Volume"
		card $CARD
	}
}

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

ICH.pcm.surround51.0 {
	@args [ CARD ]
	@args.CARD {
		type string
	}
	type softvol
	slave.pcm {
		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.pcm {
			type hooks
			slave.pcm {
				type hw
				card $CARD
				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
				}
				]
			}
		}
		slave.channels 6
	}
	control {
		name "PCM Playback Volume"
		card $CARD
	}
}

<confdir:pcm/iec958.conf>

ICH.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 [
			{
				name "IEC958 Playback AC97-SPSA"
				lock true
				preserve true
				value 0
				optional true
			}
			{
				name "IEC958 Playback Default"
				lock true
				preserve true
				value [ $AES0 $AES1 $AES2 $AES3 ]
			}
			{
				name "IEC958 Playback Switch"
				lock true
				preserve true
				value true
			}
		]
	}
}
