Radix cross Linux

The main Radix cross Linux repository contains the build scripts of packages, which have the most complete and common functionality for desktop machines

452 Commits   2 Branches   1 Tag
Index: Makefile
===================================================================
--- Makefile	(nonexistent)
+++ Makefile	(revision 5)
@@ -0,0 +1,13 @@
+
+COMPONENT_TARGETS = $(HARDWARE_NOARCH)
+
+SOURCE_REQUIRES += ALL_DIRS
+
+
+include ../../../../build-system/core.mk
+
+
+download_clean:
+	@true
+
+.PHONY: download_clean
Index: conf/Makefile
===================================================================
--- conf/Makefile	(nonexistent)
+++ conf/Makefile	(revision 5)
@@ -0,0 +1,13 @@
+
+COMPONENT_TARGETS = $(HARDWARE_NOARCH)
+
+SOURCE_REQUIRES += ALL_DIRS
+
+
+include ../../../../../build-system/core.mk
+
+
+download_clean:
+	@true
+
+.PHONY: download_clean
Index: conf/topology/Makefile
===================================================================
--- conf/topology/Makefile	(nonexistent)
+++ conf/topology/Makefile	(revision 5)
@@ -0,0 +1,47 @@
+
+COMPONENT_TARGETS = $(HARDWARE_NOARCH)
+
+
+include ../../../../../../build-system/constants.mk
+
+
+url         = $(DOWNLOAD_SERVER)/sources/packages/m/alsa/conf/topology
+
+versions    = 1.2.5.1
+pkgname     = alsa-topology-conf
+suffix      = tar.bz2
+
+tarballs    = $(addsuffix .$(suffix), $(addprefix $(pkgname)-, $(versions)))
+sha1s       = $(addsuffix .sha1sum, $(tarballs))
+
+
+BUILD_TARGETS = $(tarballs) $(sha1s)
+
+
+include ../../../../../../build-system/core.mk
+
+
+.PHONY: download_clean
+
+
+$(tarballs):
+	@echo -e "\n======= Downloading source tarballs =======" ; \
+	 for tarball in $(tarballs) ; do \
+	   echo "$(url)/$$tarball" | xargs -n 1 -P 100 wget $(WGET_OPTIONS) - & \
+	 done ; wait
+
+$(sha1s): $(tarballs)
+	@for sha in $@ ; do \
+	   echo -e "\n======= Downloading '$$sha' signature =======\n" ; \
+	   echo "$(url)/$$sha" | xargs -n 1 -P 100 wget $(WGET_OPTIONS) - & wait %1 ; \
+	   touch $$sha ; \
+	   echo -e "\n======= Check the '$$sha' sha1sum =======\n" ; \
+	   sha1sum --check $$sha ; ret="$$?" ; \
+	   if [ "$$ret" == "1" ]; then \
+	     echo -e "\n======= ERROR: Bad '$$sha' sha1sum =======\n" ; \
+	     exit 1 ; \
+	   fi ; \
+	 done
+
+download_clean:
+	@rm -f $(tarballs) $(sha1s)
Index: conf/topology
===================================================================
--- conf/topology	(nonexistent)
+++ conf/topology	(revision 5)

Property changes on: conf/topology
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: conf/ucm/Makefile
===================================================================
--- conf/ucm/Makefile	(nonexistent)
+++ conf/ucm/Makefile	(revision 5)
@@ -0,0 +1,47 @@
+
+COMPONENT_TARGETS = $(HARDWARE_NOARCH)
+
+
+include ../../../../../../build-system/constants.mk
+
+
+url         = $(DOWNLOAD_SERVER)/sources/packages/m/alsa/conf/ucm
+
+versions    = 1.2.8
+pkgname     = alsa-ucm-conf
+suffix      = tar.bz2
+
+tarballs    = $(addsuffix .$(suffix), $(addprefix $(pkgname)-, $(versions)))
+sha1s       = $(addsuffix .sha1sum, $(tarballs))
+
+
+BUILD_TARGETS = $(tarballs) $(sha1s)
+
+
+include ../../../../../../build-system/core.mk
+
+
+.PHONY: download_clean
+
+
+$(tarballs):
+	@echo -e "\n======= Downloading source tarballs =======" ; \
+	 for tarball in $(tarballs) ; do \
+	   echo "$(url)/$$tarball" | xargs -n 1 -P 100 wget $(WGET_OPTIONS) - & \
+	 done ; wait
+
+$(sha1s): $(tarballs)
+	@for sha in $@ ; do \
+	   echo -e "\n======= Downloading '$$sha' signature =======\n" ; \
+	   echo "$(url)/$$sha" | xargs -n 1 -P 100 wget $(WGET_OPTIONS) - & wait %1 ; \
+	   touch $$sha ; \
+	   echo -e "\n======= Check the '$$sha' sha1sum =======\n" ; \
+	   sha1sum --check $$sha ; ret="$$?" ; \
+	   if [ "$$ret" == "1" ]; then \
+	     echo -e "\n======= ERROR: Bad '$$sha' sha1sum =======\n" ; \
+	     exit 1 ; \
+	   fi ; \
+	 done
+
+download_clean:
+	@rm -f $(tarballs) $(sha1s)
Index: conf/ucm
===================================================================
--- conf/ucm	(nonexistent)
+++ conf/ucm	(revision 5)

Property changes on: conf/ucm
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: conf
===================================================================
--- conf	(nonexistent)
+++ conf	(revision 5)

Property changes on: conf
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: firmware/Makefile
===================================================================
--- firmware/Makefile	(nonexistent)
+++ firmware/Makefile	(revision 5)
@@ -0,0 +1,47 @@
+
+COMPONENT_TARGETS = $(HARDWARE_NOARCH)
+
+
+include ../../../../../build-system/constants.mk
+
+
+url         = $(DOWNLOAD_SERVER)/sources/packages/m/alsa/firmware
+
+versions    = 1.2.4
+pkgname     = alsa-firmware
+suffix      = tar.bz2
+
+tarballs    = $(addsuffix .$(suffix), $(addprefix $(pkgname)-, $(versions)))
+sha1s       = $(addsuffix .sha1sum, $(tarballs))
+
+
+BUILD_TARGETS = $(tarballs) $(sha1s)
+
+
+include ../../../../../build-system/core.mk
+
+
+.PHONY: download_clean
+
+
+$(tarballs):
+	@echo -e "\n======= Downloading source tarballs =======" ; \
+	 for tarball in $(tarballs) ; do \
+	   echo "$(url)/$$tarball" | xargs -n 1 -P 100 wget $(WGET_OPTIONS) - & \
+	 done ; wait
+
+$(sha1s): $(tarballs)
+	@for sha in $@ ; do \
+	   echo -e "\n======= Downloading '$$sha' signature =======\n" ; \
+	   echo "$(url)/$$sha" | xargs -n 1 -P 100 wget $(WGET_OPTIONS) - & wait %1 ; \
+	   touch $$sha ; \
+	   echo -e "\n======= Check the '$$sha' sha1sum =======\n" ; \
+	   sha1sum --check $$sha ; ret="$$?" ; \
+	   if [ "$$ret" == "1" ]; then \
+	     echo -e "\n======= ERROR: Bad '$$sha' sha1sum =======\n" ; \
+	     exit 1 ; \
+	   fi ; \
+	 done
+
+download_clean:
+	@rm -f $(tarballs) $(sha1s)
Index: firmware
===================================================================
--- firmware	(nonexistent)
+++ firmware	(revision 5)

Property changes on: firmware
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: lib/Makefile
===================================================================
--- lib/Makefile	(nonexistent)
+++ lib/Makefile	(revision 5)
@@ -0,0 +1,56 @@
+
+COMPONENT_TARGETS = $(HARDWARE_NOARCH)
+
+
+include ../../../../../build-system/constants.mk
+
+
+url         = $(DOWNLOAD_SERVER)/sources/packages/m/alsa/lib
+
+versions    = 1.2.8
+pkgname     = alsa-lib
+suffix      = tar.bz2
+
+tarballs    = $(addsuffix .$(suffix), $(addprefix $(pkgname)-, $(versions)))
+sha1s       = $(addsuffix .sha1sum, $(tarballs))
+
+patches     = $(CURDIR)/patches/alsa-lib-1.2.8-python.patch
+
+.NOTPARALLEL: $(patches)
+
+
+BUILD_TARGETS = $(tarballs) $(sha1s) $(patches)
+
+
+include ../../../../../build-system/core.mk
+
+
+.PHONY: download_clean
+
+
+$(tarballs):
+	@echo -e "\n======= Downloading source tarballs =======" ; \
+	 for tarball in $(tarballs) ; do \
+	   echo "$(url)/$$tarball" | xargs -n 1 -P 100 wget $(WGET_OPTIONS) - & \
+	 done ; wait
+
+$(sha1s): $(tarballs)
+	@for sha in $@ ; do \
+	   echo -e "\n======= Downloading '$$sha' signature =======\n" ; \
+	   echo "$(url)/$$sha" | xargs -n 1 -P 100 wget $(WGET_OPTIONS) - & wait %1 ; \
+	   touch $$sha ; \
+	   echo -e "\n======= Check the '$$sha' sha1sum =======\n" ; \
+	   sha1sum --check $$sha ; ret="$$?" ; \
+	   if [ "$$ret" == "1" ]; then \
+	     echo -e "\n======= ERROR: Bad '$$sha' sha1sum =======\n" ; \
+	     exit 1 ; \
+	   fi ; \
+	 done
+
+$(patches): $(sha1s)
+	@echo -e "\n======= Create Patches =======\n" ; \
+	 ( cd create-1.2.8-python-patch ; ./create.patch.sh ) ; \
+	 echo -e "\n"
+
+download_clean:
+	@rm -f $(tarballs) $(sha1s) $(patches)
Index: lib/create-1.2.8-python-patch/alsa-lib-1.2.8-new/modules/mixer/simple/python.c
===================================================================
--- lib/create-1.2.8-python-patch/alsa-lib-1.2.8-new/modules/mixer/simple/python.c	(nonexistent)
+++ lib/create-1.2.8-python-patch/alsa-lib-1.2.8-new/modules/mixer/simple/python.c	(revision 5)
@@ -0,0 +1,1153 @@
+/*
+ *  Mixer Interface - python binding simple abstact module
+ *  Copyright (c) 2007 by Jaroslav Kysela <perex@perex.cz>
+ *
+ *
+ *   This library is free software; you can redistribute it and/or modify
+ *   it under the terms of the GNU Lesser General Public License as
+ *   published by the Free Software Foundation; either version 2.1 of
+ *   the License, or (at your option) any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU Lesser General Public License for more details.
+ *
+ *   You should have received a copy of the GNU Lesser General Public
+ *   License along with this library; if not, write to the Free Software
+ *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ */
+
+#include "Python.h"
+#include <stddef.h>
+#include <limits.h>
+#include "config.h"
+#include "asoundlib.h"
+#include "mixer_abst.h"
+
+#if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 2))
+#pragma GCC diagnostic ignored "-Wstrict-aliasing"
+#endif
+
+struct python_priv {
+	int py_initialized;
+	PyObject *py_event_func;
+	PyObject *py_mdict;
+	PyObject *py_mixer;
+};
+
+#define SCRIPT "smixer/python/main.py"
+
+struct pymelem {
+	PyObject_HEAD
+	sm_selem_t selem;
+	PyObject *py_mixer;
+	snd_mixer_elem_t *melem;
+};
+
+struct pymixer {
+	PyObject_HEAD
+	snd_mixer_class_t *class;
+	snd_mixer_t *mixer;
+	PyObject *mdict;
+	int hctl_count;
+	void **hctl;
+	int helem_count;
+	void **helem;
+	int melem_count;
+	void **melem;
+};
+
+static PyInterpreterState *main_interpreter;
+
+#if PY_MAJOR_VERSION >= 3
+  #define PyInt_FromLong PyLong_FromLong
+#endif
+
+static inline int get_long(PyObject *o, long *val)
+{
+#if PY_MAJOR_VERSION < 3
+        if (PyInt_Check(o)) {
+                *val = PyInt_AsLong(o);
+                return 0;
+        }
+#endif
+        if (PyLong_Check(o)) {
+                *val = PyLong_AsLong(o);
+                return 0;
+        }
+        return 1;
+}
+
+static inline PyObject *InternFromString(const char *name)
+{
+#if PY_MAJOR_VERSION < 3
+        return PyString_InternFromString(name);
+#else
+        return PyUnicode_InternFromString(name);
+#endif
+}
+
+static void *get_C_ptr(PyObject *obj, const char *attr)
+{
+	PyObject *o;
+	long val;
+
+	o = PyObject_GetAttr(obj, InternFromString(attr));
+	if (!o) {
+		PyErr_Format(PyExc_TypeError, "missing '%s' attribute", attr);
+		return NULL;
+	}
+	if (get_long(o, &val)) {
+		PyErr_Format(PyExc_TypeError, "'%s' attribute is not Int or Long", attr);
+		return NULL;
+	}
+	return (void *)val;
+}
+
+static struct pymelem *melem_to_pymelem(snd_mixer_elem_t *elem)
+{
+	return (struct pymelem *)((char *)snd_mixer_elem_get_private(elem) - offsetof(struct pymelem, selem));
+}
+
+static int pcall(struct pymelem *pymelem, const char *attr, PyObject *args, PyObject **_res)
+{
+	PyObject *obj = (PyObject *)pymelem, *res;
+	long xres = 0;
+
+	if (_res)
+		*_res = NULL;
+	obj = PyObject_GetAttr(obj, InternFromString(attr));
+	if (!obj) {
+		PyErr_Format(PyExc_TypeError, "missing '%s' attribute", attr);
+		PyErr_Print();
+		PyErr_Clear();
+		Py_DECREF(args);
+		return -EIO;
+	}
+	res = PyObject_CallObject(obj, args);
+	Py_XDECREF(args);
+	if (res == NULL) {
+		PyErr_Print();
+		PyErr_Clear();
+		return -EIO;
+	}
+	if (_res && PyTuple_Check(res)) {
+		*_res = res;
+		res = PyTuple_GetItem(res, 0);
+	}
+	if (PyLong_Check(res)) {
+		xres = PyLong_AsLong(res);
+#if PY_MAJOR_VERSION < 3
+	} else if (PyInt_Check(res)) {
+		xres = PyInt_AsLong(res);
+#endif
+	} else if (res == Py_None) {
+		xres = 0;
+	} else if (PyBool_Check(res)) {
+		xres = res == Py_True;
+	} else {
+		PyErr_Format(PyExc_TypeError, "wrong result from '%s'!", attr);
+		PyErr_Print();
+		PyErr_Clear();
+		Py_DECREF(res);
+		if (_res)
+			*_res = NULL;
+		return -EIO;
+	}
+	if (_res && *_res)
+		return xres;
+	Py_DECREF(res);
+	return xres;
+}
+
+static int is_ops(snd_mixer_elem_t *elem, int dir, int cmd, int val)
+{
+	PyObject *obj1;
+	struct pymelem *pymelem = melem_to_pymelem(elem);
+	char *s, fcn[32] = "opsIs";
+	int res, xdir = 1, xval = 0;
+
+	switch (cmd) {
+	case SM_OPS_IS_ACTIVE: 	s = "Active"; xdir = 0; break;
+	case SM_OPS_IS_MONO:	s = "Mono"; break;
+	case SM_OPS_IS_CHANNEL:	s = "Channel"; xval = 1; break;
+	case SM_OPS_IS_ENUMERATED: s = "Enumerated"; xdir = val == 1; break;
+	case SM_OPS_IS_ENUMCNT:	s = "EnumCnt"; break;
+	default:
+		return 1;
+	}
+	strcat(fcn, s);
+
+	obj1 = PyTuple_New(xdir + xval);
+	if (xdir) {
+		PyTuple_SET_ITEM(obj1, 0, PyInt_FromLong(dir));
+		if (xval)
+			PyTuple_SET_ITEM(obj1, 1, PyInt_FromLong(val));
+	}
+	res = pcall(pymelem, fcn, obj1, NULL);
+	return res < 0 ? 0 : res;
+}
+
+static int get_x_range_ops(snd_mixer_elem_t *elem, int dir,
+                           long *min, long *max, const char *attr)
+{
+	PyObject *obj1, *t1, *t2, *res;
+	struct pymelem *pymelem = melem_to_pymelem(elem);
+	int err;
+	
+	obj1 = PyTuple_New(1);
+	PyTuple_SET_ITEM(obj1, 0, PyInt_FromLong(dir));
+	err = pcall(pymelem, attr, obj1, &res);
+	if (err >= 0) {
+		t1 = PyTuple_GetItem(res, 1);
+		t2 = PyTuple_GetItem(res, 2);
+		if (PyLong_Check(t1) && PyLong_Check(t2)) {
+			*min = PyLong_AsLong(PyTuple_GetItem(res, 1));
+			*max = PyLong_AsLong(PyTuple_GetItem(res, 2));
+			err = 0;
+#if PY_MAJOR_VERSION < 3
+		} else if (PyInt_Check(t1) && PyInt_Check(t2)) {
+			*min = PyInt_AsLong(PyTuple_GetItem(res, 1));
+			*max = PyInt_AsLong(PyTuple_GetItem(res, 2));
+			err = 0;
+#endif
+		} else {
+			PyErr_Format(PyExc_TypeError, "wrong result (invalid tuple)");
+			PyErr_Print();
+			PyErr_Clear();
+			err = -EIO;
+		}
+	}
+	Py_XDECREF(res);
+	return err;
+}
+
+static int get_range_ops(snd_mixer_elem_t *elem, int dir,
+                         long *min, long *max)
+{
+	return get_x_range_ops(elem, dir, min, max, "opsGetRange");
+}
+
+static int set_range_ops(snd_mixer_elem_t *elem, int dir,
+                         long min, long max)
+{
+	PyObject *obj1;
+	struct pymelem *pymelem = melem_to_pymelem(elem);
+
+	obj1 = PyTuple_New(3);
+	PyTuple_SET_ITEM(obj1, 0, PyInt_FromLong(dir));
+	PyTuple_SET_ITEM(obj1, 1, PyInt_FromLong(min));
+	PyTuple_SET_ITEM(obj1, 2, PyInt_FromLong(max));
+	return pcall(pymelem, "opsGetRange", obj1, NULL);
+}
+
+static int get_x_ops(snd_mixer_elem_t *elem, int dir,
+                     long channel, long *value,
+                     const char *attr)
+{
+	PyObject *obj1, *t1, *res;
+	struct pymelem *pymelem = melem_to_pymelem(elem);
+	int err;
+	
+	obj1 = PyTuple_New(2);
+	PyTuple_SET_ITEM(obj1, 0, PyInt_FromLong(dir));
+	PyTuple_SET_ITEM(obj1, 1, PyInt_FromLong(channel));
+	err = pcall(pymelem, attr, obj1, &res);
+	if (err >= 0) {
+		t1 = PyTuple_GetItem(res, 1);
+		if (PyLong_Check(t1)) {
+			*value = PyLong_AsLong(t1);
+			err = 0;
+#if PY_MAJOR_VERSION < 3
+		} else if (PyInt_Check(t1)) {
+			*value = PyInt_AsLong(t1);
+			err = 0;
+#endif
+		} else {
+			PyErr_Format(PyExc_TypeError, "wrong result (invalid tuple)");
+			PyErr_Print();
+			PyErr_Clear();
+			err = -EIO;
+		}
+	}
+	Py_XDECREF(res);
+	return err;
+}
+
+static int get_volume_ops(snd_mixer_elem_t *elem, int dir,
+			  snd_mixer_selem_channel_id_t channel, long *value)
+{
+	return get_x_ops(elem, dir, channel, value, "opsGetVolume");
+}
+
+static int get_switch_ops(snd_mixer_elem_t *elem, int dir,
+                          snd_mixer_selem_channel_id_t channel, int *value)
+{
+	long value1 = 0;
+	int res;
+	res = get_x_ops(elem, dir, channel, &value1, "opsGetSwitch");
+	*value = value1;
+	return res;
+}
+
+static int ask_vol_dB_ops(snd_mixer_elem_t *elem,
+			  int dir,
+			  long value,
+			  long *dbValue)
+{
+	return get_x_ops(elem, dir, value, dbValue, "opsGetVolDB");
+}
+
+static int ask_dB_vol_ops(snd_mixer_elem_t *elem,
+			  int dir,
+			  long value,
+			  long *dbValue,
+			  int xdir)
+{
+	PyObject *obj1, *t1, *res;
+	struct pymelem *pymelem = melem_to_pymelem(elem);
+	int err;
+	
+	obj1 = PyTuple_New(3);
+	PyTuple_SET_ITEM(obj1, 0, PyInt_FromLong(dir));
+	PyTuple_SET_ITEM(obj1, 1, PyInt_FromLong(value));
+	PyTuple_SET_ITEM(obj1, 2, PyInt_FromLong(xdir));
+	err = pcall(pymelem, "opsGetDBVol", obj1, &res);
+	if (err >= 0) {
+		t1 = PyTuple_GetItem(res, 1);
+		if (PyLong_Check(t1)) {
+			*dbValue = PyLong_AsLong(t1);
+			err = 0;
+#if PY_MAJOR_VERSION < 3
+		} else if (PyInt_Check(t1)) {
+			*dbValue = PyInt_AsLong(t1);
+			err = 0;
+#endif
+		} else {
+			PyErr_Format(PyExc_TypeError, "wrong result (invalid tuple)");
+			PyErr_Print();
+			PyErr_Clear();
+			err = -EIO;
+		}
+	}
+	Py_XDECREF(res);
+	return err;
+}
+
+static int get_dB_ops(snd_mixer_elem_t *elem,
+                      int dir,
+                      snd_mixer_selem_channel_id_t channel,
+                      long *value)
+{
+	return get_x_ops(elem, dir, channel, value, "opsGetDB");
+}
+
+static int get_dB_range_ops(snd_mixer_elem_t *elem, int dir,
+                            long *min, long *max)
+{
+	return get_x_range_ops(elem, dir, min, max, "opsGetDBRange");
+}
+
+static int set_volume_ops(snd_mixer_elem_t *elem, int dir,
+                          snd_mixer_selem_channel_id_t channel, long value)
+{
+	PyObject *obj1;
+	struct pymelem *pymelem = melem_to_pymelem(elem);
+
+	obj1 = PyTuple_New(3);
+	PyTuple_SET_ITEM(obj1, 0, PyInt_FromLong(dir));
+	PyTuple_SET_ITEM(obj1, 1, PyInt_FromLong(channel));
+	PyTuple_SET_ITEM(obj1, 2, PyInt_FromLong(value));
+	return pcall(pymelem, "opsSetVolume", obj1, NULL);
+}
+
+static int set_switch_ops(snd_mixer_elem_t *elem, int dir,
+                          snd_mixer_selem_channel_id_t channel, int value)
+{
+	PyObject *obj1;
+	struct pymelem *pymelem = melem_to_pymelem(elem);
+
+	obj1 = PyTuple_New(3);
+	PyTuple_SET_ITEM(obj1, 0, PyInt_FromLong(dir));
+	PyTuple_SET_ITEM(obj1, 1, PyInt_FromLong(channel));
+	PyTuple_SET_ITEM(obj1, 2, PyInt_FromLong(value));
+	return pcall(pymelem, "opsSetSwitch", obj1, NULL);
+}
+
+static int set_dB_ops(snd_mixer_elem_t *elem, int dir,
+                      snd_mixer_selem_channel_id_t channel,
+                      long db_gain, int xdir)
+{
+	PyObject *obj1;
+	struct pymelem *pymelem = melem_to_pymelem(elem);
+
+	obj1 = PyTuple_New(4);
+	PyTuple_SET_ITEM(obj1, 0, PyInt_FromLong(dir));
+	PyTuple_SET_ITEM(obj1, 1, PyInt_FromLong(channel));
+	PyTuple_SET_ITEM(obj1, 2, PyInt_FromLong(db_gain));
+	PyTuple_SET_ITEM(obj1, 3, PyInt_FromLong(xdir));
+	return pcall(pymelem, "opsSetDB", obj1, NULL);
+}
+
+static int enum_item_name_ops(snd_mixer_elem_t *elem,
+                              unsigned int item,
+                              size_t maxlen, char *buf)
+{
+	PyObject *obj1, *obj2, *t1, *res;
+	struct pymelem *pymelem = melem_to_pymelem(elem);
+	int err;
+	unsigned int len;
+	char *s;
+	
+	obj1 = PyTuple_New(1);
+	PyTuple_SET_ITEM(obj1, 0, PyInt_FromLong(item));
+	err = pcall(pymelem, "opsGetEnumItemName", obj1, &res);
+	if (err >= 0) {
+		t1 = PyTuple_GetItem(res, 1);
+		if (PyUnicode_Check(t1)) {
+			obj2 = PyUnicode_AsEncodedString(t1, "utf-8", "strict");
+			if (obj2) {
+				s = PyBytes_AsString(obj2);
+				len = strlen(s);
+				if (maxlen - 1 > len)
+					len = maxlen - 1;
+				memcpy(buf, s, len);
+				buf[len] = '\0';
+				Py_DECREF(obj2);
+			} else {
+				goto errlbl;
+			}
+#if PY_MAJOR_VERSION < 3
+		} else if (PyString_Check(t1)) {
+			s = PyString_AsString(t1);
+			len = strlen(s);
+			if (maxlen - 1 > len)
+				len = maxlen - 1;
+			memcpy(buf, s, len);
+			buf[len] = '\0';
+#endif
+		} else {
+errlbl:
+			PyErr_Format(PyExc_TypeError, "wrong result (invalid tuple)");
+			PyErr_Print();
+			PyErr_Clear();
+			err = -EIO;
+		}
+	}
+	Py_XDECREF(res);
+	return err;
+}
+
+static int get_enum_item_ops(snd_mixer_elem_t *elem,
+                             snd_mixer_selem_channel_id_t channel,
+                             unsigned int *itemp)
+{
+	PyObject *obj1, *t1, *res;
+	struct pymelem *pymelem = melem_to_pymelem(elem);
+	int err;
+	
+	obj1 = PyTuple_New(1);
+	PyTuple_SET_ITEM(obj1, 0, PyInt_FromLong(channel));
+	err = pcall(pymelem, "opsGetEnumItem", obj1, &res);
+	if (err >= 0) {
+		t1 = PyTuple_GetItem(res, 1);
+		if (PyLong_Check(t1)) {
+			*itemp = PyLong_AsLong(t1);
+			err = 0;
+#if PY_MAJOR_VERSION < 3
+		} else if (PyInt_Check(t1)) {
+			*itemp = PyInt_AsLong(t1);
+			err = 0;
+#endif
+		} else {
+			PyErr_Format(PyExc_TypeError, "wrong result (invalid tuple)");
+			PyErr_Print();
+			PyErr_Clear();
+			err = -EIO;
+		}
+	}
+	Py_XDECREF(res);
+	return err;
+}
+
+static int set_enum_item_ops(snd_mixer_elem_t *elem,
+                             snd_mixer_selem_channel_id_t channel,
+                             unsigned int item)
+{
+	PyObject *obj1;
+	struct pymelem *pymelem = melem_to_pymelem(elem);
+
+	obj1 = PyTuple_New(2);
+	PyTuple_SET_ITEM(obj1, 0, PyInt_FromLong(channel));
+	PyTuple_SET_ITEM(obj1, 1, PyInt_FromLong(item));
+	return pcall(pymelem, "opsSetEnumItem", obj1, NULL);
+}
+
+static struct sm_elem_ops simple_python_ops = {
+        .is             = is_ops,
+        .get_range      = get_range_ops,
+        .get_dB_range   = get_dB_range_ops,
+        .set_range      = set_range_ops,
+        .ask_vol_dB	= ask_vol_dB_ops,
+        .ask_dB_vol	= ask_dB_vol_ops,
+        .get_volume     = get_volume_ops,
+        .get_dB         = get_dB_ops,
+        .set_volume     = set_volume_ops,
+        .set_dB         = set_dB_ops,
+        .get_switch     = get_switch_ops,
+        .set_switch     = set_switch_ops,
+        .enum_item_name = enum_item_name_ops,
+        .get_enum_item  = get_enum_item_ops,
+        .set_enum_item  = set_enum_item_ops
+};
+
+static void selem_free(snd_mixer_elem_t *elem)
+{
+	sm_selem_t *simple = snd_mixer_elem_get_private(elem);
+
+	if (simple->id) {
+		snd_mixer_selem_id_free(simple->id);
+		simple->id = NULL;
+	}
+}
+
+static PyObject *
+pymelem_cap(struct pymelem *pymelem ATTRIBUTE_UNUSED, void *priv)
+{
+	return PyInt_FromLong((long)priv);
+}
+
+static PyObject *
+pymelem_get_caps(struct pymelem *pymelem, void *priv ATTRIBUTE_UNUSED)
+{
+	return PyInt_FromLong(pymelem->selem.caps);
+}
+
+static PyObject *
+pymelem_get_name(struct pymelem *pymelem, void *priv ATTRIBUTE_UNUSED)
+{
+	return PyUnicode_FromString(snd_mixer_selem_id_get_name(pymelem->selem.id));
+}
+
+static PyObject *
+pymelem_get_index(struct pymelem *pymelem, void *priv ATTRIBUTE_UNUSED)
+{
+	return PyInt_FromLong(snd_mixer_selem_id_get_index(pymelem->selem.id));
+}
+
+static int
+pymelem_set_caps(struct pymelem *pymelem, PyObject *val, void *priv ATTRIBUTE_UNUSED)
+{
+	if (PyLong_Check(val)) {
+		pymelem->selem.caps = PyLong_AsLong(val);
+		return 0;
+	}
+#if PY_MAJOR_VERSION < 3
+	if (PyInt_Check(val)) {
+		pymelem->selem.caps = PyInt_AsLong(val);
+		return 0;
+	}
+#endif
+	PyErr_SetString(PyExc_TypeError, "The last attribute value must be an integer");
+	return -1;
+}
+
+static PyObject *
+pymelem_ignore(struct pymelem *pymelem ATTRIBUTE_UNUSED, PyObject *args ATTRIBUTE_UNUSED)
+{
+	Py_RETURN_NONE;
+}
+
+static PyObject *
+pymelem_ignore1(struct pymelem *pymelem ATTRIBUTE_UNUSED, PyObject *args ATTRIBUTE_UNUSED)
+{
+	Py_RETURN_TRUE;
+}
+
+static PyObject *
+pymelem_error(struct pymelem *pymelem ATTRIBUTE_UNUSED, PyObject *args ATTRIBUTE_UNUSED)
+{
+	return PyInt_FromLong(-EIO);
+}
+
+static PyObject *
+pymelem_attach(struct pymelem *pymelem, PyObject *args)
+{
+	PyObject *obj;
+	snd_hctl_elem_t *helem;
+	int err;
+	
+	if (!PyArg_ParseTuple(args, "O", &obj))
+		return NULL;
+	helem = (snd_hctl_elem_t *)get_C_ptr(obj, "get_C_helem");
+	if (helem == NULL)
+		return NULL;
+	err = snd_mixer_elem_attach(pymelem->melem, helem);
+	if (err < 0) {
+		PyErr_Format(PyExc_RuntimeError, "Cannot attach hcontrol element to mixer element: %s", snd_strerror(err));
+		return NULL;		
+	}
+	Py_RETURN_NONE;
+}
+
+static PyObject *
+pymelem_detach(struct pymelem *pymelem, PyObject *args)
+{
+	PyObject *obj;
+	snd_hctl_elem_t *helem;
+	int err;
+	
+	if (!PyArg_ParseTuple(args, "O", &obj))
+		return NULL;
+	helem = (snd_hctl_elem_t *)get_C_ptr(obj, "get_C_helem");
+	if (helem == NULL)
+		return NULL;
+	err = snd_mixer_elem_detach(pymelem->melem, helem);
+	if (err < 0) {
+		PyErr_Format(PyExc_RuntimeError, "Cannot detach hcontrol element to mixer element: %s", snd_strerror(err));
+		return NULL;		
+	}
+	Py_RETURN_NONE;
+}
+
+static PyObject *
+pymelem_event_info(struct pymelem *pymelem, PyObject *args)
+{
+	if (!PyArg_ParseTuple(args, ""))
+		return NULL;
+	return PyInt_FromLong(snd_mixer_elem_info(pymelem->melem));
+}
+
+static PyObject *
+pymelem_event_value(struct pymelem *pymelem, PyObject *args)
+{
+	if (!PyArg_ParseTuple(args, ""))
+		return NULL;
+	return PyInt_FromLong(snd_mixer_elem_value(pymelem->melem));
+}
+
+static int
+pymelem_init(struct pymelem *pymelem, PyObject *args, PyObject *kwds ATTRIBUTE_UNUSED)
+{
+	char *name;
+	long index, weight;
+	snd_mixer_selem_id_t *id;
+	int err;
+
+	if (!PyArg_ParseTuple(args, "Osii", &pymelem->py_mixer, &name, &index, &weight))
+		return -1;
+	memset(&pymelem->selem, 0, sizeof(pymelem->selem));
+	if (snd_mixer_selem_id_malloc(&id))
+		return -1;
+	snd_mixer_selem_id_set_name(id, name);
+	snd_mixer_selem_id_set_index(id, index);
+	pymelem->selem.id = id;
+	pymelem->selem.ops = &simple_python_ops;
+	err = snd_mixer_elem_new(&pymelem->melem, SND_MIXER_ELEM_SIMPLE,
+				 weight, &pymelem->selem, selem_free);
+	if (err < 0) {
+		snd_mixer_selem_id_free(id);
+		return -1;
+	}
+	return 0;
+}
+
+static void
+pymelem_dealloc(struct pymelem *self)
+{
+	selem_free(self->melem);
+}
+
+static PyGetSetDef pymelem_getseters[] = {
+	{"CAP_GVOLUME", (getter)pymelem_cap, NULL, NULL, (void *)SM_CAP_GVOLUME},
+	{"CAP_GSWITCH", (getter)pymelem_cap, NULL, NULL, (void *)SM_CAP_GSWITCH},
+	{"CAP_PVOLUME", (getter)pymelem_cap, NULL, NULL, (void *)SM_CAP_PVOLUME},
+	{"CAP_PVOLUME_JOIN", (getter)pymelem_cap, NULL, NULL, (void *)SM_CAP_PVOLUME_JOIN},
+	{"CAP_PSWITCH", (getter)pymelem_cap, NULL, NULL, (void *)SM_CAP_PSWITCH},
+	{"CAP_PSWITCH_JOIN", (getter)pymelem_cap, NULL, NULL, (void *)SM_CAP_PSWITCH_JOIN},
+	{"CAP_CVOLUME", (getter)pymelem_cap, NULL, NULL, (void *)SM_CAP_CVOLUME},
+	{"CAP_CVOLUME_JOIN", (getter)pymelem_cap, NULL, NULL, (void *)SM_CAP_CVOLUME_JOIN},
+	{"CAP_CSWITCH", (getter)pymelem_cap, NULL, NULL, (void *)SM_CAP_CSWITCH},
+	{"CAP_CSWITCH_JOIN", (getter)pymelem_cap, NULL, NULL, (void *)SM_CAP_CSWITCH_JOIN},
+	{"CAP_CSWITCH_EXCL", (getter)pymelem_cap, NULL, NULL, (void *)SM_CAP_CSWITCH_EXCL},
+	{"CAP_PENUM", (getter)pymelem_cap, NULL, NULL, (void *)SM_CAP_PENUM},
+	{"CAP_CENUM", (getter)pymelem_cap, NULL, NULL, (void *)SM_CAP_CENUM},
+
+	{"caps", (getter)pymelem_get_caps, (setter)pymelem_set_caps, NULL, NULL},
+
+	{"name", (getter)pymelem_get_name, NULL, NULL, NULL},
+	{"index", (getter)pymelem_get_index, NULL, NULL, NULL},
+	        
+	{NULL,NULL,NULL,NULL,NULL}
+};
+
+static PyMethodDef pymelem_methods[] = {
+	{"attach", (PyCFunction)pymelem_attach, METH_VARARGS, NULL},
+	{"detach", (PyCFunction)pymelem_detach, METH_VARARGS, NULL},
+	
+	/* "default" functions - no functionality */
+	{"opsIsActive", (PyCFunction)pymelem_ignore1, METH_VARARGS, NULL},
+	{"opsIsMono", (PyCFunction)pymelem_ignore, METH_VARARGS, NULL},
+	{"opsIsChannel", (PyCFunction)pymelem_ignore, METH_VARARGS, NULL},
+	{"opsIsEnumerated", (PyCFunction)pymelem_ignore, METH_VARARGS, NULL},
+	{"opsIsEnumCnt", (PyCFunction)pymelem_ignore, METH_VARARGS, NULL},
+
+	{"opsGetDB", (PyCFunction)pymelem_error, METH_VARARGS, NULL},
+	
+	{"eventInfo", (PyCFunction)pymelem_event_info, METH_VARARGS, NULL},
+	{"eventValue", (PyCFunction)pymelem_event_value, METH_VARARGS, NULL},
+
+	{NULL,NULL,0,NULL}
+};
+
+static PyTypeObject pymelem_type = {
+        PyVarObject_HEAD_INIT(NULL, 0)
+        tp_name:        "smixer_python.InternalMElement",
+        tp_basicsize:   sizeof(struct pymelem),
+        tp_dealloc:     (destructor)pymelem_dealloc,
+        tp_flags:       Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,
+        tp_doc:         NULL /* mixerinit__doc__ */,
+        tp_getset:      pymelem_getseters,
+        tp_init:        (initproc)pymelem_init,
+        tp_alloc:       PyType_GenericAlloc,
+        tp_new:         PyType_GenericNew,
+        tp_free:        PyObject_Del,
+        tp_methods:     pymelem_methods,
+};
+
+static PyObject *
+pymixer_attach_hctl(struct pymixer *pymixer, PyObject *args)
+{
+	PyObject *obj;
+	snd_hctl_t *hctl;
+	void **hctls;
+	int err;
+	
+	if (!PyArg_ParseTuple(args, "O", &obj))
+		return NULL;
+	hctl = (snd_hctl_t *)get_C_ptr(obj, "get_C_hctl");
+	if (hctl == NULL)
+		return NULL;
+	err = snd_mixer_attach_hctl(pymixer->mixer, hctl);
+	if (err < 0) {
+		PyErr_Format(PyExc_RuntimeError, "Cannot attach hctl: %s", snd_strerror(err));
+		return NULL;
+	}
+	hctls = realloc(pymixer->hctl, sizeof(void *) * (pymixer->hctl_count+1) * 2);
+	if (hctls == NULL) {
+		PyErr_SetString(PyExc_RuntimeError, "No enough memory");
+		return NULL;
+	}
+	pymixer->hctl = hctls;
+	pymixer->hctl[pymixer->hctl_count*2] = (void *)hctl;
+	pymixer->hctl[pymixer->hctl_count*2+1] = (void *)obj;
+	pymixer->hctl_count++;
+	Py_INCREF(obj);
+	Py_RETURN_NONE;
+}
+
+static PyObject *
+pymixer_register(struct pymixer *pymixer, PyObject *args)
+{
+	int err;
+	
+	if (!PyArg_ParseTuple(args, ""))
+		return NULL;
+	err = snd_mixer_class_register(pymixer->class, pymixer->mixer);
+	if (err < 0) {
+		PyErr_Format(PyExc_RuntimeError, "Cannot register mixer: %s", snd_strerror(err));
+		return NULL;
+	}
+	Py_RETURN_NONE;
+}
+
+static PyObject *
+pymixer_melement_new(struct pymixer *pymixer, PyObject *args)
+{
+	PyObject *obj, *obj1, *obj2;
+	char *class, *name;
+	long index, weight;
+	
+	if (!PyArg_ParseTuple(args, "ssii", &class, &name, &index, &weight))
+		return NULL;
+	obj = PyDict_GetItemString(pymixer->mdict, class);
+	if (obj) {
+		obj1 = PyTuple_New(4);
+		PyTuple_SET_ITEM(obj1, 0, (PyObject *)pymixer);
+		Py_INCREF((PyObject *)pymixer);
+		PyTuple_SET_ITEM(obj1, 1, PyUnicode_FromString(name));
+		PyTuple_SET_ITEM(obj1, 2, PyInt_FromLong(index));
+		PyTuple_SET_ITEM(obj1, 3, PyInt_FromLong(weight));
+		obj2 = PyObject_CallObject(obj, obj1);
+		Py_XDECREF(obj1);
+		if (obj2) {
+			struct pymelem *pymelem = (struct pymelem *)obj2;
+			void **melems = realloc(pymixer->melem, sizeof(void *) * (pymixer->melem_count + 1) * 2);
+			if (melems == NULL) {
+				Py_DECREF(obj2);
+				return NULL;
+			}
+			melems[pymixer->melem_count*2] = pymelem->melem;
+			melems[pymixer->melem_count*2+1] = obj2;
+			Py_INCREF(obj2);
+			pymixer->melem = melems;
+			pymixer->melem_count++;
+		}
+	} else {
+		PyErr_Format(PyExc_RuntimeError, "Cannot find class '%s'", class);
+		return NULL;
+	}
+	return obj2;
+}
+
+static PyObject *
+pymixer_melement_add(struct pymixer *pymixer, PyObject *args)
+{
+	PyObject *obj;
+	struct pymelem *pymelem;
+	int err;
+	
+	if (!PyArg_ParseTuple(args, "O", &obj))
+		return NULL;
+	pymelem = (struct pymelem *)obj;
+	err = snd_mixer_elem_add(pymelem->melem, pymixer->class);
+	if (err < 0) {
+		PyErr_Format(PyExc_RuntimeError, "Cannot add mixer element: %s", snd_strerror(err));
+		return NULL;		
+	}
+	Py_RETURN_NONE;
+}
+
+static int
+pymixer_init(struct pymixer *pymixer, PyObject *args, PyObject *kwds ATTRIBUTE_UNUSED)
+{
+	long class, mixer;
+
+	if (!PyArg_ParseTuple(args, "iiO", &class, &mixer, &pymixer->mdict))
+		return -1;
+	pymixer->class = (snd_mixer_class_t *)class;
+	pymixer->mixer = (snd_mixer_t *)mixer;
+	pymixer->hctl_count = 0;
+	pymixer->hctl = NULL;
+	pymixer->helem_count = 0;
+	pymixer->helem = NULL;
+	pymixer->melem_count = 0;
+	pymixer->melem = NULL;
+	return 0;
+}
+
+static void
+pymixer_free(struct pymixer *self)
+{
+	int idx;
+	
+	for (idx = 0; idx < self->hctl_count; idx++) {
+		snd_mixer_detach_hctl(self->mixer, self->hctl[idx*2]);
+		Py_DECREF((PyObject *)self->hctl[idx*2+1]);
+	}
+	if (self->hctl)
+		free(self->hctl);
+	self->hctl_count = 0;
+	self->hctl = NULL;
+	for (idx = 0; idx < self->helem_count; idx++)
+		Py_DECREF((PyObject *)self->helem[idx*2+1]);
+	if (self->helem)
+		free(self->helem);
+	self->helem_count = 0;
+	self->helem = NULL;
+	for (idx = 0; idx < self->melem_count; idx++)
+		Py_DECREF((PyObject *)self->melem[idx*2+1]);
+	if (self->melem)
+		free(self->melem);
+	self->melem_count = 0;
+	self->melem = NULL;
+}
+
+static void
+pymixer_dealloc(struct pymixer *self)
+{
+	pymixer_free(self);
+}
+
+static PyGetSetDef pymixer_getseters[] = {
+	{NULL,NULL,NULL,NULL,NULL}
+};
+
+static PyMethodDef pymixer_methods[] = {
+	{"attachHCtl", (PyCFunction)pymixer_attach_hctl, METH_VARARGS, NULL},
+	{"register", (PyCFunction)pymixer_register, METH_VARARGS, NULL},
+	{"newMElement", (PyCFunction)pymixer_melement_new, METH_VARARGS, NULL},
+	{"addMElement", (PyCFunction)pymixer_melement_add, METH_VARARGS, NULL},
+	{NULL,NULL,0,NULL}
+};
+
+static PyTypeObject pymixer_type = {
+        PyVarObject_HEAD_INIT(NULL, 0)
+        tp_name:        "smixer_python.InternalMixer",
+        tp_basicsize:   sizeof(struct pymixer),
+        tp_dealloc:     (destructor)pymixer_dealloc,
+        tp_flags:       Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,
+        tp_doc:         NULL /* mixerinit__doc__ */,
+        tp_getset:      pymixer_getseters,
+        tp_init:        (initproc)pymixer_init,
+        tp_alloc:       PyType_GenericAlloc,
+        tp_new:         PyType_GenericNew,
+        tp_free:        PyObject_Del,
+        tp_methods:     pymixer_methods,
+};
+
+static PyMethodDef python_methods[] = {
+	{NULL, NULL, 0, NULL}
+};
+
+static PyObject *new_helem(struct python_priv *priv, snd_hctl_elem_t *helem)
+{
+	PyObject *obj, *py_hctl = NULL, *obj1, *obj2;
+	snd_hctl_t *hctl = snd_hctl_elem_get_hctl(helem);
+	struct pymixer *pymixer = (struct pymixer *)priv->py_mixer;
+	int idx;
+
+	for (idx = 0; idx < pymixer->hctl_count; idx++) {
+		if (pymixer->hctl[idx] == hctl) {
+			py_hctl = pymixer->hctl[idx*2+1];
+			break;
+		}
+	}
+	if (py_hctl == NULL)
+		return NULL;
+	obj = PyDict_GetItemString(priv->py_mdict, "HElement");
+	if (obj) {
+		obj1 = PyTuple_New(3);
+		PyTuple_SET_ITEM(obj1, 0, py_hctl);
+		Py_INCREF(py_hctl);
+		PyTuple_SET_ITEM(obj1, 1, PyFloat_FromDouble(1));
+		PyTuple_SET_ITEM(obj1, 2, PyInt_FromLong((long)helem));
+		obj2 = PyObject_CallObject(obj, obj1);
+		if (obj2 == NULL) {
+			PyErr_Print();
+			PyErr_Clear();
+		}
+		Py_XDECREF(obj1);
+	} else {
+		SNDERR("Unable to create InternalMixer object");
+		return NULL;
+	}
+	if (obj2) {
+		struct pymixer *pymixer = (struct pymixer *)priv->py_mixer;
+		void **helems = realloc(pymixer->helem, sizeof(void *) * (pymixer->helem_count + 1) * 2);
+		if (helems == NULL) {
+			Py_DECREF(obj2);
+			return NULL;
+		}
+		helems[pymixer->helem_count*2] = helem;
+		helems[pymixer->helem_count*2+1] = obj2;
+		Py_INCREF(obj2);
+		pymixer->helem = helems;
+		pymixer->helem_count++;
+	}
+	return obj2;
+}
+
+static PyObject *find_helem(struct python_priv *priv, snd_hctl_elem_t *helem)
+{
+	struct pymixer *pymixer = (struct pymixer *)priv->py_mixer;
+	int idx;
+
+	for (idx = 0; idx < pymixer->helem_count; idx++) {
+		if (pymixer->helem[idx*2] == helem)
+			return (PyObject *)pymixer->helem[idx*2+1];
+	}
+	return NULL;
+}
+
+static PyObject *find_melem(struct python_priv *priv, snd_mixer_elem_t *melem)
+{
+	struct pymixer *pymixer = (struct pymixer *)priv->py_mixer;
+	int idx;
+
+	for (idx = 0; idx < pymixer->melem_count; idx++) {
+		if (pymixer->melem[idx*2] == melem)
+			return (PyObject *)pymixer->melem[idx*2+1];
+	}
+	return NULL;
+}
+
+int alsa_mixer_simple_event(snd_mixer_class_t *class, unsigned int mask,
+			    snd_hctl_elem_t *helem, snd_mixer_elem_t *melem)
+{
+	struct python_priv *priv = snd_mixer_sbasic_get_private(class);
+	PyThreadState *tstate;
+	PyObject *t, *o, *r;
+	int res = -ENOMEM;
+
+	tstate = PyThreadState_New(main_interpreter);
+	PyThreadState_Swap(tstate);
+        
+        t = PyTuple_New(3);
+        if (t) {
+        	PyTuple_SET_ITEM(t, 0, (PyObject *)PyInt_FromLong(mask));
+        	o = find_helem(priv, helem);
+	        if (mask & SND_CTL_EVENT_MASK_ADD) {
+	        	if (o == NULL)
+        			o = new_helem(priv, helem);
+		}
+        	if (o == NULL)
+        		return 0;
+		PyTuple_SET_ITEM(t, 1, o);
+		Py_INCREF(o);
+        	o = melem ? find_melem(priv, melem) : Py_None;
+		PyTuple_SET_ITEM(t, 2, o);
+		Py_INCREF(o);
+		r = PyObject_CallObject(priv->py_event_func, t);
+		Py_DECREF(t);
+		if (r) {
+			if (PyLong_Check(r)) {
+				res = PyLong_AsLong(r);
+#if PY_MAJOR_VERSION < 3
+			} else if (PyInt_Check(r)) {
+				res = PyInt_AsLong(r);
+#endif
+			} else if (r == Py_None) {
+				res = 0;
+			}
+			Py_DECREF(r);
+		} else {
+			PyErr_Print();
+			PyErr_Clear();
+			res = -EIO;
+		}
+	}
+	
+	return res;
+}
+
+static void alsa_mixer_simple_free(snd_mixer_class_t *class)
+{
+	struct python_priv *priv = snd_mixer_sbasic_get_private(class);
+
+	if (priv->py_mixer) {
+		pymixer_free((struct pymixer *)priv->py_mixer);
+		Py_DECREF(priv->py_mixer);
+	}
+	if (priv->py_initialized) {
+		Py_XDECREF(priv->py_event_func);
+		Py_Finalize();
+	}
+	free(priv);
+}
+
+static int alsa_mixer_simple_pyinit(struct python_priv *priv,
+                                    PyObject *py_mod,
+                                    FILE *fp,
+				    const char *file,
+				    snd_mixer_class_t *class,
+				    snd_mixer_t *mixer,
+				    const char *device)
+{
+	PyObject *obj, *obj1, *obj2, *mdict;
+
+	mdict = priv->py_mdict = PyModule_GetDict(py_mod);
+	obj = PyUnicode_FromString(file);
+	if (obj)
+		PyDict_SetItemString(mdict, "__file__", obj);
+	Py_XDECREF(obj);
+	obj = PyUnicode_FromString(device);
+	if (obj)
+		PyDict_SetItemString(mdict, "device", obj);
+	Py_XDECREF(obj);
+	Py_INCREF(&pymelem_type);
+	Py_INCREF(&pymixer_type);
+	PyModule_AddObject(py_mod, "InternalMElement", (PyObject *)&pymelem_type);
+	PyModule_AddObject(py_mod, "InternalMixer", (PyObject *)&pymixer_type);
+	obj = PyDict_GetItemString(mdict, "InternalMixer");
+	if (obj) {
+		obj1 = PyTuple_New(3);
+		PyTuple_SET_ITEM(obj1, 0, PyInt_FromLong((long)class));
+		PyTuple_SET_ITEM(obj1, 1, PyInt_FromLong((long)mixer));
+		PyTuple_SET_ITEM(obj1, 2, mdict);
+		Py_INCREF(mdict);
+		obj2 = PyObject_CallObject(obj, obj1);
+		Py_XDECREF(obj1);
+		PyDict_SetItemString(mdict, "mixer", obj2);
+		priv->py_mixer = obj2;
+	} else {
+		SNDERR("Unable to create InternalMixer object");
+		return -EIO;
+	}
+
+	obj = PyRun_FileEx(fp, file, Py_file_input, mdict, mdict, 1);
+	if (obj == NULL)
+		PyErr_Print();
+	Py_XDECREF(obj);
+	priv->py_event_func = PyDict_GetItemString(mdict, "event");
+	if (priv->py_event_func == NULL) {
+		SNDERR("Unable to find python function 'event'");
+		return -EIO;
+	}
+	return 0;
+}
+
+#if PY_MAJOR_VERSION >= 3
+static struct PyModuleDef smixer_python_module = {
+        PyModuleDef_HEAD_INIT,
+        "smixer_python",
+        NULL,
+        0,
+        python_methods,
+        NULL,
+        NULL,
+        NULL,
+        NULL
+};
+#endif
+
+int alsa_mixer_simple_finit(snd_mixer_class_t *class,
+			    snd_mixer_t *mixer,
+			    const char *device)
+{
+	struct python_priv *priv;
+	FILE *fp;
+	const char *file;
+	PyObject *obj, *py_mod;
+	char path[PATH_MAX];
+
+	priv = calloc(1, sizeof(*priv));
+	if (priv == NULL)
+		return -ENOMEM;
+
+	snd_mixer_sbasic_set_private(class, priv);
+	snd_mixer_sbasic_set_private_free(class, alsa_mixer_simple_free);
+
+	file = getenv("ALSA_MIXER_SIMPLE_MPYTHON");
+	if (file == NULL) {
+		snd_dlpath(path, sizeof(path), SCRIPT);
+		file = path;
+	}
+
+	fp = fopen(file, "r");
+	if (fp == NULL) {
+		SNDERR("Unable to find python module '%s'", file);
+		return -ENODEV;
+	}
+	
+	Py_Initialize();
+	if (PyType_Ready(&pymelem_type) < 0 ||
+	    PyType_Ready(&pymixer_type) < 0) {
+		fclose(fp);
+		return -EIO;
+	}
+#if PY_MAJOR_VERSION < 3
+	Py_InitModule("smixer_python", python_methods);
+#else
+	PyModule_Create(&smixer_python_module);
+#endif
+	priv->py_initialized = 1;
+	main_interpreter = PyThreadState_Get()->interp;
+	obj = PyImport_GetModuleDict();
+	py_mod = PyDict_GetItemString(obj, "__main__");
+	if (py_mod)
+		alsa_mixer_simple_pyinit(priv, py_mod, fp, file, class, mixer, device);
+	return 0;
+}
Index: lib/create-1.2.8-python-patch/alsa-lib-1.2.8-new/modules/mixer/simple
===================================================================
--- lib/create-1.2.8-python-patch/alsa-lib-1.2.8-new/modules/mixer/simple	(nonexistent)
+++ lib/create-1.2.8-python-patch/alsa-lib-1.2.8-new/modules/mixer/simple	(revision 5)

Property changes on: lib/create-1.2.8-python-patch/alsa-lib-1.2.8-new/modules/mixer/simple
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: lib/create-1.2.8-python-patch/alsa-lib-1.2.8-new/modules/mixer
===================================================================
--- lib/create-1.2.8-python-patch/alsa-lib-1.2.8-new/modules/mixer	(nonexistent)
+++ lib/create-1.2.8-python-patch/alsa-lib-1.2.8-new/modules/mixer	(revision 5)

Property changes on: lib/create-1.2.8-python-patch/alsa-lib-1.2.8-new/modules/mixer
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: lib/create-1.2.8-python-patch/alsa-lib-1.2.8-new/modules
===================================================================
--- lib/create-1.2.8-python-patch/alsa-lib-1.2.8-new/modules	(nonexistent)
+++ lib/create-1.2.8-python-patch/alsa-lib-1.2.8-new/modules	(revision 5)

Property changes on: lib/create-1.2.8-python-patch/alsa-lib-1.2.8-new/modules
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: lib/create-1.2.8-python-patch/alsa-lib-1.2.8-new
===================================================================
--- lib/create-1.2.8-python-patch/alsa-lib-1.2.8-new	(nonexistent)
+++ lib/create-1.2.8-python-patch/alsa-lib-1.2.8-new	(revision 5)

Property changes on: lib/create-1.2.8-python-patch/alsa-lib-1.2.8-new
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: lib/create-1.2.8-python-patch/create.patch.sh
===================================================================
--- lib/create-1.2.8-python-patch/create.patch.sh	(nonexistent)
+++ lib/create-1.2.8-python-patch/create.patch.sh	(revision 5)
@@ -0,0 +1,15 @@
+#!/bin/sh
+
+VERSION=1.2.8
+
+tar --files-from=file.list -xjvf ../alsa-lib-$VERSION.tar.bz2
+mv alsa-lib-$VERSION alsa-lib-$VERSION-orig
+
+cp -rf ./alsa-lib-$VERSION-new ./alsa-lib-$VERSION
+
+diff --unified -Nr  alsa-lib-$VERSION-orig  alsa-lib-$VERSION > alsa-lib-$VERSION-python.patch
+
+mv alsa-lib-$VERSION-python.patch ../patches
+
+rm -rf ./alsa-lib-$VERSION
+rm -rf ./alsa-lib-$VERSION-orig

Property changes on: lib/create-1.2.8-python-patch/create.patch.sh
___________________________________________________________________
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: lib/create-1.2.8-python-patch/file.list
===================================================================
--- lib/create-1.2.8-python-patch/file.list	(nonexistent)
+++ lib/create-1.2.8-python-patch/file.list	(revision 5)
@@ -0,0 +1 @@
+alsa-lib-1.2.8/modules/mixer/simple/python.c
Index: lib/create-1.2.8-python-patch
===================================================================
--- lib/create-1.2.8-python-patch	(nonexistent)
+++ lib/create-1.2.8-python-patch	(revision 5)

Property changes on: lib/create-1.2.8-python-patch
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: lib/patches/README
===================================================================
--- lib/patches/README	(nonexistent)
+++ lib/patches/README	(revision 5)
@@ -0,0 +1,6 @@
+
+/* begin *
+
+   TODO: Leave some comment here.
+
+ * end */
Index: lib/patches
===================================================================
--- lib/patches	(nonexistent)
+++ lib/patches	(revision 5)

Property changes on: lib/patches
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: lib
===================================================================
--- lib	(nonexistent)
+++ lib	(revision 5)

Property changes on: lib
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: oss/Makefile
===================================================================
--- oss/Makefile	(nonexistent)
+++ oss/Makefile	(revision 5)
@@ -0,0 +1,47 @@
+
+COMPONENT_TARGETS = $(HARDWARE_NOARCH)
+
+
+include ../../../../../build-system/constants.mk
+
+
+url         = $(DOWNLOAD_SERVER)/sources/packages/m/alsa/oss
+
+versions    = 1.1.8
+pkgname     = alsa-oss
+suffix      = tar.bz2
+
+tarballs    = $(addsuffix .$(suffix), $(addprefix $(pkgname)-, $(versions)))
+sha1s       = $(addsuffix .sha1sum, $(tarballs))
+
+
+BUILD_TARGETS = $(tarballs) $(sha1s)
+
+
+include ../../../../../build-system/core.mk
+
+
+.PHONY: download_clean
+
+
+$(tarballs):
+	@echo -e "\n======= Downloading source tarballs =======" ; \
+	 for tarball in $(tarballs) ; do \
+	   echo "$(url)/$$tarball" | xargs -n 1 -P 100 wget $(WGET_OPTIONS) - & \
+	 done ; wait
+
+$(sha1s): $(tarballs)
+	@for sha in $@ ; do \
+	   echo -e "\n======= Downloading '$$sha' signature =======\n" ; \
+	   echo "$(url)/$$sha" | xargs -n 1 -P 100 wget $(WGET_OPTIONS) - & wait %1 ; \
+	   touch $$sha ; \
+	   echo -e "\n======= Check the '$$sha' sha1sum =======\n" ; \
+	   sha1sum --check $$sha ; ret="$$?" ; \
+	   if [ "$$ret" == "1" ]; then \
+	     echo -e "\n======= ERROR: Bad '$$sha' sha1sum =======\n" ; \
+	     exit 1 ; \
+	   fi ; \
+	 done
+
+download_clean:
+	@rm -f $(tarballs) $(sha1s)
Index: oss
===================================================================
--- oss	(nonexistent)
+++ oss	(revision 5)

Property changes on: oss
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: plugins/Makefile
===================================================================
--- plugins/Makefile	(nonexistent)
+++ plugins/Makefile	(revision 5)
@@ -0,0 +1,47 @@
+
+COMPONENT_TARGETS = $(HARDWARE_NOARCH)
+
+
+include ../../../../../build-system/constants.mk
+
+
+url         = $(DOWNLOAD_SERVER)/sources/packages/m/alsa/plugins
+
+versions    = 1.2.7.1
+pkgname     = alsa-plugins
+suffix      = tar.bz2
+
+tarballs    = $(addsuffix .$(suffix), $(addprefix $(pkgname)-, $(versions)))
+sha1s       = $(addsuffix .sha1sum, $(tarballs))
+
+
+BUILD_TARGETS = $(tarballs) $(sha1s)
+
+
+include ../../../../../build-system/core.mk
+
+
+.PHONY: download_clean
+
+
+$(tarballs):
+	@echo -e "\n======= Downloading source tarballs =======" ; \
+	 for tarball in $(tarballs) ; do \
+	   echo "$(url)/$$tarball" | xargs -n 1 -P 100 wget $(WGET_OPTIONS) - & \
+	 done ; wait
+
+$(sha1s): $(tarballs)
+	@for sha in $@ ; do \
+	   echo -e "\n======= Downloading '$$sha' signature =======\n" ; \
+	   echo "$(url)/$$sha" | xargs -n 1 -P 100 wget $(WGET_OPTIONS) - & wait %1 ; \
+	   touch $$sha ; \
+	   echo -e "\n======= Check the '$$sha' sha1sum =======\n" ; \
+	   sha1sum --check $$sha ; ret="$$?" ; \
+	   if [ "$$ret" == "1" ]; then \
+	     echo -e "\n======= ERROR: Bad '$$sha' sha1sum =======\n" ; \
+	     exit 1 ; \
+	   fi ; \
+	 done
+
+download_clean:
+	@rm -f $(tarballs) $(sha1s)
Index: plugins
===================================================================
--- plugins	(nonexistent)
+++ plugins	(revision 5)

Property changes on: plugins
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: tools/Makefile
===================================================================
--- tools/Makefile	(nonexistent)
+++ tools/Makefile	(revision 5)
@@ -0,0 +1,47 @@
+
+COMPONENT_TARGETS = $(HARDWARE_NOARCH)
+
+
+include ../../../../../build-system/constants.mk
+
+
+url         = $(DOWNLOAD_SERVER)/sources/packages/m/alsa/tools
+
+versions    = 1.2.5
+pkgname     = alsa-tools
+suffix      = tar.bz2
+
+tarballs    = $(addsuffix .$(suffix), $(addprefix $(pkgname)-, $(versions)))
+sha1s       = $(addsuffix .sha1sum, $(tarballs))
+
+
+BUILD_TARGETS = $(tarballs) $(sha1s)
+
+
+include ../../../../../build-system/core.mk
+
+
+.PHONY: download_clean
+
+
+$(tarballs):
+	@echo -e "\n======= Downloading source tarballs =======" ; \
+	 for tarball in $(tarballs) ; do \
+	   echo "$(url)/$$tarball" | xargs -n 1 -P 100 wget $(WGET_OPTIONS) - & \
+	 done ; wait
+
+$(sha1s): $(tarballs)
+	@for sha in $@ ; do \
+	   echo -e "\n======= Downloading '$$sha' signature =======\n" ; \
+	   echo "$(url)/$$sha" | xargs -n 1 -P 100 wget $(WGET_OPTIONS) - & wait %1 ; \
+	   touch $$sha ; \
+	   echo -e "\n======= Check the '$$sha' sha1sum =======\n" ; \
+	   sha1sum --check $$sha ; ret="$$?" ; \
+	   if [ "$$ret" == "1" ]; then \
+	     echo -e "\n======= ERROR: Bad '$$sha' sha1sum =======\n" ; \
+	     exit 1 ; \
+	   fi ; \
+	 done
+
+download_clean:
+	@rm -f $(tarballs) $(sha1s)
Index: tools
===================================================================
--- tools	(nonexistent)
+++ tools	(revision 5)

Property changes on: tools
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: utils/Makefile
===================================================================
--- utils/Makefile	(nonexistent)
+++ utils/Makefile	(revision 5)
@@ -0,0 +1,56 @@
+
+COMPONENT_TARGETS = $(HARDWARE_NOARCH)
+
+
+include ../../../../../build-system/constants.mk
+
+
+url         = $(DOWNLOAD_SERVER)/sources/packages/m/alsa/utils
+
+versions    = 1.2.8
+pkgname     = alsa-utils
+suffix      = tar.bz2
+
+tarballs    = $(addsuffix .$(suffix), $(addprefix $(pkgname)-, $(versions)))
+sha1s       = $(addsuffix .sha1sum, $(tarballs))
+
+patches     = $(CURDIR)/patches/alsa-utils-1.2.8-alsaconf.patch
+
+.NOTPARALLEL: $(patches)
+
+
+BUILD_TARGETS = $(tarballs) $(sha1s) $(patches)
+
+
+include ../../../../../build-system/core.mk
+
+
+.PHONY: download_clean
+
+
+$(tarballs):
+	@echo -e "\n======= Downloading source tarballs =======" ; \
+	 for tarball in $(tarballs) ; do \
+	   echo "$(url)/$$tarball" | xargs -n 1 -P 100 wget $(WGET_OPTIONS) - & \
+	 done ; wait
+
+$(sha1s): $(tarballs)
+	@for sha in $@ ; do \
+	   echo -e "\n======= Downloading '$$sha' signature =======\n" ; \
+	   echo "$(url)/$$sha" | xargs -n 1 -P 100 wget $(WGET_OPTIONS) - & wait %1 ; \
+	   touch $$sha ; \
+	   echo -e "\n======= Check the '$$sha' sha1sum =======\n" ; \
+	   sha1sum --check $$sha ; ret="$$?" ; \
+	   if [ "$$ret" == "1" ]; then \
+	     echo -e "\n======= ERROR: Bad '$$sha' sha1sum =======\n" ; \
+	     exit 1 ; \
+	   fi ; \
+	 done
+
+$(patches): $(sha1s)
+	@echo -e "\n======= Create Patches =======\n" ; \
+	 ( cd create-1.2.8-alsaconf-patch  ; ./create.patch.sh ) ; \
+	 echo -e "\n"
+
+download_clean:
+	@rm -f $(tarballs) $(sha1s) $(patches)
Index: utils/create-1.2.8-alsaconf-patch/alsa-utils-1.2.8-new/alsaconf/alsaconf.8
===================================================================
--- utils/create-1.2.8-alsaconf-patch/alsa-utils-1.2.8-new/alsaconf/alsaconf.8	(nonexistent)
+++ utils/create-1.2.8-alsaconf-patch/alsa-utils-1.2.8-new/alsaconf/alsaconf.8	(revision 5)
@@ -0,0 +1,92 @@
+.\"                                      Hey, EMACS: -*- nroff -*-
+.\" alsaconf.8 is copyright 2003 by Jordi Mallach <jordi@debian.org>
+.\" 
+.\" This is free documentation, see the latest version of the GNU
+.\" General Public License for copying conditions. There is NO warranty.
+.TH ALSACONF 8 "February 23, 2003"
+
+.SH NAME
+alsaconf \- configuration tool for the Advanced Linux Sound Architecture
+
+.SH SYNOPSIS
+.B alsaconf
+.RI [ options ]
+
+.SH DESCRIPTION
+This manual page documents briefly the
+.B alsaconf
+command.
+.PP
+\fBAlsaconf\fP is a simple shell script which tries to detect the sound cards
+on your system and writes a suitable configuration file for ALSA. It will try
+to guess what GNU/Linux distribution you're running, and will act accordingly
+to the standards of that distribution, if specific support is available.
+.PP
+Alsaconf will write a module-init-tools (or modutils) snippet which can be then used by module-init-tools (or modutils)
+to load the correct parameters for your sound card.
+
+.SH OPTIONS
+Alsaconf accepts the following options:
+.TP
+.B \-c, \-\-config file
+Specify the module config file.
+As default,
+.B alsaconf
+probes the available config file automatically.
+.TP
+.B \-d, \-\-devmode mode
+Set the device mode for the ALSA devices (default = 0666).
+This option is obsolete in the recent ALSA version.
+.TP
+.B \-g, \-\-gid gid
+Set the gid for the ALSA devices (default = 0).
+This option is obsolete in the recent ALSA version.
+.TP
+.B \-h, \-\-help
+Displays this help text.
+.TP
+.B \-L, \-\-log file
+Logging on the given file.  The log is appended to the file.
+This option is for debugging purpose only.
+.TP
+.B \-l, \-\-legacy
+Check only for legacy non-isapnp cards.
+.TP
+.B \-m, \-\-modinfo
+Read module descriptions instead of reading a card database.
+.TP
+.B \-P, \-\-listprobe
+List the supported legacy card modules.
+.TP
+.B \-p, \-\-probe card-name
+Probe a legacy non-isapnp card and print module options.
+.TP
+.B \-r, \-\-strict
+Set strict device mode (equiv. with \-g 17 \-d 0660).
+This option is obsolete in the recent ALSA version.
+.TP
+.B \-s, \-\-sound\-wav\-file
+Use the specified wav file as a test sound.
+.TP
+.B \-u, \-\-uid uid
+Set the uid for the ALSA devices (default = 0).
+This option is obsolete in the recent ALSA version.
+
+.SH SEE ALSO
+\fB
+alsamixer(1),
+amixer(1),
+aplay(1),
+arecord(1)
+\fP
+
+.SH HOMEPAGE
+http://www.alsa\-project.org/
+
+.SH AUTHOR
+The alsaconf script was written by
+Takashi Iwai <tiwai@suse.de>,
+Bernd Kaindl <bk@suse.de> and
+Jan Ondrej (SAL) <ondrejj@salstar.sk>
+
+This manual page was written by Jordi Mallach <jordi@debian.org>.
Index: utils/create-1.2.8-alsaconf-patch/alsa-utils-1.2.8-new/alsaconf/alsaconf.fr.8
===================================================================
--- utils/create-1.2.8-alsaconf-patch/alsa-utils-1.2.8-new/alsaconf/alsaconf.fr.8	(nonexistent)
+++ utils/create-1.2.8-alsaconf-patch/alsa-utils-1.2.8-new/alsaconf/alsaconf.fr.8	(revision 5)
@@ -0,0 +1,102 @@
+.\"                                      Hey, EMACS: -*- nroff -*-
+.\" alsaconf.8 is copyright 2003 by Jordi Mallach <jordi@debian.org>
+.\" 
+.\" This is free documentation, see the latest version of the GNU
+.\" General Public License for copying conditions. There is NO warranty.
+.TH ALSACONF 8 "15 mars 2005"
+
+.SH NOM
+alsaconf \- outil de configuration pour ALSA (architecture de son avancée de Linux)
+.\" configuration tool for the Advanced Linux Sound Architecture
+
+.SH SYNOPSIS
+.B alsaconf
+.RI [ options ]
+
+.SH DESCRIPTION
+Cette page de manuel documente brièvement la commande 
+.B alsaconf.
+
+.PP
+\fBAlsaconf\fP 
+est un simple script shell qui essaye de détecter les cartes son sur votre
+système et écrit un fichier de configuration adéquat pour ALSA. Il va
+essayer de deviner quelle distribution GNU/Linux vous utilisez, et agira
+conformément aux standards de cette distribution, si un support spécifique
+est disponible.
+
+.PP
+Alsaconf va écrire un fragment de code modutils qui peut être ensuite
+utilisé par modutils pour charger les paramètres corrects de votre carte
+son. 
+
+.SH OPTIONS
+Alsaconf accepte les options suivantes\ :
+
+.TP
+.B \-l, \-\-legacy
+Cherche seulement les anciennes cartes non-isapnp
+
+.TP
+.B \-m, \-\-modinfo
+Lit les descriptions de modules au lieu de lire une base de données de
+carte
+
+.TP
+.B \-s, \-\-sound\-wav\-file
+Utilise le fichier wav spécifié comme son de test
+
+.TP
+.B \-u, \-\-uid uid
+Choisit l'uid pour les périphériques ALSA (valeur par défaut\ = 0)
+
+.TP
+.B \-g, \-\-gid gid
+Choisit le gid pour les périphériques ALSA (valeur par défaut\ = 0)
+
+.TP
+.B \-d, \-\-devmode mode
+Choisit le mode du périphérique pour les périphériques ALSA (valeur par
+défaut\ : 0666)
+
+.TP
+.B \-r, \-\-strict
+Choisit le mode de périphérique strict (équivaut à -g\ 17 -d\ 0660)
+
+.TP
+.B \-L, \-\-log
+Mise en journal dans /tmp/alsaconf.log
+
+.TP
+.B \-p, \-\-probe card-name
+Teste une ancienne carte non-isapnp et affiche les options du module
+
+.TP
+.B \-h, \-\-help
+Affiche ce message d'aide
+
+
+.SH VOIR AUSSI
+\fB
+alsamixer(1),
+amixer(1),
+aplay(1),
+arecord(1)
+\fP
+
+.SH PAGE D'ACCUEIL
+http://www.alsa-project.org/
+
+.SH AUTEUR
+Le script alsaconf fut écrit par
+Takashi Iwai <tiwai@suse.de>,
+Bernd Kaindl <bk@suse.de> et
+Jan Ondrej (SAL) <ondrejj@salstar.sk>
+
+Cette page de manuel fut écrite par Jordi Mallach <jordi@debian.org>.
+
+.SH TRADUCTION
+Baptiste Mélès 2005.
+
+N'hésitez pas à signaler à l'auteur ou au traducteur, selon le cas, toute
+erreur dans cette page de manuel.
Index: utils/create-1.2.8-alsaconf-patch/alsa-utils-1.2.8-new/alsaconf/alsaconf.in
===================================================================
--- utils/create-1.2.8-alsaconf-patch/alsa-utils-1.2.8-new/alsaconf/alsaconf.in	(nonexistent)
+++ utils/create-1.2.8-alsaconf-patch/alsa-utils-1.2.8-new/alsaconf/alsaconf.in	(revision 5)
@@ -0,0 +1,1459 @@
+#!/bin/bash
+#
+#  ALSA Configurator
+#
+#  Copyright (c) 1999-2002  SuSE GmbH
+#                           Jan ONDREJ
+#
+#  written by Takashi Iwai <tiwai@suse.de>
+#             Bernd Kaindl <bk@suse.de>
+#             Jan ONDREJ (SAL) <ondrejj@salstar.sk>
+#
+#  based on the original version of Jan ONDREJ's alsaconf for ALSA 0.4.
+#
+#  This program is free software; you can redistribute it and/or modify
+#  it under the terms of the GNU General Public License as published by
+#  the Free Software Foundation; either version 2 of the License, or
+#  (at your option) any later version.
+#
+
+export TEXTDOMAIN=alsaconf
+
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+bindir=@bindir@
+sbindir=@sbindir@
+version=@VERSION@
+USE_NLS=@USE_NLS@
+
+# Useful for debugging
+PROCFS="/proc"
+SYSFS="/sys"
+
+# i18n stuff
+if test "$USE_NLS" = "yes" && type -p gettext > /dev/null; then
+  xecho() {
+    gettext -s "$*"
+  }
+else
+  xecho() {
+    echo "$*"
+  }
+  gettext() {
+    echo -n "$*"
+  }
+fi
+xmsg() {
+  msg=$(gettext "$1")
+  shift
+  printf "$msg" $*
+}
+
+# Check for GNU/Linux distributions
+if [ -f /etc/radix-version ]; then
+  distribution="radix"
+elif [ -f /etc/slackware-version ]; then
+  distribution="slackware"
+elif [ -f /etc/SuSE-release ]; then
+  distribution="suse"
+  suse_version=$(grep 'VERSION = ' /etc/SuSE-release | sed -e s/'VERSION = '//)
+elif [ -f /etc/UnitedLinux-release ]; then
+  distribution="suse"
+elif [ -f /etc/gentoo-release ]; then
+  distribution="gentoo"
+elif [ -f /etc/debian_version ]; then
+  distribution="debian"
+elif [ -f /etc/mandrake-release ]; then
+  distribution="mandrake"
+elif test -f /etc/redhat-release && grep -q "Red Hat" /etc/redhat-release; then
+  distribution="redhat"
+elif test -f /etc/fedora-release && grep -q "Fedora" /etc/fedora-release; then
+  distribution="fedora"
+elif [ -f /etc/slackware-version -o -f /etc/slamd64-version ]; then
+  distribution="slackware"
+else
+  distribution="unknown"
+fi
+
+for prog in lspci lsmod; do
+	for path in /sbin /usr/sbin /bin /usr/bin;do
+		test -x $path/$prog && eval $prog=$path/$prog
+	done
+done
+unset prog path
+
+usage() {
+    xecho "ALSA configurator"
+    echo "  version $version"
+    xecho "usage: alsaconf [options]
+  -l|--legacy    check only legacy non-isapnp cards
+  -m|--modinfo   read module descriptions instead of reading card db
+  -s|--sound wav-file
+                 use the specified wav file as a test sound
+  -u|--uid uid   set the uid for the ALSA devices (default = 0) [obsoleted]
+  -g|--gid gid   set the gid for the ALSA devices (default = 0) [obsoleted]
+  -d|--devmode mode
+                 set the permission for ALSA devices (default = 0666) [obs.]
+  -r|--strict    set strict device mode (equiv. with -g 17 -d 0660) [obsoleted]
+  -L|--log file  logging on the specified file (for debugging purpose only)
+  -p|--probe card-name
+                 probe a legacy non-isapnp card and print module options
+  -P|--listprobe list the supported legacy card modules
+  -c|--config file
+                 specify the module config file
+  -R|--resources list available DMA and IRQ resources with debug for legacy
+  -h|--help      what you're reading"
+}
+
+OPTS=`getopt -o lmL:hp:Pu:g:d:rs:c:R --long legacy,modinfo,log:,help,probe:,listprobe,uid:,gid:,devmode:,strict,sound:,config:,resources -n alsaconf -- "$@"` || exit 1
+eval set -- "$OPTS"
+
+do_legacy_only=0
+use_modinfo_db=0
+alsa_uid=0
+alsa_gid=0
+alsa_mode=0666
+legacy_probe_card=""
+LOGFILE=""
+TESTSOUND="@TESTSOUND@"
+try_all_combination=0
+resources="false"
+
+# legacy support
+LEGACY_CARDS="opl3sa2 cs4236 cs4232 cs4231 es18xx es1688 sb16 sb8"
+
+while true ; do
+    case "$1" in
+    -l|--legacy)
+	do_legacy_only=1; shift ;;
+    -m|--modinfo)
+	use_modinfo_db=1; shift ;;
+    -s|--sound)
+	TESTSOUND=$2; shift 2;;
+    -h|--help)
+	usage; exit 0 ;;
+    -L|--log)
+	LOGFILE="$2"; shift 2;;
+    -p|--probe)
+	legacy_probe_card="$2"; shift 2;;
+    -P|--listprobe)
+	echo "$LEGACY_CARDS"; exit 0;;
+    -u|--uid)
+	alsa_uid="$2"; shift 2;;
+    -g|--gid)
+	alsa_gid="$2"; shift 2;;
+    -d|--devmode)
+	alsa_mode="$2"; shift 2;;
+    -r|--strict)
+	alsa_uid=0; alsa_gid=17; alsa_mode=0660; shift;;
+    -c|--config)
+	cfgfile="$2"; shift 2;;
+    -R|--resources)
+        resources="true"; shift;;
+    --) shift ; break ;;
+    *) usage ; exit 1 ;;
+    esac
+done
+
+#
+# probe legacy ISA cards
+#
+
+check_dma_avail () {
+    list=""
+    if [ -d $SYSFS/bus/pnp/devices ]; then
+      for dma in $*; do
+        ok="true"
+        for i in $SYSFS/bus/pnp/devices/??:* ; do
+          if grep -q "state = active" $i/resources ; then
+            if grep -q '^dma '$dma'$' $i/resources; then
+              ok="false"
+            fi
+          fi
+        done
+        if [ -r $PROCFS/dma ]; then
+	  if grep -q '^ *'$dma': ' $PROCFS/dma ; then
+            ok="false"
+          fi
+	fi
+        if [ "$ok" = "true" ]; then
+          list="$list $dma"
+        fi
+      done
+    else
+      if [ -r $PROCFS/dma ]; then
+  	for dma in $*; do
+	    grep -q '^ *'$dma': ' $PROCFS/dma || list="$list $dma"
+	done
+      fi
+    fi
+    if [ ! -z "$list" ]; then
+      echo $list
+    fi
+}
+
+check_irq_avail () {
+    list=""
+    if [ -d $SYSFS/bus/pnp/devices ]; then
+      for irq in $*; do
+        ok="true"
+        for i in $SYSFS/bus/pnp/devices/??:* ; do
+          if grep -q "state = active" $i/resources ; then
+            if grep -q '^irq '$irq'$' $i/resources; then
+              ok="false"
+            fi
+          fi
+        done
+        if [ -r $PROCFS/interrupts ]; then
+	  if grep -q '^ *'$irq': ' $PROCFS/interrupts ; then
+            ok="false"
+          fi
+	fi
+        if [ "$ok" = "true" ]; then
+          list="$list $irq"
+        fi
+      done
+    else
+      if [ -r $PROCFS/interrupts ]; then
+	for irq in $*; do
+	    grep -q '^ *'$irq': ' $PROCFS/interrupts || list="$list $irq"
+	done
+      fi
+    fi
+    if [ ! -z "$list" ]; then
+      echo $list
+    fi
+}
+
+#
+#
+#
+
+if [ "$resources" = "true" ]; then
+  if [ -d $SYSFS/bus/pnp/devices ]; then
+    for i in $SYSFS/bus/pnp/devices/??:* ; do
+      if [ "$resources" = "true" ]; then
+        echo ">>>>> PnP file: $i/resources"
+        cat $i/resources
+      fi
+    done
+  fi
+  if [ -r $PROCFS/dma ]; then
+    echo ">>>>> Allocated dma channels:"
+    cat $PROCFS/dma
+  fi
+  if [ -r $PROCFS/interrupts ]; then
+    echo ">>>>> Allocated interrupt channels:"
+    cat $PROCFS/interrupts
+  fi
+  echo -n "Valid DMA channels: "
+  check_dma_avail 0 1 2 3 4 5 6 7
+  echo -n "Valid IRQ channels: "
+  check_irq_avail 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
+  exit 0
+fi
+
+# Check for root privileges
+if [ `id -u` -ne 0 ]; then
+  xecho "You must be root to use this script."
+  exit 1
+fi
+
+#
+# check the snd_ prefix for ALSA module options
+# snd_ prefix is obsoleted since 0.9.0rc4.
+#
+if /sbin/modinfo -p snd | grep -q snd_ ; then
+  mpfx="snd_"
+else
+  mpfx=""
+fi
+
+alsa_device_opts=""
+if /sbin/modinfo -p snd | grep -q uid ; then
+  if [ x"$alsa_uid" != x0 ]; then
+    alsa_device_opts="$alsa_device_opts ${mpfx}device_uid=$alsa_uid"
+  fi
+  if [ x"$alsa_gid" != x0 ]; then
+    alsa_device_opts="$alsa_device_opts ${mpfx}device_gid=$alsa_gid"
+  fi
+fi
+if /sbin/modinfo -p snd | grep -q device_mode ; then
+  if [ x"$alsa_mode" != x0 ]; then
+    alsa_device_opts="$alsa_device_opts ${mpfx}device_mode=$alsa_mode"
+  fi
+fi
+
+case `uname -r` in
+2.6.*)
+  kernel="new"
+  ;;
+*)
+  kernel="old"
+  ;;
+esac
+
+# cfgfile = base config file to remove/update the sound setting
+# cfgout = new config file to write the sound setting (if different from $cfgfile)
+cfgout=""
+cfgoldout=""
+if [ -n "$cfgfile" ]; then
+  if [ ! -r "$cfgfile" ]; then
+    xecho "ERROR: The config file doesn't exist: "
+    echo $cfgfile
+    exit 1
+  fi
+else
+if [ "$kernel" = "new" ]; then
+  cfgfile="/etc/modprobe.conf"
+  if [ -d /etc/modprobe.d ]; then
+    cfgout="/etc/modprobe.d/sound.conf"
+    cfgoldout="/etc/modprobe.d/sound"
+    if [ ! -f $cfgout ]; then
+	case "$(modprobe -V)" in
+	"module-init-tools version "3.[789]*|\
+	"module-init-tools version "3.1[0-9]*)
+	  ;;
+	"kmod version "*)
+	  ;;
+	*)
+	  cfgout="/etc/modprobe.d/sound"
+	  cfgoldout=""
+	  ;;
+	esac
+    fi
+  fi
+elif [ "$distribution" = "radix" ]; then
+  cfgfile="/etc/modprobe.d/sound.conf"
+elif [ "$distribution" = "slackware" ]; then
+  cfgfile="/etc/modprobe.d/sound.conf"
+elif [ "$distribution" = "debian" ]; then
+  cfgfile="/etc/modutils/sound"
+elif [ -e /etc/modules.conf ]; then
+  cfgfile="/etc/modules.conf"
+elif [ -e /etc/conf.modules ]; then
+  cfgfile="/etc/conf.modules"
+else
+  cfgfile="/etc/modules.conf"
+  touch /etc/modules.conf
+fi
+fi
+
+# Check for dialog, whiptail, gdialog, awk, ... ?
+if type -p dialog > /dev/null; then
+    DIALOG=dialog
+else
+  if type -p whiptail > /dev/null; then
+    whiptail_wrapper() {
+      X1="$1"
+      X2="$2"
+      if [ $1 = --yesno ]; then
+        X3=`expr $3 + 2`
+      else
+        X3=$3
+      fi
+      shift 3
+      whiptail "$X1" "$X2" $X3 "$@"
+    }
+    DIALOG=whiptail_wrapper
+  else
+    xecho "Error, dialog or whiptail not found."
+    exit 1
+  fi
+fi
+if type -p awk > /dev/null; then :
+else
+  xecho "Error, awk not found. Can't continue."
+  exit 1
+fi
+
+#
+# remove entries by yast2 sound configurator
+#
+remove_y2_block() {
+    awk '
+    /^alias sound-slot-[0-9]/ { next }
+    /^alias char-major-116 / { next }
+    /^alias char-major-14 / { next }
+    /^alias snd-card-[0-9] / { next }
+    /^options snd / { next }
+    /^options snd-/ { next }
+    /^options off / { next }
+    /^alias sound-service-[0-9]/ { next }
+    /^# YaST2: sound / { next }
+   { print }'
+}
+
+#
+# remove entries by sndconfig sound configurator
+#
+# found strings to search for in WriteConfModules, 
+# from sndconfig 0.68-4 (rawhide version)
+
+remove_sndconfig_block() {
+    awk '
+    /^alias sound-slot-0/ { modulename = $3 ; next }
+    /^alias sound-slot-[0-9]/ { next }
+    /^post-install sound-slot-[0-9] / { next }
+    /^pre-remove sound-slot-[0-9] / { next }
+    /^options sound / { next }
+    /^alias synth0 opl3/ { next }
+    /^options opl3 / { next }
+    /^alias midi / { mididev = $3 ; next }
+    /^options / { if ($2 == mididev) next }
+    /^pre-install / { if ($2 == mididev) next }
+    /^alias synth0 / { synth = $3 ; next }
+    /^post-install / { if ($2 == synth) next }
+    /^options sb / { next }
+    /^post-install .+ \/bin\/modprobe "aci"/ { if ($2 == modulename) next }
+    /^options adlib_card / { next }
+    /^options .+ isapnp=1/ { if ($2 == modulename) next }
+    /^options i810_audio / { next }
+    /^options / {if ($2 == modulename) next }
+   { print }'
+}
+
+#
+# remove the previous configuration by alsaconf
+#
+remove_ac_block() {
+    awk '/^'"$ACB"'$/,/^'"$ACE"'$/ { next } { print }'
+}
+
+#
+# set default mixer volumes
+#
+set_mixers() {
+    amixer -s -q <<EOF
+set Master 75% unmute
+set Master -12dB
+set 'Master Mono' 75% unmute
+set 'Master Mono' -12dB
+set Front 75% unmute
+set Front -12dB
+set PCM 90% unmute
+set PCM 0dB
+mixer Synth 90% unmute
+mixer Synth 0dB
+mixer CD 90% unmute
+mixer CD 0dB
+# mute mic
+set Mic 0% mute
+# ESS 1969 chipset has 2 PCM channels
+set PCM,1 90% unmute
+set PCM,1 0dB
+# Trident/YMFPCI/emu10k1
+set Wave 100% unmute
+set Music 100% unmute
+set AC97 100% unmute
+# CS4237B chipset:
+set 'Master Digital' 75% unmute
+# Envy24 chips with analog outs
+set DAC 90% unmute
+set DAC -12dB
+set DAC,0 90% unmute
+set DAC,0 -12dB
+set DAC,1 90% unmute
+set DAC,1 -12dB
+# some notebooks use headphone instead of master
+set Headphone 75% unmute
+set Headphone -12dB
+set Playback 100% unmute
+# turn off digital switches
+set "SB Live Analog/Digital Output Jack" off
+set "Audigy Analog/Digital Output Jack" off
+EOF
+}
+
+
+# INTRO
+intro() {
+  local msg=$(xmsg "
+                   ALSA  CONFIGURATOR
+                   version %s
+
+            This script is a configurator for
+    Advanced Linux Sound Architecture (ALSA) driver.
+
+
+  If ALSA is already running, you should close all sound
+  apps now and stop the sound driver.
+  alsaconf will try to do this, but it's not 100%% sure." $version)
+  $DIALOG --msgbox "$msg" 20 63 || acex 0
+}
+
+# FAREWELL
+farewell() {
+  local msg=$(gettext "
+
+     OK, sound driver is configured.
+
+                  ALSA  CONFIGURATOR
+
+          will prepare the card for playing now.
+
+     Now I'll run alsasound init script, then I'll use
+     amixer to raise the default volumes.
+     You can change the volume later via a mixer
+     program such as alsamixer or gamix.
+  
+  ")
+  $DIALOG --msgbox "$msg" 17 60 || acex 0
+}
+
+# Exit function
+acex() {
+  cleanup
+  clear
+  exit $1
+}
+
+#
+# search for alsasound init script
+#
+
+if [ "$distribution" = "debian" ]; then
+    rcalsasound=/etc/init.d/alsa
+elif [ -x /etc/rc.d/rc.alsa ]; then
+    rcalsasound=/etc/rc.d/rc.alsa
+elif [ -x /etc/init.d/alsasound ]; then
+    rcalsasound=/etc/init.d/alsasound
+elif [ -x /usr/sbin/rcalsasound ]; then
+    rcalsasound=/usr/sbin/rcalsasound
+elif [ -x /sbin/rcalsasound ]; then
+    rcalsasound=/sbin/rcalsasound
+elif [ -x /etc/rc.d/init.d/alsasound ]; then
+    rcalsasound=/etc/rc.d/init.d/alsasound
+elif [ -x /etc/init.d/alsa ]; then
+    rcalsasound=/etc/init.d/alsa
+else
+    rcalsasound=rcalsasound
+fi
+
+    
+# MAIN
+if [ -d $PROCFS/asound ]; then
+  $rcalsasound stop >/dev/null 2>&1
+  $rcalsasound unload >/dev/null 2>&1
+  /sbin/rmmod dmasound dmasound_awacs 2>/dev/null
+fi
+
+
+cleanup () {
+    killall -9 aplay arecord >/dev/null 2>&1
+    /sbin/modprobe -r isapnp >/dev/null 2>&1
+    /sbin/modprobe -r isa-pnp >/dev/null 2>&1
+    rm -f "$TMP" "$addcfg" "$FOUND" "$DUMP"
+}
+trap cleanup 0 
+
+TMP=`mktemp -q /tmp/alsaconf.XXXXXX`
+if [ $? -ne 0 ]; then
+	xecho "Can't create temp file, exiting..."
+        exit 1
+fi
+addcfg=`mktemp -q /tmp/alsaconf.XXXXXX`
+if [ $? -ne 0 ]; then
+	xecho "Can't create temp file, exiting..."
+        exit 1
+fi
+FOUND=`mktemp -q /tmp/alsaconf.XXXXXX`
+if [ $? -ne 0 ]; then
+	xecho "Can't create temp file, exiting..."
+        exit 1
+fi
+DUMP=`mktemp -q /tmp/alsaconf.XXXXXX`
+if [ $? -ne 0 ]; then
+	xecho "Can't create temp file, exiting..."
+        exit 1
+fi
+
+# convert ISA PnP id number to string 'ABC'
+convert_isapnp_id () {
+    if [ -z "$1" ]; then
+	echo "XXXX"
+	return
+    fi
+    let a='('$1'>>2) & 0x3f'
+    let b='(('$1' & 0x03) << 3) | (('$1' >> 13) & 0x07)'
+    let c='('$1'>> 8) & 0x1f'
+    strs='@ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+    echo ${strs:$a:1}${strs:$b:1}${strs:$c:1}
+}
+
+# swap high & low bytes
+swap_number () {
+    if [ -z "$1" ]; then
+	echo "0000"
+	return
+    fi
+    let v='(('$1'>>8)&0xff)|(('$1'&0xff)<<8)'
+    printf "%04x" $v
+}
+
+# build card database
+# build_card_db filename
+build_card_db () {
+    MODDIR=/lib/modules/`uname -r`
+    last_driver=""
+    echo -n > $1
+
+    # list pci cards
+    while read driver vendor device dummy; do
+	if expr $driver : 'snd-.*' >/dev/null ; then
+	    if [ "$last_driver" != "$driver" ]; then
+		echo $driver.o
+		last_driver=$driver
+	    fi
+	    id1=`printf '0x%04x' $vendor`
+	    id2=`printf '0x%04x' $device`
+	    echo "PCI: $id1=$id2"
+	fi
+    done < $MODDIR/modules.pcimap >> $1
+
+    # list isapnp cards
+    while read driver cardvendor carddevice data vendor func; do
+	if expr $driver : 'snd-.*' >/dev/null ; then
+	    if [ "$last_driver" != "$driver" ]; then
+		echo $driver.o
+		last_driver=$driver
+	    fi
+	    id1=`convert_isapnp_id $cardvendor`
+	    dev1=`swap_number $carddevice`
+	    id2=`convert_isapnp_id $vendor`
+	    dev2=`swap_number $func`
+	    echo "ISAPNP: $id1$dev1=$id2$dev2"
+	fi
+    done < $MODDIR/modules.isapnpmap >> $1
+}
+
+#
+# probe cards
+#
+probe_cards () {
+    found="0"
+    test -r $PROCFS/isapnp || /sbin/modprobe isapnp >/dev/null 2>&1
+    test -r $PROCFS/isapnp || /sbin/modprobe isa-pnp >/dev/null 2>&1
+    if [ -r $PROCFS/isapnp ]; then
+	cat $PROCFS/isapnp >"$DUMP"
+	found="1"
+    elif [ -d $SYSFS/bus/pnp/devices ]; then
+	# use 2.6 kernel's sysfs output
+	# fake the isapnp dump
+	index=0
+	bindex=0
+	for d1 in $SYSFS/devices/pnp* ; do
+	  for d2 in $d1/*:* ; do
+	    if [ -r $d2/card_id ]; then
+	      id=`cat $d2/card_id`
+	      name=`cat $d2/name`
+	      echo "Card $index '$id:$name' " >> "$DUMP"
+	      index=$[$index+1]
+	      found="1"
+	    else if [ -r $d2/id ]; then
+	      # FIXME: multiple id might be present (separated with new-line)
+	      id=`head -n 1 $d2/id`
+	      echo "BIOS $bindex '$id' " >> "$DUMP"
+	      bindex=$[$bindex+1]
+	      found="1"
+	    fi
+	    fi
+	  done
+	done
+    fi
+    if [ "$found" = "0" ]; then
+      echo -n >"$DUMP"
+    fi 
+    CARDID_DB=/var/tmp/alsaconf.cards
+    if [ ! -r $CARDID_DB ]; then
+        use_modinfo_db=1
+    fi
+    if [ $use_modinfo_db != 1 ]; then
+	if [ $CARDID_DB -ot /lib/modules/`uname -r`/modules.dep ]; then
+	    use_modinfo_db=1
+	fi
+    fi
+    if [ $use_modinfo_db = 1 ]; then
+	xecho "Building card database.."
+	build_card_db $CARDID_DB
+    fi
+    if [ ! -r $CARDID_DB ]; then
+	xecho "No card database is found.."
+	exit 1
+    fi
+    ncards=`grep '^snd-.*\.o$' $CARDID_DB | wc -w`
+
+    msg=$(gettext "Searching sound cards")
+    awk '
+BEGIN {
+	format="%-40s %s\n";
+	ncards='"$ncards"';
+	idx=0;
+}
+/^snd-.*\.o$/{
+	sub(/.o$/, "");
+	driver=$0;
+	perc=(idx * 100) / (ncards + 1);
+	print int(perc);
+	idx++;
+}
+/^[<literal space><literal tab>]*PCI: /{
+	gsub(/0x/, "");
+	gsub(/=/, ":");
+	x = sprintf ("'$lspci' -n 2>/dev/null| grep '"' 04..: '"' | grep %s", $2);
+	if (system (x) == 0)
+		printf "%s %s\n", $2, driver >>"'"$FOUND"'"
+}
+/^[<literal space><literal tab>]*ISAPNP: /{
+	id2 = substr($0, index($0, "=")+1);
+	gsub(/=.*/, "");
+	x = sprintf ("grep '\''^Card [0-9] .%s:'\'' '"$DUMP"'", $2);
+	if (system (x) == 0)
+		printf "%s %s\n", $2, driver >>"'"$FOUND"'"
+	else if (index($2, "ffff") > 0) {
+		x = sprintf ("grep '\''^BIOS [0-9]* .%s.'\'' '"$DUMP"'", id2);
+		if (system (x) == 0)
+			printf "%s %s\n", id2, driver >>"'"$FOUND"'"
+	}
+}' < $CARDID_DB |\
+    $DIALOG --gauge "$msg" 6 40 0
+
+    #
+    # PowerMac
+    #
+    if grep -q MacRISC $PROCFS/cpuinfo; then
+	MODDIR=/lib/modules/`uname -r`
+	find $MODDIR -name 'snd-powermac*' -print | \
+	while read i; do
+	    i=${i##*/}
+	    i=${i%%.o}
+	    i=${i%%.ko}
+	    echo "PowerMac $i" >> $FOUND
+	done
+    fi
+
+    #
+    # Sparc
+    #
+    if grep -q Sparc $PROCFS/cpuinfo; then
+	test -r $PROCFS/openprom/name || /bin/mount -t openpromfs none $PROCFS/openprom >/dev/null 2>&1
+	# Check for an "audio" device
+	audio=
+	compat=
+	if test -r $PROCFS/openprom; then
+	    audio=`find $PROCFS/openprom -follow -type d -name "audio*" -print`
+	fi
+	if test -n "$audio"; then
+	    compat=`cat $audio/compatible`
+	    compat=${compat#\'}
+	    compat=${compat%\'}
+	    compat=${compat#SUNW,}
+	fi
+	# Go through all cards we have
+	MODDIR=/lib/modules/`uname -r`
+	find $MODDIR -name 'snd-sun-*' -print | \
+	while read i; do
+	    i=${i##*/}
+	    i=${i%%.o}
+	    i=${i%%.ko}
+	    sdev=`echo ${i#snd-sun-} | tr "[a-z]" "[A-Z]"`
+
+	    if test "$sdev" = "$compat"; then
+		echo "$sdev $i" >> $FOUND
+	    elif test -r $PROCFS/openprom; then
+		find $PROCFS/openprom -follow -type d -name "SUNW,${sdev}*" \
+		    -exec echo "$sdev $i" \; 2>/dev/null >> $FOUND
+	    else
+		echo "$sdev $i" >> $FOUND
+	    fi
+	done
+    fi
+}
+
+#
+# look for a descriptive device name from the given device id
+#
+find_device_name () {
+    if expr "$1" : '[0-9a-f][0-9a-f][0-9a-f][0-9a-f]:[0-9a-f][0-9a-f][0-9a-f][0-9a-f]' >/dev/null; then
+	$lspci -d $1 2>/dev/null| sed -e 's/^.*:..\.. [^:]*: //g'
+	return
+    elif expr "$1" : '[A-Z@][A-Z@][A-Z@][0-9a-f][0-9a-f][0-9a-f][0-9a-f]' >/dev/null; then
+	cardname=`grep '^Card [0-9]\+ .'$1':' $DUMP | head -n 1 | sed -e 's/^Card [0-9]\+ '\''.*:\(.*\)'\'' .*$/\1/'`
+	echo $cardname
+    else
+	echo $1
+    fi
+}
+
+# get hwcfg file type from the given driver name
+get_hwcfg_type () {
+    while read dev driver; do
+	if [ "$driver" = "$1" ]; then
+	    case "$dev" in
+	    *:*)
+		# FIXME: need to look around /sys/bus/pci/* (or use vpid-* ?)
+		devid=`$lspci -d "$dev" | head -n 1 | sed -e 's/ .*$//'`
+		case "$devid" in
+		*:*:*.*) ;;
+		*) devid="0000:$devid" ;;
+		esac
+		echo bus-pci-$devid
+		;;
+	    *)
+		echo $driver
+		;;
+	    esac
+	    break
+	fi
+    done
+}
+
+# clean up all hwcfg-* files containing ALSA modules
+# alsaconf sets up exclusively
+cleanup_hwcfg () {
+    for i in /etc/sysconfig/hardware/hwcfg-*; do
+	grep -q "MODULE='snd-" $i && rm -f $i
+    done
+}
+
+#
+# set up /etc/sysconfig/hardware/hwcfg-* stuff
+#
+setup_hwcfg () {
+    card=$1
+    cleanup_hwcfg
+    cfg=`echo "$devs_olist" | get_hwcfg_type $card`
+    echo "MODULE='$card'" > /etc/sysconfig/hardware/hwcfg-$cfg
+    echo "STARTMODE='auto'" >> /etc/sysconfig/hardware/hwcfg-$cfg
+}
+
+
+#
+# configure and try test sound
+#
+ac_config_card () {
+
+    CARD_DRIVER=snd-$1
+    CARD_OPTS="${*:2}"
+
+    if [ -n "$cfgout" ]; then
+	msg=$(xmsg "
+Configuring %s
+Do you want to modify %s (and %s if present)?" $CARD_DRIVER $cfgout $cfgfile)
+        $DIALOG --yesno "$msg" 10 50 || acex 0
+    else
+	msg=$(xmsg "
+Configuring %s
+Do you want to modify %s?" $CARD_DRIVER $cfgfile)
+        $DIALOG --yesno "$msg" 8 50 || acex 0
+    fi
+    clear
+
+    # Copy conf.modules and make changes.
+    ACB="# --- BEGIN: Generated by ALSACONF, do not edit. ---"
+    ACE="# --- END: Generated by ALSACONF, do not edit. ---"
+
+    # Detect 2.2.X kernel
+    KVER=`uname -r | tr ".-" "  "`
+    KVER1=`echo $KVER | cut -d" " -f1`
+    KVER2=`echo $KVER | cut -d" " -f2`
+    if [ $KVER1 -ge 2 ] && [ $KVER2 -ge 2 ]; then
+	SOUND_CORE="soundcore"
+    else
+	SOUND_CORE="snd"
+    fi
+
+    if [ -r $cfgfile ] ; then
+        if [ "$distribution" = "redhat" -o "$distribution" = "fedora" ] ; then
+            remove_ac_block < $cfgfile | remove_sndconfig_block | uniq > $TMP
+        else
+	    remove_ac_block < $cfgfile | remove_y2_block | uniq > $TMP
+        fi
+    fi
+
+    if [ -z "$have_alias" -a "$kernel" = "new" ]; then
+	if grep -q char-major-116 /lib/modules/`uname -r`/modules.alias; then
+	    have_alias="yes"
+	fi
+    fi
+    if [ -z "$have_alias" ]; then
+echo "alias char-major-116 snd
+alias char-major-14 $SOUND_CORE
+alias sound-service-0-0 snd-mixer-oss
+alias sound-service-0-1 snd-seq-oss
+alias sound-service-0-3 snd-pcm-oss
+alias sound-service-0-8 snd-seq-oss
+alias sound-service-0-12 snd-pcm-oss" >> $addcfg
+    fi
+    if [ -n "$alsa_device_opts" ]; then
+	echo "options snd $alsa_device_opts" >> $addcfg
+    fi
+echo "alias snd-card-0 $CARD_DRIVER
+alias sound-slot-0 $CARD_DRIVER" >> $addcfg
+    if [ -n "$CARD_OPTS" ]; then
+	echo "options $CARD_DRIVER $CARD_OPTS" >> $addcfg
+    fi
+
+    if [ -n "$cfgout" ]; then
+	[ ! -r "$cfgfile" ] || cmp -s "$TMP" "$cfgfile" || cat "$TMP" > "$cfgfile"
+	cmp -s "$addcfg" "$cfgout" || cat "$addcfg" > "$cfgout"
+	test -n "$cfgoldout" && rm -f "$cfgoldout"
+    else
+	echo "$ACB
+# --- ALSACONF version $version ---" >> $TMP
+        cat "$addcfg" >> "$TMP"
+	echo "$ACE
+" >> $TMP
+        cmp -s "$TMP" "$cfgfile" || cat "$TMP" > "$cfgfile"
+    fi
+
+    /sbin/depmod -a 2>/dev/null
+
+    # remove yast2 entries (- only for suse distro)
+    if [ -f /var/lib/YaST/unique.inf ]; then
+	awk '
+BEGIN { in_sound=0; }
+/^\[sound\]$/ { print; in_sound=1; next; }
+/^\[.+\]$/ { print; in_sound=0; next; }
+{ if (in_sound == 0) { print; } }
+' < /var/lib/YaST/unique.inf > $TMP
+	cp -f $TMP /var/lib/YaST/unique.inf
+    fi
+
+    # set up /etc/sysconfig/hardware/*
+    if [ "$distribution" = "suse" ]; then
+	case "$suse_version" in
+	10.[012]*|10)
+	    setup_hwcfg $CARD_DRIVER
+	    ;;
+	esac
+    fi
+
+    farewell
+    clear
+    case "$distribution" in
+    gentoo | debian)
+	xecho "Running update-modules..."
+	update-modules
+	;;
+    esac
+    if [ -x $rcalsasound ] ; then
+      echo Loading driver...
+      $rcalsasound restart
+    fi
+    echo Setting default volumes...
+    if [ -x $bindir/set_default_volume ]; then
+	$bindir/set_default_volume -f
+    else
+	set_mixers
+    fi
+    if [ -f $TESTSOUND ]; then
+      msg=$(gettext "
+       The mixer is set up now for for playing.
+       Shall I try to play a sound sample now?
+
+                           NOTE:
+If you have a big amplifier, lower your volumes or say no.
+    Otherwise check that your speaker volume is open,
+          and look if you can hear test sound.
+")
+      if $DIALOG --yesno "$msg" 13 65 
+      then
+          clear
+	  echo
+	  aplay -N $TESTSOUND
+      fi
+    fi
+    mkdir -p -m 0755 @ASOUND_STATE_DIR@
+    if [ ! -r @ASOUND_STATE_DIR@/asound.state ]; then
+	xecho "Saving the mixer setup used for this in @ASOUND_STATE_DIR@/asound.state."
+	$sbindir/alsactl store
+    fi
+    clear
+    xecho "
+===============================================================================
+
+ Now ALSA is ready to use.
+ For adjustment of volumes, use your favorite mixer.
+
+ Have a lot of fun!
+
+"
+}
+
+# check playback
+# return 0 - OK, 1 - NG, 2 - not working (irq/dma problem)
+ac_try_load () {
+    test -n "$LOGFILE" && echo "$1 ${*:2}" >> "$LOGFILE"
+    /sbin/modprobe snd-$1 ${*:2} >/dev/null 2>&1
+    if $lsmod | grep -q -E '^(snd-|snd_)'$1' '; then
+	: ;
+    else
+	/sbin/modprobe -r snd-$1 >/dev/null 2>&1
+	return 1
+    fi
+
+    # mute mixers
+    amixer set Master 0% mute >/dev/null 2>&1
+    amixer set PCM 0% mute >/dev/null 2>&1
+    
+    # output 0.5 sec
+    head -c 4000 < /dev/zero | aplay -N -r8000 -fS16_LE -traw -c1 > /dev/null 2>&1 &
+    # remember pid
+    pp=$!
+    # sleep for 2 seconds (to be sure -- 1 sec would be enough)
+    sleep 2
+    # kill the child process if still exists.
+    kill -9 $pp > /dev/null 2>&1
+    st=$?
+    ac_cardname=`head -n 1 $PROCFS/asound/cards | sed -e 's/^[0-9].* - \(.*\)$/\1/'`
+    /sbin/modprobe -r snd-$1 >/dev/null 2>&1
+    if [ $st = 0 ]; then
+	# irq problem?
+	test -n "$LOGFILE" && echo "no playback return" >> "$LOGFILE"
+	return 2
+    else
+	# seems ok!
+	test -n "$LOGFILE" && echo "playback OK" >> "$LOGFILE"
+	return 0
+    fi
+}
+
+# check capture
+# return 0 - OK, 1 - NG, 2 - not working (irq/dma problem)
+# ac_try_capture card duplex opts
+ac_try_capture () {
+    test -n "$LOGFILE" && echo "$1 ${*:2}" >> "$LOGFILE"
+    /sbin/modprobe snd-$1 ${*:3} >/dev/null 2>&1
+    if $lsmod | grep -q -E '^(snd-|snd_)'$1' '; then
+	: ;
+    else
+	/sbin/modprobe -r snd-$1 >/dev/null 2>&1
+	return 1
+    fi
+
+    # mute mixers
+    amixer set Master 0% mute >/dev/null 2>&1
+    amixer set PCM 0% mute >/dev/null 2>&1
+
+    play_pid=0
+    if [ $2 = yes ]; then
+	# try duplex - start dummy playing
+	aplay -N -r8000 -fS16_LE -traw -c1 < /dev/zero > /dev/null 2>&1 &
+	play_pid=$!
+    fi
+    # record 1sec
+    arecord -N -d1 > /dev/null 2>&1 &
+    # remember pid
+    pp=$!
+    # sleep for 2 seconds
+    sleep 2
+    # kill the child process if still exists.
+    kill -9 $pp > /dev/null 2>&1
+    st=$?
+    # kill playback process if any
+    test $play_pid != 0 && kill -9 $play_pid
+    /sbin/modprobe -r snd-$1 >/dev/null 2>&1
+    if [ $st = 0 ]; then
+	test -n "$LOGFILE" && echo "capture no return" >> "$LOGFILE"
+	return 2
+    else
+	test -n "$LOGFILE" && echo "capture OK" >> "$LOGFILE"
+	return 0
+    fi
+}
+
+get_dma_pair () {
+    case $1 in
+    0)
+	echo 1 3 5;;
+    1)
+	echo 0 3 5;;
+    3)
+	echo 1 0 5;;
+    5)
+	echo 3 1 0;;
+    esac
+}
+
+#
+# check playback on specified irqs
+#
+# ac_try_irq card opts irqs...
+# return 0 - OK, 1 - NG, 2 - not working (dma problem?)
+#
+ac_try_irq () {
+    card=$1
+    opts="$2 ${mpfx}irq=$3"
+    ac_try_load $card $opts >/dev/null 2>&1
+    result=$?
+    case $result in
+    0)
+	ac_opts="$opts"
+	return 0
+	;;
+    2)
+	for irq in ${*:4}; do
+	    opts="$2 ${mpfx}irq=$irq"
+	    ac_try_load $card $opts >/dev/null 2>&1
+	    if [ $? = 0 ]; then
+		ac_opts="$opts"
+		return 0
+	    fi
+	done
+	return 2
+	;;
+    esac
+    return 1
+}
+
+#
+# check playback/capture on dma1 & dma2 & specified irqs
+#
+# ac_try_dmas card opts irqs...
+# return 0 - OK, 1 - NG
+#
+ac_try_dmas () {
+    dma_list=`check_dma_avail 1 0 3 5`
+    for irq in ${*:3}; do
+	for dma1 in $dma_list; do
+	    for dma2 in `get_dma_pair $dma1`; do
+		opts="$2 ${mpfx}dma1=$dma1 ${mpfx}dma2=$dma2 ${mpfx}irq=$irq"
+		ac_try_load $1 $opts >/dev/null 2>&1
+		result=$?
+		if [ $result = 1 ]; then
+		    if [ $try_all_combination = 1 ]; then
+			continue
+		    else
+			return 1
+		    fi
+		elif [ $result = 0 ]; then
+		    test -n "$LOGFILE" && echo "Now checking capture..." >> "$LOGFILE"
+		    ac_opts="$opts"
+		    ac_try_capture $1 yes $opts >/dev/null 2>&1 && return 0
+		    for d in yes no; do
+			for dma2 in $dma_list; do
+			    if [ $dma1 != $dma2 ]; then
+				opts="$2 ${mpfx}dma1=$dma1 ${mpfx}dma2=$dma2 ${mpfx}irq=$irq"
+				ac_opts="$opts"
+				ac_try_capture $1 $d $opts >/dev/null 2>&1 && return 0
+			    fi
+			done
+		    done
+		    return 0
+		fi
+	    done
+	done
+    done
+    return 1
+}
+
+# check if the option $2 exists in card $1: set value $3
+ac_check_option () {
+    if /sbin/modinfo -p snd-$1 | grep -q $2; then
+      echo "$2=$3"
+    fi
+}
+
+ac_try_card_sb8 () {
+    card=sb8
+    irq_list=`check_irq_avail 5 3 9 10 7`
+    for dma8 in `check_dma_avail 1 3`; do
+	opts="${mpfx}dma8=$dma8"
+	ac_try_irq $card "$opts" $irq_list && return 0
+    done
+    return 1
+}
+
+ac_try_card_sb16 () {
+    card=sb16
+    isapnp=`ac_check_option $card ${mpfx}isapnp 0`
+    opts="$isapnp"
+    irq_list=`check_irq_avail 5 9 10 7 3`
+    dma_list=`check_dma_avail 0 1 3`
+    dma16_list=`check_dma_avail 5 6 7`
+    # at first try auto-probing by driver itself
+    ac_try_load $card $opts >/dev/null 2>&1
+    result=$?
+    case $result in
+    0)
+	ac_opts="$opts"
+	ac_try_capture $card yes $opts >/dev/null 2>&1 && return 0
+	for d in yes no; do
+	    for dma8 in $dma_list; do
+		for irq in $irq_list; do
+		    opts="${mpfx}dma8=$dma8 ${mpfx}irq=$irq $isapnp"
+		    ac_try_capture $card $d $opts >/dev/null 2>&1 && return 0
+		done
+	    done
+	done
+	return 0
+	;;
+    2)
+	for dma16 in $dma16_list; do
+	    opts="${mpfx}dma16=$dma16 $isapnp"
+	    if ac_try_irq $card "$opts" $irq_list ; then
+		ac_try_capture $card yes $ac_opts >/dev/null 2>&1 && return 0
+		ac_opts_saved="$ac_opts"
+		for d in yes no; do
+		    for dma8 in $dma_list; do
+			ac_opts="$ac_opts_saved ${mpfx}dma8=$dma8"
+			ac_try_capture $card $d $ac_opts >/dev/null 2>&1 && return 0
+		    done
+		done
+		# return anyway here..
+		return 0
+	    fi
+	done
+	;;
+    esac
+    return 1
+}
+
+ac_try_card_es1688 () {
+    card=es1688
+    opts=""
+    irq_list=`check_irq_avail 5 9 10 7`
+    for dma8 in `check_dma_avail 1 3 0`; do
+	opts="${mpfx}dma8=$dma8 ${mpfx}mpu_irq=-1"
+	ac_try_irq $card "$opts" $irq_list && return 0
+    done
+    return 1
+}
+
+ac_try_card_es18xx () {
+    card=es18xx
+    opts=`ac_check_option $card ${mpfx}isapnp 0`
+    ac_try_dmas $card "$opts" `check_irq_avail 5 9 10 7` && return 0
+    return 1
+}
+
+ac_try_card_cs4236 () {
+    card=cs4236
+    irq_list=`check_irq_avail 5 7 9 11 12 15`
+    isapnp=`ac_check_option $card ${mpfx}isapnp 0`
+    for cport in 0x538 0x210 0xf00; do
+	for port in 0x530 0x534; do
+	    opts="${mpfx}port=$port ${mpfx}cport=$cport $isapnp"
+	    ac_try_dmas $card "$opts" $irq_list && return 0
+	done
+    done
+    return 1
+}
+
+ac_try_card_cs4232 () {
+    card=cs4232
+    irq_list=`check_irq_avail 5 7 9 11 12 15`
+    isapnp=`ac_check_option $card ${mpfx}isapnp 0`
+    for cport in 0x538 0x210 0xf00; do
+	for port in 0x530 0x534; do
+	    opts="${mpfx}port=$port ${mpfx}cport=$cport $isapnp"
+	    ac_try_dmas $card "$opts" $irq_list && return 0
+	done
+    done
+    return 1
+}
+
+ac_try_card_cs4231 () {
+    card=cs4231
+    irq_list=`check_irq_avail 5 7 9 11 12 15`
+    for port in 0x530 0x534; do
+	opts="${mpfx}port=$port"
+	ac_try_dmas $card "$opts" $irq_list && return 0
+    done
+    return 1
+}
+
+ac_try_card_opl3sa2 () {
+    card=opl3sa2
+    irq_list=`check_irq_avail 5 9 3 1 11 12 15 0`
+    isapnp=`ac_check_option $card ${mpfx}isapnp 0`
+    for port in 0x370 0x538 0xf86 0x100; do
+	for wss_port in 0x530 0xe80 0xf40 0x604; do
+	    opts="${mpfx}fm_port=-1 ${mpfx}midi_port=-1 ${mpfx}port=$port ${mpfx}wss_port=$wss_port $isapnp"
+	    ac_try_dmas $card "$opts" $irq_list && return 0
+	done
+    done
+    return 1
+}
+
+ac_config_legacy () {
+   title=$(gettext "WARNING")
+   msg=$(gettext "
+   Probing legacy ISA cards might make
+   your system unstable.
+
+        Do you want to proceed?
+
+")
+    $DIALOG --title "$title" --yesno "$msg" 10 50 || acex 0
+
+    if [ x"$1" = x ]; then
+	probe_list="$LEGACY_CARDS"
+    else
+	probe_list=$*
+    fi
+    menu_args=()
+
+    for card in $probe_list; do
+	cardname=`/sbin/modinfo -d snd-$card | sed -e 's/^\"\(.*\)\"$/\1/g'`
+	if [ x"$cardname" != x ]; then
+	    menu_args=("${menu_args[@]}" "$card" "$cardname" "on")
+	fi
+    done
+    if [ x$menu_args = x ]; then
+	msg=$(gettext "No legacy drivers are available
+   for your machine")
+	$DIALOG --msgbox "$msg" 5 50
+	return 1
+    fi
+    title=$(gettext "Driver Selection")
+    msg=$(gettext "           Probing legacy ISA cards
+
+        Please select the drivers to probe:")
+    $DIALOG --title "$title" --checklist "$msg" \
+	17 64 8 "${menu_args[@]}" 2> $FOUND || acex 0
+
+    if [ $try_all_combination != 1 ]; then
+	msg=$(gettext "
+ Shall I try all possible DMA and IRQ combinations?
+ With this option, some unconventional configuration
+ might be found, but it will take much longer time.")
+	if $DIALOG --yesno "$msg" 10 60
+	    then
+	    try_all_combination=1
+	fi
+    fi
+
+    xecho "Probing legacy cards..   This may take a few minutes.."
+    echo -n $(gettext "Probing: ")
+    cards=`cat $FOUND | tr -d \"`
+    for card in $cards; do
+	echo -n " $card"
+	ac_opts=""
+	if eval ac_try_card_$card ; then
+	    xecho " : FOUND!!"
+	    ac_config_card $card $ac_opts
+	    return 0
+	fi
+    done
+    echo
+    title=$(gettext "Result")
+    msg=$(gettext "No legacy cards found")
+    $DIALOG --title "$title" --msgbox "$msg" 5 50
+    return 1
+}
+
+#
+# main part continued..
+#
+
+if test -n "$LOGFILE" ; then
+    touch "$LOGFILE"
+    echo -n "Starting alsaconf: " >> "$LOGFILE"
+    date >> "$LOGFILE"
+fi
+
+if [ x"$legacy_probe_card" != x ]; then
+    ac_opts=""
+    if eval ac_try_card_$legacy_probe_card >/dev/null 2>&1; then
+	echo "$ac_opts"
+	echo "$ac_cardname"
+	exit 0
+    else
+	echo "FAILED"
+	exit 1
+    fi
+fi
+
+intro
+
+if [ $do_legacy_only = 1 ]; then
+    ac_config_legacy
+    exit 0
+fi
+    
+probe_cards
+
+devs_found=()
+devs_olist=""
+
+if [ -s "$FOUND" ]; then
+    while read dev card ; do
+	MODDIR=/lib/modules/`uname -r`
+	find $MODDIR -type f | grep -q -E $card'\.(o|ko)' || continue
+	cardname=`find_device_name $dev | cut -c 1-64`
+	if [ -z "$cardname" ]; then
+	    cardname="$card"
+	fi
+	card=${card##snd-}
+	devs_found=("${devs_found[@]}" "$card" "$cardname")
+	devs_devs=("${devs_devs[@]}" "$card" "$dev")
+    done <"$FOUND"
+    devs_olist=`cat $FOUND`
+fi
+if [ x$devs_found != x ]; then
+    #
+    # check for TP600E
+    #
+    if [ ${devs_found[0]} = cs46xx ]; then
+	if $lspci -nv 2>/dev/null| grep -q "Subsystem: 1014:1010"; then
+	    msg=$(gettext "
+ Looks like you having a Thinkpad 600E or 770 notebook.
+ On this notebook, CS4236 driver should be used
+ although CS46xx chip is detected.
+
+ Shall I try to snd-cs4236 driver and probe
+ the legacy ISA configuration?")
+	    if $DIALOG --yesno "$msg" 13 60
+	    then
+		try_all_combination=1
+		ac_config_legacy cs4236
+		exit 0
+	    fi
+	elif $lspci -nv 2>/dev/null| grep -q "Subsystem: 8086:8080"; then
+	    msg=$(gettext "
+ Looks like you having a Dell Dimension machine.
+ On this machine, CS4232 driver should be used
+ although CS46xx chip is detected.
+
+ Shall I try to snd-cs4232 driver and probe
+ the legacy ISA configuration?")
+	    if $DIALOG --yesno "$msg" 13 60
+	    then
+		try_all_combination=1
+		ac_config_legacy cs4232
+		exit 0
+	    fi
+        fi	
+    fi
+   
+    devs_found=("${devs_found[@]}" "legacy" "Probe legacy ISA (non-PnP) chips")
+    title=$(gettext "Soundcard Selection")
+    msg=$(gettext "
+         Following card(s) are found on your system.
+         Choose a soundcard to configure:
+")
+    $DIALOG --title "$title" --menu "$msg" 17 76 8 "${devs_found[@]}" --output-fd 3 3> $FOUND || acex 0
+    card=`head -n 1 $FOUND`
+    if [ "$card" = "legacy" ]; then
+	ac_config_legacy
+    else
+	ac_config_card "$card"
+    fi
+    exit 0
+else
+    msg=$(gettext "
+        No supported PnP or PCI card found.
+
+ Would you like to probe legacy ISA sound cards/chips?
+
+")
+    if $DIALOG --yesno "$msg" 9 60 ; then
+	ac_config_legacy
+	exit 0
+    fi
+fi
+
+rm -f "$FOUND" "$DUMP"
+exit 0
Index: utils/create-1.2.8-alsaconf-patch/alsa-utils-1.2.8-new/alsaconf
===================================================================
--- utils/create-1.2.8-alsaconf-patch/alsa-utils-1.2.8-new/alsaconf	(nonexistent)
+++ utils/create-1.2.8-alsaconf-patch/alsa-utils-1.2.8-new/alsaconf	(revision 5)

Property changes on: utils/create-1.2.8-alsaconf-patch/alsa-utils-1.2.8-new/alsaconf
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: utils/create-1.2.8-alsaconf-patch/alsa-utils-1.2.8-new
===================================================================
--- utils/create-1.2.8-alsaconf-patch/alsa-utils-1.2.8-new	(nonexistent)
+++ utils/create-1.2.8-alsaconf-patch/alsa-utils-1.2.8-new	(revision 5)

Property changes on: utils/create-1.2.8-alsaconf-patch/alsa-utils-1.2.8-new
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: utils/create-1.2.8-alsaconf-patch/create.patch.sh
===================================================================
--- utils/create-1.2.8-alsaconf-patch/create.patch.sh	(nonexistent)
+++ utils/create-1.2.8-alsaconf-patch/create.patch.sh	(revision 5)
@@ -0,0 +1,15 @@
+#!/bin/sh
+
+VERSION=1.2.8
+
+tar --files-from=file.list -xjvf ../alsa-utils-$VERSION.tar.bz2
+mv alsa-utils-$VERSION alsa-utils-$VERSION-orig
+
+cp -rf ./alsa-utils-$VERSION-new ./alsa-utils-$VERSION
+
+diff --unified -Nr  alsa-utils-$VERSION-orig  alsa-utils-$VERSION > alsa-utils-$VERSION-alsaconf.patch
+
+mv alsa-utils-$VERSION-alsaconf.patch ../patches
+
+rm -rf ./alsa-utils-$VERSION
+rm -rf ./alsa-utils-$VERSION-orig

Property changes on: utils/create-1.2.8-alsaconf-patch/create.patch.sh
___________________________________________________________________
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Index: utils/create-1.2.8-alsaconf-patch/file.list
===================================================================
--- utils/create-1.2.8-alsaconf-patch/file.list	(nonexistent)
+++ utils/create-1.2.8-alsaconf-patch/file.list	(revision 5)
@@ -0,0 +1,3 @@
+alsa-utils-1.2.8/alsaconf/alsaconf.8
+alsa-utils-1.2.8/alsaconf/alsaconf.fr.8
+alsa-utils-1.2.8/alsaconf/alsaconf.in
Index: utils/create-1.2.8-alsaconf-patch
===================================================================
--- utils/create-1.2.8-alsaconf-patch	(nonexistent)
+++ utils/create-1.2.8-alsaconf-patch	(revision 5)

Property changes on: utils/create-1.2.8-alsaconf-patch
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: utils/patches/README
===================================================================
--- utils/patches/README	(nonexistent)
+++ utils/patches/README	(revision 5)
@@ -0,0 +1,6 @@
+
+/* begin *
+
+   TODO: Leave some comment here.
+
+ * end */
Index: utils/patches
===================================================================
--- utils/patches	(nonexistent)
+++ utils/patches	(revision 5)

Property changes on: utils/patches
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: utils
===================================================================
--- utils	(nonexistent)
+++ utils	(revision 5)

Property changes on: utils
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~
Index: .
===================================================================
--- .	(nonexistent)
+++ .	(revision 5)

Property changes on: .
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,73 ##
+
+# install dir
+dist
+
+# Target build dirs
+.a1x-newlib
+.a2x-newlib
+.at91sam7s-newlib
+
+.build-machine
+
+.a1x-glibc
+.a2x-glibc
+.h3-glibc
+.h5-glibc
+.i586-glibc
+.i686-glibc
+.imx6-glibc
+.jz47xx-glibc
+.makefile
+.am335x-glibc
+.omap543x-glibc
+.p5600-glibc
+.power8-glibc
+.power8le-glibc
+.power9-glibc
+.power9le-glibc
+.m1000-glibc
+.riscv64-glibc
+.rk328x-glibc
+.rk33xx-glibc
+.rk339x-glibc
+.s8xx-glibc
+.s9xx-glibc
+.x86_64-glibc
+
+# Hidden files (each file)
+.makefile
+.dist
+.rootfs
+
+# src & hw requires
+.src_requires
+.src_requires_depend
+.requires
+.requires_depend
+
+# Tarballs
+*.gz
+*.bz2
+*.lz
+*.xz
+*.tgz
+*.txz
+
+# Signatures
+*.asc
+*.sig
+*.sign
+*.sha1sum
+
+# Patches
+*.patch
+
+# Descriptions
+*.dsc
+*.txt
+
+# Default linux config files
+*.defconfig
+
+# backup copies
+*~