For nest-cam v350 release

Bug: 259322762
diff --git a/etc/asound.conf b/etc/asound.conf
new file mode 100644
index 0000000..34fd695
--- /dev/null
+++ b/etc/asound.conf
@@ -0,0 +1,36 @@
+# This PCM is used to test 6 channels via a stereo (2 channels) audio stream.
+pcm.ch51dup {
+	type route
+	slave.pcm surround51
+	slave.channels 6
+
+	ttable.0.0 1
+	ttable.1.1 1
+	ttable.0.2 1
+	ttable.1.3 1
+	ttable.0.4 1
+	ttable.1.5 1
+}
+
+# This PCM is used to test 4 channels via a stereo (2 channels) audio stream.
+pcm.ch40dup {
+	type route
+	slave.pcm surround40
+	slave.channels 4
+
+	ttable.0.0 1
+	ttable.1.1 1
+	ttable.0.2 1
+	ttable.1.3 1
+}
+
+# This PCM is used to swap a stereo (2 channels) audio stream
+pcm.ch2swp {
+	type route
+	slave.pcm "hw:0,0"
+	slave.channels 2
+
+	ttable.0.1 1
+	ttable.1.0 1
+}
+
diff --git a/usr/bin/aserver b/usr/bin/aserver
new file mode 100755
index 0000000..6c2e968
--- /dev/null
+++ b/usr/bin/aserver
Binary files differ
diff --git a/usr/lib/alsa-lib/smixer/smixer-ac97.so b/usr/lib/alsa-lib/smixer/smixer-ac97.so
new file mode 100755
index 0000000..83504d0
--- /dev/null
+++ b/usr/lib/alsa-lib/smixer/smixer-ac97.so
Binary files differ
diff --git a/usr/lib/alsa-lib/smixer/smixer-hda.so b/usr/lib/alsa-lib/smixer/smixer-hda.so
new file mode 100755
index 0000000..987624c
--- /dev/null
+++ b/usr/lib/alsa-lib/smixer/smixer-hda.so
Binary files differ
diff --git a/usr/lib/alsa-lib/smixer/smixer-sbase.so b/usr/lib/alsa-lib/smixer/smixer-sbase.so
new file mode 100755
index 0000000..ce2ceac
--- /dev/null
+++ b/usr/lib/alsa-lib/smixer/smixer-sbase.so
Binary files differ
diff --git a/usr/lib/libasound.so b/usr/lib/libasound.so
new file mode 120000
index 0000000..42dfc99
--- /dev/null
+++ b/usr/lib/libasound.so
@@ -0,0 +1 @@
+libasound.so.2.0.0
\ No newline at end of file
diff --git a/usr/lib/libasound.so.2 b/usr/lib/libasound.so.2
new file mode 120000
index 0000000..42dfc99
--- /dev/null
+++ b/usr/lib/libasound.so.2
@@ -0,0 +1 @@
+libasound.so.2.0.0
\ No newline at end of file
diff --git a/usr/lib/libasound.so.2.0.0 b/usr/lib/libasound.so.2.0.0
new file mode 100755
index 0000000..a397918
--- /dev/null
+++ b/usr/lib/libasound.so.2.0.0
Binary files differ
diff --git a/usr/share/alsa/alsa.conf b/usr/share/alsa/alsa.conf
new file mode 100644
index 0000000..bc91df3
--- /dev/null
+++ b/usr/share/alsa/alsa.conf
@@ -0,0 +1,618 @@
+#
+#  ALSA library configuration file
+#
+
+# pre-load the configuration files
+
+@hooks [
+	{
+		func load
+		files [
+			{
+				@func concat
+				strings [
+					{ @func datadir }
+					"/alsa.conf.d/"
+				]
+			}
+			"/etc/asound.conf"
+			"~/.asoundrc"
+		]
+		errors false
+	}
+]
+
+# load card-specific configuration files (on request)
+
+cards.@hooks [
+	{
+		func load
+		files [
+			{
+				@func concat
+				strings [
+					{ @func datadir }
+					"/cards/aliases.conf"
+				]
+			}
+		]
+	}
+	{
+		func load_for_all_cards
+		files [
+			{
+				@func concat
+				strings [
+					{ @func datadir }
+					"/cards/"
+					{ @func private_string }
+					".conf"
+				]
+			}
+		]
+		errors false
+	}
+]
+
+#
+# defaults
+#
+
+# show all name hints also for definitions without hint {} section
+defaults.namehint.showall off
+# show just basic name hints
+defaults.namehint.basic on
+# show extended name hints
+defaults.namehint.extended off
+#
+defaults.ctl.card 0
+defaults.pcm.card 0
+defaults.pcm.device 0
+defaults.pcm.subdevice -1
+defaults.pcm.nonblock 1
+defaults.pcm.compat 0
+defaults.pcm.minperiodtime 5000		# in us
+defaults.pcm.ipc_key 5678293
+defaults.pcm.ipc_gid audio
+defaults.pcm.ipc_perm 0660
+defaults.pcm.dmix.max_periods 0
+defaults.pcm.dmix.rate 48000
+defaults.pcm.dmix.format "unchanged"
+defaults.pcm.dmix.card defaults.pcm.card
+defaults.pcm.dmix.device defaults.pcm.device
+defaults.pcm.dsnoop.card defaults.pcm.card
+defaults.pcm.dsnoop.device defaults.pcm.device
+defaults.pcm.front.card defaults.pcm.card
+defaults.pcm.front.device defaults.pcm.device
+defaults.pcm.rear.card defaults.pcm.card
+defaults.pcm.rear.device defaults.pcm.device
+defaults.pcm.center_lfe.card defaults.pcm.card
+defaults.pcm.center_lfe.device defaults.pcm.device
+defaults.pcm.side.card defaults.pcm.card
+defaults.pcm.side.device defaults.pcm.device
+defaults.pcm.surround40.card defaults.pcm.card
+defaults.pcm.surround40.device defaults.pcm.device
+defaults.pcm.surround41.card defaults.pcm.card
+defaults.pcm.surround41.device defaults.pcm.device
+defaults.pcm.surround50.card defaults.pcm.card
+defaults.pcm.surround50.device defaults.pcm.device
+defaults.pcm.surround51.card defaults.pcm.card
+defaults.pcm.surround51.device defaults.pcm.device
+defaults.pcm.surround71.card defaults.pcm.card
+defaults.pcm.surround71.device defaults.pcm.device
+defaults.pcm.iec958.card defaults.pcm.card
+defaults.pcm.iec958.device defaults.pcm.device
+defaults.pcm.modem.card defaults.pcm.card
+defaults.pcm.modem.device defaults.pcm.device
+# truncate files via file or tee PCM
+defaults.pcm.file_format	"raw"
+defaults.pcm.file_truncate	true
+defaults.rawmidi.card 0
+defaults.rawmidi.device 0
+defaults.rawmidi.subdevice -1
+defaults.hwdep.card 0
+defaults.hwdep.device 0
+defaults.timer.class 2
+defaults.timer.sclass 0
+defaults.timer.card 0
+defaults.timer.device 0
+defaults.timer.subdevice 0
+
+#
+#  PCM interface
+#
+
+# redirect to load-on-demand extended pcm definitions
+pcm.cards cards.pcm
+
+pcm.default cards.pcm.default
+pcm.sysdefault cards.pcm.default
+pcm.front cards.pcm.front
+pcm.rear cards.pcm.rear
+pcm.center_lfe cards.pcm.center_lfe
+pcm.side cards.pcm.side
+pcm.surround40 cards.pcm.surround40
+pcm.surround41 cards.pcm.surround41
+pcm.surround50 cards.pcm.surround50
+pcm.surround51 cards.pcm.surround51
+pcm.surround71 cards.pcm.surround71
+pcm.iec958 cards.pcm.iec958
+pcm.spdif iec958
+pcm.hdmi cards.pcm.hdmi
+pcm.dmix cards.pcm.dmix
+pcm.dsnoop cards.pcm.dsnoop
+pcm.modem cards.pcm.modem
+pcm.phoneline cards.pcm.phoneline
+
+pcm.hw {
+	@args [ CARD DEV SUBDEV ]
+	@args.CARD {
+		type string
+		default {
+			@func getenv
+			vars [
+				ALSA_PCM_CARD
+				ALSA_CARD
+			]
+			default {
+				@func refer
+				name defaults.pcm.card
+			}
+		}
+	}
+	@args.DEV {
+		type integer
+		default {
+			@func igetenv
+			vars [
+				ALSA_PCM_DEVICE
+			]
+			default {
+				@func refer
+				name defaults.pcm.device
+			}
+		}
+	}
+	@args.SUBDEV {
+		type integer
+		default {
+			@func refer
+			name defaults.pcm.subdevice
+		}
+	}		
+	type hw
+	card $CARD
+	device $DEV
+	subdevice $SUBDEV
+	hint {
+		show {
+			@func refer
+			name defaults.namehint.extended
+		}
+		description "Direct hardware device without any conversions"
+	}
+}
+
+pcm.plughw {
+	@args [ CARD DEV SUBDEV ]
+	@args.CARD {
+		type string
+		default {
+			@func getenv
+			vars [
+				ALSA_PCM_CARD
+				ALSA_CARD
+			]
+			default {
+				@func refer
+				name defaults.pcm.card
+			}
+		}
+	}
+	@args.DEV {
+		type integer
+		default {
+			@func igetenv
+			vars [
+				ALSA_PCM_DEVICE
+			]
+			default {
+				@func refer
+				name defaults.pcm.device
+			}
+		}
+	}
+	@args.SUBDEV {
+		type integer
+		default {
+			@func refer
+			name defaults.pcm.subdevice
+		}
+	}		
+	type plug
+	slave.pcm {
+		type hw
+		card $CARD
+		device $DEV
+		subdevice $SUBDEV
+	}
+	hint {
+		show {
+			@func refer
+			name defaults.namehint.extended
+		}
+		description "Hardware device with all software conversions"
+	}
+}
+
+pcm.plug {
+	@args [ SLAVE ]
+	@args.SLAVE {
+		type string
+	}
+	type plug
+	slave.pcm $SLAVE
+}
+
+pcm.shm {
+	@args [ SOCKET PCM ]
+	@args.SOCKET {
+		type string
+	}
+	@args.PCM {
+		type string
+	}
+	type shm
+	server $SOCKET
+	pcm $PCM
+}
+
+pcm.tee {
+	@args [ SLAVE FILE FORMAT ]
+	@args.SLAVE {
+		type string
+	}
+	@args.FILE {
+		type string
+	}
+	@args.FORMAT {
+		type string
+		default {
+			@func refer
+			name defaults.pcm.file_format
+		}
+	}
+	type file
+	slave.pcm $SLAVE
+	file $FILE
+	format $FORMAT
+	truncate {
+		@func refer
+		name defaults.pcm.file_truncate
+	}
+}
+
+pcm.file {
+	@args [ FILE FORMAT ]
+	@args.FILE {
+		type string
+	}
+	@args.FORMAT {
+		type string
+		default {
+			@func refer
+			name defaults.pcm.file_format
+		}
+	}
+	type file
+	slave.pcm null
+	file $FILE
+	format $FORMAT
+	truncate {
+		@func refer
+		name defaults.pcm.file_truncate
+	}
+}
+
+pcm.null {
+	type null
+	hint {
+		show {
+			@func refer
+			name defaults.namehint.basic
+		}
+		description "Discard all samples (playback) or generate zero samples (capture)"
+	}
+}
+
+#
+#  Control interface
+#
+	
+ctl.sysdefault {
+	type hw
+	card {
+		@func getenv
+		vars [
+			ALSA_CTL_CARD
+			ALSA_CARD
+		]
+		default {
+			@func refer
+			name defaults.ctl.card
+		}
+	}
+}
+ctl.default ctl.sysdefault
+
+ctl.hw {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+		default {
+			@func getenv
+			vars [
+				ALSA_CTL_CARD
+				ALSA_CARD
+			]
+			default {
+				@func refer
+				name defaults.ctl.card
+			}
+		}
+	}
+	type hw
+	card $CARD
+}
+
+ctl.shm {
+	@args [ SOCKET CTL ]
+	@args.SOCKET {
+		type string
+	}
+	@args.CTL {
+		type string
+	}
+	type shm
+	server $SOCKET
+	ctl $CTL
+}
+
+#
+#  RawMidi interface
+#
+
+rawmidi.default {
+	type hw
+	card {
+		@func getenv
+		vars [
+			ALSA_RAWMIDI_CARD
+			ALSA_CARD
+		]
+		default {
+			@func refer
+			name defaults.rawmidi.card
+		}
+	}
+	device {
+		@func igetenv
+		vars [
+			ALSA_RAWMIDI_DEVICE
+		]
+		default {
+			@func refer
+			name defaults.rawmidi.device
+		}
+	}
+}
+
+rawmidi.hw {
+	@args [ CARD DEV SUBDEV ]
+	@args.CARD {
+		type string
+		default {
+			@func getenv
+			vars [
+				ALSA_RAWMIDI_CARD
+				ALSA_CARD
+			]
+			default {
+				@func refer
+				name defaults.rawmidi.card
+			}
+		}
+	}
+	@args.DEV {
+		type integer
+		default {
+			@func igetenv
+			vars [
+				ALSA_RAWMIDI_DEVICE
+			]
+			default {
+				@func refer
+				name defaults.rawmidi.device
+			}
+		}
+	}
+	@args.SUBDEV {
+		type integer
+		default -1
+	}
+	type hw
+	card $CARD
+	device $DEV
+	subdevice $SUBDEV
+	hint {
+		description "Direct rawmidi driver device"
+		device $DEV
+	}
+}
+
+rawmidi.virtual {
+	@args [ MERGE ]
+	@args.MERGE {
+		type string
+		default 1
+	}
+	type virtual
+	merge $MERGE
+}
+
+#
+#  Sequencer interface
+#
+
+seq.default {
+	type hw
+}
+
+seq.hw {
+	type hw
+}
+
+#
+#  HwDep interface
+#
+
+hwdep.default {
+	type hw
+	card {
+		@func getenv
+		vars [
+			ALSA_HWDEP_CARD
+			ALSA_CARD
+		]
+		default {
+			@func refer
+			name defaults.hwdep.card
+		}
+	}
+	device {
+		@func igetenv
+		vars [
+			ALSA_HWDEP_DEVICE
+		]
+		default {
+			@func refer
+			name defaults.hwdep.device
+		}
+	}
+}
+
+hwdep.hw {
+	@args [ CARD DEV ]
+	@args.CARD {
+		type string
+		default {
+			@func getenv
+			vars [
+				ALSA_HWDEP_CARD
+				ALSA_CARD
+			]
+			default {
+				@func refer
+				name defaults.hwdep.card
+			}
+		}
+	}
+	@args.DEV {
+		type integer
+		default {
+			@func igetenv
+			vars [
+				ALSA_HWDEP_DEVICE
+			]
+			default {
+				@func refer
+				name defaults.hwdep.device
+			}
+		}
+	}
+	type hw
+	card $CARD
+	device $DEV
+}
+
+#
+#  Timer interface
+#
+
+timer_query.default {
+	type hw
+}
+
+timer_query.hw {
+	type hw
+}
+
+timer.default {
+	type hw
+	class {
+		@func refer
+		name defaults.timer.class
+	}
+	sclass {
+		@func refer
+		name defaults.timer.sclass
+	}
+	card {
+		@func refer
+		name defaults.timer.card
+	}
+	device {
+		@func refer
+		name defaults.timer.device
+	}
+	subdevice {
+		@func refer
+		name defaults.timer.subdevice
+	}
+	hint.description "Default direct hardware timer device"
+}
+
+timer.hw {
+	@args [ CLASS SCLASS CARD DEV SUBDEV ]
+	@args.CLASS {
+		type integer
+		default {
+			@func refer
+			name defaults.timer.class
+		}
+	}
+	@args.SCLASS {
+		type integer
+		default {
+			@func refer
+			name defaults.timer.sclass
+		}
+	}
+	@args.CARD {
+		type string
+		default {
+			@func refer
+			name defaults.timer.card
+		}
+	}
+	@args.DEV {
+		type integer
+		default {
+			@func refer
+			name defaults.timer.device
+		}
+	}
+	@args.SUBDEV {
+		type integer
+		default {
+			@func refer
+			name defaults.timer.subdevice
+		}
+	}
+	type hw
+	class $CLASS
+	sclass $SCLASS
+	card $CARD
+	device $DEV
+	subdevice $SUBDEV
+}
diff --git a/usr/share/alsa/alsa.conf.d/README b/usr/share/alsa/alsa.conf.d/README
new file mode 100644
index 0000000..9997884
--- /dev/null
+++ b/usr/share/alsa/alsa.conf.d/README
@@ -0,0 +1,2 @@
+You can place files named *.conf in this folder and they will be processed
+when initialising alsa-lib.
diff --git a/usr/share/alsa/cards/AACI.conf b/usr/share/alsa/cards/AACI.conf
new file mode 100644
index 0000000..748586a
--- /dev/null
+++ b/usr/share/alsa/cards/AACI.conf
@@ -0,0 +1,47 @@
+#
+# ALSA library configuration for ARM AACI Primecell PL-041
+#
+
+<confdir:pcm/front.conf>
+
+AACI.pcm.front.0 {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type hw
+	card $CARD
+}       
+
+<confdir:pcm/surround40.conf>
+
+AACI.pcm.surround40.0 "cards.AACI.pcm.front.0"
+
+<confdir:pcm/surround51.conf>
+
+AACI.pcm.surround51.0 {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type multi
+	slaves [
+		{
+			pcm {
+				@func concat
+				strings [
+					"cards.AACI.pcm.front.0:CARD=" $CARD
+				]
+			}
+			channels 6
+		}
+	]
+	bindings [
+		{ slave 0 channel 0 }
+		{ slave 0 channel 1 }
+		{ slave 0 channel 3 }
+		{ slave 0 channel 4 }
+		{ slave 0 channel 2 }
+		{ slave 0 channel 5 }
+	]
+}
diff --git a/usr/share/alsa/cards/ATIIXP-MODEM.conf b/usr/share/alsa/cards/ATIIXP-MODEM.conf
new file mode 100644
index 0000000..6e52af0
--- /dev/null
+++ b/usr/share/alsa/cards/ATIIXP-MODEM.conf
@@ -0,0 +1,22 @@
+#
+# Configuration for the ATI IXP 150/200/250 modem controllers
+#
+
+<confdir:pcm/modem.conf>
+
+ATIIXP-MODEM.pcm.modem.0 {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type route
+	slave.pcm {
+		type hw
+		card $CARD
+	}
+	slave.channels 2
+	slave.format S16_LE
+	ttable.0.1 1
+	ttable.1.0 0
+	hint.show off
+}
diff --git a/usr/share/alsa/cards/ATIIXP-SPDMA.conf b/usr/share/alsa/cards/ATIIXP-SPDMA.conf
new file mode 100644
index 0000000..5c80815
--- /dev/null
+++ b/usr/share/alsa/cards/ATIIXP-SPDMA.conf
@@ -0,0 +1,165 @@
+#
+# Configuration for the ATI IXP 150/200/250 chips
+#
+
+<confdir:pcm/front.conf>
+
+ATIIXP-SPDMA.pcm.front.0 {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type hw
+	card $CARD
+}	
+
+# default with dmix/dsnoop
+ATIIXP.pcm.default {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type asym
+	playback.pcm {
+		type plug
+		slave.pcm {
+			@func concat
+			strings [ "dmix:" $CARD ]
+		}
+	}
+	capture.pcm {
+		type plug
+		slave.pcm {
+			@func concat
+			strings [ "dsnoop:" $CARD ]
+		}
+	}
+}
+
+<confdir:pcm/surround40.conf>
+
+ATIIXP-SPDMA.pcm.surround40.0 {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	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
+			}
+		]
+	}
+}
+
+<confdir:pcm/surround41.conf>
+<confdir:pcm/surround50.conf>
+<confdir:pcm/surround51.conf>
+
+ATIIXP-SPDMA.pcm.surround51.0 {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	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
+			}
+		]
+	}
+}
+
+<confdir:pcm/iec958.conf>
+
+ATIIXP-SPDMA.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 iec958
+	slave {
+		pcm {
+			type hw
+			card $CARD
+			device 1
+		}
+		format IEC958_SUBFRAME_LE
+	}
+	status [ $AES0 $AES1 $AES2 $AES3 ]
+}
diff --git a/usr/share/alsa/cards/ATIIXP.conf b/usr/share/alsa/cards/ATIIXP.conf
new file mode 100644
index 0000000..38d8023
--- /dev/null
+++ b/usr/share/alsa/cards/ATIIXP.conf
@@ -0,0 +1,184 @@
+#
+# Configuration for the ATI IXP 150/200/250 chips
+#
+
+<confdir:pcm/front.conf>
+
+ATIIXP.pcm.front.0 {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type hw
+	card $CARD
+}	
+
+# default with dmix/dsnoop
+ATIIXP.pcm.default {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type asym
+	playback.pcm {
+		type plug
+		slave.pcm {
+			@func concat
+			strings [ "dmix:" $CARD ]
+		}
+	}
+	capture.pcm {
+		type plug
+		slave.pcm {
+			@func concat
+			strings [ "dsnoop:" $CARD ]
+		}
+	}
+}
+
+<confdir:pcm/surround40.conf>
+
+ATIIXP.pcm.surround40.0 {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	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
+			}
+		]
+	}
+}
+
+<confdir:pcm/surround41.conf>
+<confdir:pcm/surround50.conf>
+<confdir:pcm/surround51.conf>
+
+ATIIXP.pcm.surround51.0 {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	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
+			}
+		]
+	}
+}
+
+<confdir:pcm/iec958.conf>
+
+ATIIXP.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 1
+	}
+	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
+			}
+		]
+	}
+}
diff --git a/usr/share/alsa/cards/AU8810.conf b/usr/share/alsa/cards/AU8810.conf
new file mode 100644
index 0000000..24d46c3
--- /dev/null
+++ b/usr/share/alsa/cards/AU8810.conf
@@ -0,0 +1,38 @@
+#
+# Configuration for the AU8810 chip
+#
+
+<confdir:pcm/front.conf>
+
+AU8810.pcm.front.0 {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type hw
+	card $CARD
+}	
+
+<confdir:pcm/iec958.conf>
+
+AU8810.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 hw
+	card $CARD
+	device 1
+}
diff --git a/usr/share/alsa/cards/AU8820.conf b/usr/share/alsa/cards/AU8820.conf
new file mode 100644
index 0000000..0789025
--- /dev/null
+++ b/usr/share/alsa/cards/AU8820.conf
@@ -0,0 +1,14 @@
+#
+# Configuration for the AU8820 chip
+#
+
+<confdir:pcm/front.conf>
+
+AU8820.pcm.front.0 {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type hw
+	card $CARD
+}	
diff --git a/usr/share/alsa/cards/AU8830.conf b/usr/share/alsa/cards/AU8830.conf
new file mode 100644
index 0000000..39e66d5
--- /dev/null
+++ b/usr/share/alsa/cards/AU8830.conf
@@ -0,0 +1,42 @@
+#
+# Configuration for the AU8830 chip
+#
+
+<confdir:pcm/front.conf>
+
+AU8830.pcm.front.0 {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type hw
+	card $CARD
+}	
+
+<confdir:pcm/surround40.conf>
+
+AU8830.pcm.surround40.0 "cards.AU8830.pcm.front.0"
+
+<confdir:pcm/iec958.conf>
+
+AU8830.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 hw
+	card $CARD
+	device 1
+}
diff --git a/usr/share/alsa/cards/Audigy.conf b/usr/share/alsa/cards/Audigy.conf
new file mode 100644
index 0000000..ea1e53d
--- /dev/null
+++ b/usr/share/alsa/cards/Audigy.conf
@@ -0,0 +1,318 @@
+#
+# Configuration for the Audigy chip
+#
+
+<confdir:pcm/front.conf>
+
+Audigy.pcm.front.0 {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type hooks
+	slave.pcm {
+		type hw
+		card $CARD
+	}
+	hooks.0 {
+		type ctl_elems
+		hook_args [
+			{
+				interface PCM
+				name "EMU10K1 PCM Send Volume"
+				index { @func private_pcm_subdevice }
+				lock true
+				optional true
+				value [ 255 255 0 0 0 0 0 0  255 0 0 0 0 0 0 0  0 255 0 0 0 0 0 0 ]
+			}
+			{
+				# for compatibility with older drivers
+				name "EMU10K1 PCM Send Volume"
+				index { @func private_pcm_subdevice }
+				lock true
+				optional true
+				value [ 255 255 0 0 0 0 0 0  255 0 0 0 0 0 0 0  0 255 0 0 0 0 0 0 ]
+			}
+			{
+				interface PCM
+				name "EMU10K1 PCM Send Routing"
+				index { @func private_pcm_subdevice }
+				lock true
+				optional true
+				value [ 8 9 0 0 0 0 0 0  8 9 0 0 0 0 0 0  8 9 0 0 0 0 0 0 ]
+			}
+			{
+				# for compatibility with older drivers
+				name "EMU10K1 PCM Send Routing"
+				index { @func private_pcm_subdevice }
+				lock true
+				optional true
+				value [ 8 9 0 0 0 0 0 0  8 9 0 0 0 0 0 0  8 9 0 0 0 0 0 0 ]
+			}
+
+		]
+	}
+}	
+
+<confdir:pcm/rear.conf>
+
+Audigy.pcm.rear.0 {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type hooks
+	slave.pcm {
+		type hw
+		card $CARD
+	}
+	hooks.0 {
+		type ctl_elems
+		hook_args [
+			{
+				interface PCM
+				name "EMU10K1 PCM Send Volume"
+				index { @func private_pcm_subdevice }
+				lock true
+				optional true
+				value [ 0 0 255 255 0 0 0 0  0 0 255 0 0 0 0 0  0 0 0 255 0 0 0 0 ]
+			}
+			{
+				# for compatibility with older drivers
+				name "EMU10K1 PCM Send Volume"
+				index { @func private_pcm_subdevice }
+				lock true
+				optional true
+				value [ 0 0 255 255 0 0 0 0  0 0 255 0 0 0 0 0  0 0 0 255 0 0 0 0 ]
+			}
+		]
+	}
+}	
+
+<confdir:pcm/center_lfe.conf>
+
+Audigy.pcm.center_lfe.0 {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type hooks
+	slave.pcm {
+		type hw
+		card $CARD
+	}
+	hooks.0 {
+		type ctl_elems
+		hook_args [
+			{
+				interface PCM
+				name "EMU10K1 PCM Send Volume"
+				index { @func private_pcm_subdevice }
+				lock true
+				optional true
+				value [ 255 255 0 0 0 0 0 0  255 0 0 0 0 0 0 0  0 255 0 0 0 0 0 0 ]
+			}
+			{
+				# for compatibility with older drivers
+				name "EMU10K1 PCM Send Volume"
+				index { @func private_pcm_subdevice }
+				lock true
+				optional true
+				value [ 255 255 0 0 0 0 0 0  255 0 0 0 0 0 0 0  0 255 0 0 0 0 0 0 ]
+			}
+			{
+				interface PCM
+				name "EMU10K1 PCM Send Routing"
+				index { @func private_pcm_subdevice }
+				lock true
+				optional true
+				value [ 6 7 0 0 0 0 0 0  6 7 0 0 0 0 0 0  6 7 0 0 0 0 0 0 ]
+			}
+			{
+				# for compatibility with older drivers
+				name "EMU10K1 PCM Send Routing"
+				index { @func private_pcm_subdevice }
+				lock true
+				optional true
+				value [ 6 7 0 0 0 0 0 0  6 7 0 0 0 0 0 0  6 7 0 0 0 0 0 0 ]
+			}
+		]
+	}
+}	
+
+<confdir:pcm/surround40.conf>
+<confdir:pcm/surround41.conf>
+<confdir:pcm/surround50.conf>
+
+Audigy.pcm.surround40.0 {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type multi
+	slaves [
+		{
+			pcm {
+				@func concat
+				strings [
+					"cards.Audigy.pcm.front.0:CARD=" $CARD
+				]
+			}
+			channels 2
+		}
+		{
+			pcm {
+				@func concat
+				strings [
+					"cards.Audigy.pcm.rear.0:CARD=" $CARD
+				]
+			}
+			channels 2
+		}
+	]
+	bindings [
+		{ slave 0 channel 0 }
+		{ slave 0 channel 1 }
+		{ slave 1 channel 0 }
+		{ slave 1 channel 1 }
+	]
+}
+
+<confdir:pcm/surround51.conf>
+
+Audigy.pcm.surround51.0 {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type multi
+	slaves [
+		{
+			pcm {
+				@func concat
+				strings [
+					"cards.Audigy.pcm.front.0:CARD=" $CARD
+				]
+			}
+			channels 2
+		}
+		{
+			pcm {
+				@func concat
+				strings [
+					"cards.Audigy.pcm.rear.0:CARD=" $CARD
+				]
+			}
+			channels 2
+		}
+		{
+			pcm {
+				@func concat
+				strings [
+					"cards.Audigy.pcm.center_lfe.0:CARD=" $CARD
+				]
+			}
+			channels 2
+		}
+	]
+	bindings [
+		{ slave 0 channel 0 }
+		{ slave 0 channel 1 }
+		{ slave 1 channel 0 }
+		{ slave 1 channel 1 }
+		{ slave 2 channel 0 }
+		{ slave 2 channel 1 }
+	]
+}
+
+<confdir:pcm/iec958.conf>
+
+Audigy.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 [
+			{
+				interface PCM
+				name "IEC958 Playback Default"
+				lock true
+				preserve true
+				optional true
+				value [ $AES0 $AES1 $AES2 $AES3 ]
+			}
+			{
+				# for compatibility with older drivers
+				name "IEC958 Playback Default"
+				lock true
+				preserve true
+				optional true
+				value [ $AES0 $AES1 $AES2 $AES3 ]
+			}
+			{
+				name "IEC958 Optical Raw Playback Switch"
+				lock true
+				preserve true
+				value [ 1 1 ]
+			}
+			{
+				interface PCM
+				name "EMU10K1 PCM Send Volume"
+				index { @func private_pcm_subdevice }
+				lock true
+				optional true
+				value [ 255 255 0 0 0 0 0 0  255 0 0 0 0 0 0 0  0 255 0 0 0 0 0 0 ]
+			}
+			{
+				# for compatibility with older drivers
+				name "EMU10K1 PCM Send Volume"
+				index { @func private_pcm_subdevice }
+				lock true
+				optional true
+				value [ 255 255 0 0 0 0 0 0  255 0 0 0 0 0 0 0  0 255 0 0 0 0 0 0 ]
+			}
+			{
+				interface PCM
+				name "EMU10K1 PCM Send Routing"
+				index { @func private_pcm_subdevice }
+				lock true
+				optional true
+				value [ 20 21 0 0 0 0 0 0  20 21 0 0 0 0 0 0   20 21 0 0 0 0 0 0 ]
+			}
+			{
+				# for compatibility with older drivers
+				name "EMU10K1 PCM Send Routing"
+				index { @func private_pcm_subdevice }
+				lock true
+				optional true
+				value [ 20 21 0 0 0 0 0 0  20 21 0 0 0 0 0 0   20 21 0 0 0 0 0 0 ]
+			}
+			{
+				name "Audigy Analog/Digital Output Jack"
+				lock true
+				preserve true
+				value 1
+			}
+		]
+	}
+}
diff --git a/usr/share/alsa/cards/Audigy2.conf b/usr/share/alsa/cards/Audigy2.conf
new file mode 100644
index 0000000..0290f6f
--- /dev/null
+++ b/usr/share/alsa/cards/Audigy2.conf
@@ -0,0 +1,425 @@
+#
+# Configuration for the Audigy2 chip
+#
+
+<confdir:pcm/front.conf>
+
+Audigy2.pcm.front.0 {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type hooks
+	slave.pcm {
+		type hw
+		card $CARD
+	}
+	hooks.0 {
+		type ctl_elems
+		hook_args [
+			{
+				interface PCM
+				name "EMU10K1 PCM Send Volume"
+				index { @func private_pcm_subdevice }
+				lock true
+				optional true
+				value [ 255 255 0 0 0 0 0 0  255 0 0 0 0 0 0 0  0 255 0 0 0 0 0 0 ]
+			}
+			{
+				# for compatibility with older drivers
+				name "EMU10K1 PCM Send Volume"
+				index { @func private_pcm_subdevice }
+				lock true
+				optional true
+				value [ 255 255 0 0 0 0 0 0  255 0 0 0 0 0 0 0  0 255 0 0 0 0 0 0 ]
+			}
+			{
+				interface PCM
+				name "EMU10K1 PCM Send Routing"
+				index { @func private_pcm_subdevice }
+				lock true
+				optional true
+				value [ 8 9 0 0 0 0 0 0  8 9 0 0 0 0 0 0  8 9 0 0 0 0 0 0 ]
+			}
+			{
+				# for compatibility with older drivers
+				name "EMU10K1 PCM Send Routing"
+				index { @func private_pcm_subdevice }
+				lock true
+				optional true
+				value [ 8 9 0 0 0 0 0 0  8 9 0 0 0 0 0 0  8 9 0 0 0 0 0 0 ]
+			}
+
+		]
+	}
+}	
+
+<confdir:pcm/rear.conf>
+
+Audigy2.pcm.rear.0 {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type hooks
+	slave.pcm {
+		type hw
+		card $CARD
+	}
+	hooks.0 {
+		type ctl_elems
+		hook_args [
+			{
+				interface PCM
+				name "EMU10K1 PCM Send Volume"
+				index { @func private_pcm_subdevice }
+				lock true
+				optional true
+				value [ 0 0 255 255 0 0 0 0  0 0 255 0 0 0 0 0  0 0 0 255 0 0 0 0 ]
+			}
+			{
+				# for compatibility with older drivers
+				name "EMU10K1 PCM Send Volume"
+				index { @func private_pcm_subdevice }
+				lock true
+				optional true
+				value [ 0 0 255 255 0 0 0 0  0 0 255 0 0 0 0 0  0 0 0 255 0 0 0 0 ]
+			}
+		]
+	}
+}	
+
+<confdir:pcm/center_lfe.conf>
+
+Audigy2.pcm.center_lfe.0 {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type hooks
+	slave.pcm {
+		type hw
+		card $CARD
+	}
+	hooks.0 {
+		type ctl_elems
+		hook_args [
+			{
+				interface PCM
+				name "EMU10K1 PCM Send Volume"
+				index { @func private_pcm_subdevice }
+				lock true
+				optional true
+				value [ 255 255 0 0 0 0 0 0  255 0 0 0 0 0 0 0  0 255 0 0 0 0 0 0 ]
+			}
+			{
+				# for compatibility with older drivers
+				name "EMU10K1 PCM Send Volume"
+				index { @func private_pcm_subdevice }
+				lock true
+				optional true
+				value [ 255 255 0 0 0 0 0 0  255 0 0 0 0 0 0 0  0 255 0 0 0 0 0 0 ]
+			}
+			{
+				interface PCM
+				name "EMU10K1 PCM Send Routing"
+				index { @func private_pcm_subdevice }
+				lock true
+				optional true
+				value [ 6 7 0 0 0 0 0 0  6 7 0 0 0 0 0 0  6 7 0 0 0 0 0 0 ]
+			}
+			{
+				# for compatibility with older drivers
+				name "EMU10K1 PCM Send Routing"
+				index { @func private_pcm_subdevice }
+				lock true
+				optional true
+				value [ 6 7 0 0 0 0 0 0  6 7 0 0 0 0 0 0  6 7 0 0 0 0 0 0 ]
+			}
+		]
+	}
+}
+
+<confdir:pcm/side.conf>
+
+Audigy2.pcm.side.0 {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type hooks
+	slave.pcm {
+		type hw
+		card $CARD
+	}
+	hooks.0 {
+		type ctl_elems
+		hook_args [
+			{
+				interface PCM
+				name "EMU10K1 PCM Send Volume"
+				index { @func private_pcm_subdevice }
+				lock true
+				optional true
+				value [ 255 255 0 0 0 0 0 0  255 0 0 0 0 0 0 0  0 255 0 0 0 0 0 0 ]
+			}
+			{
+				# for compatibility with older drivers
+				name "EMU10K1 PCM Send Volume"
+				index { @func private_pcm_subdevice }
+				lock true
+				optional true
+				value [ 255 255 0 0 0 0 0 0  255 0 0 0 0 0 0 0  0 255 0 0 0 0 0 0 ]
+			}
+			{
+				interface PCM
+				name "EMU10K1 PCM Send Routing"
+				index { @func private_pcm_subdevice }
+				lock true
+				optional true
+				value [ 14 15 0 0 0 0 0 0  14 15 0 0 0 0 0 0  14 15 0 0 0 0 0 0 ]
+			}
+			{
+				# for compatibility with older drivers
+				name "EMU10K1 PCM Send Routing"
+				index { @func private_pcm_subdevice }
+				lock true
+				optional true
+				value [ 14 15 0 0 0 0 0 0  14 15 0 0 0 0 0 0  14 15 0 0 0 0 0 0 ]
+			}
+		]
+	}
+}
+
+<confdir:pcm/surround40.conf>
+<confdir:pcm/surround41.conf>
+<confdir:pcm/surround50.conf>
+
+Audigy2.pcm.surround40.0 {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type multi
+	slaves [
+		{
+			pcm {
+				@func concat
+				strings [
+					"cards.Audigy2.pcm.front.0:CARD=" $CARD
+				]
+			}
+			channels 2
+		}
+		{
+			pcm {
+				@func concat
+				strings [
+					"cards.Audigy2.pcm.rear.0:CARD=" $CARD
+				]
+			}
+			channels 2
+		}
+	]
+	bindings [
+		{ slave 0 channel 0 }
+		{ slave 0 channel 1 }
+		{ slave 1 channel 0 }
+		{ slave 1 channel 1 }
+	]
+}
+
+<confdir:pcm/surround51.conf>
+
+Audigy2.pcm.surround51.0 {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type multi
+	slaves [
+		{
+			pcm {
+				@func concat
+				strings [
+					"cards.Audigy2.pcm.front.0:CARD=" $CARD
+				]
+			}
+			channels 2
+		}
+		{
+			pcm {
+				@func concat
+				strings [
+					"cards.Audigy2.pcm.rear.0:CARD=" $CARD
+				]
+			}
+			channels 2
+		}
+		{
+			pcm {
+				@func concat
+				strings [
+					"cards.Audigy2.pcm.center_lfe.0:CARD=" $CARD
+				]
+			}
+			channels 2
+		}
+	]
+	bindings [
+		{ slave 0 channel 0 }
+		{ slave 0 channel 1 }
+		{ slave 1 channel 0 }
+		{ slave 1 channel 1 }
+		{ slave 2 channel 0 }
+		{ slave 2 channel 1 }
+	]
+}
+
+<confdir:pcm/surround71.conf>
+
+Audigy2.pcm.surround71.0 {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type multi
+	slaves [
+		{
+			pcm {
+				@func concat
+				strings [
+					"cards.Audigy2.pcm.front.0:CARD=" $CARD
+				]
+			}
+			channels 2
+		}
+		{
+			pcm {
+				@func concat
+				strings [
+					"cards.Audigy2.pcm.rear.0:CARD=" $CARD
+				]
+			}
+			channels 2
+		}
+		{
+			pcm {
+				@func concat
+				strings [
+					"cards.Audigy2.pcm.center_lfe.0:CARD=" $CARD
+				]
+			}
+			channels 2
+		}
+		{
+			pcm {
+				@func concat
+				strings [
+					"cards.Audigy2.pcm.side.0:CARD=" $CARD
+				]
+			}
+			channels 2
+		}
+	]
+	bindings [
+		{ slave 0 channel 0 }
+		{ slave 0 channel 1 }
+		{ slave 1 channel 0 }
+		{ slave 1 channel 1 }
+		{ slave 2 channel 0 }
+		{ slave 2 channel 1 }
+		{ slave 3 channel 0 }
+		{ slave 3 channel 1 }
+	]
+}
+
+<confdir:pcm/iec958.conf>
+
+Audigy2.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 [
+			{
+				interface PCM
+				name "IEC958 Playback Default"
+				preserve true
+				optional true
+				value [ $AES0 $AES1 $AES2 $AES3 ]
+			}
+			{
+				# for compatibility with older drivers
+				name "IEC958 Playback Default"
+				preserve true
+				optional true
+				value [ $AES0 $AES1 $AES2 $AES3 ]
+			}
+			{
+				name "IEC958 Optical Raw Playback Switch"
+				lock true
+				preserve true
+				value [ 1 1 ]
+			}
+			{
+				interface PCM
+				name "EMU10K1 PCM Send Volume"
+				index { @func private_pcm_subdevice }
+				lock true
+				optional true
+				value [ 255 255 0 0 0 0 0 0  255 0 0 0 0 0 0 0  0 255 0 0 0 0 0 0 ]
+			}
+			{
+				# for compatibility with older drivers
+				name "EMU10K1 PCM Send Volume"
+				index { @func private_pcm_subdevice }
+				lock true
+				optional true
+				value [ 255 255 0 0 0 0 0 0  255 0 0 0 0 0 0 0  0 255 0 0 0 0 0 0 ]
+			}
+			{
+				interface PCM
+				name "EMU10K1 PCM Send Routing"
+				index { @func private_pcm_subdevice }
+				lock true
+				optional true
+				value [ 20 21 0 0 0 0 0 0  20 21 0 0 0 0 0 0   20 21 0 0 0 0 0 0 ]
+			}
+			{
+				# for compatibility with older drivers
+				name "EMU10K1 PCM Send Routing"
+				index { @func private_pcm_subdevice }
+				lock true
+				optional true
+				value [ 20 21 0 0 0 0 0 0  20 21 0 0 0 0 0 0   20 21 0 0 0 0 0 0 ]
+			}
+			{
+				name "Audigy Analog/Digital Output Jack"
+				lock true
+				preserve true
+				value 1
+			}
+		]
+	}
+}
diff --git a/usr/share/alsa/cards/Aureon51.conf b/usr/share/alsa/cards/Aureon51.conf
new file mode 100644
index 0000000..24b4d94
--- /dev/null
+++ b/usr/share/alsa/cards/Aureon51.conf
@@ -0,0 +1,179 @@
+#
+# Configuration for the Aureon51 (Envy24HT) chip
+#
+
+# default with dmix & dsnoop
+Aureon51.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>
+
+Aureon51.pcm.front.0 {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type hw
+	card $CARD
+}	
+
+<confdir:pcm/rear.conf>
+
+Aureon51.pcm.rear.0 {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type hw
+	card $CARD
+	device 2
+	subdevice 1
+}	
+
+<confdir:pcm/center_lfe.conf>
+
+Aureon51.pcm.center_lfe.0 {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type hw
+	card $CARD
+	device 2
+}	
+
+<confdir:pcm/side.conf>
+
+Aureon51.pcm.side.0 {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type hw
+	card $CARD
+	device 2
+	subdevice 2
+}
+
+<confdir:pcm/surround40.conf>
+
+Aureon51.pcm.surround40.0 {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type hw
+	card $CARD
+	channels 4
+}	
+
+<confdir:pcm/surround41.conf>
+<confdir:pcm/surround50.conf>
+<confdir:pcm/surround51.conf>
+
+Aureon51.pcm.surround51.0 {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type hw
+	card $CARD
+	channels 6
+}
+
+<confdir:pcm/iec958.conf>
+
+Aureon51.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
+	}
+}
diff --git a/usr/share/alsa/cards/Aureon71.conf b/usr/share/alsa/cards/Aureon71.conf
new file mode 100644
index 0000000..1479c25
--- /dev/null
+++ b/usr/share/alsa/cards/Aureon71.conf
@@ -0,0 +1,190 @@
+#
+# 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/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
+	}
+}
diff --git a/usr/share/alsa/cards/CA0106.conf b/usr/share/alsa/cards/CA0106.conf
new file mode 100644
index 0000000..9d21770
--- /dev/null
+++ b/usr/share/alsa/cards/CA0106.conf
@@ -0,0 +1,280 @@
+#
+# Configuration for the CA0106 chip
+#
+
+# default with dmix & dsnoop
+CA0106.pcm.default {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type asym
+	playback.pcm {
+		type plug
+		slave.pcm {
+			@func concat
+			strings [ "dmix:" $CARD ]
+		}
+	}
+	capture.pcm {
+		type plug
+		slave.pcm {
+			@func concat
+			strings [ "dsnoop:" $CARD ]
+		}
+	}
+}
+
+<confdir:pcm/front.conf>
+
+CA0106.pcm.front.0 {
+	@args [ CARD  ]
+	@args.CARD {
+		type string
+	}
+	type hw
+	card $CARD
+}	
+
+<confdir:pcm/rear.conf>
+
+CA0106.pcm.rear.0 {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type hw
+	card $CARD
+	device 1
+}	
+
+<confdir:pcm/center_lfe.conf>
+
+CA0106.pcm.center_lfe.0 {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type hw
+	card $CARD
+	device 2
+}	
+
+<confdir:pcm/side.conf>
+
+CA0106.pcm.side.0 {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type hw
+	card $CARD
+	device 3
+}	
+
+<confdir:pcm/surround40.conf>
+
+CA0106.pcm.surround40.0 {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type multi
+	slaves [
+		{
+			pcm {
+				@func concat
+				strings [
+					"cards.CA0106.pcm.front.0:CARD=" $CARD
+				]
+			}
+			channels 2
+		}
+		{
+			pcm {
+				@func concat
+				strings [
+					"cards.CA0106.pcm.rear.0:CARD=" $CARD
+				]
+			}
+			channels 2
+		}
+	]
+	bindings [
+		{ slave 0 channel 0 }
+		{ slave 0 channel 1 }
+		{ slave 1 channel 0 }
+		{ slave 1 channel 1 }
+	]
+}
+
+<confdir:pcm/surround41.conf>
+<confdir:pcm/surround50.conf>
+<confdir:pcm/surround51.conf>
+<confdir:pcm/surround71.conf>
+
+CA0106.pcm.surround51.0 {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type multi
+	slaves [
+		{
+			pcm {
+				@func concat
+				strings [
+					"cards.CA0106.pcm.front.0:CARD=" $CARD
+				]
+			}
+			channels 2
+		}
+		{
+			pcm {
+				@func concat
+				strings [
+					"cards.CA0106.pcm.rear.0:CARD=" $CARD
+				]
+			}
+			channels 2
+		}
+		{
+			pcm {
+				@func concat
+				strings [
+					"cards.CA0106.pcm.center_lfe.0:CARD=" $CARD
+				]
+			}
+			channels 2
+		}
+	]
+	bindings [
+		{ slave 0 channel 0 }
+		{ slave 0 channel 1 }
+		{ slave 1 channel 0 }
+		{ slave 1 channel 1 }
+		{ slave 2 channel 0 }
+		{ slave 2 channel 1 }
+	]
+}
+
+CA0106.pcm.surround71.0 {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type multi
+	slaves [
+		{
+			pcm {
+				@func concat
+				strings [
+					"cards.CA0106.pcm.front.0:CARD=" $CARD
+				]
+			}
+			channels 2
+		}
+		{
+			pcm {
+				@func concat
+				strings [
+					"cards.CA0106.pcm.rear.0:CARD=" $CARD
+				]
+			}
+			channels 2
+		}
+		{
+			pcm {
+				@func concat
+				strings [
+					"cards.CA0106.pcm.center_lfe.0:CARD=" $CARD
+				]
+			}
+			channels 2
+		}
+		{
+			pcm {
+				@func concat
+				strings [
+					"cards.CA0106.pcm.side.0:CARD=" $CARD
+				]
+			}
+			channels 2
+		}
+	]
+	bindings [
+		{ slave 0 channel 0 }
+		{ slave 0 channel 1 }
+		{ slave 1 channel 0 }
+		{ slave 1 channel 1 }
+		{ slave 2 channel 0 }
+		{ slave 2 channel 1 }
+		{ slave 3 channel 0 }
+		{ slave 3 channel 1 }
+	]
+}
+
+
+
+
+<confdir:pcm/iec958.conf>
+
+CA0106.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 Front Playback Volume"
+				index 0
+				lock true
+				preserve true
+				value [ 207 207 ]   # Puts 0x30303030 in the Volume register. 0xff - 0x30 = 0xcf = 207
+			}
+			{
+				name "IEC958 Playback Switch"
+				lock true
+				preserve true
+				value 1
+			}
+			{
+				interface PCM
+				name "IEC958 Playback Default"
+				index 1
+				lock true
+				preserve true
+				optional true
+				value [ $AES0 $AES1 $AES2 $AES3 ]
+			}
+			{
+				# for compatibility with older drivers
+				name "IEC958 Playback Default"
+				index 1
+				lock true
+				preserve true
+				optional true
+				value [ $AES0 $AES1 $AES2 $AES3 ]
+			}
+		]
+	}
+}
diff --git a/usr/share/alsa/cards/CMI8338-SWIEC.conf b/usr/share/alsa/cards/CMI8338-SWIEC.conf
new file mode 100644
index 0000000..af3a579
--- /dev/null
+++ b/usr/share/alsa/cards/CMI8338-SWIEC.conf
@@ -0,0 +1,129 @@
+#
+# Configuration for the CMI8338/8738 chip (w/o multi-channel support)
+# using software IEC958 subframe conversion
+#
+
+<confdir:pcm/front.conf>
+
+CMI8338-SWIEC.pcm.front.0 {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type hw
+	card $CARD
+}	
+
+# default with dmix/dsnoop
+CMI8338-SWIEC.pcm.default {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type asym
+	playback.pcm {
+		type plug
+		slave.pcm {
+			@func concat
+			strings [ "dmix:" $CARD ]
+		}
+	}
+	capture.pcm {
+		type plug
+		slave.pcm {
+			@func concat
+			strings [ "dsnoop:" $CARD ]
+		}
+	}
+}
+
+<confdir:pcm/rear.conf>
+
+# 2nd DAC
+# FIXME: we need a volume attenuator for rear channel.
+CMI8338-SWIEC.pcm.rear.0 {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type hw
+	card $CARD
+	device 1
+}
+
+<confdir:pcm/surround40.conf>
+
+# for the old CM8738 with 2nd DAC for rear
+CMI8338-SWIEC.pcm.surround40.0 {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type multi
+	master 1
+	slaves [
+		{
+			pcm {
+				@func concat
+				strings [
+					"cards.CMI8338-SWIEC.pcm.front.0:CARD=" $CARD
+				]
+			}
+			channels 2
+		}
+		{
+			pcm {
+				@func concat
+				strings [
+					"cards.CMI8338-SWIEC.pcm.rear.0:CARD=" $CARD
+				]
+			}
+			channels 2
+		}
+	]
+	bindings [
+		{ slave 0 channel 0 }
+		{ slave 0 channel 1 }
+		{ slave 1 channel 0 }
+		{ slave 1 channel 1 }
+	]
+}
+
+<confdir:pcm/iec958.conf>
+
+CMI8338-SWIEC.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 iec958
+		slave.pcm {
+			type hw
+			card $CARD
+			device 2
+		}
+		status [ $AES0 $AES1 $AES2 $AES3 ]
+		preamble.z 3
+		preamble.y 5
+		preamble.x 9
+	}
+	capture.pcm {
+		type hw
+		card $CARD
+		device 2
+	}
+}
diff --git a/usr/share/alsa/cards/CMI8338.conf b/usr/share/alsa/cards/CMI8338.conf
new file mode 100644
index 0000000..144fc9b
--- /dev/null
+++ b/usr/share/alsa/cards/CMI8338.conf
@@ -0,0 +1,143 @@
+#
+# Configuration for the CMI8338/8738 chip (w/o multi-channel support)
+#
+
+<confdir:pcm/front.conf>
+
+CMI8338.pcm.front.0 {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type hw
+	card $CARD
+}	
+
+# default with dmix/dsnoop
+CMI8338.pcm.default {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type asym
+	playback.pcm {
+		type plug
+		slave.pcm {
+			@func concat
+			strings [ "dmix:" $CARD ]
+		}
+	}
+	capture.pcm {
+		type plug
+		slave.pcm {
+			@func concat
+			strings [ "dsnoop:" $CARD ]
+		}
+	}
+}
+
+<confdir:pcm/rear.conf>
+
+# 2nd DAC
+# FIXME: we need a volume attenuator for rear channel.
+CMI8338.pcm.rear.0 {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type hw
+	card $CARD
+	device 1
+}
+
+<confdir:pcm/surround40.conf>
+
+# for the old CM8738 with 2nd DAC for rear
+CMI8338.pcm.surround40.0 {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type multi
+	master 1
+	slaves [
+		{
+			pcm {
+				@func concat
+				strings [
+					"cards.CMI8338.pcm.front.0:CARD=" $CARD
+				]
+			}
+			channels 2
+		}
+		{
+			pcm {
+				@func concat
+				strings [
+					"cards.CMI8338.pcm.rear.0:CARD=" $CARD
+				]
+			}
+			channels 2
+		}
+	]
+	bindings [
+		{ slave 0 channel 0 }
+		{ slave 0 channel 1 }
+		{ slave 1 channel 0 }
+		{ slave 1 channel 1 }
+	]
+}
+
+<confdir:pcm/iec958.conf>
+
+CMI8338.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 hooks
+		slave.pcm {
+			type hw
+			card $CARD
+			device 2
+		}
+		hooks.0 {
+			type ctl_elems
+			hook_args [
+				{
+					interface PCM
+					name "IEC958 Playback PCM Stream"
+					device 2
+					lock true
+					preserve true
+					value [ $AES0 $AES1 $AES2 $AES3 ]
+				}
+				{
+					name "IEC958 Loop"
+					lock true
+					preserve true
+					value off
+				}
+			]
+		}
+	}
+	capture.pcm {
+		type hw
+		card $CARD
+		device 2
+	}
+}
diff --git a/usr/share/alsa/cards/CMI8738-MC6.conf b/usr/share/alsa/cards/CMI8738-MC6.conf
new file mode 100644
index 0000000..171c772
--- /dev/null
+++ b/usr/share/alsa/cards/CMI8738-MC6.conf
@@ -0,0 +1,161 @@
+#
+# Configuration for the CMI8738 chip with 4/6 multi-channel support
+#
+
+<confdir:pcm/front.conf>
+
+CMI8738-MC6.pcm.front.0 {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type hw
+	card $CARD
+}	
+
+# default with dmix/dsnoop
+CMI8738-MC6.pcm.default {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type asym
+	playback.pcm {
+		type plug
+		slave.pcm {
+			@func concat
+			strings [ "dmix:" $CARD ]
+		}
+	}
+	capture.pcm {
+		type plug
+		slave.pcm {
+			@func concat
+			strings [ "dsnoop:" $CARD ]
+		}
+	}
+}
+
+<confdir:pcm/rear.conf>
+
+# 2nd DAC
+# FIXME: we need a volume attenuator for rear channel.
+CMI8738-MC6.pcm.rear.0 {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type hw
+	card $CARD
+	device 1
+}
+
+<confdir:pcm/surround40.conf>
+
+CMI8738-MC6.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 "Four Channel Mode"
+				lock true
+				preserve true
+				value false
+			}
+		]
+	}
+}	
+
+<confdir:pcm/surround41.conf>
+<confdir:pcm/surround50.conf>
+<confdir:pcm/surround51.conf>
+
+CMI8738-MC6.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 "Four Channel Mode"
+				lock true
+				preserve true
+				value false
+			}
+		]
+	}
+}	
+
+<confdir:pcm/iec958.conf>
+
+CMI8738-MC6.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 hooks
+		slave.pcm {
+			type hw
+			card $CARD
+			device 2
+		}
+		hooks.0 {
+			type ctl_elems
+			hook_args [
+				{
+					interface PCM
+					name "IEC958 Playback PCM Stream"
+					device 2
+					lock true
+					preserve true
+					value [ $AES0 $AES1 $AES2 $AES3 ]
+				}
+				{
+					name "IEC958 Loop"
+					lock true
+					preserve true
+					value off
+				}
+			]
+		}
+	}
+	capture.pcm {
+		type hw
+		card $CARD
+		device 2
+	}
+}
diff --git a/usr/share/alsa/cards/CMI8738-MC8.conf b/usr/share/alsa/cards/CMI8738-MC8.conf
new file mode 100644
index 0000000..a5bf6cb
--- /dev/null
+++ b/usr/share/alsa/cards/CMI8738-MC8.conf
@@ -0,0 +1,230 @@
+#
+# Configuration for the CMI8768 chip with 8 multi-channel support
+#
+
+<confdir:pcm/front.conf>
+
+CMI8738-MC8.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
+CMI8738-MC8.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/rear.conf>
+
+# 2nd DAC
+CMI8738-MC8.pcm.rear.0 {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type softvol
+	slave.pcm {
+		type hw
+		card $CARD
+		device 1
+	}
+	control {
+		name "PCM Playback Volume"
+		card $CARD
+	}
+}
+
+<confdir:pcm/surround40.conf>
+
+CMI8738-MC8.pcm.surround40.0 {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type softvol
+	slave.pcm {
+		type hooks
+		slave.pcm {
+			type hw
+			card $CARD
+			device 1
+			channels 4
+		}
+		hooks.0 {
+			type ctl_elems
+			hook_args [
+			{
+				name "Four Channel Mode"
+				lock true
+				preserve true
+				value false
+			}
+			]
+		}
+	}
+	control {
+		name "PCM Playback Volume"
+		card $CARD
+	}
+}	
+
+
+<confdir:pcm/surround41.conf>
+<confdir:pcm/surround50.conf>
+<confdir:pcm/surround51.conf>
+
+CMI8738-MC8.pcm.surround51.0 {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type softvol
+	slave.pcm {
+		type hooks
+		slave.pcm {
+			type hw
+			card $CARD
+			device 1
+			channels 6
+		}
+		hooks.0 {
+			type ctl_elems
+			hook_args [
+			{
+				name "Four Channel Mode"
+				lock true
+				preserve true
+				value false
+			}
+			]
+		}
+	}
+	control {
+		name "PCM Playback Volume"
+		card $CARD
+	}
+}	
+
+<confdir:pcm/surround71.conf>
+
+CMI8738-MC8.pcm.surround71.0 {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type softvol
+	slave.pcm {
+		type hooks
+		slave.pcm {
+			type hw
+			card $CARD
+			device 1
+			channels 8
+		}
+		hooks.0 {
+			type ctl_elems
+			hook_args [
+			{
+				name "Four Channel Mode"
+				lock true
+				preserve true
+				value false
+			}
+			]
+		}
+	}
+	control {
+		name "PCM Playback Volume"
+		card $CARD
+	}
+}	
+
+<confdir:pcm/iec958.conf>
+
+CMI8738-MC8.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 hooks
+		slave.pcm {
+			type hw
+			card $CARD
+			device 2
+		}
+		hooks.0 {
+			type ctl_elems
+			hook_args [
+				{
+					interface PCM
+					name "IEC958 Playback PCM Stream"
+					device 2
+					lock true
+					preserve true
+					value [ $AES0 $AES1 $AES2 $AES3 ]
+				}
+				{
+					name "IEC958 Loop"
+					lock true
+					preserve true
+					value off
+				}
+			]
+		}
+	}
+	capture.pcm {
+		type hw
+		card $CARD
+		device 2
+	}
+}
diff --git a/usr/share/alsa/cards/CMI8788.conf b/usr/share/alsa/cards/CMI8788.conf
new file mode 100644
index 0000000..0ca71e9
--- /dev/null
+++ b/usr/share/alsa/cards/CMI8788.conf
@@ -0,0 +1,126 @@
+#
+# Configuration for the CMI8788 chip
+#
+
+<confdir:pcm/front.conf>
+
+CMI8788.pcm.front.0 {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type hw
+	card $CARD
+}	
+
+# default with dmix & dsnoop
+CMI8788.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/surround40.conf>
+
+CMI8788.pcm.surround40.0 {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type hw
+	card $CARD
+	channels 4
+}	
+
+
+<confdir:pcm/surround41.conf>
+<confdir:pcm/surround50.conf>
+<confdir:pcm/surround51.conf>
+
+CMI8788.pcm.surround51.0 {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type hw
+	card $CARD
+	channels 6
+}	
+
+<confdir:pcm/surround71.conf>
+
+CMI8788.pcm.surround71.0 {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type hw
+	card $CARD
+	channels 8
+}	
+
+<confdir:pcm/iec958.conf>
+
+CMI8788.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 hooks
+		slave.pcm {
+			type hw
+			card $CARD
+			device 1
+		}
+		hooks.0 {
+			type ctl_elems
+			hook_args [
+				{
+					interface PCM
+					device 1
+					name "IEC958 Playback PCM Stream"
+					lock true
+					preserve true
+					value [ $AES0 $AES1 $AES2 $AES3 ]
+				}
+			]
+		}
+	}
+	capture.pcm {
+		type hw
+		card $CARD
+		device 1
+	}
+}
+
+# vim: ft=alsaconf
diff --git a/usr/share/alsa/cards/CS46xx.conf b/usr/share/alsa/cards/CS46xx.conf
new file mode 100644
index 0000000..1983142
--- /dev/null
+++ b/usr/share/alsa/cards/CS46xx.conf
@@ -0,0 +1,218 @@
+#
+# Configuration for the CS46xx chip
+#
+
+<confdir:pcm/front.conf>
+
+CS46xx.pcm.front.0 {
+	@args [ CARD  ]
+	@args.CARD {
+		type string
+	}
+	type hw
+	card $CARD
+}	
+
+# default with plughw
+# CS46xx supports multi-playback
+CS46xx.pcm.default {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type asym
+	playback.pcm {
+		type plug
+		slave.pcm {
+			@func concat
+			strings [ "hw:" $CARD ]
+		}
+	}
+	capture.pcm {
+		type plug
+		slave.pcm {
+			@func concat
+			strings [ "hw:" $CARD ]
+		}
+	}
+}
+
+<confdir:pcm/rear.conf>
+
+CS46xx.pcm.rear.0 {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type hooks
+	slave.pcm {
+		type hw
+		card $CARD
+		device 1
+	}
+	hooks.0 {
+		type ctl_elems
+		hook_args [
+			{
+				name "Duplicate Front"
+				lock true
+				preserve true
+				value 0
+				optional true
+			}
+		]
+	}
+}	
+
+<confdir:pcm/center_lfe.conf>
+
+CS46xx.pcm.center_lfe.0 {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type hw
+	card $CARD
+	device 3
+}	
+
+<confdir:pcm/surround40.conf>
+
+CS46xx.pcm.surround40.0 {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type multi
+	slaves [
+		{
+			pcm {
+				@func concat
+				strings [
+					"cards.CS46xx.pcm.front.0:CARD=" $CARD
+				]
+			}
+			channels 2
+		}
+		{
+			pcm {
+				@func concat
+				strings [
+					"cards.CS46xx.pcm.rear.0:CARD=" $CARD
+				]
+			}
+			channels 2
+		}
+	]
+	bindings [
+		{ slave 0 channel 0 }
+		{ slave 0 channel 1 }
+		{ slave 1 channel 0 }
+		{ slave 1 channel 1 }
+	]
+}
+
+<confdir:pcm/surround41.conf>
+<confdir:pcm/surround50.conf>
+<confdir:pcm/surround51.conf>
+
+CS46xx.pcm.surround51.0 {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type multi
+	slaves [
+		{
+			pcm {
+				@func concat
+				strings [
+					"cards.CS46xx.pcm.front.0:CARD=" $CARD
+				]
+			}
+			channels 2
+		}
+		{
+			pcm {
+				@func concat
+				strings [
+					"cards.CS46xx.pcm.rear.0:CARD=" $CARD
+				]
+			}
+			channels 2
+		}
+		{
+			pcm {
+				@func concat
+				strings [
+					"cards.CS46xx.pcm.center_lfe.0:CARD=" $CARD
+				]
+			}
+			channels 2
+		}
+	]
+	bindings [
+		{ slave 0 channel 0 }
+		{ slave 0 channel 1 }
+		{ slave 1 channel 0 }
+		{ slave 1 channel 1 }
+		{ slave 2 channel 0 }
+		{ slave 2 channel 1 }
+	]
+}
+
+<confdir:pcm/iec958.conf>
+
+CS46xx.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 Output Switch"
+				lock true
+				preserve true
+				value 1
+			}
+			{
+				interface PCM
+				name "IEC958 Playback PCM Stream"
+				device 2
+				lock true
+				preserve true
+				optional true
+				value [ $AES0 $AES1 $AES2 $AES3 ]
+			}
+			{
+				# for compatibility with older drivers
+				interface PCM
+				name "IEC958 Playback PCM Stream"
+				lock true
+				preserve true
+				optional true
+				value [ $AES0 $AES1 $AES2 $AES3 ]
+			}
+		]
+	}
+}
diff --git a/usr/share/alsa/cards/EMU10K1.conf b/usr/share/alsa/cards/EMU10K1.conf
new file mode 100644
index 0000000..706da0a
--- /dev/null
+++ b/usr/share/alsa/cards/EMU10K1.conf
@@ -0,0 +1,325 @@
+#
+# Configuration for the EMU10K1 chip
+#
+
+<confdir:pcm/front.conf>
+
+EMU10K1.pcm.front.0 {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type asym
+	playback.pcm {
+		type hooks
+		slave.pcm {
+			type hw
+			card $CARD
+		}
+		hooks.0 {
+			type ctl_elems
+			hook_args [
+				{
+					interface PCM
+					name "EMU10K1 PCM Send Volume"
+					index { @func private_pcm_subdevice }
+					# lock true
+					optional true
+					value [ 255 255 0 0 255 0 0 0 0 255 0 0 ]
+				}
+				{
+					# for compatibility with older drivers
+					name "EMU10K1 PCM Send Volume"
+					index { @func private_pcm_subdevice }
+					# lock true
+					optional true
+					value [ 255 255 0 0 255 0 0 0 0 255 0 0 ]
+				}
+				{
+					interface PCM
+					name "EMU10K1 PCM Send Routing"
+					index { @func private_pcm_subdevice }
+					# lock true
+					optional true
+					value [ 8 9 0 0 8 9 0 0 8 9 0 0 ]
+				}
+				{
+					# for compatibility with older drivers
+					name "EMU10K1 PCM Send Routing"
+					index { @func private_pcm_subdevice }
+					# lock true
+					optional true
+					value [ 8 9 0 0 8 9 0 0 8 9 0 0 ]
+				}
+			]
+		}
+	}
+	capture.pcm {
+		type hw
+		card $CARD
+	}
+}	
+
+<confdir:pcm/rear.conf>
+
+EMU10K1.pcm.rear.0 {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type asym
+	playback.pcm {
+		type hooks
+		slave.pcm {
+			type hw
+			card $CARD
+		}
+		hooks.0 {
+			type ctl_elems
+			hook_args [
+				{
+					interface PCM
+					name "EMU10K1 PCM Send Volume"
+					index { @func private_pcm_subdevice }
+					# lock true
+					optional true
+					value [ 0 0 255 255 0 0 255 0 0 0 0 255 ]
+				}
+				{
+					# for compatibility with older drivers
+					name "EMU10K1 PCM Send Volume"
+					index { @func private_pcm_subdevice }
+					# lock true
+					optional true
+					value [ 0 0 255 255 0 0 255 0 0 0 0 255 ]
+				}
+			]
+		}
+	}
+}	
+
+<confdir:pcm/center_lfe.conf>
+
+EMU10K1.pcm.center_lfe.0 {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type asym
+	playback.pcm {
+		type hooks
+		slave.pcm {
+			type hw
+			card $CARD
+		}
+		hooks.0 {
+			type ctl_elems
+			hook_args [
+				{
+					name "Headphone Center Playback Switch"
+					index 1
+					preserve true
+					# lock true
+					optional true
+					value true
+				}
+				{
+					name "Headphone LFE Playback Switch"
+					index 1
+					preserve true
+					# lock true
+					optional true
+					value true
+				}
+# if you have a creative's digital receiver, you can get surround/center/lfe
+# output through the digital jack.  so, the following is commented out.
+# pay attention in case of analog output from the shared center/digital
+# jack!
+#				{
+#					name "SB Live Analog/Digital Output Jack"
+#					preserve true
+#					lock true
+#					value 0
+#				}
+				{
+					interface PCM
+					name "EMU10K1 PCM Send Volume"
+					index { @func private_pcm_subdevice }
+					# lock true
+					optional true
+					value [ 255 255 0 0 255 0 0 0 0 255 0 0 ]
+				}
+				{
+					# for compatibility with older drivers
+					name "EMU10K1 PCM Send Volume"
+					index { @func private_pcm_subdevice }
+					# lock true
+					optional true
+					value [ 255 255 0 0 255 0 0 0 0 255 0 0 ]
+				}
+				{
+					interface PCM
+					name "EMU10K1 PCM Send Routing"
+					index { @func private_pcm_subdevice }
+					# lock true
+					optional true
+					value [ 6 7 0 0 6 7 0 0 6 7 0 0 ]
+				}
+				{
+					# for compatibility with older drivers
+					name "EMU10K1 PCM Send Routing"
+					index { @func private_pcm_subdevice }
+					# lock true
+					optional true
+					value [ 6 7 0 0 6 7 0 0 6 7 0 0 ]
+				}
+			]
+		}
+	}
+}	
+
+<confdir:pcm/surround40.conf>
+
+EMU10K1.pcm.surround40.0 {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type multi
+	slaves [
+		{
+			pcm {
+				@func concat
+				strings [
+					"cards.EMU10K1.pcm.front.0:CARD=" $CARD
+				]
+			}
+			channels 2
+		}
+		{
+			pcm {
+				@func concat
+				strings [
+					"cards.EMU10K1.pcm.rear.0:CARD=" $CARD
+				]
+			}
+			channels 2
+		}
+	]
+	bindings [
+		{ slave 0 channel 0 }
+		{ slave 0 channel 1 }
+		{ slave 1 channel 0 }
+		{ slave 1 channel 1 }
+	]
+}
+
+<confdir:pcm/surround41.conf>
+<confdir:pcm/surround50.conf>
+<confdir:pcm/surround51.conf>
+
+EMU10K1.pcm.surround51.0 {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type multi
+	slaves [
+		{
+			pcm {
+				@func concat
+				strings [
+					"cards.EMU10K1.pcm.front.0:CARD=" $CARD
+				]
+			}
+			channels 2
+		}
+		{
+			pcm {
+				@func concat
+				strings [
+					"cards.EMU10K1.pcm.rear.0:CARD=" $CARD
+				]
+			}
+			channels 2
+		}
+		{
+			pcm {
+				@func concat
+				strings [
+					"cards.EMU10K1.pcm.center_lfe.0:CARD=" $CARD
+				]
+			}
+			channels 2
+		}
+	]
+	bindings [
+		{ slave 0 channel 0 }
+		{ slave 0 channel 1 }
+		{ slave 1 channel 0 }
+		{ slave 1 channel 1 }
+		{ slave 2 channel 0 }
+		{ slave 2 channel 1 }
+	]
+}
+
+<confdir:pcm/iec958.conf>
+
+EMU10K1.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 [
+			{
+				interface PCM
+				name "IEC958 Playback Default"
+				device 2
+				lock true
+				preserve true
+				optional true
+				value [ $AES0 $AES1 $AES2 $AES3 ]
+			}
+			{
+				# for compatibility with older drivers
+				name "IEC958 Playback Default"
+				lock true
+				preserve true
+				optional true
+				value [ $AES0 $AES1 $AES2 $AES3 ]
+			}
+			{
+				name "IEC958 Optical Raw Playback Switch"
+				lock true
+				preserve true
+				value [ 1 1 ]
+			}
+			{
+				name "SB Live Analog/Digital Output Jack"
+				lock true
+				preserve true
+				value 1
+			}
+		]
+	}
+}
diff --git a/usr/share/alsa/cards/EMU10K1X.conf b/usr/share/alsa/cards/EMU10K1X.conf
new file mode 100644
index 0000000..b5fc708
--- /dev/null
+++ b/usr/share/alsa/cards/EMU10K1X.conf
@@ -0,0 +1,201 @@
+#
+# Configuration for the EMU10K1X chip
+#
+
+# default with dmix & dsnoop
+EMU10K1X.pcm.default {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type asym
+	playback.pcm {
+		type plug
+		slave.pcm {
+			@func concat
+			strings [ "dmix:" $CARD ]
+		}
+	}
+	capture.pcm {
+		type plug
+		slave.pcm {
+			@func concat
+			strings [ "dsnoop:" $CARD ]
+		}
+	}
+}
+
+<confdir:pcm/front.conf>
+
+EMU10K1X.pcm.front.0 {
+	@args [ CARD  ]
+	@args.CARD {
+		type string
+	}
+	type hw
+	card $CARD
+}	
+
+<confdir:pcm/rear.conf>
+
+EMU10K1X.pcm.rear.0 {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type hw
+	card $CARD
+	device 1
+}	
+
+<confdir:pcm/center_lfe.conf>
+
+EMU10K1X.pcm.center_lfe.0 {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type hw
+	card $CARD
+	device 2
+}	
+
+<confdir:pcm/surround40.conf>
+
+EMU10K1X.pcm.surround40.0 {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type multi
+	slaves [
+		{
+			pcm {
+				@func concat
+				strings [
+					"cards.EMU10K1X.pcm.front.0:CARD=" $CARD
+				]
+			}
+			channels 2
+		}
+		{
+			pcm {
+				@func concat
+				strings [
+					"cards.EMU10K1X.pcm.rear.0:CARD=" $CARD
+				]
+			}
+			channels 2
+		}
+	]
+	bindings [
+		{ slave 0 channel 0 }
+		{ slave 0 channel 1 }
+		{ slave 1 channel 0 }
+		{ slave 1 channel 1 }
+	]
+}
+
+<confdir:pcm/surround41.conf>
+<confdir:pcm/surround50.conf>
+<confdir:pcm/surround51.conf>
+
+EMU10K1X.pcm.surround51.0 {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type multi
+	slaves [
+		{
+			pcm {
+				@func concat
+				strings [
+					"cards.EMU10K1X.pcm.front.0:CARD=" $CARD
+				]
+			}
+			channels 2
+		}
+		{
+			pcm {
+				@func concat
+				strings [
+					"cards.EMU10K1X.pcm.rear.0:CARD=" $CARD
+				]
+			}
+			channels 2
+		}
+		{
+			pcm {
+				@func concat
+				strings [
+					"cards.EMU10K1X.pcm.center_lfe.0:CARD=" $CARD
+				]
+			}
+			channels 2
+		}
+	]
+	bindings [
+		{ slave 0 channel 0 }
+		{ slave 0 channel 1 }
+		{ slave 1 channel 0 }
+		{ slave 1 channel 1 }
+		{ slave 2 channel 0 }
+		{ slave 2 channel 1 }
+	]
+}
+
+<confdir:pcm/iec958.conf>
+
+EMU10K1X.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 "Analog/Digital Output Jack"
+				lock true
+				preserve true
+				value 0
+			}
+			{
+				interface PCM
+				name "IEC958 Playback Default"
+				index 0
+				lock true
+				preserve true
+				optional true
+				value [ $AES0 $AES1 $AES2 $AES3 ]
+			}
+			{
+				# for compatibility with older drivers
+				name "IEC958 Playback Default"
+				index 0
+				lock true
+				preserve true
+				optional true
+				value [ $AES0 $AES1 $AES2 $AES3 ]
+			}
+		]
+	}
+}
diff --git a/usr/share/alsa/cards/ENS1370.conf b/usr/share/alsa/cards/ENS1370.conf
new file mode 100644
index 0000000..32e4782
--- /dev/null
+++ b/usr/share/alsa/cards/ENS1370.conf
@@ -0,0 +1,107 @@
+#
+# Configuration for the ENS1370 chip
+#
+
+<confdir:pcm/front.conf>
+
+ENS1370.pcm.front.0 {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type hw
+	card $CARD
+	device 1
+}	
+
+# default with dmix/dsnoop
+ENS1370.pcm.default {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type asym
+	playback.pcm {
+		type plug
+		slave.pcm {
+			@func concat
+			strings [ "dmix:" $CARD ]
+		}
+	}
+	capture.pcm {
+		type plug
+		slave.pcm {
+			@func concat
+			strings [ "dsnoop:" $CARD ]
+		}
+	}
+}
+
+<confdir:pcm/rear.conf>
+
+ENS1370.pcm.rear.0 {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type hooks
+	slave.pcm {
+		type hw
+		card $CARD
+	}
+	hooks.0 {
+		type ctl_elems
+		hook_args [
+			{
+				interface CARD
+				name "PCM 0 Output also on Line-In Jack"
+				preserve true
+				lock true
+				value true
+			}
+			{
+				name "PCM Switch"
+				preserve true
+				lock true
+				value [ false false ]
+			}
+		]
+	}
+}	
+
+<confdir:pcm/surround40.conf>
+
+ENS1370.pcm.surround40.0 {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type multi
+	master 1
+	slaves [
+		{
+			pcm {
+				@func concat
+				strings [
+					"cards.ENS1370.pcm.front.0:CARD=" $CARD
+				]
+			}
+			channels 2
+		}
+		{
+			pcm {
+				@func concat
+				strings [
+					"cards.ENS1370.pcm.rear.0:CARD=" $CARD
+				]
+			}
+			channels 2
+		}
+	]
+	bindings [
+		{ slave 0 channel 0 }
+		{ slave 0 channel 1 }
+		{ slave 1 channel 0 }
+		{ slave 1 channel 1 }
+	]
+}
diff --git a/usr/share/alsa/cards/ENS1371.conf b/usr/share/alsa/cards/ENS1371.conf
new file mode 100644
index 0000000..a6df425
--- /dev/null
+++ b/usr/share/alsa/cards/ENS1371.conf
@@ -0,0 +1,134 @@
+#
+# Configuration for the ENS1370 chip
+#
+
+<confdir:pcm/front.conf>
+
+ENS1371.pcm.front.0 {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type hw
+	card $CARD
+}	
+
+# default with dmix/dsnoop
+ENS1371.pcm.default {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type asym
+	playback.pcm {
+		type plug
+		slave.pcm {
+			@func concat
+			strings [ "dmix:" $CARD ]
+		}
+	}
+	capture.pcm {
+		type plug
+		slave.pcm {
+			@func concat
+			strings [ "dsnoop:" $CARD ]
+		}
+	}
+}
+
+<confdir:pcm/rear.conf>
+
+ENS1371.pcm.rear.0 {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type hooks
+	slave.pcm {
+		type hw
+		card $CARD
+		device 1
+	}
+	hooks.0 {
+		type ctl_elems
+		hook_args [
+			{
+				interface MIXER
+				name "AC97 2ch->4ch Copy Switch"
+				lock true
+				preserve true
+				value 0
+			}
+		]
+	}
+}	
+
+<confdir:pcm/surround40.conf>
+
+ENS1371.pcm.surround40.0 {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type multi
+	slaves [
+		{
+			pcm {
+				@func concat
+				strings [ "cards.ENS1371.pcm.front.0:CARD=" $CARD ]
+			}
+			channels 2
+                }
+		{
+			pcm {
+				@func concat
+                                strings [ "cards.ENS1371.pcm.rear.0:CARD=" $CARD ]
+			}
+			channels 2
+		}
+	]
+	bindings [
+		{ slave 0 channel 0 }
+		{ slave 0 channel 1 }
+		{ slave 1 channel 0 }
+		{ slave 1 channel 1 }
+	]
+}
+                                        
+<confdir:pcm/iec958.conf>
+
+ENS1371.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 [
+			{
+				interface PCM
+				name "IEC958 Playback PCM Stream"
+				lock true
+				preserve true
+				value [ $AES0 $AES1 $AES2 $AES3 ]
+			}
+		]
+	}
+}
diff --git a/usr/share/alsa/cards/ES1968.conf b/usr/share/alsa/cards/ES1968.conf
new file mode 100644
index 0000000..a6ee119
--- /dev/null
+++ b/usr/share/alsa/cards/ES1968.conf
@@ -0,0 +1,12 @@
+# configuration for ESS Maestro2
+
+<confdir:pcm/front.conf>
+
+ES1968.pcm.front.0 {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type hw
+	card $CARD
+}	
diff --git a/usr/share/alsa/cards/FM801.conf b/usr/share/alsa/cards/FM801.conf
new file mode 100644
index 0000000..997b218
--- /dev/null
+++ b/usr/share/alsa/cards/FM801.conf
@@ -0,0 +1,87 @@
+#
+# Configuration for the FM801 chip
+#
+
+<confdir:pcm/front.conf>
+
+FM801.pcm.front.0 {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type hw
+	card $CARD
+}	
+
+# default with dmix/dsnoop
+FM801.pcm.default {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type asym
+	playback.pcm {
+		type plug
+		slave.pcm {
+			@func concat
+			strings [ "dmix:" $CARD ]
+		}
+	}
+	capture.pcm {
+		type plug
+		slave.pcm {
+			@func concat
+			strings [ "dsnoop:" $CARD ]
+		}
+	}
+}
+
+<confdir:pcm/surround40.conf>
+
+FM801.pcm.surround40.0 "cards.FM801.pcm.front.0"
+
+<confdir:pcm/surround41.conf>
+<confdir:pcm/surround50.conf>
+<confdir:pcm/surround51.conf>
+
+FM801.pcm.surround51.0 "cards.FM801.pcm.front.0"
+
+<confdir:pcm/iec958.conf>
+
+FM801.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 Default"
+			#	value [ $AES0 $AES1 $AES2 $AES3 ]
+			# }
+			{
+				name "IEC958 Raw Data Playback Switch"
+				preserve true
+				value true
+			}
+		]
+	}
+}
diff --git a/usr/share/alsa/cards/FWSpeakers.conf b/usr/share/alsa/cards/FWSpeakers.conf
new file mode 100644
index 0000000..cd6fa60
--- /dev/null
+++ b/usr/share/alsa/cards/FWSpeakers.conf
@@ -0,0 +1,26 @@
+#
+# Configuration for the LaCie Firewire speakers
+#
+
+FWSpeakers.pcm.default {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type plug
+	slave.pcm {
+		@func concat
+		strings [ "dmix:" $CARD ",FORMAT=S32" ]
+	}
+}
+
+<confdir:pcm/front.conf>
+
+FWSpeakers.pcm.front.0 {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type hw
+	card $CARD
+}
diff --git a/usr/share/alsa/cards/FireWave.conf b/usr/share/alsa/cards/FireWave.conf
new file mode 100644
index 0000000..63fb23d
--- /dev/null
+++ b/usr/share/alsa/cards/FireWave.conf
@@ -0,0 +1,50 @@
+#
+# Configuration for the Griffin FireWave Surround
+#
+
+FireWave.pcm.default {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type plug
+	slave.pcm {
+		@func concat
+		strings [ "dmix:" $CARD ",FORMAT=S32" ]
+	}
+}
+
+<confdir:pcm/front.conf>
+
+FireWave.pcm.front.0 {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type hw
+	card $CARD
+}
+
+<confdir:pcm/surround41.conf>
+<confdir:pcm/surround50.conf>
+<confdir:pcm/surround51.conf>
+
+FireWave.pcm.surround51.0 {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type route
+	ttable [
+		[ 1 0 0 0 0 0 ]
+		[ 0 1 0 0 0 0 ]
+		[ 0 0 0 0 1 0 ]
+		[ 0 0 0 0 0 1 ]
+		[ 0 0 1 0 0 0 ]
+		[ 0 0 0 1 0 0 ]
+	]
+	slave.pcm {
+		type hw
+		card $CARD
+	}
+}
diff --git a/usr/share/alsa/cards/GUS.conf b/usr/share/alsa/cards/GUS.conf
new file mode 100644
index 0000000..d744c54
--- /dev/null
+++ b/usr/share/alsa/cards/GUS.conf
@@ -0,0 +1,19 @@
+#
+# Configuration for the GUS soundcards
+#
+
+<confdir:pcm/front.conf>
+
+GUS.pcm.front.0 {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type route
+	ttable.0.0 1
+	ttable.1.1 1
+	slave.pcm {
+		type hw
+		card $CARD
+	}
+}	
diff --git a/usr/share/alsa/cards/HDA-Intel.conf b/usr/share/alsa/cards/HDA-Intel.conf
new file mode 100644
index 0000000..d4f2667
--- /dev/null
+++ b/usr/share/alsa/cards/HDA-Intel.conf
@@ -0,0 +1,303 @@
+#
+# Configuration for the Intel HD audio (ICH6/ICH7)
+#
+
+<confdir:pcm/front.conf>
+
+HDA-Intel.pcm.front.0 {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type asym
+	playback.pcm {
+		type softvol
+		slave.pcm {
+			type hw
+			card $CARD
+			subdevice 0
+		}
+		control {
+			name "PCM Playback Volume"
+			card $CARD
+		}
+	}
+	capture.pcm {
+		type hw
+		card $CARD
+	}
+}	
+
+# default with dmix+softvol & dsnoop
+HDA-Intel.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 {
+			type softvol
+			slave.pcm {
+				@func concat
+				strings [ "dsnoop:" $CARD ]
+			}
+			control {
+				name "Digital Capture Volume"
+				card $CARD
+			}
+			min_dB -30.0
+			max_dB 30.0
+			resolution 121
+		}
+		# to avoid possible phase inversions with digital mics
+		route_policy copy
+	}
+	hint.device 0
+}
+
+<confdir:pcm/surround40.conf>
+<confdir:pcm/surround41.conf>
+<confdir:pcm/surround50.conf>
+<confdir:pcm/surround51.conf>
+<confdir:pcm/surround71.conf>
+
+HDA-Intel.pcm.surround40.0 cards.HDA-Intel.pcm.front.0
+HDA-Intel.pcm.surround51.0 cards.HDA-Intel.pcm.front.0
+HDA-Intel.pcm.surround71.0 cards.HDA-Intel.pcm.front.0
+
+<confdir:pcm/iec958.conf>
+
+HDA-Intel.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 hooks
+		slave.pcm {
+			type hw
+			card $CARD
+			device 1
+		}
+		hooks.0 {
+			type ctl_elems
+			hook_args [
+			{
+				name "IEC958 Playback Default"
+				lock true
+				preserve true
+				value [ $AES0 $AES1 $AES2 $AES3 ]
+			}
+			{
+				name "IEC958 Playback Switch"
+				value true
+			}
+			]
+		}
+	}
+	capture.pcm {
+		type hooks
+		slave.pcm {
+			type hw
+			card $CARD
+			device 1
+		}
+		hooks.0 {
+			type ctl_elems
+			hook_args [
+			{
+				name "IEC958 Capture Switch"
+				lock true
+				preserve true
+				value true
+			}
+			]
+		}
+	}
+	hint.device 1
+}
+
+<confdir:pcm/hdmi.conf>
+
+HDA-Intel.pcm.hdmi.common {
+	@args [ CARD DEVICE CTLINDEX AES0 AES1 AES2 AES3 ]
+	@args.CARD {
+		type string
+	}
+	@args.DEVICE {
+		type integer
+	}
+	@args.CTLINDEX {
+		type integer
+	}
+	@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 $DEVICE
+	}
+	hooks.0 {
+		type ctl_elems
+		hook_args [
+		{
+			name "IEC958 Playback Default"
+			index $CTLINDEX
+			lock true
+			preserve true
+			value [ $AES0 $AES1 $AES2 $AES3 ]
+		}
+		{
+			name "IEC958 Playback Switch"
+			index $CTLINDEX
+			value true
+		}
+		]
+	}
+	hint.device $DEVICE
+}
+
+HDA-Intel.pcm.hdmi.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 }
+	@func refer
+	name {
+		@func concat
+		strings [
+			"cards.HDA-Intel.pcm.hdmi.common:"
+			"CARD=" $CARD ","
+			"DEVICE=3,"
+			"CTLINDEX=0,"
+			"AES0=" $AES0 ","
+			"AES1=" $AES1 ","
+			"AES2=" $AES2 ","
+			"AES3=" $AES3
+		]
+	}
+}
+
+HDA-Intel.pcm.hdmi.1 {
+	@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 }
+	@func refer
+	name {
+		@func concat
+		strings [
+			"cards.HDA-Intel.pcm.hdmi.common:"
+			"CARD=" $CARD ","
+			"DEVICE=7,"
+			"CTLINDEX=1,"
+			"AES0=" $AES0 ","
+			"AES1=" $AES1 ","
+			"AES2=" $AES2 ","
+			"AES3=" $AES3
+		]
+	}
+}
+
+HDA-Intel.pcm.hdmi.2 {
+	@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 }
+	@func refer
+	name {
+		@func concat
+		strings [
+			"cards.HDA-Intel.pcm.hdmi.common:"
+			"CARD=" $CARD ","
+			"DEVICE=8,"
+			"CTLINDEX=2,"
+			"AES0=" $AES0 ","
+			"AES1=" $AES1 ","
+			"AES2=" $AES2 ","
+			"AES3=" $AES3
+		]
+	}
+}
+
+HDA-Intel.pcm.hdmi.3 {
+	@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 }
+	@func refer
+	name {
+		@func concat
+		strings [
+			"cards.HDA-Intel.pcm.hdmi.common:"
+			"CARD=" $CARD ","
+			"DEVICE=9,"
+			"CTLINDEX=3,"
+			"AES0=" $AES0 ","
+			"AES1=" $AES1 ","
+			"AES2=" $AES2 ","
+			"AES3=" $AES3
+		]
+	}
+}
+
+<confdir:pcm/modem.conf>
+
+HDA-Intel.pcm.modem.0 {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type hw
+	card $CARD
+	device 6
+	hint.show off
+}
diff --git a/usr/share/alsa/cards/ICE1712.conf b/usr/share/alsa/cards/ICE1712.conf
new file mode 100644
index 0000000..f5b8add
--- /dev/null
+++ b/usr/share/alsa/cards/ICE1712.conf
@@ -0,0 +1,157 @@
+#
+# Configuration for the ICE1712 (Envy24) chip
+#
+
+# default with dmix & dsnoop
+ICE1712.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>
+
+ICE1712.pcm.front.0 {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type asym
+	playback.pcm {
+		type route
+		ttable.0.0 1
+		ttable.1.1 1
+		slave.pcm {
+			type hw
+			card $CARD
+		}
+		slave.channels 10
+	}
+	capture.pcm {
+		type route
+		ttable.0.0 1
+		ttable.1.1 1
+		slave.pcm {
+			type hw
+			card $CARD
+		}
+		slave.channels 12
+	}
+}	
+
+<confdir:pcm/surround40.conf>
+
+ICE1712.pcm.surround40.0 {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type route
+	ttable.0.0 1
+	ttable.1.1 1
+	ttable.2.2 1
+	ttable.3.3 1
+	slave.pcm {
+		type hw
+		card $CARD
+	}
+	slave.channels 10
+}	
+
+<confdir:pcm/surround41.conf>
+<confdir:pcm/surround50.conf>
+<confdir:pcm/surround51.conf>
+
+ICE1712.pcm.surround51.0 {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type route
+	ttable.0.0 1
+	ttable.1.1 1
+	ttable.2.2 1
+	ttable.3.3 1
+	ttable.4.4 1
+	ttable.5.5 1
+	slave.pcm {
+		type hw
+		card $CARD
+	}
+	slave.channels 10
+}
+
+<confdir:pcm/iec958.conf>
+
+ICE1712.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 hooks
+		slave.pcm {
+			type route
+			ttable.0.8 1
+			ttable.1.9 1
+			slave.pcm {
+				type hw
+				card $CARD
+			}
+			slave.format S32_LE
+			slave.channels 10
+		}
+		hooks.0 {
+			type ctl_elems
+			hook_args [
+				{
+					interface PCM
+					name "IEC958 Playback PCM Stream"
+					lock true
+					preserve true
+					value [ $AES0 $AES1 $AES2 $AES3 ]
+				}
+			]
+		}
+	}
+	capture.pcm {
+		type route
+		ttable.0.8 1
+		ttable.1.9 1
+		slave.pcm {
+			type hw
+			card $CARD
+		}
+		slave.format S32_LE
+		slave.channels 12
+	}
+}
diff --git a/usr/share/alsa/cards/ICE1724.conf b/usr/share/alsa/cards/ICE1724.conf
new file mode 100644
index 0000000..e806b36
--- /dev/null
+++ b/usr/share/alsa/cards/ICE1724.conf
@@ -0,0 +1,224 @@
+#
+# 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
+	}
+}
diff --git a/usr/share/alsa/cards/ICH-MODEM.conf b/usr/share/alsa/cards/ICH-MODEM.conf
new file mode 100644
index 0000000..b96b5aa
--- /dev/null
+++ b/usr/share/alsa/cards/ICH-MODEM.conf
@@ -0,0 +1,15 @@
+#
+# Configuration for the Intel/AMD modem controllers
+#
+
+<confdir:pcm/modem.conf>
+
+ICH-MODEM.pcm.modem.0 {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type hw
+	card $CARD
+	hint.show off
+}
diff --git a/usr/share/alsa/cards/ICH.conf b/usr/share/alsa/cards/ICH.conf
new file mode 100644
index 0000000..47ffef9
--- /dev/null
+++ b/usr/share/alsa/cards/ICH.conf
@@ -0,0 +1,222 @@
+#
+# 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/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
+			}
+		]
+	}
+}
diff --git a/usr/share/alsa/cards/ICH4.conf b/usr/share/alsa/cards/ICH4.conf
new file mode 100644
index 0000000..1bf5605
--- /dev/null
+++ b/usr/share/alsa/cards/ICH4.conf
@@ -0,0 +1,213 @@
+#
+# Configuration for the Intel ICH4/ICH5/ICH6 chips
+#
+
+<confdir:pcm/front.conf>
+
+ICH4.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
+ICH4.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>
+
+ICH4.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>
+
+ICH4.pcm.surround51.0 {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type softvol
+	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
+			}
+			]
+		}
+	}
+	control {
+		name "PCM Playback Volume"
+		card $CARD
+	}
+}
+
+<confdir:pcm/iec958.conf>
+
+ICH4.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 4
+	}
+	hooks.0 {
+		type ctl_elems
+		hook_args [
+			{
+				name "IEC958 Playback AC97-SPSA"
+				lock true
+				preserve true
+				value 3
+				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
+			}
+		]
+	}
+}
diff --git a/usr/share/alsa/cards/Maestro3.conf b/usr/share/alsa/cards/Maestro3.conf
new file mode 100644
index 0000000..9432322
--- /dev/null
+++ b/usr/share/alsa/cards/Maestro3.conf
@@ -0,0 +1,38 @@
+# configuration for ESS Maestro3
+
+<confdir:pcm/front.conf>
+
+Maestro3.pcm.front.0 {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type hw
+	card $CARD
+}	
+
+# default with dmix/dsnoop
+Maestro3.pcm.default {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type asym
+	playback.pcm {
+		type plug
+		slave.pcm {
+			# we need to specify device and subdevice numbers
+			# for a device with multiple substreams
+			@func concat
+			strings [ "dmix:" $CARD ",0,0" ]
+		}
+	}
+	capture.pcm {
+		type plug
+		slave.pcm {
+			@func concat
+			strings [ "dsnoop:" $CARD ]
+		}
+	}
+}
+
diff --git a/usr/share/alsa/cards/NFORCE.conf b/usr/share/alsa/cards/NFORCE.conf
new file mode 100644
index 0000000..6ebefe3
--- /dev/null
+++ b/usr/share/alsa/cards/NFORCE.conf
@@ -0,0 +1,295 @@
+#
+# 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
+			}
+		]
+	}
+}
diff --git a/usr/share/alsa/cards/PC-Speaker.conf b/usr/share/alsa/cards/PC-Speaker.conf
new file mode 100644
index 0000000..c82654d
--- /dev/null
+++ b/usr/share/alsa/cards/PC-Speaker.conf
@@ -0,0 +1,52 @@
+#
+# Configuration for PC-Speaker driver
+#
+
+<confdir:pcm/front.conf>
+
+PC-Speaker.pcm.front.0 {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type softvol
+	slave.pcm {
+		type hw
+		card $CARD
+	}
+	control {
+		name "Master Playback Volume"
+		card $CARD
+	}
+	min_dB -10.0
+	max_dB 20.0
+}	
+
+# default with dmix & null
+PC-Speaker.pcm.default {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type asym
+	playback.pcm {
+		type plug
+		slave.pcm {
+			type softvol
+			control {
+				name "Master Playback Volume"
+				card $CARD
+			}
+			min_dB -10.0
+			max_dB 20.0
+			slave.pcm {
+				@func concat
+				strings [ "dmix:" $CARD ]
+			}
+		}
+	}
+	capture.pcm {
+		type null
+	}
+}
+
diff --git a/usr/share/alsa/cards/PMac.conf b/usr/share/alsa/cards/PMac.conf
new file mode 100644
index 0000000..d1fdb17
--- /dev/null
+++ b/usr/share/alsa/cards/PMac.conf
@@ -0,0 +1,37 @@
+#
+# Configuration for PMac
+#
+
+<confdir:pcm/front.conf>
+
+PMac.pcm.front.0 {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type hw
+	card $CARD
+}	
+
+# default with dmix/dsnoop
+PMac.pcm.default {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type asym
+	playback.pcm {
+		type plug
+		slave.pcm {
+			@func concat
+			strings [ "dmix:CARD=" $CARD ",FORMAT=S16_BE" ]
+		}
+	}
+	capture.pcm {
+		type plug
+		slave.pcm {
+			@func concat
+			strings [ "dsnoop:CARD=" $CARD ",FORMAT=S16_BE" ]
+		}
+	}
+}
diff --git a/usr/share/alsa/cards/PMacToonie.conf b/usr/share/alsa/cards/PMacToonie.conf
new file mode 100644
index 0000000..1e0eb59
--- /dev/null
+++ b/usr/share/alsa/cards/PMacToonie.conf
@@ -0,0 +1,51 @@
+#
+# Configuration for PMac Toonie
+#
+
+<confdir:pcm/front.conf>
+
+PMacToonie.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
+PMacToonie.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=" $CARD ",FORMAT=S16_BE" ]
+			}
+			control {
+				name "PCM Playback Volume"
+				card $CARD
+			}
+		}
+	}
+	capture.pcm {
+		type plug
+		slave.pcm {
+			@func concat
+			strings [ "dsnoop:CARD=" $CARD ",FORMAT=S16_BE" ]
+		}
+	}
+}
diff --git a/usr/share/alsa/cards/PS3.conf b/usr/share/alsa/cards/PS3.conf
new file mode 100644
index 0000000..b642f0d
--- /dev/null
+++ b/usr/share/alsa/cards/PS3.conf
@@ -0,0 +1,85 @@
+#
+# Configuration for PS3
+#
+
+<confdir:pcm/front.conf>
+
+PS3.pcm.front.0 {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type softvol
+	slave.pcm {
+		type hw
+		card $CARD
+		device 0
+	}
+	control {
+		name "PCM Playback Volume"
+		card $CARD
+	}
+}	
+
+# default with dmix+softvol
+PS3.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=" $CARD ]
+                                strings [ "dmix:CARD=" $CARD ",FORMAT=S16" ]
+			}
+			control {
+				name "PCM Playback Volume"
+				card $CARD
+			}
+		}
+	}
+}
+
+<confdir:pcm/iec958.conf>
+
+PS3.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 [
+			{
+				interface PCM
+				name "IEC958 Playback Default"
+				lock true
+				preserve true
+				optional true
+				value [ $AES0 $AES1 $AES2 $AES3 ]
+			}
+		]
+	}
+}
diff --git a/usr/share/alsa/cards/RME9636.conf b/usr/share/alsa/cards/RME9636.conf
new file mode 100644
index 0000000..e8dc5fa
--- /dev/null
+++ b/usr/share/alsa/cards/RME9636.conf
@@ -0,0 +1,61 @@
+#
+# Configuration for the RME9636
+#
+
+<confdir:pcm/front.conf>
+
+RME9636.pcm.front.0 {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type hw
+	card $CARD
+}	
+
+# FIXME: This configuration is not valid for double-speed rates.
+
+<confdir:pcm/iec958.conf>
+
+RME9636.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 route
+		slave {
+			pcm {
+				type hw
+				card $CARD
+			}
+			channels 18
+		}
+		ttable.0.16 1
+		ttable.1.17 1
+	}
+	hooks.0 {
+		type ctl_elems
+		hook_args [
+			{
+				interface PCM
+				name "IEC958 Playback PCM Stream"
+				lock true
+				value [ $AES0 $AES1 $AES2 $AES3 ]
+			}
+		]
+	}
+}
diff --git a/usr/share/alsa/cards/RME9652.conf b/usr/share/alsa/cards/RME9652.conf
new file mode 100644
index 0000000..1147d81
--- /dev/null
+++ b/usr/share/alsa/cards/RME9652.conf
@@ -0,0 +1,61 @@
+#
+# Configuration for the RME9652
+#
+
+<confdir:pcm/front.conf>
+
+RME9652.pcm.front.0 {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type hw
+	card $CARD
+}	
+
+# FIXME: This configuration is not valid for double-speed rates.
+
+<confdir:pcm/iec958.conf>
+
+RME9652.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 route
+		slave {
+			pcm {
+				type hw
+				card $CARD
+			}
+			channels 26
+		}
+		ttable.0.24 1
+		ttable.1.25 1
+	}
+	hooks.0 {
+		type ctl_elems
+		hook_args [
+			{
+				interface PCM
+				name "IEC958 Playback PCM Stream"
+				lock true
+				value [ $AES0 $AES1 $AES2 $AES3 ]
+			}
+		]
+	}
+}
diff --git a/usr/share/alsa/cards/SB-XFi.conf b/usr/share/alsa/cards/SB-XFi.conf
new file mode 100644
index 0000000..38d0027
--- /dev/null
+++ b/usr/share/alsa/cards/SB-XFi.conf
@@ -0,0 +1,108 @@
+#
+# Configuration for the SB X-Fi driver
+#
+
+<confdir:pcm/front.conf>
+
+SB-XFi.pcm.front.0 {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type hw
+	card $CARD
+	device 0
+}	
+
+<confdir:pcm/rear.conf>
+
+SB-XFi.pcm.rear.0 {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type hw
+	card $CARD
+	device 1
+	hint.device 1
+}	
+
+<confdir:pcm/center_lfe.conf>
+
+SB-XFi.pcm.center_lfe.0 {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type hw
+	card $CARD
+	device 2
+	hint.device 2
+}	
+
+<confdir:pcm/side.conf>
+
+SB-XFi.pcm.side.0 {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type hw
+	card $CARD
+	device 3
+	hint.device 3
+}	
+
+<confdir:pcm/surround40.conf>
+<confdir:pcm/surround41.conf>
+<confdir:pcm/surround50.conf>
+<confdir:pcm/surround51.conf>
+<confdir:pcm/surround71.conf>
+
+SB-XFi.pcm.surround40.0 cards.SB-XFi.pcm.front.0
+SB-XFi.pcm.surround51.0 cards.SB-XFi.pcm.front.0
+SB-XFi.pcm.surround71.0 cards.SB-XFi.pcm.front.0
+
+<confdir:pcm/iec958.conf>
+
+SB-XFi.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 hooks
+		slave.pcm {
+			type hw
+			card $CARD
+			device 4
+		}
+		hooks.0 {
+			type ctl_elems
+			hook_args [
+			{
+				interface PCM
+				name "IEC958 Playback PCM Stream"
+				device 4
+				lock true
+				preserve true
+				value [ $AES0 $AES1 $AES2 $AES3 ]
+			}
+			]
+		}
+	}
+	hint.device 4
+}
diff --git a/usr/share/alsa/cards/SI7018.conf b/usr/share/alsa/cards/SI7018.conf
new file mode 100644
index 0000000..15972a4
--- /dev/null
+++ b/usr/share/alsa/cards/SI7018.conf
@@ -0,0 +1,166 @@
+#
+# Configuration for the SI7018 chip
+#
+# This configuration does not reflect hardware.
+#
+
+<confdir:pcm/front.conf>
+
+SI7018.pcm.front.0 {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type hw
+	card $CARD
+}	
+
+<confdir:pcm/rear.conf>
+
+SI7018.pcm.rear.0 {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+        type hooks
+	slave.pcm {
+		type hw
+		card $CARD
+	}
+	hooks.0 {
+		type ctl_elems
+		hook_args [
+			{
+				name "PCM Playback Volume"
+				preserve true
+				lock true
+				value [ 24 24 ]
+			}
+		]
+	}
+}	
+
+<confdir:pcm/surround40.conf>
+
+SI7018.pcm.surround40.0 {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type multi
+	slaves [
+		{
+			pcm {
+				@func concat
+				strings [
+					"cards.SI7018.pcm.front.0:CARD=" $CARD
+				]
+			}
+			channels 2
+		}
+		{
+			pcm {
+				@func concat
+				strings [
+					"cards.SI7018.pcm.rear.0:CARD=" $CARD
+				]
+			}
+			channels 2
+		}
+	]
+	bindings [
+		{ slave 0 channel 0 }
+		{ slave 0 channel 1 }
+		{ slave 1 channel 0 }
+		{ slave 1 channel 1 }
+	]
+}
+
+<confdir:pcm/surround41.conf>
+<confdir:pcm/surround50.conf>
+<confdir:pcm/surround51.conf>
+
+SI7018.pcm.surround51.0 {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type multi
+	slaves [
+		{
+			pcm {
+				@func concat
+				strings [
+					"cards.SI7018.pcm.front.0:CARD=" $CARD
+				]
+			}
+			channels 2
+		}
+		{
+			pcm {
+				@func concat
+				strings [
+					"cards.SI7018.pcm.rear.0:CARD=" $CARD
+				]
+			}
+			channels 2
+		}
+		{
+			pcm {
+				@func concat
+				strings [
+					"cards.SI7018.pcm.front.0:CARD=" $CARD
+				]
+			}
+			channels 2
+		}
+	]
+	bindings [
+		{ slave 0 channel 0 }
+		{ slave 0 channel 1 }
+		{ slave 1 channel 0 }
+		{ slave 1 channel 1 }
+		{ slave 2 channel 0 }
+		{ slave 2 channel 1 }
+	]
+}
+
+<confdir:pcm/iec958.conf>
+
+SI7018.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 1
+	}
+	hooks.0 {
+		type ctl_elems
+		hook_args [
+			{
+				interface PCM
+				name "IEC958 Playback PCM Stream"
+				value [ $AES0 $AES1 $AES2 $AES3 ]
+				device 1
+				lock true
+				preserve true
+			}
+		]
+	}
+}
diff --git a/usr/share/alsa/cards/TRID4DWAVENX.conf b/usr/share/alsa/cards/TRID4DWAVENX.conf
new file mode 100644
index 0000000..bbf6b7c
--- /dev/null
+++ b/usr/share/alsa/cards/TRID4DWAVENX.conf
@@ -0,0 +1,129 @@
+#
+# Configuration for the Trident 4D-Wave NX chip
+#
+
+<confdir:pcm/front.conf>
+
+TRID4DWAVENX.pcm.front.0 {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type hw
+	card $CARD
+}	
+
+<confdir:pcm/rear.conf>
+
+TRID4DWAVENX.pcm.rear.0 {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type hooks
+	slave.pcm {
+		type hw
+		card $CARD
+	}
+	hooks.0 {
+		type ctl_elems
+		hook_args [
+			{
+				name "Rear Path"
+				lock true
+				preserve true
+				value true
+			}
+			{
+				name "PCM Front Playback Volume"
+				index { @func private_pcm_subdevice }
+				lock true
+				preserve true
+				value 0
+			}
+			{
+				name "PCM Reverb Playback Volume"
+				index { @func private_pcm_subdevice }
+				lock true
+				preserve true
+				value 127
+			}
+		]
+	}
+}	
+
+<confdir:pcm/surround40.conf>
+
+TRID4DWAVENX.pcm.surround40.0 {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type multi
+	slaves [
+		{
+			pcm {
+				@func concat
+				strings [
+					"cards.TRID4DWAVENX.pcm.front.0:CARD=" $CARD
+				]
+			}
+			channels 2
+		}
+		{
+			pcm {
+				@func concat
+				strings [
+					"cards.TRID4DWAVENX.pcm.rear.0:CARD=" $CARD
+				]
+			}
+			channels 2
+		}
+	]
+	bindings [
+		{ slave 0 channel 0 }
+		{ slave 0 channel 1 }
+		{ slave 1 channel 0 }
+		{ slave 1 channel 1 }
+	]
+}
+
+<confdir:pcm/iec958.conf>
+
+TRID4DWAVENX.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 [
+			{
+				interface PCM
+				name "IEC958 Playback PCM Stream"
+				value [ $AES0 $AES1 $AES2 $AES3 ]
+				device 2
+				lock true
+				preserve true
+			}
+		]
+	}
+}
diff --git a/usr/share/alsa/cards/USB-Audio.conf b/usr/share/alsa/cards/USB-Audio.conf
new file mode 100644
index 0000000..0726c34
--- /dev/null
+++ b/usr/share/alsa/cards/USB-Audio.conf
@@ -0,0 +1,375 @@
+#
+#  USB-Audio.conf - configuration for USB Audio devices
+#
+#
+#  DO NO EDIT; this is an internal ALSA file.
+#  If you want to add your own definitions, put them into /etc/asound.conf or
+#  ~/.asoundrc, with "cards." before the "USB-Audio", e.g.:
+#
+#  cards.USB-Audio.pcm.use_dmix."NoiseBlaster 3000" no
+#
+#  If your device requires such a definition to work correctly, please report it
+#  to <alsa-devel@alsa-project.org>.
+
+
+# If a device has sample formats not supported by dmix, dmix can be disabled
+# here.
+USB-Audio.pcm.use_dmix {
+	"AudioPhile" no    # uses big-endian 24-bit samples
+	"Audiophile USB (tm)" no
+}
+
+# If a device does not have a four-channel mode for the front/rear outputs,
+# other modes can be selected here.
+# six_channels       - for devices that route the last two of the four channels
+#                      to the center/LFE outputs
+# two_stereo_devices - for devices that have two stereo audio interfaces
+USB-Audio.pcm.surround40_type {
+	"AudioPhile" two_stereo_devices
+	"Audiophile USB (tm)" two_stereo_devices
+	"OmniStudio" two_stereo_devices
+	"Quattro" two_stereo_devices
+	"SB Audigy 2 NX" six_channels
+}
+
+# If a device does not use the first PCM device for digital data, the device
+# number for the iec958 device can be changed here.
+USB-Audio.pcm.iec958_device {
+	# "NoiseBlaster 3000" 42
+}
+
+
+# If a device requires non-standard definitions for front, surround40,
+# surround51, surround71 or iec958, they can be defined here.
+
+# M-Audio AudioPhile USB:
+# device 0: analog output, digital input
+# device 1: digital output, analog input
+USB-Audio."AudioPhile".pcm.default "cards.USB-Audio.Audiophile USB (tm).pcm.default"
+USB-Audio."Audiophile USB (tm)".pcm.default {
+	@args [ CARD ]
+	@args.CARD { type string }
+	type asym
+	playback.pcm {
+		type plug
+		slave.pcm {
+			type hw
+			card $CARD
+			device 0
+		}
+	}
+	capture.pcm {
+		type plug
+		slave.pcm {
+			@func concat
+			strings [ "dsnoop:DEVICE=1,CARD=" $CARD ]
+		}
+	}
+}
+USB-Audio."AudioPhile".pcm.iec958 "cards.USB-Audio.Audiophile USB (tm).pcm.iec958"
+USB-Audio."Audiophile USB (tm)".pcm.iec958 {
+	@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 hw
+		card $CARD
+		device 1
+	}
+	capture.pcm {
+		type hw
+		card $CARD
+		device 0
+	}
+}
+
+
+################################################################################
+
+<confdir:pcm/front.conf>
+
+USB-Audio.pcm.front.0 {
+	@args [ CARD ]
+	@args.CARD { type string }
+	@func refer
+	name {
+		@func concat
+		strings [
+			"cards.USB-Audio."
+			{ @func card_name card $CARD }
+			".pcm.front:CARD=" $CARD
+		]
+	}
+	default {
+		# We could use softvol, but the driver might have guessed a
+		# wrong name for the real volume control.
+		type hw
+		card $CARD
+		device 0
+	}
+}	
+
+USB-Audio.pcm.default {
+	@args [ CARD ]
+	@args.CARD { type string }
+	type asym
+	playback.pcm {
+		type plug
+		slave.pcm {
+			@func refer
+			name {
+				@func concat
+				strings [
+					"cards.USB-Audio.pcm.default_playback_dmix_"
+					{
+						@func refer
+						name {
+							@func concat
+							strings [
+								"cards.USB-Audio.pcm.use_dmix."
+								{ @func card_name card $CARD }
+							]
+						}
+						default yes
+					}
+					":CARD=" $CARD
+				]
+			}
+		}
+	}
+	capture.pcm {
+		type plug
+		slave.pcm {
+			@func concat
+			strings [ "dsnoop:" $CARD ]
+		}
+	}
+}
+
+USB-Audio.pcm.default_playback_dmix_yes {
+	@args [ CARD ]
+	@args.CARD { type string }
+	@func concat
+	strings [ "dmix:" $CARD ]
+}
+
+USB-Audio.pcm.default_playback_dmix_no {
+	@args [ CARD ]
+	@args.CARD { type string }
+	type hw
+	card $CARD
+	device 0
+}
+
+<confdir:pcm/surround40.conf>
+
+USB-Audio.pcm.surround40.0 {
+	@args [ CARD ]
+	@args.CARD { type string }
+	@func refer
+	name {
+		@func concat
+		strings [
+			"cards.USB-Audio."
+			{ @func card_name card $CARD }
+			".pcm.surround40:CARD=" $CARD
+		]
+	}
+	default {
+		@func refer
+		name {
+			@func concat
+			strings [
+				"cards.USB-Audio.pcm.surround40_"
+				{
+					@func refer
+					name {
+						@func concat
+						strings [
+							"cards.USB-Audio.pcm.surround40_type."
+							{ @func card_name card $CARD }
+						]
+					}
+					default default
+				}
+				":CARD=" $CARD
+			]
+		}
+	}
+}
+
+USB-Audio.pcm.surround40_default {
+	@args [ CARD ]
+	@args.CARD { type string }
+	type hw
+	card $CARD
+	device 0
+}
+
+USB-Audio.pcm.surround40_six_channels {
+	@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 {
+		pcm {
+			type hw
+			card $CARD
+			device 0
+		}
+		channels 6
+	}
+}
+
+USB-Audio.pcm.surround40_two_stereo_devices {
+	@args [ CARD ]
+	@args.CARD { type string }
+	type route
+	ttable.0.0 1
+	ttable.1.1 1
+	ttable.2.2 1
+	ttable.3.3 1
+	slave.pcm {
+		type multi
+		slaves {
+			a {
+				pcm {
+					type hw
+					card $CARD
+					device 0
+				}
+				channels 2
+			}
+			b {
+				pcm {
+					type hw
+					card $CARD
+					device 1
+				}
+				channels 2
+			}
+		}
+		bindings [
+			{ slave a channel 0 }
+			{ slave a channel 1 }
+			{ slave b channel 0 }
+			{ slave b channel 1 }
+		]
+	}
+}
+
+<confdir:pcm/surround41.conf>
+<confdir:pcm/surround50.conf>
+<confdir:pcm/surround51.conf>
+
+USB-Audio.pcm.surround51.0 {
+	@args [ CARD ]
+	@args.CARD { type string }
+	@func refer
+	name {
+		@func concat
+		strings [
+			"cards.USB-Audio."
+			{ @func card_name card $CARD }
+			".pcm.surround51:CARD=" $CARD
+		]
+	}
+	default {
+		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 hw
+				card $CARD
+				device 0
+			}
+			channels 6
+		}
+	}
+}
+
+<confdir:pcm/surround71.conf>
+
+USB-Audio.pcm.surround71.0 {
+	@args [ CARD ]
+	@args.CARD { type string }
+	@func refer
+	name {
+		@func concat
+		strings [
+			"cards.USB-Audio."
+			{ @func card_name card $CARD }
+			".pcm.surround71:CARD=" $CARD
+		]
+	}
+	default {
+		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 hw
+				card $CARD
+				device 0
+			}
+			channels 8
+		}
+	}
+}
+
+<confdir:pcm/iec958.conf>
+
+USB-Audio.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 }
+	@func refer
+	name {
+		@func concat
+		strings [
+			"cards.USB-Audio."
+			{ @func card_name card $CARD }
+			".pcm.iec958:CARD=" $CARD
+			",AES0=" $AES0 ",AES1=" $AES1 ",AES2=" $AES2 ",AES3=" $AES3
+		]
+	}
+	default {
+		# FIXME: we cannot set the AES parameters
+		type hw
+		card $CARD
+		device {
+			@func refer
+			name {
+				@func concat
+				strings [
+					"cards.USB-Audio.pcm.iec958_device."
+					{ @func card_name card $CARD }
+				]
+			}
+			default 0
+		}
+	}
+}
+
+# vim: ft=alsaconf
diff --git a/usr/share/alsa/cards/VIA686A.conf b/usr/share/alsa/cards/VIA686A.conf
new file mode 100644
index 0000000..e4a06f2
--- /dev/null
+++ b/usr/share/alsa/cards/VIA686A.conf
@@ -0,0 +1,89 @@
+#
+# Configuration for the VIA686A chip
+#
+# SPDIF support is not complete - it might not work, especially with AC3
+# passthru mode...
+#
+
+<confdir:pcm/front.conf>
+
+VIA686A.pcm.front.0 {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type hw
+	card $CARD
+}	
+
+# default with dmix/dsnoop
+VIA686A.pcm.default {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type asym
+	playback.pcm {
+		type plug
+		slave.pcm {
+			@func concat
+			strings [ "dmix:" $CARD ]
+		}
+	}
+	capture.pcm {
+		type plug
+		slave.pcm {
+			@func concat
+			strings [ "dsnoop:" $CARD ]
+		}
+	}
+}
+
+<confdir:pcm/iec958.conf>
+
+VIA686A.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
+			}
+			{
+				name "IEC958 Playback Default"
+				lock true
+				preserve true
+				value [ $AES0 $AES1 $AES2 $AES3 ]
+			}
+			{
+				name "IEC958 Playback Switch"
+				lock true
+				preserve true
+				value true
+			}
+		]
+	}
+}
diff --git a/usr/share/alsa/cards/VIA8233.conf b/usr/share/alsa/cards/VIA8233.conf
new file mode 100644
index 0000000..668bfd9
--- /dev/null
+++ b/usr/share/alsa/cards/VIA8233.conf
@@ -0,0 +1,200 @@
+#
+# 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/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
+			}
+		]
+	}
+}
diff --git a/usr/share/alsa/cards/VIA8233A.conf b/usr/share/alsa/cards/VIA8233A.conf
new file mode 100644
index 0000000..97d2a7d
--- /dev/null
+++ b/usr/share/alsa/cards/VIA8233A.conf
@@ -0,0 +1,204 @@
+#
+# Configuration for the VIA8233A chip with 4/6 multi-channel support
+#
+
+<confdir:pcm/front.conf>
+
+VIA8233A.pcm.front.0 {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type hw
+	card $CARD
+}	
+
+# default with dmix/dsnoop
+VIA8233A.pcm.default {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type asym
+	playback.pcm {
+		type plug
+		slave.pcm {
+			@func concat
+			strings [ "dmix:" $CARD ]
+		}
+	}
+	capture.pcm {
+		type plug
+		slave.pcm {
+			@func concat
+			strings [ "dsnoop:" $CARD ]
+		}
+	}
+}
+
+<confdir:pcm/surround40.conf>
+
+VIA8233A.pcm.surround40.0 {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type hooks
+	slave.pcm {
+		type hw
+		card $CARD
+		channels 4
+	}
+	hooks.0 {
+		type ctl_elems
+		hook_args [
+			{
+				name "Swap Surround Slot"
+				lock true
+				preserve true
+				value false
+				optional true
+			}
+			{
+				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/surround41.conf>
+<confdir:pcm/surround50.conf>
+<confdir:pcm/surround51.conf>
+
+VIA8233A.pcm.surround51.0 {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type hooks
+	slave.pcm {
+		type hw
+		card $CARD
+		channels 6
+	}
+	hooks.0 {
+		type ctl_elems
+		hook_args [
+			{
+				name "Swap Surround Slot"
+				lock true
+				preserve true
+				value true
+				optional true
+			}
+			{
+				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>
+
+VIA8233A.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 1
+	}
+	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
+			}
+		]
+	}
+}
diff --git a/usr/share/alsa/cards/VIA8237.conf b/usr/share/alsa/cards/VIA8237.conf
new file mode 100644
index 0000000..404e190
--- /dev/null
+++ b/usr/share/alsa/cards/VIA8237.conf
@@ -0,0 +1,190 @@
+#
+# Configuration for the VIA8237 chip with 4/6 multi-channel support
+#
+
+<confdir:pcm/front.conf>
+
+VIA8237.pcm.front.0 {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type hw
+	card $CARD
+}	
+
+# default with softvol/dsnoop
+# VIA8237 supports multi-playback
+VIA8237.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>
+
+VIA8237.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
+			}
+			{
+				name "Surround Down Mix"
+				preserve true
+				value off
+				lock true
+				optional true
+			}
+		]
+	}
+}
+
+<confdir:pcm/surround41.conf>
+<confdir:pcm/surround50.conf>
+<confdir:pcm/surround51.conf>
+
+VIA8237.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.pcm {
+		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
+				}
+				{
+					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
+}
+
+<confdir:pcm/iec958.conf>
+
+VIA8237.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
+			}
+		]
+	}
+}
diff --git a/usr/share/alsa/cards/VX222.conf b/usr/share/alsa/cards/VX222.conf
new file mode 100644
index 0000000..3385f25
--- /dev/null
+++ b/usr/share/alsa/cards/VX222.conf
@@ -0,0 +1,61 @@
+#
+# Configuration for Digigram VX222
+#
+
+<confdir:pcm/front.conf>
+
+VX222.pcm.front.0 {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type hw
+	card $CARD
+}	
+
+<confdir:pcm/iec958.conf>
+
+VX222.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 [
+			{
+				interface PCM
+				name "IEC958 Playback Default"
+				lock true
+				preserve true
+				optional true
+				value [ $AES0 $AES1 $AES2 $AES3 ]
+			}
+			{
+				# for compatibility with older drivers
+				name "IEC958 Playback Default"
+				lock true
+				preserve true
+				optional true
+				value [ $AES0 $AES1 $AES2 $AES3 ]
+			}
+		]
+	}
+}
diff --git a/usr/share/alsa/cards/VXPocket.conf b/usr/share/alsa/cards/VXPocket.conf
new file mode 100644
index 0000000..fe44ff5
--- /dev/null
+++ b/usr/share/alsa/cards/VXPocket.conf
@@ -0,0 +1,61 @@
+#
+# Configuration for Digigram VXpocket
+#
+
+<confdir:pcm/front.conf>
+
+VXPocket.pcm.front.0 {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type hw
+	card $CARD
+}	
+
+<confdir:pcm/iec958.conf>
+
+VXPocket.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 [
+			{
+				interface PCM
+				name "IEC958 Playback Default"
+				lock true
+				preserve true
+				optional true
+				value [ $AES0 $AES1 $AES2 $AES3 ]
+			}
+			{
+				# for compatibility with older drivers
+				name "IEC958 Playback Default"
+				lock true
+				preserve true
+				optional true
+				value [ $AES0 $AES1 $AES2 $AES3 ]
+			}
+		]
+	}
+}
diff --git a/usr/share/alsa/cards/VXPocket440.conf b/usr/share/alsa/cards/VXPocket440.conf
new file mode 100644
index 0000000..197c2d6
--- /dev/null
+++ b/usr/share/alsa/cards/VXPocket440.conf
@@ -0,0 +1,110 @@
+#
+# Configuration for Digigram VXpocket440
+#
+
+<confdir:pcm/front.conf>
+
+VXPocket440.pcm.front.0 {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type hw
+	card $CARD
+}	
+
+<confdir:pcm/rear.conf>
+
+VXPocket440.pcm.rear.0 {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type hw
+	card $CARD
+	device 1
+}
+
+<confdir:pcm/surround40.conf>
+
+VXPocket440.pcm.surround40.0 {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type multi
+	master 1
+	slaves [
+		{
+			pcm {
+				@func concat
+				strings [
+					"cards.VXPocket440.pcm.front.0:CARD=" $CARD
+				]
+			}
+			channels 2
+		}
+		{
+			pcm {
+				@func concat
+				strings [
+					"cards.VXPocket440.pcm.rear.0:CARD=" $CARD
+				]
+			}
+			channels 2
+		}
+	]
+	bindings [
+		{ slave 0 channel 0 }
+		{ slave 0 channel 1 }
+		{ slave 1 channel 0 }
+		{ slave 1 channel 1 }
+	]
+}
+
+<confdir:pcm/iec958.conf>
+
+VXPocket440.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 [
+			{
+				interface PCM
+				name "IEC958 Playback Default"
+				lock true
+				preserve true
+				optional true
+				value [ $AES0 $AES1 $AES2 $AES3 ]
+			}
+			{
+				# for compatibility with older drivers
+				name "IEC958 Playback Default"
+				lock true
+				preserve true
+				optional true
+				value [ $AES0 $AES1 $AES2 $AES3 ]
+			}
+		]
+	}
+}
diff --git a/usr/share/alsa/cards/YMF744.conf b/usr/share/alsa/cards/YMF744.conf
new file mode 100644
index 0000000..84dbcbe
--- /dev/null
+++ b/usr/share/alsa/cards/YMF744.conf
@@ -0,0 +1,108 @@
+#
+# Configuration for the YMF744 chip
+#
+
+<confdir:pcm/front.conf>
+
+YMF744.pcm.front.0 {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type hw
+	card $CARD
+}	
+
+<confdir:pcm/rear.conf>
+
+YMF744.pcm.rear.0 {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type hw
+	card $CARD
+	device 2
+}	
+
+<confdir:pcm/surround40.conf>
+
+YMF744.pcm.surround40.0 {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+	}
+	type multi
+	slaves [
+		{
+			pcm {
+				@func concat
+				strings [
+					"cards.YMF744.pcm.front.0:CARD=" $CARD
+				]
+			}
+			channels 2
+		}
+		{
+			pcm {
+				@func concat
+				strings [
+					"cards.YMF744.pcm.rear.0:CARD=" $CARD
+				]
+			}
+			channels 2
+		}
+	]
+	bindings [
+		{ slave 0 channel 0 }
+		{ slave 0 channel 1 }
+		{ slave 1 channel 0 }
+		{ slave 1 channel 1 }
+	]
+}
+
+<confdir:pcm/iec958.conf>
+
+YMF744.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 1
+	}
+	hooks.0 {
+		type ctl_elems
+		hook_args [
+			{
+				name "IEC958 Playback Switch"
+				lock true
+				preserve true
+				value 1
+			}
+			{
+				interface PCM
+				name "IEC958 Playback PCM Stream"
+				device 1
+				lock true
+				preserve true
+				value [ $AES0 $AES1 $AES2 $AES3 ]
+			}
+		]
+	}
+}
diff --git a/usr/share/alsa/cards/aliases.conf b/usr/share/alsa/cards/aliases.conf
new file mode 100644
index 0000000..4a92fb2
--- /dev/null
+++ b/usr/share/alsa/cards/aliases.conf
@@ -0,0 +1,61 @@
+#
+#  Define aliases for various drivers
+#
+
+YMF724 cards.YMF744
+YMF724F cards.YMF744
+YMF740 cards.YMF744
+YMF740C cards.YMF744
+YMF754 cards.YMF744
+CMIPCI cards.CMI8338
+CMI8738 cards.CMI8338
+CMI8738-SWIEC cards.CMI8338-SWIEC
+CMI8738-MC4 cards.CMI8738-MC6
+'E-mu APS' cards.EMU10K1
+'GUS MAX' cards.GUS
+'GUS ACE' cards.GUS
+'GUS Extreme' cards.GUS
+'AMD InterWave' cards.GUS
+'Dynasonic 3-D' cards.GUS
+'InterWave STB' cards.GUS
+au8810 cards.AU8810
+au8820 cards.AU8820
+au8830 cards.AU8830
+Prodigy71 cards.Aureon71
+Prodigy71LT cards.Aureon71
+Prodigy71HIFI cards.Aureon71
+Aureon71Univ cards.Aureon71
+VIA82XX-MODEM cards.ICH-MODEM
+'MPU-401 UART' cards.MPU-401
+'VX222/Old' cards.VX222
+'VX222/v2' cards.VX222
+'VX222/Mic' cards.VX222
+'CMI8330/C3D' cards.CMI8330
+'SB AWE' cards.SBAWE
+'SB Pro' cards.SBPro
+'PMac Burgundy' cards.PMac
+'PMac DACA' cards.PMac
+'PMac Tumbler' cards.PMac
+'PMac Snapper' cards.PMac
+'PMac Screamer' cards.PMac
+'PMac AWACS' cards.PMac
+'PMac Toonie' cards.PMacToonie
+AppleOnbdAudio cards.PMacToonie
+'USB US-X2Y' cards.US-X2Y
+'Serial MIDI' cards.SerialMIDI
+'Prodif Plus' cards.ProdifPlus
+ESM1 cards.ES1968
+ES1978 cards.ES1968
+Allegro cards.Maestro3
+Canyon3D-2 cards.Maestro3
+Azalia cards.HDA-Intel
+aaci-pl041 cards.AACI
+AV66 cards.CMI8788
+AV100 cards.CMI8788
+AV200 cards.CMI8788
+CMI8786 cards.CMI8788
+CMI8787 cards.CMI8788
+
+<confdir:pcm/default.conf>
+<confdir:pcm/dmix.conf>
+<confdir:pcm/dsnoop.conf>
diff --git a/usr/share/alsa/pcm/center_lfe.conf b/usr/share/alsa/pcm/center_lfe.conf
new file mode 100644
index 0000000..4ef6f49
--- /dev/null
+++ b/usr/share/alsa/pcm/center_lfe.conf
@@ -0,0 +1,58 @@
+#
+#  Hardware output from center & lfe speakers
+#
+
+pcm.!center_lfe {
+	@args [ CARD DEV ]
+	@args.CARD {
+		type string
+		default {
+			@func getenv
+			vars [
+				ALSA_CENTER_LFE_CARD
+				ALSA_PCM_CARD
+				ALSA_CARD
+			]
+			default {
+				@func refer
+				name defaults.pcm.center_lfe.card
+			}
+		}
+	}
+	@args.DEV {
+		type integer
+		default {
+			@func igetenv
+			vars [
+				ALSA_CENTER_LFE_DEVICE
+			]
+			default {
+				@func refer
+				name defaults.pcm.center_lfe.device
+			}
+		}
+	}
+	type empty
+	slave.pcm {
+		@func refer
+		name {
+			@func concat
+			strings [
+				"cards."
+				{
+					@func card_driver
+					card $CARD
+				}
+				".pcm.center_lfe." $DEV ":CARD=" $CARD
+			]
+		}
+	}
+	hint {
+		show {
+			@func refer
+			name defaults.namehint.basic
+		}
+		description "Center and Subwoofer speakers"
+		device $DEV
+	}
+}
diff --git a/usr/share/alsa/pcm/default.conf b/usr/share/alsa/pcm/default.conf
new file mode 100644
index 0000000..864a903
--- /dev/null
+++ b/usr/share/alsa/pcm/default.conf
@@ -0,0 +1,57 @@
+#
+# Default output
+#
+
+pcm.!default {
+	@args [ CARD ]
+	@args.CARD {
+		type string
+		default {
+			@func getenv
+			vars [
+				ALSA_PCM_CARD
+				ALSA_CARD
+			]
+			default {
+				@func refer
+				name defaults.pcm.card
+			}
+		}
+	}
+	type empty
+	slave.pcm {
+		# use card-specific definition if exists
+		@func refer
+		name {
+			@func concat
+			strings [
+				"cards."
+				{
+					@func card_driver
+					card $CARD
+				}
+				".pcm.default:CARD=" $CARD
+			]
+		}
+		default {
+			# use plughw as default
+			type plug
+			slave.pcm {
+				type hw
+				card $CARD
+			}
+			hint.device 0
+		}
+	}
+	hint {
+		description "Default Audio Device"
+		device_output {
+			@func refer
+			name defaults.pcm.dmix.device
+		}
+		device_input {
+			@func refer
+			name defaults.pcm.dsnoop.device
+		}
+	}
+}
diff --git a/usr/share/alsa/pcm/dmix.conf b/usr/share/alsa/pcm/dmix.conf
new file mode 100644
index 0000000..e62cb29
--- /dev/null
+++ b/usr/share/alsa/pcm/dmix.conf
@@ -0,0 +1,115 @@
+#
+# dmix output
+#
+
+pcm.!dmix {
+	@args [ CARD DEV SUBDEV FORMAT RATE ]
+	@args.CARD {
+		type string
+		default {
+			@func refer
+			name defaults.pcm.dmix.card
+		}
+	}
+	@args.DEV {
+		type integer
+		default {
+			@func refer
+			name defaults.pcm.dmix.device
+		}
+	}
+	@args.SUBDEV {
+		type integer
+		default 0
+	}
+	@args.FORMAT {
+		type string
+		default {
+			@func refer
+			name defaults.pcm.dmix.format
+		}
+	}
+	@args.RATE {
+		type integer
+		default {
+			@func refer
+			name defaults.pcm.dmix.rate
+		}
+	}
+	type dmix
+	ipc_key {
+		@func refer
+		name defaults.pcm.ipc_key
+	}
+	ipc_gid {
+		@func refer
+		name defaults.pcm.ipc_gid
+	}
+	ipc_perm {
+		@func refer
+		name defaults.pcm.ipc_perm
+	}
+	slave {
+		pcm {
+			type hw
+			card $CARD
+			device $DEV
+			subdevice $SUBDEV
+		}
+		format $FORMAT
+		rate $RATE
+		period_size {
+			@func refer
+			name {
+				@func concat
+				strings [
+					"defaults.dmix."
+					{
+						@func card_driver
+						card $CARD
+					}
+					".period_size"
+				]
+			}
+			default 1024
+		}		
+		period_time {
+			@func refer
+			name {
+				@func concat
+				strings [
+					"defaults.dmix."
+					{
+						@func card_driver
+						card $CARD
+					}
+					".period_time"
+				]
+			}
+			default -1
+		}		
+		periods {
+			@func refer
+			name {
+				@func concat
+				strings [
+					"defaults.dmix."
+					{
+						@func card_driver
+						card $CARD
+					}
+					".periods"
+				]
+			}
+			default 16
+		}
+	}
+	hint {
+		show {
+			@func refer
+			name defaults.namehint.extended
+		}
+		description "Direct sample mixing device"
+		device $DEV
+	}
+}
diff --git a/usr/share/alsa/pcm/dpl.conf b/usr/share/alsa/pcm/dpl.conf
new file mode 100644
index 0000000..1009bb3
--- /dev/null
+++ b/usr/share/alsa/pcm/dpl.conf
@@ -0,0 +1,43 @@
+pcm.!dpl {
+	@args [ SLAVE ]
+	@args.SLAVE {
+		type string
+	}
+	type route
+	slave.pcm $SLAVE
+	slave.channels 2
+	# input: FL/FR/SL/SR/C/LFE
+	# S=SL+SR, LFE not used
+	ttable.0.0 1
+	ttable.1.1 1
+	ttable.2.0 0.707
+	ttable.2.1 -0.707
+	ttable.3.0 0.707
+	ttable.3.1 -0.707
+	ttable.4.0 0.707
+	ttable.4.1 0.707
+	ttable.5.0 0
+	ttable.5.1 0
+}
+
+pcm.!dpl2 {
+	@args [SLAVE]
+	@args.SLAVE {
+		type string
+	}
+	type route
+	slave.pcm $SLAVE
+	slave.channels 2
+	# input: FL/FR/SL/SR/C/LFE
+	# LFE not used
+	ttable.0.0 1
+	ttable.1.1 1
+	ttable.2.0 0.866
+	ttable.2.1 -0.5
+	ttable.3.0 0.5
+	ttable.3.1 -0.866
+	ttable.4.0 0.707
+	ttable.4.1 0.707
+	ttable.5.0 0
+	ttable.5.1 0
+}
diff --git a/usr/share/alsa/pcm/dsnoop.conf b/usr/share/alsa/pcm/dsnoop.conf
new file mode 100644
index 0000000..49cfca9
--- /dev/null
+++ b/usr/share/alsa/pcm/dsnoop.conf
@@ -0,0 +1,115 @@
+#
+# dsnoop
+#
+
+pcm.!dsnoop {
+	@args [ CARD DEV SUBDEV FORMAT RATE ]
+	@args.CARD {
+		type string
+		default {
+			@func refer
+			name defaults.pcm.dsnoop.card
+		}
+	}
+	@args.DEV {
+		type integer
+		default {
+			@func refer
+			name defaults.pcm.dsnoop.device
+		}
+	}
+	@args.SUBDEV {
+		type integer
+		default 0
+	}
+	@args.FORMAT {
+		type string
+		default {
+			@func refer
+			name defaults.pcm.dmix.format
+		}
+	}
+	@args.RATE {
+		type integer
+		default {
+			@func refer
+			name defaults.pcm.dmix.rate
+		}
+	}
+	type dsnoop
+	ipc_key {
+		@func refer
+		name defaults.pcm.ipc_key
+	}	
+	ipc_gid {
+		@func refer
+		name defaults.pcm.ipc_gid
+	}
+	ipc_perm {
+		@func refer
+		name defaults.pcm.ipc_perm
+	}
+	slave {
+		pcm {
+			type hw
+			card $CARD
+			device $DEV
+			subdevice $SUBDEV
+		}
+		format $FORMAT
+		rate $RATE
+		period_size {
+			@func refer
+			name {
+				@func concat
+				strings [
+					"cards."
+					{
+						@func card_driver
+						card $CARD
+					}
+					".pcm.dsnoop.period_size"
+				]
+			}
+			default 1024
+		}		
+		period_time {
+			@func refer
+			name {
+				@func concat
+				strings [
+					"cards."
+					{
+						@func card_driver
+						card $CARD
+					}
+					".pcm.dsnoop.period_time"
+				]
+			}
+			default -1
+		}		
+		periods {
+			@func refer
+			name {
+				@func concat
+				strings [
+					"cards."
+					{
+						@func card_driver
+						card $CARD
+					}
+					".pcm.dsnoop.periods"
+				]
+			}
+			default 16
+		}
+	}
+	hint {
+		show {
+			@func refer
+			name defaults.namehint.extended
+		}
+		description "Direct sample snooping device"
+		device $DEV
+	}
+}
diff --git a/usr/share/alsa/pcm/front.conf b/usr/share/alsa/pcm/front.conf
new file mode 100644
index 0000000..7aff0cb
--- /dev/null
+++ b/usr/share/alsa/pcm/front.conf
@@ -0,0 +1,58 @@
+#
+# Hardware output from front speakers
+#
+
+pcm.!front {
+	@args [ CARD DEV ]
+	@args.CARD {
+		type string
+		default {
+			@func getenv
+			vars [
+				ALSA_FRONT_CARD
+				ALSA_PCM_CARD
+				ALSA_CARD
+			]
+			default {
+				@func refer
+				name defaults.pcm.front.card
+			}
+		}
+	}
+	@args.DEV {
+		type integer
+		default {
+			@func igetenv
+			vars [
+				ALSA_FRONT_DEVICE
+			]
+			default {
+				@func refer
+				name defaults.pcm.front.device
+			}
+		}
+	}
+	type empty
+	slave.pcm {
+		@func refer
+		name {
+			@func concat
+			strings [
+				"cards."
+				{
+					@func card_driver
+					card $CARD
+				}
+				".pcm.front." $DEV ":CARD=" $CARD
+			]
+		}
+	}
+	hint {
+		show {
+			@func refer
+			name defaults.namehint.basic
+		}
+		description "Front speakers"
+		device $DEV
+	}
+}
diff --git a/usr/share/alsa/pcm/hdmi.conf b/usr/share/alsa/pcm/hdmi.conf
new file mode 100644
index 0000000..aad7065
--- /dev/null
+++ b/usr/share/alsa/pcm/hdmi.conf
@@ -0,0 +1,83 @@
+#
+#  Hardware output from HDMI
+#
+
+pcm.!hdmi {
+	@args [ CARD DEV AES0 AES1 AES2 AES3 ]
+	@args.CARD {
+		type string
+		default {
+			@func getenv
+			vars [
+				ALSA_IEC958_CARD
+				ALSA_PCM_CARD
+				ALSA_CARD
+			]
+			default {
+				@func refer
+				name defaults.pcm.iec958.card
+			}
+		}
+	}
+	@args.DEV {
+		type integer
+		default {
+			@func igetenv
+			vars [
+				ALSA_IEC958_DEVICE
+			]
+			default {
+				@func refer
+				name defaults.pcm.iec958.device
+			}
+		}
+	}
+	@args.AES0 {
+		type integer
+		# consumer, not-copyright, emphasis-none, mode=0
+		default 0x04
+	}
+	@args.AES1 {
+		type integer
+		# original, PCM coder
+		default 0x82
+	}
+	@args.AES2 {
+		type integer
+		# source and channel
+		default 0x00
+	}
+	@args.AES3 {
+		type integer
+		# fs=48000Hz, clock accuracy=1000ppm
+		default 0x02
+	}
+	type empty
+	slave.pcm {
+		@func refer
+		name {
+			@func concat
+			strings [
+				"cards."
+				{
+					@func card_driver
+					card $CARD
+				}
+				".pcm.hdmi." $DEV ":"
+				"CARD=" $CARD ","
+				"AES0=" $AES0 ","
+				"AES1=" $AES1 ","
+				"AES2=" $AES2 ","
+				"AES3=" $AES3
+			]
+		}
+	}
+	hint {
+		show {
+			@func refer
+			name defaults.namehint.basic
+		}
+		description "HDMI Audio Output"
+		device $DEV
+	}
+}
diff --git a/usr/share/alsa/pcm/iec958.conf b/usr/share/alsa/pcm/iec958.conf
new file mode 100644
index 0000000..ac139b5
--- /dev/null
+++ b/usr/share/alsa/pcm/iec958.conf
@@ -0,0 +1,83 @@
+#
+#  Hardware output from iec958
+#
+
+pcm.!iec958 {
+	@args [ CARD DEV AES0 AES1 AES2 AES3 ]
+	@args.CARD {
+		type string
+		default {
+			@func getenv
+			vars [
+				ALSA_IEC958_CARD
+				ALSA_PCM_CARD
+				ALSA_CARD
+			]
+			default {
+				@func refer
+				name defaults.pcm.iec958.card
+			}
+		}
+	}
+	@args.DEV {
+		type integer
+		default {
+			@func igetenv
+			vars [
+				ALSA_IEC958_DEVICE
+			]
+			default {
+				@func refer
+				name defaults.pcm.iec958.device
+			}
+		}
+	}
+	@args.AES0 {
+		type integer
+		# consumer, not-copyright, emphasis-none, mode=0
+		default 0x04
+	}
+	@args.AES1 {
+		type integer
+		# original, PCM coder
+		default 0x82
+	}
+	@args.AES2 {
+		type integer
+		# source and channel
+		default 0x00
+	}
+	@args.AES3 {
+		type integer
+		# fs=48000Hz, clock accuracy=1000ppm
+		default 0x02
+	}
+	type empty
+	slave.pcm {
+		@func refer
+		name {
+			@func concat
+			strings [
+				"cards."
+				{
+					@func card_driver
+					card $CARD
+				}
+				".pcm.iec958." $DEV ":"
+				"CARD=" $CARD ","
+				"AES0=" $AES0 ","
+				"AES1=" $AES1 ","
+				"AES2=" $AES2 ","
+				"AES3=" $AES3
+			]
+		}
+	}
+	hint {
+		show {
+			@func refer
+			name defaults.namehint.basic
+		}
+		description "IEC958 (S/PDIF) Digital Audio Output"
+		device $DEV
+	}
+}
diff --git a/usr/share/alsa/pcm/modem.conf b/usr/share/alsa/pcm/modem.conf
new file mode 100644
index 0000000..0af0e72
--- /dev/null
+++ b/usr/share/alsa/pcm/modem.conf
@@ -0,0 +1,106 @@
+#
+# "raw" modem - phoneline
+#
+
+pcm.!phoneline {
+	@args [ CARD DEV ]
+	@args.CARD {
+		type string
+		default {
+			@func getenv
+			vars [
+				ALSA_MODEM_CARD
+				ALSA_PCM_CARD
+				ALSA_CARD
+			]
+			default {
+				@func refer
+				name defaults.pcm.modem.card
+			}
+		}
+	}
+	@args.DEV {
+		type integer
+		default {
+			@func igetenv
+			vars [
+				ALSA_MODEM_DEVICE
+			]
+			default {
+				@func refer
+				name defaults.pcm.modem.device
+			}
+		}
+	}
+	@func refer
+	name {
+		@func concat
+		strings [
+			"cards."
+			{
+				@func card_driver
+				card $CARD
+			}
+			".pcm.modem." $DEV ":CARD=" $CARD
+		]
+	}
+	hint.show off
+}
+
+#
+#  "autohooked" modem
+#
+
+pcm.!modem {
+	@args [ CARD DEV ]
+	@args.CARD {
+		type string
+		default {
+			@func getenv
+			vars [
+				ALSA_MODEM_CARD
+				ALSA_PCM_CARD
+				ALSA_CARD
+			]
+			default {
+				@func refer
+				name defaults.pcm.modem.card
+			}
+		}
+	}
+	@args.DEV {
+		type integer
+		default {
+			@func igetenv
+			vars [
+				ALSA_MODEM_DEVICE
+			]
+			default {
+				@func refer
+				name defaults.pcm.modem.device
+			}
+		}
+	}
+	type hooks
+	slave {
+		pcm {
+			@func concat
+			strings [
+				"cards.pcm.phoneline:CARD=" $CARD ",DEV=" $DEV
+			]
+		}
+	}
+	hooks.0 {
+		type ctl_elems
+		hook_args [
+		{
+			name "Off-hook Switch"
+			preserve true
+			value "on"
+			lock false
+			optional true
+		}
+		]
+	}
+	hint.show off
+}
diff --git a/usr/share/alsa/pcm/rear.conf b/usr/share/alsa/pcm/rear.conf
new file mode 100644
index 0000000..85c70aa
--- /dev/null
+++ b/usr/share/alsa/pcm/rear.conf
@@ -0,0 +1,58 @@
+#
+# Hardware output from rear speakers
+#
+
+pcm.!rear {
+	@args [ CARD DEV ]
+	@args.CARD {
+		type string
+		default {
+			@func getenv
+			vars [
+				ALSA_REAR_CARD
+				ALSA_PCM_CARD
+				ALSA_CARD
+			]
+			default {
+				@func refer
+				name defaults.pcm.rear.card
+			}
+		}
+	}
+	@args.DEV {
+		type integer
+		default {
+			@func igetenv
+			vars [
+				ALSA_REAR_DEVICE
+			]
+			default {
+				@func refer
+				name defaults.pcm.rear.device
+			}
+		}
+	}
+	type empty
+	slave.pcm {
+		@func refer
+		name {
+			@func concat
+			strings [
+				"cards."
+				{
+					@func card_driver
+					card $CARD
+				}
+				".pcm.rear." $DEV ":CARD=" $CARD
+			]
+		}
+	}
+	hint {
+		show {
+			@func refer
+			name defaults.namehint.basic
+		}
+		description "Rear speakers"
+		device $DEV
+	}
+}
diff --git a/usr/share/alsa/pcm/side.conf b/usr/share/alsa/pcm/side.conf
new file mode 100644
index 0000000..4a81af0
--- /dev/null
+++ b/usr/share/alsa/pcm/side.conf
@@ -0,0 +1,58 @@
+#
+# Hardware output from side speakers
+#
+
+pcm.!side {
+	@args [ CARD DEV ]
+	@args.CARD {
+		type string
+		default {
+			@func getenv
+			vars [
+				ALSA_SIDE_CARD
+				ALSA_PCM_CARD
+				ALSA_CARD
+			]
+			default {
+				@func refer
+				name defaults.pcm.side.card
+			}
+		}
+	}
+	@args.DEV {
+		type integer
+		default {
+			@func igetenv
+			vars [
+				ALSA_SIDE_DEVICE
+			]
+			default {
+				@func refer
+				name defaults.pcm.side.device
+			}
+		}
+	}
+	type empty
+	slave.pcm {
+		@func refer
+		name {
+			@func concat
+			strings [
+				"cards."
+				{
+					@func card_driver
+					card $CARD
+				}
+				".pcm.side." $DEV ":CARD=" $CARD
+			]
+		}
+	}
+	hint {
+		show {
+			@func refer
+			name defaults.namehint.basic
+		}
+		description "Side speakers"
+		device $DEV
+	}
+}
diff --git a/usr/share/alsa/pcm/surround40.conf b/usr/share/alsa/pcm/surround40.conf
new file mode 100644
index 0000000..361ccaa
--- /dev/null
+++ b/usr/share/alsa/pcm/surround40.conf
@@ -0,0 +1,59 @@
+#
+#  Hardware output from 4.0 speakers.
+#  Samples must be positioned:
+#    chn0 - front left
+#    chn1 - front right
+#    chn2 - rear left
+#    chn3 - rear right
+#
+
+pcm.!surround40 {
+	@args [ CARD DEV ]
+	@args.CARD {
+		type string
+		default {
+			@func getenv
+			vars [
+				ALSA_SURROUND40_CARD
+				ALSA_PCM_CARD
+				ALSA_CARD
+			]
+			default {
+				@func refer
+				name defaults.pcm.surround40.card
+			}
+		}
+	}
+	@args.DEV {
+		type integer
+		default {
+			@func igetenv
+			vars [
+				ALSA_SURROUND40_DEVICE
+			]
+			default {
+				@func refer
+				name defaults.pcm.surround40.device
+			}
+		}
+	}
+	type empty
+	slave.pcm {
+		@func refer
+		name {
+			@func concat
+			strings [
+				"cards."
+				{
+					@func card_driver
+					card $CARD
+				}
+				".pcm.surround40." $DEV ":CARD=" $CARD
+			]
+		}
+	}
+	hint {
+		description "4.0 Surround output to Front and Rear speakers"
+		device $DEV
+	}
+}
diff --git a/usr/share/alsa/pcm/surround41.conf b/usr/share/alsa/pcm/surround41.conf
new file mode 100644
index 0000000..10e486e
--- /dev/null
+++ b/usr/share/alsa/pcm/surround41.conf
@@ -0,0 +1,66 @@
+#
+#  Hardware output from 4.1 speakers.
+#  Samples must be positioned:
+#    chn0 - front left
+#    chn1 - front right
+#    chn2 - rear left
+#    chn3 - rear right
+#    chn4 - LFE
+#
+
+pcm.!surround41 {
+	@args [ CARD DEV ]
+	@args.CARD {
+		type string
+		default {
+			@func getenv
+			vars [
+				ALSA_SURROUND41_CARD
+				ALSA_PCM_CARD
+				ALSA_CARD
+			]
+			default {
+				@func refer
+				name defaults.pcm.surround41.card
+			}
+		}
+	}
+	@args.DEV {
+		type integer
+		default {
+			@func igetenv
+			vars [
+				ALSA_SURROUND41_DEVICE
+			]
+			default {
+				@func refer
+				name defaults.pcm.surround41.device
+			}
+		}
+	}
+	type route
+	slave.pcm {
+		@func refer
+		name {
+			@func concat
+			strings [
+				"cards."
+				{
+					@func card_driver
+					card $CARD
+				}
+				".pcm.surround51." $DEV ":CARD=" $CARD
+			]
+		}
+	}
+	slave.channels 6
+	ttable.0.0 1
+	ttable.1.1 1
+	ttable.2.2 1
+	ttable.3.3 1
+	ttable.4.5 1
+	hint {
+		description "4.1 Surround output to Front, Rear and Subwoofer speakers"
+		device $DEV
+	}
+}
diff --git a/usr/share/alsa/pcm/surround50.conf b/usr/share/alsa/pcm/surround50.conf
new file mode 100644
index 0000000..7b7b17e
--- /dev/null
+++ b/usr/share/alsa/pcm/surround50.conf
@@ -0,0 +1,66 @@
+#
+#  Hardware output from 5.0 speakers.
+#  Samples must be positioned:
+#    chn0 - front left
+#    chn1 - front right
+#    chn2 - rear left
+#    chn3 - rear right
+#    chn4 - center
+#
+
+pcm.!surround50 {
+	@args [ CARD DEV ]
+	@args.CARD {
+		type string
+		default {
+			@func getenv
+			vars [
+				ALSA_SURROUND50_CARD
+				ALSA_PCM_CARD
+				ALSA_CARD
+			]
+			default {
+				@func refer
+				name defaults.pcm.surround50.card
+			}
+		}
+	}
+	@args.DEV {
+		type integer
+		default {
+			@func igetenv
+			vars [
+				ALSA_SURROUND50_DEVICE
+			]
+			default {
+				@func refer
+				name defaults.pcm.surround50.device
+			}
+		}
+	}
+	type route
+	slave.pcm {
+		@func refer
+		name {
+			@func concat
+			strings [
+				"cards."
+				{
+					@func card_driver
+					card $CARD
+				}
+				".pcm.surround51." $DEV ":CARD=" $CARD
+			]
+		}
+	}
+	slave.channels 6
+	ttable.0.0 1
+	ttable.1.1 1
+	ttable.2.2 1
+	ttable.3.3 1
+	ttable.4.4 1
+	hint {
+		description "5.0 Surround output to Front, Center and Rear speakers"
+		device $DEV
+	}
+}
diff --git a/usr/share/alsa/pcm/surround51.conf b/usr/share/alsa/pcm/surround51.conf
new file mode 100644
index 0000000..3a7543f
--- /dev/null
+++ b/usr/share/alsa/pcm/surround51.conf
@@ -0,0 +1,61 @@
+#
+#  Hardware output from 5.1 speakers
+#  Samples must be positioned:
+#    chn0 - front left
+#    chn1 - front right
+#    chn2 - rear left
+#    chn3 - rear right
+#    chn4 - center
+#    chn5 - lfe
+#
+
+pcm.!surround51 {
+	@args [ CARD DEV ]
+	@args.CARD {
+		type string
+		default {
+			@func getenv
+			vars [
+				ALSA_SURROUND51_CARD
+				ALSA_PCM_CARD
+				ALSA_CARD
+			]
+			default {
+				@func refer
+				name defaults.pcm.surround51.card
+			}
+		}
+	}
+	@args.DEV {
+		type integer
+		default {
+			@func igetenv
+			vars [
+				ALSA_SURROUND51_DEVICE
+			]
+			default {
+				@func refer
+				name defaults.pcm.surround51.device
+			}
+		}
+	}
+	type empty
+	slave.pcm {
+		@func refer
+		name {
+			@func concat
+			strings [
+				"cards."
+				{
+					@func card_driver
+					card $CARD
+				}
+				".pcm.surround51." $DEV ":CARD=" $CARD
+			]
+		}
+	}
+	hint {
+		description "5.1 Surround output to Front, Center, Rear and Subwoofer speakers"
+		device $DEV
+	}
+}
diff --git a/usr/share/alsa/pcm/surround71.conf b/usr/share/alsa/pcm/surround71.conf
new file mode 100644
index 0000000..076a97d
--- /dev/null
+++ b/usr/share/alsa/pcm/surround71.conf
@@ -0,0 +1,63 @@
+#
+#  Hardware output from 7.1 speakers
+#  Samples must be positioned:
+#    chn0 - front left
+#    chn1 - front right
+#    chn2 - rear left
+#    chn3 - rear right
+#    chn4 - center
+#    chn5 - lfe
+#    chn6 - side left
+#    chn7 - side right
+#
+
+pcm.!surround71 {
+	@args [ CARD DEV ]
+	@args.CARD {
+		type string
+		default {
+			@func getenv
+			vars [
+				ALSA_SURROUND71_CARD
+				ALSA_PCM_CARD
+				ALSA_CARD
+			]
+			default {
+				@func refer
+				name defaults.pcm.surround71.card
+			}
+		}
+	}
+	@args.DEV {
+		type integer
+		default {
+			@func igetenv
+			vars [
+				ALSA_SURROUND71_DEVICE
+			]
+			default {
+				@func refer
+				name defaults.pcm.surround71.device
+			}
+		}
+	}
+	type empty
+	slave.pcm {
+		@func refer
+		name {
+			@func concat
+			strings [
+				"cards."
+				{
+					@func card_driver
+					card $CARD
+				}
+				".pcm.surround71." $DEV ":CARD=" $CARD
+			]
+		}
+	}
+	hint {
+		description "7.1 Surround output to Front, Center, Side, Rear and Woofer speakers"
+		device $DEV
+	}
+}
diff --git a/usr/share/alsa/smixer.conf b/usr/share/alsa/smixer.conf
new file mode 100644
index 0000000..f215661
--- /dev/null
+++ b/usr/share/alsa/smixer.conf
@@ -0,0 +1,13 @@
+_full smixer-python.so
+usb {
+	searchl "USB"
+	lib smixer-usb.so
+}
+ac97 {
+	searchl "AC97a:"
+	lib smixer-ac97.so
+}
+hda {
+	searchl "HDA:"
+	lib smixer-hda.so
+}
diff --git a/var/lib/alsa/asound.state b/var/lib/alsa/asound.state
new file mode 100644
index 0000000..87b3a3c
--- /dev/null
+++ b/var/lib/alsa/asound.state
@@ -0,0 +1,17 @@
+#Sound Card State
+state.A5SEVK {
+	control.25 {
+		iface MIXER
+		name 'Input Mux'
+		value 'Both Mic'
+		comment {
+			access 'read write'
+			type ENUMERATED
+			count 1
+			item.0 Line-in
+			item.1 'Both Mic'
+			item.2 Unknown
+		}
+	}
+}
+