#
# Configuration for the nVIDIA nForce/2/3
#

<confdir:pcm/front.conf>

NFORCE.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
NFORCE.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>

NFORCE.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/surround41.conf>
<confdir:pcm/surround50.conf>
<confdir:pcm/surround51.conf>

NFORCE.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/surround71.conf>

NFORCE.pcm.surround71.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
        ttable.6.6 1
        ttable.7.7 1
        slave.pcm {
            type hooks
            slave.pcm {
                type hw
                card $CARD
                device 0
            }
            hooks.0 {
                type ctl_elems
                hook_args [
                {
                    name "Channel Mode"
                    preserve true
                    value "8ch"
                    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 8
    }
    control {
        name "PCM Playback Volume"
        card $CARD
    }
}

<confdir:pcm/iec958.conf>

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