[Pkg-alsa-devel] [Debian ALSA CVS] debian/alsa-driver (58 files)

David B Harris dbharris-guest@haydn.debian.org
Tue, 13 Apr 2004 13:39:26 -0600


    Date: Tuesday, April 13, 2004 @ 13:39:26
  Author: dbharris-guest
    Path: /cvsroot/pkg-alsa/debian/alsa-driver

Modified: Makefile acore/pcm_lib.c alsa-kernel/core/ioctl32/timer32.c
          alsa-kernel/core/memalloc.c alsa-kernel/include/ac97_codec.h
          alsa-kernel/isa/es18xx.c
          alsa-kernel/isa/opti9xx/opti92x-ad1848.c
          alsa-kernel/isa/sb/sb16.c alsa-kernel/pci/emu10k1/emu10k1_main.c
          alsa-kernel/pci/emu10k1/emufx.c alsa-kernel/pci/emu10k1/emupcm.c
          configure configure.in debian/changelog include/adriver.h
          include/config1.h.in isa/msnd/msnd_pinnacle.c
 Removed: acore/pcm_lib.patch alsa-kernel/scripts/Modules.dep
          alsa-kernel/scripts/mod-deps.c alsa-kernel/scripts/mod-deps.h
          alsa-kernel/scripts/patch-2.5 pci/au88x0/au8810.h
          pci/au88x0/au8810_core.c pci/au88x0/au8810_eq.c
          pci/au88x0/au8810_game.c pci/au88x0/au8810_mixer.c
          pci/au88x0/au8810_mpu401.c pci/au88x0/au8810_pcm.c
          pci/au88x0/au8820.h pci/au88x0/au8820_core.c
          pci/au88x0/au8820_game.c pci/au88x0/au8820_mixer.c
          pci/au88x0/au8820_mpu401.c pci/au88x0/au8820_pcm.c
          pci/au88x0/au8820_synth.c pci/au88x0/au8830.h
          pci/au88x0/au8830_core.c pci/au88x0/au8830_eq.c
          pci/au88x0/au8830_game.c pci/au88x0/au8830_mixer.c
          pci/au88x0/au8830_mpu401.c pci/au88x0/au8830_pcm.c
          pci/au88x0/au8830_synth.c pci/au88x0/au88x0.c
          pci/au88x0/au88x0.h pci/au88x0/au88x0_core.c
          pci/au88x0/au88x0_eq.c pci/au88x0/au88x0_eq.h
          pci/au88x0/au88x0_eqdata.c pci/au88x0/au88x0_game.c
          pci/au88x0/au88x0_mixer.c pci/au88x0/au88x0_mpu401.c
          pci/au88x0/au88x0_pcm.c pci/au88x0/au88x0_synth.c
          pci/au88x0/migrate usb/usx2y/Kconfig utils/Modules.dep

New upstream source


------------------------------------------+
 Makefile                                 |   36 
 acore/pcm_lib.c                          |    8 
 acore/pcm_lib.patch                      |   16 
 alsa-kernel/core/ioctl32/timer32.c       |   10 
 alsa-kernel/core/memalloc.c              |  849 ++----
 alsa-kernel/include/ac97_codec.h         |    9 
 alsa-kernel/isa/es18xx.c                 |   17 
 alsa-kernel/isa/opti9xx/opti92x-ad1848.c |   26 
 alsa-kernel/isa/sb/sb16.c                |   11 
 alsa-kernel/pci/emu10k1/emu10k1_main.c   |   31 
 alsa-kernel/pci/emu10k1/emufx.c          |   31 
 alsa-kernel/pci/emu10k1/emupcm.c         |   11 
 alsa-kernel/scripts/Modules.dep          |  231 -
 alsa-kernel/scripts/mod-deps.c           | 1241 ---------
 alsa-kernel/scripts/mod-deps.h           |   90 
 alsa-kernel/scripts/patch-2.5            |  222 -
 configure                                | 3992 +++++++++++++++++++++++------
 configure.in                             |   51 
 debian/changelog                         |    5 
 include/adriver.h                        |   55 
 include/config1.h.in                     |  131 
 isa/msnd/msnd_pinnacle.c                 |    3 
 pci/au88x0/au8810.h                      |  222 -
 pci/au88x0/au8810_core.c                 |    3 
 pci/au88x0/au8810_eq.c                   |    3 
 pci/au88x0/au8810_game.c                 |    3 
 pci/au88x0/au8810_mixer.c                |    3 
 pci/au88x0/au8810_mpu401.c               |    3 
 pci/au88x0/au8810_pcm.c                  |    3 
 pci/au88x0/au8820.h                      |  227 -
 pci/au88x0/au8820_core.c                 |    3 
 pci/au88x0/au8820_game.c                 |    3 
 pci/au88x0/au8820_mixer.c                |    3 
 pci/au88x0/au8820_mpu401.c               |    3 
 pci/au88x0/au8820_pcm.c                  |    3 
 pci/au88x0/au8820_synth.c                |    3 
 pci/au88x0/au8830.h                      |  236 -
 pci/au88x0/au8830_core.c                 |    3 
 pci/au88x0/au8830_eq.c                   |    3 
 pci/au88x0/au8830_game.c                 |    3 
 pci/au88x0/au8830_mixer.c                |    3 
 pci/au88x0/au8830_mpu401.c               |    3 
 pci/au88x0/au8830_pcm.c                  |    3 
 pci/au88x0/au8830_synth.c                |    3 
 pci/au88x0/au88x0.c                      |  403 --
 pci/au88x0/au88x0.h                      |  211 -
 pci/au88x0/au88x0_core.c                 | 2342 -----------------
 pci/au88x0/au88x0_eq.c                   |  833 ------
 pci/au88x0/au88x0_eq.h                   |   45 
 pci/au88x0/au88x0_eqdata.c               |  111 
 pci/au88x0/au88x0_game.c                 |  131 
 pci/au88x0/au88x0_mixer.c                |   28 
 pci/au88x0/au88x0_mpu401.c               |   98 
 pci/au88x0/au88x0_pcm.c                  |  417 ---
 pci/au88x0/au88x0_synth.c                | 2256 ----------------
 pci/au88x0/migrate                       |   20 
 usb/usx2y/Kconfig                        |    6 
 utils/Modules.dep                        |   28 
 58 files changed, 3922 insertions(+), 10825 deletions(-)


Index: debian/alsa-driver/Makefile
diff -u debian/alsa-driver/Makefile:1.13 debian/alsa-driver/Makefile:1.14
--- debian/alsa-driver/Makefile:1.13	Tue Feb  3 11:36:40 2004
+++ debian/alsa-driver/Makefile	Tue Apr 13 13:39:25 2004
@@ -7,6 +7,7 @@
 
 ifeq (Makefile.conf,$(wildcard Makefile.conf))
 include Makefile.conf
+include toplevel.config
 else
 .PHONY: dummy1
 dummy1:
@@ -14,6 +15,7 @@
 	@echo
 	@echo "Please, run the configure script as first..."
 	@echo
+MAINSRCDIR := $(shell /bin/pwd)
 endif
 
 SND_TOPDIR   = $(MAINSRCDIR)
@@ -55,6 +57,8 @@
 endif
 CSUBDIRS += include test utils
 
+KCONFIG_FILES = $(shell find $(SND_TOPDIR) -name Kconfig) $(shell find $(SND_TOPDIR)/alsa-kernel/ -name Kconfig)
+
 .PHONY: all
 all: compile
 
@@ -69,11 +73,11 @@
 	fi
 	cp -auvf include/version.h include/sound/version.h
 
-utils/mod-deps: alsa-kernel/scripts/mod-deps.c alsa-kernel/scripts/mod-deps.h
-	gcc -Ialsa-kernel/scripts alsa-kernel/scripts/mod-deps.c -o utils/mod-deps
+utils/mod-deps: utils/mod-deps.c
+	gcc utils/mod-deps.c -o utils/mod-deps
 
-toplevel.config.in: alsa-kernel/Config.in utils/mod-deps alsa-kernel/scripts/Modules.dep utils/Modules.dep
-	cat alsa-kernel/scripts/Modules.dep utils/Modules.dep | utils/mod-deps --makeconf > toplevel.config.in
+toplevel.config.in: $(KCONFIG_FILES) alsa-kernel/sound_core.c utils/mod-deps
+	utils/mod-deps --basedir $(SND_TOPDIR)/alsa-kernel --hiddendir $(SND_TOPDIR) --makeconf > toplevel.config.in
 
 acinclude.m4: alsa-kernel/Config.in utils/mod-deps alsa-kernel/scripts/Modules.dep utils/Modules.dep
 	cat alsa-kernel/scripts/Modules.dep utils/Modules.dep | utils/mod-deps --acinclude > acinclude.m4
@@ -152,13 +156,14 @@
 
 .PHONY: install-scripts
 install-scripts:
-	if [ -d $(DESTDIR)/sbin/init.d ]; then \
-	  install -m 755 -g $(IGROUP) -o $(IUSER) utils/alsasound $(DESTDIR)/sbin/init.d/alsasound; \
-	elif [ -d $(DESTDIR)/etc/rc.d/init.d ]; then \
-	  install -m 755 -g $(IGROUP) -o $(IUSER) utils/alsasound $(DESTDIR)/etc/rc.d/init.d/alsasound; \
-	elif [ -d $(DESTDIR)/etc/init.d ]; then \
-	  install -m 755 -g $(IGROUP) -o $(IUSER) utils/alsasound $(DESTDIR)/etc/init.d/alsasound; \
-	fi
+	@for d in /sbin/init.d /etc/rc.d/init.d /etc/init.d; do \
+	 if [ -d $(DESTDIR)$$d ]; then \
+	   if [ -f $(DESTDIR)$$d/alsasound ]; then \
+	     cmp -s utils/alsasound $(DESTDIR)$$d/alsasound || cp $(DESTDIR)$$d/alsasound $(DESTDIR)$$d/alsasound.old; \
+	   fi; \
+	   install -m 755 -g $(IGROUP) -o $(IUSER) utils/alsasound $(DESTDIR)$$d/alsasound; \
+	   break; \
+	fi; done
 
 .PHONY: check-snd-prefix
 check-snd-prefix:
@@ -231,7 +236,14 @@
 
 .PHONY: uninstall
 uninstall:
-	rm -rf $(DESTDIR)$(prefix)/include/sound
+	-rm -rf $(DESTDIR)$(prefix)/include/sound
+ifeq ($(moddir_tree),y)
+	{ \
+		for i in core $(SUBDIRS) ; do \
+			rm -rf $(DESTDIR)$(moddir)/$$i ; \
+		done ; \
+	}
+else
 	rm -f $(DESTDIR)$(moddir)/snd*.o $(DESTDIR)$(moddir)/persist.o $(DESTDIR)$(moddir)/isapnp.o
 	rm -f $(DESTDIR)/sbin/init.d/alsasound
 	rm -f $(DESTDIR)/etc/rc.d/init.d/alsasound
Index: debian/alsa-driver/acore/pcm_lib.c
diff -u /dev/null debian/alsa-driver/acore/pcm_lib.c:1.3
--- /dev/null	Tue Apr 13 13:39:27 2004
+++ debian/alsa-driver/acore/pcm_lib.c	Tue Apr 13 13:39:25 2004
@@ -0,0 +1,8 @@
+#define __NO_VERSION__
+#include <sound/driver.h>
+
+#ifndef CONFIG_HAVE_DUMP_STACK
+#define dump_stack()
+#endif
+
+#include "../alsa-kernel/core/pcm_lib.c"
Index: debian/alsa-driver/acore/pcm_lib.patch
diff -u debian/alsa-driver/acore/pcm_lib.patch:1.1.1.1 debian/alsa-driver/acore/pcm_lib.patch:removed
--- debian/alsa-driver/acore/pcm_lib.patch:1.1.1.1	Tue Feb  3 05:27:30 2004
+++ debian/alsa-driver/acore/pcm_lib.patch	Tue Apr 13 13:39:27 2004
@@ -1,17 +0,0 @@
---- ../alsa-kernel/core/pcm_lib.c	2004-01-26 17:40:54.000000000 +0100
-+++ pcm_lib.c	2004-02-03 13:20:30.000000000 +0100
-@@ -1,3 +1,4 @@
-+#define __NO_VERSION__
- /*
-  *  Digital Audio (PCM) abstract layer
-  *  Copyright (c) by Jaroslav Kysela <perex@suse.cz>
-@@ -164,7 +165,9 @@
- 				   substream->pcm->card->number,
- 				   substream->pcm->device,
- 				   substream->stream ? 'c' : 'p');
-+#ifdef CONFIG_SND_HAVE_DUMP_STACK
- 			dump_stack();
-+#endif
- 		}
- #endif
- 		return -EPIPE;
Index: debian/alsa-driver/alsa-kernel/core/ioctl32/timer32.c
diff -u debian/alsa-driver/alsa-kernel/core/ioctl32/timer32.c:1.6 debian/alsa-driver/alsa-kernel/core/ioctl32/timer32.c:1.7
--- debian/alsa-driver/alsa-kernel/core/ioctl32/timer32.c:1.6	Sat Jul 19 03:41:41 2003
+++ debian/alsa-driver/alsa-kernel/core/ioctl32/timer32.c	Tue Apr 13 13:39:25 2004
@@ -88,8 +88,18 @@
 	{ SNDRV_TIMER_IOCTL_INFO32, AP(timer_info) },
 	MAP_COMPAT(SNDRV_TIMER_IOCTL_PARAMS),
 	{ SNDRV_TIMER_IOCTL_STATUS32, AP(timer_status) },
+#if 0
+	/* ** FIXME **
+	 * The following four entries are disabled because they conflict
+	 * with the TCOC* definitions.
+	 * Unfortunately, the current ioctl32 wrapper uses a single
+	 * hash table for all devices.  Once when the wrapper is fixed
+	 * with the table based on devices, they'll be back again.
+	 */
 	MAP_COMPAT(SNDRV_TIMER_IOCTL_START),
 	MAP_COMPAT(SNDRV_TIMER_IOCTL_STOP),
 	MAP_COMPAT(SNDRV_TIMER_IOCTL_CONTINUE),
+	MAP_COMPAT(SNDRV_TIMER_IOCTL_PAUSE),
+#endif
 	{ 0 },
 };
Index: debian/alsa-driver/alsa-kernel/core/memalloc.c
diff -u debian/alsa-driver/alsa-kernel/core/memalloc.c:1.13 debian/alsa-driver/alsa-kernel/core/memalloc.c:1.14
--- debian/alsa-driver/alsa-kernel/core/memalloc.c:1.13	Tue Feb  3 11:36:40 2004
+++ debian/alsa-driver/alsa-kernel/core/memalloc.c	Tue Apr 13 13:39:25 2004
@@ -25,10 +25,15 @@
 #include <linux/module.h>
 #include <linux/proc_fs.h>
 #include <linux/init.h>
+#include <linux/pci.h>
 #include <linux/slab.h>
 #include <linux/mm.h>
+#include <linux/dma-mapping.h>
 #include <asm/semaphore.h>
 #include <sound/memalloc.h>
+#ifdef CONFIG_SBUS
+#include <asm/sbus.h>
+#endif
 
 
 MODULE_AUTHOR("Takashi Iwai <tiwai@suse.de>, Jaroslav Kysela <perex@suse.cz>");
@@ -43,6 +48,13 @@
 MODULE_PARM(enable, "1-" __MODULE_STRING(SNDRV_CARDS) "i");
 MODULE_PARM_DESC(enable, "Enable cards to allocate buffers.");
 
+/*
+ */
+
+void *snd_malloc_sgbuf_pages(const struct snd_dma_device *dev,
+                             size_t size, struct snd_dma_buffer *dmab,
+			     size_t *res_size);
+int snd_free_sgbuf_pages(struct snd_dma_buffer *dmab);
 
 /*
  */
@@ -73,14 +85,40 @@
 #define snd_assert(expr, args...) /**/
 #endif
 
-#ifdef CONFIG_PCI
+/*
+ *  Hacks
+ */
+
+static void *snd_dma_alloc_coherent1(struct device *dev, size_t size,
+				     dma_addr_t *dma_handle, int flags)
+{
+	if (dev)
+		return dma_alloc_coherent(dev, size, dma_handle, flags);
+	else /* FIXME: dma_alloc_coherent does't always accept dev=NULL */
+		return pci_alloc_consistent(NULL, size, dma_handle);
+}
+
+static void snd_dma_free_coherent1(struct device *dev, size_t size, void *dma_addr,
+				   dma_addr_t dma_handle)
+{
+	if (dev)
+		return dma_free_coherent(dev, size, dma_addr, dma_handle);
+	else
+		return pci_free_consistent(NULL, size, dma_addr, dma_handle);
+}
+
+#undef dma_alloc_coherent
+#define dma_alloc_coherent snd_dma_alloc_coherent1
+#undef dma_free_coherent
+#define dma_free_coherent snd_dma_free_coherent1
+
+
 #if defined(__i386__) || defined(__ppc__) || defined(__x86_64__)
-#define HACK_PCI_ALLOC_CONSISTENT
 
 /*
- * A hack to allocate large buffers via pci_alloc_consistent()
+ * A hack to allocate large buffers via dma_alloc_coherent()
  *
- * since pci_alloc_consistent always tries GFP_DMA when the requested
+ * since dma_alloc_coherent always tries GFP_DMA when the requested
  * pci memory region is below 32bit, it happens quite often that even
  * 2 order of pages cannot be allocated.
  *
@@ -88,46 +126,248 @@
  * allocation will be done without GFP_DMA.  if the area doesn't match
  * with the requested region, then realloate with the original dma_mask
  * again.
+ *
+ * Really, we want to move this type of thing into dma_alloc_coherent()
+ * so dma_mask doesn't have to be messed with.
  */
 
-static void *snd_pci_hack_alloc_consistent(struct pci_dev *hwdev, size_t size,
-				    dma_addr_t *dma_handle)
+static void *snd_dma_hack_alloc_coherent(struct device *dev, size_t size,
+					 dma_addr_t *dma_handle, int flags)
 {
 	void *ret;
-	u64 dma_mask, cdma_mask;
-	unsigned long mask;
+	u64 dma_mask;
 
-	if (hwdev == NULL)
-		return pci_alloc_consistent(hwdev, size, dma_handle);
-	dma_mask = hwdev->dma_mask;
-	cdma_mask = hwdev->consistent_dma_mask;
-	mask = (unsigned long)dma_mask && (unsigned long)cdma_mask;
-	hwdev->dma_mask = 0xffffffff; /* do without masking */
-	hwdev->consistent_dma_mask = 0xffffffff; /* do without masking */
-	ret = pci_alloc_consistent(hwdev, size, dma_handle);
-	hwdev->dma_mask = dma_mask; /* restore */
-	hwdev->consistent_dma_mask = cdma_mask; /* restore */
+	if (dev == NULL || !dev->dma_mask)
+		return dma_alloc_coherent(dev, size, dma_handle, flags);
+	dma_mask = *dev->dma_mask;
+	*dev->dma_mask = 0xffffffff; 	/* do without masking */
+	ret = dma_alloc_coherent(dev, size, dma_handle, flags);
+	*dev->dma_mask = dma_mask;	/* restore */
 	if (ret) {
 		/* obtained address is out of range? */
-		if (((unsigned long)*dma_handle + size - 1) & ~mask) {
+		if (((unsigned long)*dma_handle + size - 1) & ~dma_mask) {
 			/* reallocate with the proper mask */
-			pci_free_consistent(hwdev, size, ret, *dma_handle);
-			ret = pci_alloc_consistent(hwdev, size, dma_handle);
+			dma_free_coherent(dev, size, ret, *dma_handle);
+			ret = dma_alloc_coherent(dev, size, dma_handle, flags);
 		}
 	} else {
 		/* wish to success now with the proper mask... */
-		if (mask != 0xffffffffUL)
-			ret = pci_alloc_consistent(hwdev, size, dma_handle);
+		if (dma_mask != 0xffffffffUL)
+			ret = dma_alloc_coherent(dev, size, dma_handle, flags);
 	}
 	return ret;
 }
 
-/* redefine pci_alloc_consistent for some architectures */
-#undef pci_alloc_consistent
-#define pci_alloc_consistent snd_pci_hack_alloc_consistent
+/* redefine dma_alloc_coherent for some architectures */
+#undef dma_alloc_coherent
+#define dma_alloc_coherent snd_dma_hack_alloc_coherent
 
 #endif /* arch */
-#endif /* CONFIG_PCI */
+
+/*
+ *
+ *  Generic memory allocators
+ *
+ */
+
+static long snd_allocated_pages; /* holding the number of allocated pages */
+
+static void mark_pages(void *res, int order)
+{
+	struct page *page = virt_to_page(res);
+	struct page *last_page = page + (1 << order);
+	while (page < last_page)
+		SetPageReserved(page++);
+	snd_allocated_pages += 1 << order;
+}
+
+static void unmark_pages(void *res, int order)
+{
+	struct page *page = virt_to_page(res);
+	struct page *last_page = page + (1 << order);
+	while (page < last_page)
+		ClearPageReserved(page++);
+	snd_allocated_pages -= 1 << order;
+}
+
+/**
+ * snd_malloc_pages - allocate pages with the given size
+ * @size: the size to allocate in bytes
+ * @gfp_flags: the allocation conditions, GFP_XXX
+ *
+ * Allocates the physically contiguous pages with the given size.
+ *
+ * Returns the pointer of the buffer, or NULL if no enoguh memory.
+ */
+void *snd_malloc_pages(size_t size, unsigned int gfp_flags)
+{
+	int pg;
+	void *res;
+
+	snd_assert(size > 0, return NULL);
+	snd_assert(gfp_flags != 0, return NULL);
+	for (pg = 0; PAGE_SIZE * (1 << pg) < size; pg++);
+	if ((res = (void *) __get_free_pages(gfp_flags, pg)) != NULL) {
+		mark_pages(res, pg);
+	}
+	return res;
+}
+
+/**
+ * snd_malloc_pages_fallback - allocate pages with the given size with fallback
+ * @size: the requested size to allocate in bytes
+ * @gfp_flags: the allocation conditions, GFP_XXX
+ * @res_size: the pointer to store the size of buffer actually allocated
+ *
+ * Allocates the physically contiguous pages with the given request
+ * size.  When no space is left, this function reduces the size and
+ * tries to allocate again.  The size actually allocated is stored in
+ * res_size argument.
+ *
+ * Returns the pointer of the buffer, or NULL if no enoguh memory.
+ */            
+void *snd_malloc_pages_fallback(size_t size, unsigned int gfp_flags, size_t *res_size)
+{
+	void *res;
+
+	snd_assert(size > 0, return NULL);
+	snd_assert(res_size != NULL, return NULL);
+	do {
+		if ((res = snd_malloc_pages(size, gfp_flags)) != NULL) {
+			*res_size = size;
+			return res;
+		}
+		size >>= 1;
+	} while (size >= PAGE_SIZE);
+	return NULL;
+}
+
+/**
+ * snd_free_pages - release the pages
+ * @ptr: the buffer pointer to release
+ * @size: the allocated buffer size
+ *
+ * Releases the buffer allocated via snd_malloc_pages().
+ */
+void snd_free_pages(void *ptr, size_t size)
+{
+	int pg;
+
+	if (ptr == NULL)
+		return;
+	for (pg = 0; PAGE_SIZE * (1 << pg) < size; pg++);
+	unmark_pages(ptr, pg);
+	free_pages((unsigned long) ptr, pg);
+}
+
+/*
+ *
+ *  Bus-specific memory allocators
+ *
+ */
+
+static void *snd_malloc_dev_pages(struct device *dev, size_t size, dma_addr_t *dma)
+{
+	int pg;
+	void *res;
+	unsigned int gfp_flags;
+
+	snd_assert(size > 0, return NULL);
+	snd_assert(dma != NULL, return NULL);
+	pg = get_order(size);
+	gfp_flags = GFP_KERNEL;
+	if (pg > 0)
+		gfp_flags |= __GFP_NOWARN;
+	res = dma_alloc_coherent(dev, PAGE_SIZE << pg, dma, gfp_flags);
+	if (res != NULL)
+		mark_pages(res, pg);
+
+	return res;
+}
+
+static void *snd_malloc_dev_pages_fallback(struct device *dev, size_t size,
+					   dma_addr_t *dma, size_t *res_size)
+{
+	void *res;
+
+	snd_assert(res_size != NULL, return NULL);
+	do {
+		if ((res = snd_malloc_dev_pages(dev, size, dma)) != NULL) {
+			*res_size = size;
+			return res;
+		}
+		size >>= 1;
+	} while (size >= PAGE_SIZE);
+	return NULL;
+}
+
+static void snd_free_dev_pages(struct device *dev, size_t size, void *ptr,
+			       dma_addr_t dma)
+{
+	int pg;
+
+	if (ptr == NULL)
+		return;
+	pg = get_order(size);
+	unmark_pages(ptr, pg);
+	dma_free_coherent(dev, PAGE_SIZE << pg, ptr, dma);
+}
+
+#ifdef CONFIG_SBUS
+
+static void *snd_malloc_sbus_pages(struct device *dev, size_t size,
+				   dma_addr_t *dma_addr)
+{
+	struct sbus_dev *sdev = (struct sbus_dev *)dev;
+	int pg;
+	void *res;
+
+	snd_assert(size > 0, return NULL);
+	snd_assert(dma_addr != NULL, return NULL);
+	for (pg = 0; PAGE_SIZE * (1 << pg) < size; pg++);
+	res = sbus_alloc_consistent(sdev, PAGE_SIZE * (1 << pg), dma_addr);
+	if (res != NULL) {
+		mark_pages(res, pg);
+	}
+	return res;
+}
+
+static void *snd_malloc_sbus_pages_fallback(struct device *dev, size_t size,
+					    dma_addr_t *dma_addr, size_t *res_size)
+{
+	void *res;
+
+	snd_assert(res_size != NULL, return NULL);
+	do {
+		if ((res = snd_malloc_sbus_pages(dev, size, dma_addr)) != NULL) {
+			*res_size = size;
+			return res;
+		}
+		size >>= 1;
+	} while (size >= PAGE_SIZE);
+	return NULL;
+}
+
+static void snd_free_sbus_pages(struct device *dev, size_t size,
+				void *ptr, dma_addr_t dma_addr)
+{
+	struct sbus_dev *sdev = (struct sbus_dev *)dev;
+	int pg;
+
+	if (ptr == NULL)
+		return;
+	for (pg = 0; PAGE_SIZE * (1 << pg) < size; pg++);
+	unmark_pages(ptr, pg);
+	sbus_free_consistent(sdev, PAGE_SIZE * (1 << pg), ptr, dma_addr);
+}
+
+#endif /* CONFIG_SBUS */
+
+/*
+ *
+ *  ALSA generic memory management
+ *
+ */
 
 
 /*
@@ -142,23 +382,7 @@
 		if (! allow_unused || (a->id != SNDRV_DMA_DEVICE_UNUSED && b->id != SNDRV_DMA_DEVICE_UNUSED))
 			return 0;
 	}
-	switch (a->type) {
-	case SNDRV_DMA_TYPE_CONTINUOUS:
-#ifdef CONFIG_ISA
-	case SNDRV_DMA_TYPE_ISA:
-#endif
-		return a->dev.flags == b->dev.flags;
-#ifdef CONFIG_PCI
-	case SNDRV_DMA_TYPE_PCI:
-	case SNDRV_DMA_TYPE_PCI_SG:
-		return a->dev.pci == b->dev.pci;
-#endif
-#ifdef CONFIG_SBUS
-	case SNDRV_DMA_TYPE_SBUS:
-		return a->dev.sbus == b->dev.sbus;
-#endif
-	}
-	return 0;
+	return a->dev == b->dev;
 }
 
 /**
@@ -183,27 +407,70 @@
 	dmab->bytes = 0;
 	switch (dev->type) {
 	case SNDRV_DMA_TYPE_CONTINUOUS:
-		dmab->area = snd_malloc_pages(size, dev->dev.flags);
+		dmab->area = snd_malloc_pages(size, (unsigned long)dev->dev);
 		dmab->addr = 0;
 		break;
-#ifdef CONFIG_ISA
-	case SNDRV_DMA_TYPE_ISA:
-		dmab->area = snd_malloc_isa_pages(size, &dmab->addr);
+#ifdef CONFIG_SBUS
+	case SNDRV_DMA_TYPE_SBUS:
+		dmab->area = snd_malloc_sbus_pages(dev->dev, size, &dmab->addr);
 		break;
 #endif
-#ifdef CONFIG_PCI
-	case SNDRV_DMA_TYPE_PCI:
-		dmab->area = snd_malloc_pci_pages(dev->dev.pci, size, &dmab->addr);
+	case SNDRV_DMA_TYPE_DEV:
+		dmab->area = snd_malloc_dev_pages(dev->dev, size, &dmab->addr);
 		break;
-	case SNDRV_DMA_TYPE_PCI_SG:
-		snd_malloc_sgbuf_pages(dev->dev.pci, size, dmab);
+	case SNDRV_DMA_TYPE_DEV_SG:
+		snd_malloc_sgbuf_pages(dev, size, dmab, NULL);
+		break;
+	default:
+		printk(KERN_ERR "snd-malloc: invalid device type %d\n", dev->type);
+		dmab->area = NULL;
+		dmab->addr = 0;
+		return -ENXIO;
+	}
+	if (! dmab->area)
+		return -ENOMEM;
+	dmab->bytes = size;
+	return 0;
+}
+
+/**
+ * snd_dma_alloc_pages_fallback - allocate the buffer area according to the given type with fallback
+ * @dev: the buffer device info
+ * @size: the buffer size to allocate
+ * @dmab: buffer allocation record to store the allocated data
+ *
+ * Calls the memory-allocator function for the corresponding
+ * buffer type.  When no space is left, this function reduces the size and
+ * tries to allocate again.  The size actually allocated is stored in
+ * res_size argument.
+ * 
+ * Returns zero if the buffer with the given size is allocated successfuly,
+ * other a negative value at error.
+ */
+int snd_dma_alloc_pages_fallback(const struct snd_dma_device *dev, size_t size,
+				 struct snd_dma_buffer *dmab)
+{
+	snd_assert(dev != NULL, return -ENXIO);
+	snd_assert(size > 0, return -ENXIO);
+	snd_assert(dmab != NULL, return -ENXIO);
+
+	dmab->bytes = 0;
+	switch (dev->type) {
+	case SNDRV_DMA_TYPE_CONTINUOUS:
+		dmab->area = snd_malloc_pages_fallback(size, (unsigned long)dev->dev, &dmab->bytes);
+		dmab->addr = 0;
 		break;
-#endif
 #ifdef CONFIG_SBUS
 	case SNDRV_DMA_TYPE_SBUS:
-		dmab->area = snd_malloc_sbus_pages(dev->dev.sbus, size, &dmab->addr);
+		dmab->area = snd_malloc_sbus_pages_fallback(dev->dev, size, &dmab->addr, &dmab->bytes);
 		break;
 #endif
+	case SNDRV_DMA_TYPE_DEV:
+		dmab->area = snd_malloc_dev_pages_fallback(dev->dev, size, &dmab->addr, &dmab->bytes);
+		break;
+	case SNDRV_DMA_TYPE_DEV_SG:
+		snd_malloc_sgbuf_pages(dev, size, dmab, &dmab->bytes);
+		break;
 	default:
 		printk(KERN_ERR "snd-malloc: invalid device type %d\n", dev->type);
 		dmab->area = NULL;
@@ -212,7 +479,6 @@
 	}
 	if (! dmab->area)
 		return -ENOMEM;
-	dmab->bytes = size;
 	return 0;
 }
 
@@ -230,24 +496,17 @@
 	case SNDRV_DMA_TYPE_CONTINUOUS:
 		snd_free_pages(dmab->area, dmab->bytes);
 		break;
-#ifdef CONFIG_ISA
-	case SNDRV_DMA_TYPE_ISA:
-		snd_free_isa_pages(dmab->bytes, dmab->area, dmab->addr);
+#ifdef CONFIG_SBUS
+	case SNDRV_DMA_TYPE_SBUS:
+		snd_free_sbus_pages(dev->dev, dmab->bytes, dmab->area, dmab->addr);
 		break;
 #endif
-#ifdef CONFIG_PCI
-	case SNDRV_DMA_TYPE_PCI:
-		snd_free_pci_pages(dev->dev.pci, dmab->bytes, dmab->area, dmab->addr);
+	case SNDRV_DMA_TYPE_DEV:
+		snd_free_dev_pages(dev->dev, dmab->bytes, dmab->area, dmab->addr);
 		break;
-	case SNDRV_DMA_TYPE_PCI_SG:
+	case SNDRV_DMA_TYPE_DEV_SG:
 		snd_free_sgbuf_pages(dmab);
 		break;
-#endif
-#ifdef CONFIG_SBUS
-	case SNDRV_DMA_TYPE_SBUS:
-		snd_free_sbus_pages(dev->dev.sbus, dmab->bytes, dmab->area, dmab->addr);
-		break;
-#endif
 	default:
 		printk(KERN_ERR "snd-malloc: invalid device type %d\n", dev->type);
 	}
@@ -394,395 +653,7 @@
 	}
 	up(&list_mutex);
 }
-
-
-/*
- *
- *  Generic memory allocators
- *
- */
-
-static long snd_allocated_pages; /* holding the number of allocated pages */
-
-static void mark_pages(void *res, int order)
-{
-	struct page *page = virt_to_page(res);
-	struct page *last_page = page + (1 << order);
-	while (page < last_page)
-		SetPageReserved(page++);
-	snd_allocated_pages += 1 << order;
-}
-
-static void unmark_pages(void *res, int order)
-{
-	struct page *page = virt_to_page(res);
-	struct page *last_page = page + (1 << order);
-	while (page < last_page)
-		ClearPageReserved(page++);
-	snd_allocated_pages -= 1 << order;
-}
-
-/**
- * snd_malloc_pages - allocate pages with the given size
- * @size: the size to allocate in bytes
- * @gfp_flags: the allocation conditions, GFP_XXX
- *
- * Allocates the physically contiguous pages with the given size.
- *
- * Returns the pointer of the buffer, or NULL if no enoguh memory.
- */
-void *snd_malloc_pages(size_t size, unsigned int gfp_flags)
-{
-	int pg;
-	void *res;
-
-	snd_assert(size > 0, return NULL);
-	snd_assert(gfp_flags != 0, return NULL);
-	for (pg = 0; PAGE_SIZE * (1 << pg) < size; pg++);
-	if ((res = (void *) __get_free_pages(gfp_flags, pg)) != NULL) {
-		mark_pages(res, pg);
-	}
-	return res;
-}
-
-/**
- * snd_malloc_pages_fallback - allocate pages with the given size with fallback
- * @size: the requested size to allocate in bytes
- * @gfp_flags: the allocation conditions, GFP_XXX
- * @res_size: the pointer to store the size of buffer actually allocated
- *
- * Allocates the physically contiguous pages with the given request
- * size.  When no space is left, this function reduces the size and
- * tries to allocate again.  The size actually allocated is stored in
- * res_size argument.
- *
- * Returns the pointer of the buffer, or NULL if no enoguh memory.
- */
-void *snd_malloc_pages_fallback(size_t size, unsigned int gfp_flags, size_t *res_size)
-{
-	void *res;
-
-	snd_assert(size > 0, return NULL);
-	snd_assert(res_size != NULL, return NULL);
-	do {
-		if ((res = snd_malloc_pages(size, gfp_flags)) != NULL) {
-			*res_size = size;
-			return res;
-		}
-		size >>= 1;
-	} while (size >= PAGE_SIZE);
-	return NULL;
-}
-
-/**
- * snd_free_pages - release the pages
- * @ptr: the buffer pointer to release
- * @size: the allocated buffer size
- *
- * Releases the buffer allocated via snd_malloc_pages().
- */
-void snd_free_pages(void *ptr, size_t size)
-{
-	int pg;
-
-	if (ptr == NULL)
-		return;
-	for (pg = 0; PAGE_SIZE * (1 << pg) < size; pg++);
-	unmark_pages(ptr, pg);
-	free_pages((unsigned long) ptr, pg);
-}
-
-#if defined(CONFIG_ISA) && ! defined(CONFIG_PCI)
-
-/**
- * snd_malloc_isa_pages - allocate pages for ISA bus with the given size
- * @size: the size to allocate in bytes
- * @dma_addr: the pointer to store the physical address of the buffer
- *
- * Allocates the physically contiguous pages with the given size for
- * ISA bus.
- *
- * Returns the pointer of the buffer, or NULL if no enoguh memory.
- */
-void *snd_malloc_isa_pages(size_t size, dma_addr_t *dma_addr)
-{
-	void *dma_area;
-	dma_area = snd_malloc_pages(size, GFP_ATOMIC|GFP_DMA);
-	*dma_addr = dma_area ? isa_virt_to_bus(dma_area) : 0UL;
-	return dma_area;
-}
-
-/**
- * snd_malloc_isa_pages_fallback - allocate pages with the given size with fallback for ISA bus
- * @size: the requested size to allocate in bytes
- * @dma_addr: the pointer to store the physical address of the buffer
- * @res_size: the pointer to store the size of buffer actually allocated
- *
- * Allocates the physically contiguous pages with the given request
- * size for PCI bus.  When no space is left, this function reduces the size and
- * tries to allocate again.  The size actually allocated is stored in
- * res_size argument.
- *
- * Returns the pointer of the buffer, or NULL if no enoguh memory.
- */
-void *snd_malloc_isa_pages_fallback(size_t size,
-				    dma_addr_t *dma_addr,
-				    size_t *res_size)
-{
-	void *dma_area;
-	dma_area = snd_malloc_pages_fallback(size, GFP_ATOMIC|GFP_DMA, res_size);
-	*dma_addr = dma_area ? isa_virt_to_bus(dma_area) : 0UL;
-	return dma_area;
-}
-
-#endif /* CONFIG_ISA && !CONFIG_PCI */
-
-#ifdef CONFIG_PCI
-
-/**
- * snd_malloc_pci_pages - allocate pages for PCI bus with the given size
- * @pci: the pci device pointer
- * @size: the size to allocate in bytes
- * @dma_addr: the pointer to store the physical address of the buffer
- *
- * Allocates the physically contiguous pages with the given size for
- * PCI bus.
- *
- * Returns the pointer of the buffer, or NULL if no enoguh memory.
- */
-void *snd_malloc_pci_pages(struct pci_dev *pci,
-			   size_t size,
-			   dma_addr_t *dma_addr)
-{
-	int pg;
-	void *res;
-
-	snd_assert(size > 0, return NULL);
-	snd_assert(dma_addr != NULL, return NULL);
-	for (pg = 0; PAGE_SIZE * (1 << pg) < size; pg++);
-	res = pci_alloc_consistent(pci, PAGE_SIZE * (1 << pg), dma_addr);
-	if (res != NULL) {
-		mark_pages(res, pg);
-	}
-	return res;
-}
-
-/**
- * snd_malloc_pci_pages_fallback - allocate pages with the given size with fallback for PCI bus
- * @pci: pci device pointer
- * @size: the requested size to allocate in bytes
- * @dma_addr: the pointer to store the physical address of the buffer
- * @res_size: the pointer to store the size of buffer actually allocated
- *
- * Allocates the physically contiguous pages with the given request
- * size for PCI bus.  When no space is left, this function reduces the size and
- * tries to allocate again.  The size actually allocated is stored in
- * res_size argument.
- *
- * Returns the pointer of the buffer, or NULL if no enoguh memory.
- */
-void *snd_malloc_pci_pages_fallback(struct pci_dev *pci,
-				    size_t size,
-				    dma_addr_t *dma_addr,
-				    size_t *res_size)
-{
-	void *res;
-
-	snd_assert(res_size != NULL, return NULL);
-	do {
-		if ((res = snd_malloc_pci_pages(pci, size, dma_addr)) != NULL) {
-			*res_size = size;
-			return res;
-		}
-		size >>= 1;
-	} while (size >= PAGE_SIZE);
-	return NULL;
-}
-
-/**
- * snd_free_pci_pages - release the pages
- * @pci: pci device pointer
- * @size: the allocated buffer size
- * @ptr: the buffer pointer to release
- * @dma_addr: the physical address of the buffer
- *
- * Releases the buffer allocated via snd_malloc_pci_pages().
- */
-void snd_free_pci_pages(struct pci_dev *pci,
-			size_t size,
-			void *ptr,
-			dma_addr_t dma_addr)
-{
-	int pg;
-
-	if (ptr == NULL)
-		return;
-	for (pg = 0; PAGE_SIZE * (1 << pg) < size; pg++);
-	unmark_pages(ptr, pg);
-	pci_free_consistent(pci, PAGE_SIZE * (1 << pg), ptr, dma_addr);
-}
-
-
-#if defined(__i386__)
-/*
- * on ix86, we allocate a page with GFP_KERNEL to assure the
- * allocation.  the code is almost same with kernel/i386/pci-dma.c but
- * it allocates only a single page and checks the validity of the
- * page address with the given pci dma mask.
- */
-
-/**
- * snd_malloc_pci_page - allocate a page in the valid pci dma mask
- * @pci: pci device pointer
- * @addrp: the pointer to store the physical address of the buffer
- *
- * Allocates a single page for the given PCI device and returns
- * the virtual address and stores the physical address on addrp.
- * 
- * This function cannot be called from interrupt handlers or
- * within spinlocks.
- */
-void *snd_malloc_pci_page(struct pci_dev *pci, dma_addr_t *addrp)
-{
-	void *ptr;
-	dma_addr_t addr;
-	unsigned long mask;
-
-	mask = pci ? (unsigned long)pci->consistent_dma_mask : 0x00ffffffUL;
-	ptr = (void *)__get_free_page(GFP_KERNEL);
-	if (ptr) {
-		addr = virt_to_phys(ptr);
-		if (((unsigned long)addr + PAGE_SIZE - 1) & ~mask) {
-			/* try to reallocate with the GFP_DMA */
-			free_page((unsigned long)ptr);
-			/* use GFP_ATOMIC for the DMA zone to avoid stall */
-			ptr = (void *)__get_free_page(GFP_ATOMIC | GFP_DMA);
-			if (ptr) /* ok, the address must be within lower 16MB... */
-				addr = virt_to_phys(ptr);
-			else
-				addr = 0;
-		}
-	} else
-		addr = 0;
-	if (ptr) {
-		memset(ptr, 0, PAGE_SIZE);
-		mark_pages(ptr, 0);
-	}
-	*addrp = addr;
-	return ptr;
-}
-#else
-
-/* on other architectures, call snd_malloc_pci_pages() helper function
- * which uses pci_alloc_consistent().
- */
-void *snd_malloc_pci_page(struct pci_dev *pci, dma_addr_t *addrp)
-{
-	return snd_malloc_pci_pages(pci, PAGE_SIZE, addrp);
-}
-
-#endif
-
-#if 0 /* for kernel-doc */
-/**
- * snd_free_pci_page - release a page
- * @pci: pci device pointer
- * @ptr: the buffer pointer to release
- * @dma_addr: the physical address of the buffer
- *
- * Releases the buffer allocated via snd_malloc_pci_page().
- */
-void snd_free_pci_page(struct pci_dev *pci, void *ptr, dma_addr_t dma_addr);
-#endif /* for kernel-doc */
-
-#endif /* CONFIG_PCI */
-
-#ifdef CONFIG_SBUS
-
-/**
- * snd_malloc_sbus_pages - allocate pages for SBUS with the given size
- * @sdev: sbus device pointer
- * @size: the size to allocate in bytes
- * @dma_addr: the pointer to store the physical address of the buffer
- *
- * Allocates the physically contiguous pages with the given size for
- * SBUS.
- *
- * Returns the pointer of the buffer, or NULL if no enoguh memory.
- */
-void *snd_malloc_sbus_pages(struct sbus_dev *sdev,
-			    size_t size,
-			    dma_addr_t *dma_addr)
-{
-	int pg;
-	void *res;
-
-	snd_assert(size > 0, return NULL);
-	snd_assert(dma_addr != NULL, return NULL);
-	for (pg = 0; PAGE_SIZE * (1 << pg) < size; pg++);
-	res = sbus_alloc_consistent(sdev, PAGE_SIZE * (1 << pg), dma_addr);
-	if (res != NULL) {
-		mark_pages(res, pg);
-	}
-	return res;
-}
-
-/**
- * snd_malloc_pci_pages_fallback - allocate pages with the given size with fallback for SBUS
- * @sdev: sbus device pointer
- * @size: the requested size to allocate in bytes
- * @dma_addr: the pointer to store the physical address of the buffer
- * @res_size: the pointer to store the size of buffer actually allocated
- *
- * Allocates the physically contiguous pages with the given request
- * size for SBUS.  When no space is left, this function reduces the size and
- * tries to allocate again.  The size actually allocated is stored in
- * res_size argument.
- *
- * Returns the pointer of the buffer, or NULL if no enoguh memory.
- */
-void *snd_malloc_sbus_pages_fallback(struct sbus_dev *sdev,
-				     size_t size,
-				     dma_addr_t *dma_addr,
-				     size_t *res_size)
-{
-	void *res;
-
-	snd_assert(res_size != NULL, return NULL);
-	do {
-		if ((res = snd_malloc_sbus_pages(sdev, size, dma_addr)) != NULL) {
-			*res_size = size;
-			return res;
-		}
-		size >>= 1;
-	} while (size >= PAGE_SIZE);
-	return NULL;
-}
-
-/**
- * snd_free_sbus_pages - release the pages
- * @sdev: sbus device pointer
- * @size: the allocated buffer size
- * @ptr: the buffer pointer to release
- * @dma_addr: the physical address of the buffer
- *
- * Releases the buffer allocated via snd_malloc_pci_pages().
- */
-void snd_free_sbus_pages(struct sbus_dev *sdev,
-			 size_t size,
-			 void *ptr,
-			 dma_addr_t dma_addr)
-{
-	int pg;
-
-	if (ptr == NULL)
-		return;
-	for (pg = 0; PAGE_SIZE * (1 << pg) < size; pg++);
-	unmark_pages(ptr, pg);
-	sbus_free_consistent(sdev, PAGE_SIZE * (1 << pg), ptr, dma_addr);
-}
-
-#endif /* CONFIG_SBUS */
+
 
 
 /*
@@ -821,6 +692,17 @@
 	{ }, /* terminator */
 };
 
+/*
+ * compose a snd_dma_device struct for the PCI device
+ */
+static inline void snd_dma_device_pci(struct snd_dma_device *dev, struct pci_dev *pci, unsigned int id)
+{
+	memset(dev, 0, sizeof(*dev));
+	dev->type = SNDRV_DMA_TYPE_DEV;
+	dev->dev = snd_dma_pci_data(pci);
+	dev->id = id;
+}
+
 static void __init preallocate_cards(void)
 {
 	struct pci_dev *pci = NULL;
@@ -902,29 +784,25 @@
 		len += sprintf(page + len, " : type ");
 		switch (mem->dev.type) {
 		case SNDRV_DMA_TYPE_CONTINUOUS:
-			len += sprintf(page + len, "CONT [%x]", mem->dev.dev.flags);
+			len += sprintf(page + len, "CONT [%p]", mem->dev.dev);
 			break;
-#ifdef CONFIG_PCI
-		case SNDRV_DMA_TYPE_PCI:
-		case SNDRV_DMA_TYPE_PCI_SG:
-			if (mem->dev.dev.pci) {
-				len += sprintf(page + len, "%s [%04x:%04x]",
-					       mem->dev.type == SNDRV_DMA_TYPE_PCI ? "PCI" : "PCI-SG",
-					       mem->dev.dev.pci->vendor,
-					       mem->dev.dev.pci->device);
-			}
-			break;
-#endif
-#ifdef CONFIG_ISA
-		case SNDRV_DMA_TYPE_ISA:
-			len += sprintf(page + len, "ISA [%x]", mem->dev.dev.flags);
-			break;
-#endif
 #ifdef CONFIG_SBUS
 		case SNDRV_DMA_TYPE_SBUS:
-			len += sprintf(page + len, "SBUS [%x]", mem->dev.dev.sbus->slot);
+			{
+				struct sbus_dev *sdev = (struct sbus_dev *)(mem->dev.dev);
+				len += sprintf(page + len, "SBUS [%x]", sdev->slot);
+			}
 			break;
 #endif
+		case SNDRV_DMA_TYPE_DEV:
+		case SNDRV_DMA_TYPE_DEV_SG:
+			if (mem->dev.dev) {
+				len += sprintf(page + len, "%s [%s]",
+					       mem->dev.type == SNDRV_DMA_TYPE_DEV_SG ? "DEV-SG" : "DEV",
+					       mem->dev.dev->bus_id);
+			} else
+				len += sprintf(page + len, "ISA");
+			break;
 		default:
 			len += sprintf(page + len, "UNKNOWN");
 			break;
@@ -987,7 +865,9 @@
  * exports
  */
 EXPORT_SYMBOL(snd_dma_alloc_pages);
+EXPORT_SYMBOL(snd_dma_alloc_pages_fallback);
 EXPORT_SYMBOL(snd_dma_free_pages);
+
 EXPORT_SYMBOL(snd_dma_get_reserved);
 EXPORT_SYMBOL(snd_dma_free_reserved);
 EXPORT_SYMBOL(snd_dma_set_reserved);
@@ -995,20 +875,3 @@
 EXPORT_SYMBOL(snd_malloc_pages);
 EXPORT_SYMBOL(snd_malloc_pages_fallback);
 EXPORT_SYMBOL(snd_free_pages);
-#if defined(CONFIG_ISA) && ! defined(CONFIG_PCI)
-EXPORT_SYMBOL(snd_malloc_isa_pages);
-EXPORT_SYMBOL(snd_malloc_isa_pages_fallback);
-#endif
-#ifdef CONFIG_PCI
-EXPORT_SYMBOL(snd_malloc_pci_pages);
-EXPORT_SYMBOL(snd_malloc_pci_pages_fallback);
-EXPORT_SYMBOL(snd_malloc_pci_page);
-EXPORT_SYMBOL(snd_free_pci_pages);
-EXPORT_SYMBOL(snd_malloc_sgbuf_pages);
-EXPORT_SYMBOL(snd_free_sgbuf_pages);
-#endif
-#ifdef CONFIG_SBUS
-EXPORT_SYMBOL(snd_malloc_sbus_pages);
-EXPORT_SYMBOL(snd_malloc_sbus_pages_fallback);
-EXPORT_SYMBOL(snd_free_sbus_pages);
-#endif
Index: debian/alsa-driver/alsa-kernel/include/ac97_codec.h
diff -u debian/alsa-driver/alsa-kernel/include/ac97_codec.h:1.9 debian/alsa-driver/alsa-kernel/include/ac97_codec.h:1.10
--- debian/alsa-driver/alsa-kernel/include/ac97_codec.h:1.9	Sun Feb 29 17:13:51 2004
+++ debian/alsa-driver/alsa-kernel/include/ac97_codec.h	Tue Apr 13 13:39:25 2004
@@ -226,10 +226,14 @@
 #define AC97_GPIO_LINE2_HL1R    0x8000  /* Opt./ Handset to Line2 relay control (out) */
 
 /* specific - SigmaTel */
+#define AC97_SIGMATEL_OUTSEL	0x64	/* Output Select, STAC9758 */
+#define AC97_SIGMATEL_INSEL	0x66	/* Input Select, STAC9758 */
+#define AC97_SIGMATEL_IOMISC	0x68	/* STAC9758 */
 #define AC97_SIGMATEL_ANALOG	0x6c	/* Analog Special */
 #define AC97_SIGMATEL_DAC2INVERT 0x6e
 #define AC97_SIGMATEL_BIAS1	0x70
 #define AC97_SIGMATEL_BIAS2	0x72
+#define AC97_SIGMATEL_VARIOUS	0x72	/* STAC9758 */
 #define AC97_SIGMATEL_MULTICHN	0x74	/* Multi-Channel programming */
 #define AC97_SIGMATEL_CIC1	0x76
 #define AC97_SIGMATEL_CIC2	0x78
@@ -456,7 +460,7 @@
 }
 static inline int ac97_is_rev22(ac97_t * ac97)
 {
-	return (ac97->ext_id & AC97_EI_REV_MASK) == AC97_EI_REV_22;
+	return (ac97->ext_id & AC97_EI_REV_MASK) >= AC97_EI_REV_22;
 }
 static inline int ac97_can_amap(ac97_t * ac97)
 {
@@ -484,7 +488,8 @@
 	AC97_TUNE_HP_ONLY,	/* headphone (true line-out) control as master only */
 	AC97_TUNE_SWAP_HP,	/* swap headphone and master controls */
 	AC97_TUNE_SWAP_SURROUND, /* swap master and surround controls */
-	AC97_TUNE_AD_SHARING	/* for AD1985, turn on OMS bit and use headphone */
+	AC97_TUNE_AD_SHARING,	/* for AD1985, turn on OMS bit and use headphone */
+	AC97_TUNE_ALC_JACK,	/* for Realtek, enable JACK detection */
 };
 
 struct ac97_quirk {
Index: debian/alsa-driver/alsa-kernel/isa/es18xx.c
diff -u debian/alsa-driver/alsa-kernel/isa/es18xx.c:1.4 debian/alsa-driver/alsa-kernel/isa/es18xx.c:1.5
--- debian/alsa-driver/alsa-kernel/isa/es18xx.c:1.4	Tue Feb  3 11:36:41 2004
+++ debian/alsa-driver/alsa-kernel/isa/es18xx.c	Tue Apr 13 13:39:25 2004
@@ -1598,7 +1598,10 @@
 	sprintf(pcm->name, "ESS AudioDrive ES%x", chip->version);
         chip->pcm = pcm;
 
-	snd_pcm_lib_preallocate_isa_pages_for_all(pcm, 64*1024, chip->dma1 > 3 || chip->dma2 > 3 ? 128*1024 : 64*1024);
+	snd_pcm_lib_preallocate_pages_for_all(pcm, SNDRV_DMA_TYPE_DEV,
+					      snd_dma_isa_data(),
+					      64*1024,
+					      chip->dma1 > 3 || chip->dma2 > 3 ? 128*1024 : 64*1024);
 
         if (rpcm)
         	*rpcm = pcm;
@@ -2229,7 +2232,7 @@
 static int __init alsa_card_es18xx_init(void)
 {
 	static unsigned long possible_ports[] = {0x220, 0x240, 0x260, 0x280, -1};
-	int dev, cards = 0;
+	int dev, cards = 0, i;
 
 	/* legacy non-auto cards at first */
 	for (dev = 0; dev < SNDRV_CARDS; dev++) {
@@ -2243,10 +2246,16 @@
 			cards++;
 	}
 	/* legacy auto configured cards */
-	cards += snd_legacy_auto_probe(possible_ports, snd_audiodrive_probe_legacy_port);
+	i = snd_legacy_auto_probe(possible_ports, snd_audiodrive_probe_legacy_port);
+	if (i > 0)
+		cards += i;
+
 #ifdef CONFIG_PNP
 	/* ISA PnP cards at last */
-	cards += pnp_register_card_driver(&es18xx_pnpc_driver);
+	i = pnp_register_card_driver(&es18xx_pnpc_driver);
+	if (i > 0)
+		cards += i;
+
 #endif
 	if(!cards) {
 #ifdef CONFIG_PNP
Index: debian/alsa-driver/alsa-kernel/isa/opti9xx/opti92x-ad1848.c
diff -u debian/alsa-driver/alsa-kernel/isa/opti9xx/opti92x-ad1848.c:1.8 debian/alsa-driver/alsa-kernel/isa/opti9xx/opti92x-ad1848.c:1.9
--- debian/alsa-driver/alsa-kernel/isa/opti9xx/opti92x-ad1848.c:1.8	Tue Feb  3 11:36:41 2004
+++ debian/alsa-driver/alsa-kernel/isa/opti9xx/opti92x-ad1848.c	Tue Apr 13 13:39:25 2004
@@ -311,8 +311,12 @@
 static long snd_legacy_find_free_ioport(long *port_table, long size)
 {
 	while (*port_table != -1) {
-		if (!check_region(*port_table, size))
+		struct resource *res;
+		if ((res = request_region(*port_table, size, "ALSA test")) != NULL) {
+			release_resource(res);
+			kfree_nocheck(res);
 			return *port_table;
+		}
 		port_table++;
 	}
 	return -1;
@@ -1399,7 +1403,9 @@
 
 	strcpy(pcm->name, snd_opti93x_chip_id(codec));
 
-	snd_pcm_lib_preallocate_isa_pages_for_all(pcm, 64*1024, codec->dma1 > 3 || codec->dma2 > 3 ? 128*1024 : 64*1024);
+	snd_pcm_lib_preallocate_pages_for_all(pcm, SNDRV_DMA_TYPE_DEV,
+					      snd_dma_isa_data(),
+					      64*1024, codec->dma1 > 3 || codec->dma2 > 3 ? 128*1024 : 64*1024);
 
 	codec->pcm = pcm;
 	if (rpcm)
@@ -1672,13 +1678,18 @@
 		if ((err = snd_opti9xx_init(chip, i)) < 0)
 			return err;
 
-		if (check_region(chip->mc_base, chip->mc_base_size))
+		if ((chip->res_mc_base = request_region(chip->mc_base, chip->mc_base_size, "OPTi9xx MC")) == NULL)
 			continue;
 
 		value = snd_opti9xx_read(chip, OPTi9XX_MC_REG(1));
 		if ((value != 0xff) && (value != inb(chip->mc_base + 1)))
 			if (value == snd_opti9xx_read(chip, OPTi9XX_MC_REG(1)))
 				return 1;
+
+		release_resource(chip->res_mc_base);
+		kfree_nocheck(chip->res_mc_base);
+		chip->res_mc_base = NULL;
+
 	}
 #else	/* OPTi93X */
 	for (i = OPTi9XX_HW_82C931; i >= OPTi9XX_HW_82C930; i--) {
@@ -1688,7 +1699,7 @@
 		if ((err = snd_opti9xx_init(chip, i)) < 0)
 			return err;
 
-		if (check_region(chip->mc_base, chip->mc_base_size))
+		if ((chip->res_mc_base = request_region(chip->mc_base, chip->mc_base_size, "OPTi9xx MC")) == NULL)
 			continue;
 
 		spin_lock_irqsave(&chip->lock, flags);
@@ -1701,6 +1712,10 @@
 		snd_opti9xx_write(chip, OPTi9XX_MC_REG(7), 0xff - value);
 		if (snd_opti9xx_read(chip, OPTi9XX_MC_REG(7)) == 0xff - value)
 			return 1;
+
+		release_resource(chip->res_mc_base);
+		kfree_nocheck(chip->res_mc_base);
+		chip->res_mc_base = NULL;
 	}
 #endif	/* OPTi93X */
 
@@ -1984,7 +1999,8 @@
 	}
 #endif	/* CONFIG_PNP */
 
-	if ((chip->res_mc_base = request_region(chip->mc_base, chip->mc_base_size, "OPTi9xx MC")) == NULL) {
+	if (! chip->res_mc_base &&
+	    (chip->res_mc_base = request_region(chip->mc_base, chip->mc_base_size, "OPTi9xx MC")) == NULL) {
 		snd_card_free(card);
 		return -ENOMEM;
 	}
Index: debian/alsa-driver/alsa-kernel/isa/sb/sb16.c
diff -u debian/alsa-driver/alsa-kernel/isa/sb/sb16.c:1.8 debian/alsa-driver/alsa-kernel/isa/sb/sb16.c:1.9
--- debian/alsa-driver/alsa-kernel/isa/sb/sb16.c:1.8	Tue Feb  3 11:36:41 2004
+++ debian/alsa-driver/alsa-kernel/isa/sb/sb16.c	Tue Apr 13 13:39:25 2004
@@ -629,7 +629,7 @@
 
 static int __init alsa_card_sb16_init(void)
 {
-	int dev, cards = 0;
+	int dev, cards = 0, i;
 	static unsigned long possible_ports[] = {0x220, 0x240, 0x260, 0x280, -1};
 
 	/* legacy non-auto cards at first */
@@ -649,10 +649,15 @@
 #endif
 	}
 	/* legacy auto configured cards */
-	cards += snd_legacy_auto_probe(possible_ports, snd_sb16_probe_legacy_port);
+	i = snd_legacy_auto_probe(possible_ports, snd_sb16_probe_legacy_port);
+	if (i > 0)
+		cards += i;
+
 #ifdef CONFIG_PNP
 	/* PnP cards at last */
-	cards += pnp_register_card_driver(&sb16_pnpc_driver);
+	i = pnp_register_card_driver(&sb16_pnpc_driver);
+	if (i >0)
+		cards += i;
 #endif
 
 	if (!cards) {
Index: debian/alsa-driver/alsa-kernel/pci/emu10k1/emu10k1_main.c
diff -u debian/alsa-driver/alsa-kernel/pci/emu10k1/emu10k1_main.c:1.8 debian/alsa-driver/alsa-kernel/pci/emu10k1/emu10k1_main.c:1.9
--- debian/alsa-driver/alsa-kernel/pci/emu10k1/emu10k1_main.c:1.8	Tue Feb  3 11:36:41 2004
+++ debian/alsa-driver/alsa-kernel/pci/emu10k1/emu10k1_main.c	Tue Apr 13 13:39:26 2004
@@ -97,7 +97,8 @@
 	unsigned int silent_page;
 
 	emu->fx8010.itram_size = (16 * 1024)/2;
-	emu->fx8010.etram_size = 0;
+	emu->fx8010.etram_pages.area = NULL;
+	emu->fx8010.etram_pages.bytes = 0;
 
 	/* disable audio and lock cache */
 	outl(HCFG_LOCKSOUNDCACHE | HCFG_LOCKTANKCACHE_MASK | HCFG_MUTEBUTTONENABLE, emu->port + HCFG);
@@ -184,15 +185,15 @@
 	/*
 	 *  Clear page with silence & setup all pointers to this page
 	 */
-	memset(emu->silent_page, 0, PAGE_SIZE);
-	silent_page = emu->silent_page_dmaaddr << 1;
+	memset(emu->silent_page.area, 0, PAGE_SIZE);
+	silent_page = emu->silent_page.addr << 1;
 	for (idx = 0; idx < MAXPAGES; idx++)
-		emu->ptb_pages[idx] = cpu_to_le32(silent_page | idx);
-	snd_emu10k1_ptr_write(emu, PTB, 0, emu->ptb_pages_dmaaddr);
+		((u32 *)emu->ptb_pages.area)[idx] = cpu_to_le32(silent_page | idx);
+	snd_emu10k1_ptr_write(emu, PTB, 0, emu->ptb_pages.addr);
 	snd_emu10k1_ptr_write(emu, TCB, 0, 0);	/* taken from original driver */
 	snd_emu10k1_ptr_write(emu, TCBS, 0, 4);	/* taken from original driver */
 
-	silent_page = (emu->silent_page_dmaaddr << 1) | MAP_PTI_MASK;
+	silent_page = (emu->silent_page.addr << 1) | MAP_PTI_MASK;
 	for (ch = 0; ch < NUM_G; ch++) {
 		snd_emu10k1_ptr_write(emu, MAPA, ch, silent_page);
 		snd_emu10k1_ptr_write(emu, MAPB, ch, silent_page);
@@ -546,10 +547,10 @@
        	}
 	if (emu->memhdr)
 		snd_util_memhdr_free(emu->memhdr);
-	if (emu->silent_page)
-		snd_free_pci_pages(emu->pci, EMUPAGESIZE, emu->silent_page, emu->silent_page_dmaaddr);
-	if (emu->ptb_pages)
-		snd_free_pci_pages(emu->pci, 32 * 1024, (void *)emu->ptb_pages, emu->ptb_pages_dmaaddr);
+	if (emu->silent_page.area)
+		snd_dma_free_pages(&emu->dma_dev, &emu->silent_page);
+	if (emu->ptb_pages.area)
+		snd_dma_free_pages(&emu->dma_dev, &emu->ptb_pages);
 	if (emu->page_ptr_table)
 		vfree(emu->page_ptr_table);
 	if (emu->page_addr_table)
@@ -638,9 +639,12 @@
 	}
 	emu->irq = pci->irq;
 
+	memset(&emu->dma_dev, 0, sizeof(emu->dma_dev));
+	emu->dma_dev.type = SNDRV_DMA_TYPE_DEV;
+	emu->dma_dev.dev = snd_dma_pci_data(pci);
+
 	emu->max_cache_pages = max_cache_bytes >> PAGE_SHIFT;
-	emu->ptb_pages = snd_malloc_pci_pages(pci, 32 * 1024, &emu->ptb_pages_dmaaddr);
-	if (emu->ptb_pages == NULL) {
+	if (snd_dma_alloc_pages(&emu->dma_dev, 32 * 1024, &emu->ptb_pages) < 0) {
 		snd_emu10k1_free(emu);
 		return -ENOMEM;
 	}
@@ -652,8 +656,7 @@
 		return -ENOMEM;
 	}
 
-	emu->silent_page = snd_malloc_pci_pages(pci, EMUPAGESIZE, &emu->silent_page_dmaaddr);
-	if (emu->silent_page == NULL) {
+	if (snd_dma_alloc_pages(&emu->dma_dev, EMUPAGESIZE, &emu->silent_page) < 0) {
 		snd_emu10k1_free(emu);
 		return -ENOMEM;
 	}
Index: debian/alsa-driver/alsa-kernel/pci/emu10k1/emufx.c
diff -u debian/alsa-driver/alsa-kernel/pci/emu10k1/emufx.c:1.13 debian/alsa-driver/alsa-kernel/pci/emu10k1/emufx.c:1.14
--- debian/alsa-driver/alsa-kernel/pci/emu10k1/emufx.c:1.13	Sun Feb 29 17:13:51 2004
+++ debian/alsa-driver/alsa-kernel/pci/emu10k1/emufx.c	Tue Apr 13 13:39:26 2004
@@ -26,6 +26,7 @@
  */
 
 #include <sound/driver.h>
+#include <linux/pci.h>
 #include <linux/delay.h>
 #include <linux/slab.h>
 #include <linux/init.h>
@@ -506,16 +507,16 @@
 
 	while (frames > *tram_pos) {
 		count = *tram_pos + 1;
-		snd_emu10k1_fx8010_playback_tram_poke1((unsigned short *)emu->fx8010.etram_pages + *tram_pos,
-						       (unsigned short *)emu->fx8010.etram_pages + *tram_pos + tram_size / 2,
+		snd_emu10k1_fx8010_playback_tram_poke1((unsigned short *)emu->fx8010.etram_pages.area + *tram_pos,
+						       (unsigned short *)emu->fx8010.etram_pages.area + *tram_pos + tram_size / 2,
 						       src, count, *tram_shift);
 		src += count * 2;
 		frames -= count;
 		*tram_pos = (tram_size / 2) - 1;
 		(*tram_shift)++;
 	}
-	snd_emu10k1_fx8010_playback_tram_poke1((unsigned short *)emu->fx8010.etram_pages + *tram_pos,
-					       (unsigned short *)emu->fx8010.etram_pages + *tram_pos + tram_size / 2,
+	snd_emu10k1_fx8010_playback_tram_poke1((unsigned short *)emu->fx8010.etram_pages.area + *tram_pos,
+					       (unsigned short *)emu->fx8010.etram_pages.area + *tram_pos + tram_size / 2,
 					       src, frames, *tram_shift++);
 	*tram_pos -= frames;
 }
@@ -760,7 +761,7 @@
 	strcpy(pcm->name, "EMU10K1 FX8010");
 	emu->pcm_fx8010 = pcm;
 	
-	snd_pcm_lib_preallocate_pci_pages_for_all(emu->pci, pcm, 64*1024, 0);
+	snd_pcm_lib_preallocate_pages_for_all(pcm, SNDRV_DMA_TYPE_DEV, snd_dma_pci_data(emu->pci), 64*1024, 0);
 
 	if (rpcm)
 		*rpcm = pcm;
@@ -2218,32 +2219,30 @@
 		}
 		size = 0x2000 << size_reg;
 	}
-	if (emu->fx8010.etram_size == size)
+	if (emu->fx8010.etram_pages.bytes == size)
 		return 0;
 	spin_lock_irq(&emu->emu_lock);
 	outl(HCFG_LOCKTANKCACHE_MASK | inl(emu->port + HCFG), emu->port + HCFG);
 	spin_unlock_irq(&emu->emu_lock);
 	snd_emu10k1_ptr_write(emu, TCB, 0, 0);
 	snd_emu10k1_ptr_write(emu, TCBS, 0, 0);
-	if (emu->fx8010.etram_pages != NULL) {
-		snd_free_pci_pages(emu->pci, emu->fx8010.etram_size * 2, emu->fx8010.etram_pages, emu->fx8010.etram_pages_dmaaddr);
-		emu->fx8010.etram_pages = NULL;
-		emu->fx8010.etram_size = 0;
+	if (emu->fx8010.etram_pages.area != NULL) {
+		snd_dma_free_pages(&emu->dma_dev, &emu->fx8010.etram_pages);
+		emu->fx8010.etram_pages.area = NULL;
+		emu->fx8010.etram_pages.bytes = 0;
 	}
 
 	if (size > 0) {
-		emu->fx8010.etram_pages = snd_malloc_pci_pages(emu->pci, size * 2, &emu->fx8010.etram_pages_dmaaddr);
-		if (emu->fx8010.etram_pages == NULL)
+		if (snd_dma_alloc_pages(&emu->dma_dev, size * 2, &emu->fx8010.etram_pages) < 0)
 			return -ENOMEM;
-		memset(emu->fx8010.etram_pages, 0, size * 2);
-		snd_emu10k1_ptr_write(emu, TCB, 0, emu->fx8010.etram_pages_dmaaddr);
+		memset(emu->fx8010.etram_pages.area, 0, size * 2);
+		snd_emu10k1_ptr_write(emu, TCB, 0, emu->fx8010.etram_pages.addr);
 		snd_emu10k1_ptr_write(emu, TCBS, 0, size_reg);
 		spin_lock_irq(&emu->emu_lock);
 		outl(inl(emu->port + HCFG) & ~HCFG_LOCKTANKCACHE_MASK, emu->port + HCFG);
 		spin_unlock_irq(&emu->emu_lock);	
 	}
 
-	emu->fx8010.etram_size = size;
 	return 0;
 }
 
@@ -2269,7 +2268,7 @@
 	memset(info, 0, sizeof(info));
 	info->card = emu->card_type;
 	info->internal_tram_size = emu->fx8010.itram_size;
-	info->external_tram_size = emu->fx8010.etram_size;
+	info->external_tram_size = emu->fx8010.etram_pages.bytes;
 	fxbus = fxbuses;
 	extin = emu->audigy ? audigy_ins : creative_ins;
 	extout = emu->audigy ? audigy_outs : creative_outs;
Index: debian/alsa-driver/alsa-kernel/pci/emu10k1/emupcm.c
diff -u debian/alsa-driver/alsa-kernel/pci/emu10k1/emupcm.c:1.6 debian/alsa-driver/alsa-kernel/pci/emu10k1/emupcm.c:1.7
--- debian/alsa-driver/alsa-kernel/pci/emu10k1/emupcm.c:1.6	Wed Dec 24 20:02:30 2003
+++ debian/alsa-driver/alsa-kernel/pci/emu10k1/emupcm.c	Tue Apr 13 13:39:26 2004
@@ -26,6 +26,7 @@
  */
 
 #include <sound/driver.h>
+#include <linux/pci.h>
 #include <linux/delay.h>
 #include <linux/slab.h>
 #include <linux/time.h>
@@ -323,7 +324,7 @@
 	snd_emu10k1_ptr_write(emu, Z1, voice, 0);
 	snd_emu10k1_ptr_write(emu, Z2, voice, 0);
 	// invalidate maps
-	silent_page = ((unsigned int)emu->silent_page_dmaaddr << 1) | MAP_PTI_MASK;
+	silent_page = ((unsigned int)emu->silent_page.addr << 1) | MAP_PTI_MASK;
 	snd_emu10k1_ptr_write(emu, MAPA, voice, silent_page);
 	snd_emu10k1_ptr_write(emu, MAPB, voice, silent_page);
 	// modulation envelope
@@ -998,11 +999,11 @@
 	emu->pcm = pcm;
 
 	for (substream = pcm->streams[SNDRV_PCM_STREAM_PLAYBACK].substream; substream; substream = substream->next)
-		if ((err = snd_pcm_lib_preallocate_sg_pages(emu->pci, substream, 64*1024, 64*1024)) < 0)
+		if ((err = snd_pcm_lib_preallocate_pages(substream, SNDRV_DMA_TYPE_DEV_SG, snd_dma_pci_data(emu->pci), 64*1024, 64*1024)) < 0)
 			return err;
 
 	for (substream = pcm->streams[SNDRV_PCM_STREAM_CAPTURE].substream; substream; substream = substream->next)
-		snd_pcm_lib_preallocate_pci_pages(emu->pci, substream, 64*1024, 64*1024);
+		snd_pcm_lib_preallocate_pages(substream, SNDRV_DMA_TYPE_DEV, snd_dma_pci_data(emu->pci), 64*1024, 64*1024);
 
 	if (rpcm)
 		*rpcm = pcm;
@@ -1048,7 +1049,7 @@
 	strcpy(pcm->name, "EMU10K1 MIC");
 	emu->pcm_mic = pcm;
 
-	snd_pcm_lib_preallocate_pci_pages_for_all(emu->pci, pcm, 64*1024, 64*1024);
+	snd_pcm_lib_preallocate_pages_for_all(pcm, SNDRV_DMA_TYPE_DEV, snd_dma_pci_data(emu->pci), 64*1024, 64*1024);
 
 	if (rpcm)
 		*rpcm = pcm;
@@ -1157,7 +1158,7 @@
 	emu->efx_voices_mask[1] = 0;
 	snd_ctl_add(emu->card, snd_ctl_new1(&snd_emu10k1_pcm_efx_voices_mask, emu));
 
-	snd_pcm_lib_preallocate_pci_pages_for_all(emu->pci, pcm, 64*1024, 64*1024);
+	snd_pcm_lib_preallocate_pages_for_all(pcm, SNDRV_DMA_TYPE_DEV, snd_dma_pci_data(emu->pci), 64*1024, 64*1024);
 
 	return 0;
 }
Index: debian/alsa-driver/alsa-kernel/scripts/Modules.dep
diff -u debian/alsa-driver/alsa-kernel/scripts/Modules.dep:1.1.1.7 debian/alsa-driver/alsa-kernel/scripts/Modules.dep:removed
--- debian/alsa-driver/alsa-kernel/scripts/Modules.dep:1.1.1.7	Mon Feb  9 10:40:48 2004
+++ debian/alsa-driver/alsa-kernel/scripts/Modules.dep	Tue Apr 13 13:39:27 2004
@@ -1,231 +0,0 @@
-#
-# Module dependencies
-#
-# Module is specified without extension.
-# Toplevel (drivers) modules have prefix '|'.
-#
-
-%makefile group @if_sequencer
-%makefile ignore_in linux/sound/core/seq
-%makefile ignore_in linux/sound/core/seq/instr
-%makefile header
-%makefile line ifeq ($(subst m,y,$(CONFIG_SND_SEQUENCER)),y)
-%makefile endheader
-%makefile indent 2
-%makefile footer
-%makefile line endif
-%makefile endfooter
-%makefile endgroup @if_sequencer
-
-%makefile group @if_sb16_csp
-%makefile header
-%makefile line ifeq ($(CONFIG_SND_SB16_CSP),y)
-%makefile endheader
-%makefile indent 2
-%makefile footer
-%makefile line endif
-%makefile endfooter
-%makefile endgroup @if_sb16_csp
-
-%dir linux/sound/core
-snd
-snd-page-alloc
-snd-rawmidi snd
-snd-timer snd
-snd-rtctimer snd-timer
-snd-hwdep snd
-snd-pcm snd-timer snd-page-alloc
-
-%dir linux/sound/core/seq
-snd-seq-device snd
-snd-seq snd snd-timer snd-seq-device
-snd-seq-midi-event snd-seq
-snd-seq-midi snd-rawmidi snd-seq snd-seq-midi-event
-snd-seq-midi-emul snd-seq
-snd-seq-instr snd-seq
-snd-seq-virmidi snd-rawmidi snd-seq snd-seq-midi-event
-
-%dir linux/sound/core/seq/instr
-snd-ainstr-fm snd-seq-instr
-snd-ainstr-simple snd-seq-instr
-snd-ainstr-gf1 snd-seq-instr
-snd-ainstr-iw snd-seq-instr
-
-%dir linux/sound/i2c
-snd-i2c snd
-snd-tea6330t snd-i2c
-snd-cs8427 snd-i2c
-
-%dir linux/sound/i2c/l3
-snd-uda1341 snd
-
-%dir linux/sound/synth
-snd-util-mem snd
-
-%dir linux/sound/synth/emux
-snd-emux-synth @if_sequencer snd-seq-device snd-seq-midi-emul \
-	       snd-seq-virmidi snd-util-mem
-
-%dir linux/sound/drivers
-|snd-dummy snd-pcm
-|snd-virmidi snd-seq-virmidi
-|snd-serial-u16550 snd-seq-midi 
-|snd-mtpav snd-seq-midi
-
-%dir linux/sound/drivers/mpu401
-snd-mpu401-uart snd-seq-midi
-|snd-mpu401 snd-mpu401-uart
-
-%dir linux/sound/drivers/opl3
-snd-opl3-lib snd-hwdep snd-timer
-snd-opl3-synth @if_sequencer snd-opl3-lib snd-seq-device \
-	       snd-seq-midi-emul snd-ainstr-fm
-
-%dir linux/sound/isa/opl4
-snd-opl4-lib snd-seq-device
-snd-opl4-synth @if_sequencer snd-opl4-lib snd-seq-midi-emul
-
-%dir linux/sound/drivers/vx
-snd-vx-lib snd-pcm
-
-%dir linux/sound/isa
-|snd-als100 @pnponly snd-sb16-dsp snd-mpu401-uart snd-opl3-lib snd-opl3-synth
-|snd-azt2320 @pnponly snd-cs4231-lib snd-mpu401-uart snd-opl3-lib snd-opl3-synth
-|snd-cmi8330 snd-ad1848-lib snd-sb16-dsp
-|snd-dt019x @pnponly snd-sb16-dsp snd-mpu401-uart snd-opl3-lib snd-opl3-synth
-|snd-es18xx snd-pcm snd-mpu401-uart snd-opl3-lib snd-opl3-synth
-|snd-opl3sa2 snd-cs4231-lib snd-mpu401-uart snd-opl3-lib snd-opl3-synth
-|snd-sgalaxy snd-ad1848-lib
-|snd-sscape snd-hwdep snd-mpu401-uart snd-cs4231-lib
-
-%dir linux/sound/isa/ad1816a
-snd-ad1816a-lib snd-pcm snd-timer
-|snd-ad1816a @pnponly snd-ad1816a-lib snd-mpu401-uart snd-opl3-lib snd-opl3-synth
-
-%dir linux/sound/isa/ad1848
-snd-ad1848-lib snd-pcm
-|snd-ad1848 snd-ad1848-lib
-
-%dir linux/sound/isa/cs423x
-snd-cs4231-lib snd-pcm snd-timer
-|snd-cs4231 snd-cs4231-lib snd-mpu401-uart
-snd-cs4236-lib snd-cs4231-lib
-|snd-cs4232 snd-cs4231-lib snd-mpu401-uart snd-opl3-lib snd-opl3-synth
-|snd-cs4236 snd-cs4236-lib snd-mpu401-uart snd-opl3-lib snd-opl3-synth
-|snd-pc98-cs4232 snd-cs4231-lib snd-mpu401-uart snd-opl3-lib snd-opl3-synth
-
-%dir linux/sound/isa/es1688
-snd-es1688-lib snd-pcm
-|snd-es1688 snd-es1688-lib snd-mpu401-uart snd-opl3-lib snd-opl3-synth
-
-%dir linux/sound/isa/gus
-snd-gus-lib snd-pcm snd-timer snd-seq-midi snd-seq-device
-snd-gus-synth @if_sequencer snd-gus-lib snd-seq-midi-emul \
-              snd-ainstr-iw snd-ainstr-gf1 snd-ainstr-simple
-|snd-gusclassic snd-gus-lib snd-gus-synth
-|snd-gusmax snd-gus-lib snd-gus-synth snd-cs4231-lib
-|snd-gusextreme snd-gus-lib snd-gus-synth snd-es1688-lib \
-	        snd-mpu401-uart snd-opl3-lib snd-opl3-synth
-|snd-interwave snd-gus-lib snd-gus-synth snd-cs4231-lib
-|snd-interwave-stb snd-gus-lib snd-gus-synth snd-cs4231-lib snd-tea6330t
-
-%dir linux/sound/isa/opti9xx
-|snd-opti92x-ad1848 snd-ad1848-lib snd-mpu401-uart snd-opl3-lib snd-opl3-synth snd-opl4-lib snd-opl4-synth
-|snd-opti92x-cs4231 snd-cs4231-lib snd-mpu401-uart snd-opl3-lib snd-opl3-synth snd-opl4-lib snd-opl4-synth
-|snd-opti93x snd-pcm snd-mpu401-uart snd-opl3-lib snd-opl3-synth
-
-%dir linux/sound/isa/sb
-snd-sb-common
-snd-sb8-dsp snd-sb-common snd-pcm snd-seq-midi
-|snd-sb8 snd-sb8-dsp snd-opl3-lib snd-opl3-synth
-snd-sb16-dsp snd-sb-common snd-pcm
-snd-sb16-csp @if_sb16_csp snd-sb-common snd-hwdep
-|snd-sb16 snd-sb16-dsp snd-sb16-csp snd-mpu401-uart snd-opl3-lib snd-opl3-synth
-snd-emu8000-synth @if_sequencer snd-emux-synth snd-hwdep
-|snd-sbawe snd-sb16-dsp snd-sb16-csp snd-mpu401-uart \
-	   snd-opl3-lib snd-opl3-synth snd-emu8000-synth
-|snd-es968 @pnponly snd-sb8-dsp
-
-%dir linux/sound/isa/wavefront
-#snd-wavefront-fx snd-hwdep
-#snd-wavefront-synth snd-hwdep snd-seq-midi
-#|snd-wavefront snd-cs4231-lib snd-mpu401-uart snd-opl3-lib snd-opl3-synth \
-#	       snd-wavefront-synth snd-wavefront-fx
-|snd-wavefront snd-cs4231-lib snd-mpu401-uart snd-opl3-lib snd-opl3-synth \
-	       snd-hwdep snd-seq-midi
-
-%dir linux/sound/pci
-|snd-als4000 snd-sb-common snd-pcm snd-mpu401-uart snd-opl3-lib snd-opl3-synth
-|snd-azt3328 snd-pcm snd-mpu401-uart snd-opl3-lib snd-opl3-synth
-|snd-bt87x snd-pcm
-|snd-cmipci snd-pcm snd-mpu401-uart snd-opl3-lib snd-opl3-synth
-|snd-cs4281 snd-pcm snd-ac97-codec snd-seq-midi snd-opl3-lib snd-opl3-synth
-|snd-ens1370 snd-pcm snd-ak4531-codec snd-seq-midi
-|snd-ens1371 snd-pcm snd-ac97-codec snd-seq-midi
-|snd-es1938 snd-pcm snd-opl3-lib snd-opl3-synth snd-mpu401-uart
-|snd-es1968 snd-pcm snd-ac97-codec snd-mpu401-uart
-|snd-fm801 snd-pcm snd-ac97-codec snd-mpu401-uart snd-opl3-lib snd-opl3-synth
-|snd-intel8x0 snd-pcm snd-ac97-codec snd-mpu401-uart
-|snd-maestro3 snd-pcm snd-ac97-codec
-|snd-rme32 snd-pcm
-|snd-rme96 snd-pcm
-|snd-sonicvibes snd-pcm snd-mpu401-uart snd-opl3-lib snd-opl3-synth
-|snd-via82xx snd-pcm snd-ac97-codec snd-mpu401-uart
-
-%dir linux/sound/pci/ac97
-snd-ac97-codec snd
-snd-ak4531-codec snd
-
-%dir linux/sound/pci/ali5451
-|snd-ali5451 snd-ac97-codec snd-mpu401-uart snd-pcm
-
-%dir linux/sound/pci/cs46xx
-|snd-cs46xx snd-pcm snd-ac97-codec snd-seq-midi
-
-%dir linux/sound/pci/emu10k1
-|snd-emu10k1 snd-pcm snd-ac97-codec snd-seq-midi snd-util-mem snd-hwdep \
-	     snd-emu10k1-synth
-snd-emu10k1-synth @if_sequencer snd-emux-synth snd-hwdep
-
-%dir linux/sound/pci/ice1712
-|snd-ice1712 snd-pcm snd-cs8427 snd-ac97-codec snd-mpu401-uart
-|snd-ice1724 snd-pcm snd-ac97-codec snd-mpu401-uart
-
-%dir linux/sound/pci/korg1212
-|snd-korg1212 snd-pcm
-
-%dir linux/sound/pci/mixart
-|snd-mixart snd-pcm snd-hwdep
-
-%dir linux/sound/pci/nm256
-|snd-nm256 snd-pcm snd-ac97-codec
-
-%dir linux/sound/pci/rme9652
-|snd-rme9652 snd-pcm
-|snd-hdsp snd-pcm snd-mpu401-uart
-
-%dir linux/sound/pci/trident
-snd-trident-synth @if_sequencer snd-seq-midi-emul snd-ainstr-simple
-|snd-trident snd-pcm snd-ac97-codec snd-mpu401-uart snd-util-mem snd-trident-synth
-
-%dir linux/sound/pci/vx222
-|snd-vx222 snd-vx-lib
-
-%dir linux/sound/pci/ymfpci
-|snd-ymfpci snd-pcm snd-ac97-codec snd-mpu401-uart snd-opl3-lib snd-opl3-synth
-
-%dir linux/sound/ppc
-|snd-powermac snd-pcm
-
-%dir linux/sound/arm
-|snd-sa11xx-uda1341 snd-uda1341 snd-pcm
-
-%dir linux/sound/usb
-|snd-usb-audio snd-pcm snd-seq-midi
-
-%dir linux/sound/parisc
-|snd-harmony snd-pcm
-
-%dir linux/sound/pcmcia/vx
-|snd-vxpocket snd-vx-lib
-|snd-vxp440 snd-vx-lib
Index: debian/alsa-driver/alsa-kernel/scripts/mod-deps.c
diff -u debian/alsa-driver/alsa-kernel/scripts/mod-deps.c:1.1.1.3 debian/alsa-driver/alsa-kernel/scripts/mod-deps.c:removed
--- debian/alsa-driver/alsa-kernel/scripts/mod-deps.c:1.1.1.3	Mon Nov 10 10:37:54 2003
+++ debian/alsa-driver/alsa-kernel/scripts/mod-deps.c	Tue Apr 13 13:39:27 2004
@@ -1,1241 +0,0 @@
-/*
- *  Utility to find module dependencies from Modules.dep
- *  Copyright (c) by Anders Semb Hermansen <ahermans@vf.telia.no>,
- *		     Martin Dahl <dahlm@vf.telia.no>,
- *		     Jaroslav Kysela <perex@suse.cz>
- *
- *   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.
- *
- *   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 General Public License for more details.
- *
- *   You should have received a copy of the GNU General Public License
- *   along with this program; if not, write to the Free Software
- *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
- *
- */
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <ctype.h>
-#include <errno.h>
-
-#define WARNINGS 		1	// Output warnings to stderr
-
-// Output methods
-#define METHOD_MAKEFILE		1
-#define METHOD_ACINCLUDE	2
-#define METHOD_MAKECONF		3
-#define METHOD_INCLUDE		4
-
-// Dependency type
-typedef enum {
-	TYPE_TOPLEVEL = 1,
-	TYPE_LIBRARY = 2
-} Type;
-
-typedef struct depStruct dep;
-
-typedef struct subdepStruct {
-	int nummacros;
-	char **macronames;
-	dep *dep;
-} subdep;
-
-#define OPT_PNP_ONLY	(1 << 0)
-
-struct depStruct {
-	Type type;
-	char *dir;
-	char *name;
-	int numdeps;
-	char **depnames;
-	dep **deps;
-	struct depStruct *link;
-	int nummacros;
-	char **macronames;
-	int hitflag;
-	int printflag;
-	int options;
-	char *printed;
-};
-
-typedef struct makefileMacroStruct {
-	char *ignore_in;
-	char *name;
-	char *header;
-	char *footer;
-	int indent;
-	struct makefileMacroStruct *link;
-} makefileMacro;
-
-// Prototypes
-
-static int read_file(char *filename);
-static void parse_dir(char *line, char **dir);
-static void add_dep(char *line, const char *dir, short type);
-static void parse_makefile_outdesc(char *line);
-static dep *alloc_mem_for_dep(Type type);
-static char *get_word(char *line, char *word);
-static dep *find_dep(char *parent, char *depname);
-static int make_list_of_deps_for_dep(dep * dependency, subdep **list);
-static void del_all_from_list(void);
-
-int main(int argc, char *argv[]);
-static void usage(char *programname);
-static void output_makefile(const char *dir, int all);
-static char *convert_to_config_uppercase(const char *pre, const char *line);
-// static char *convert_to_escape(const char *line);
-static char *get_card_name(const char *line);
-
-// Globals
-static dep *Deps = NULL;			// All other modules 
-static makefileMacro *makefileMacros = NULL;	// All makefile macros
-
-static int read_file(char *filename)
-{
-	char *buffer, *newbuf, *dir = NULL;
-	FILE *file;
-	int c, prev, idx, size, result = 0;
-
-	if (filename && strcmp(filename, "-")) {
-		if ((file = fopen(filename, "r")) == NULL)
-			return -errno;
-	} else {
-		file = stdin;
-	}
-
-	size = 512;
-	buffer = (char *) malloc(size);
-	if (!buffer) {
-		fclose(file);
-		return -ENOMEM;
-	}
-	while (!feof(file)) {
-		buffer[idx = 0] = prev = '\0';
-		while (1) {
-			if (idx + 1 >= size) {
-				newbuf = (char *) realloc(buffer, size += 256);
-				if (newbuf == NULL) {
-					result = -ENOMEM;
-					goto __end;
-				}
-				buffer = newbuf;
-			}
-			c = fgetc(file);
-			if (c == EOF)
-				break;
-			if (c == '\n') {
-				if (prev == '\\') {
-					idx--;
-					continue;
-				}
-				break;
-			}
-			buffer[idx++] = prev = c;
-		}
-		buffer[idx] = '\0';
-		if (buffer[0] == '%') {
-			if (!strncmp(buffer, "%dir ", 5))
-				parse_dir(buffer + 5, &dir);
-			if (!strncmp(buffer, "%makefile ", 10))
-				parse_makefile_outdesc(buffer + 10);
-			continue;
-		} else if (buffer[0] == '|')
-			add_dep(buffer + 1, dir, TYPE_TOPLEVEL);	// Toplevel modules (skip |)
-		else if (isalpha(buffer[0]))
-			add_dep(buffer, dir, TYPE_LIBRARY);		// Other modules
-	}
-      __end:
-	free(buffer);
-	if (dir)
-		free(dir);
-	if (file != stdin)
-		fclose(file);
-	return result;
-}
-
-// Change current directory
-static void parse_dir(char *line, char **dir)
-{
-	char *word;
-	
-	if (*dir)
-		free(*dir);
-	word = malloc(strlen(line) + 1);
-	if (word == NULL) {
-		fprintf(stderr, "No enough memory\n");
-		exit(EXIT_FAILURE);
-	}
-	get_word(line, word);
-	*dir = strdup(word);
-	if (*dir == NULL) {
-		fprintf(stderr, "No enough memory\n");
-		exit(EXIT_FAILURE);
-	}
-}
-
-// Add a new dependency or soundcard to the list
-static void add_dep(char *line, const char *dir, short type)
-{
-	dep *new_dep;
-	char *word = NULL;
-	int numdeps = 0;
-
-	if (dir == NULL) {
-		fprintf(stderr, "No %%dir keyword found before first dependency\n");
-		exit(EXIT_FAILURE);
-	}
-	new_dep = alloc_mem_for_dep(type);
-	new_dep->dir = strdup(dir);
-	if (new_dep->dir == NULL) {
-		fprintf(stderr, "No enough memory\n");
-		exit(EXIT_FAILURE);
-	}
-	word = malloc(strlen(line) + 1);
-	if (word == NULL) {
-		fprintf(stderr, "No enough memory\n");
-		exit(EXIT_FAILURE);
-	}
-	get_word(line, word);
-	new_dep->name = strdup(word);	// Fill in name of dependency
-
-	while (get_word(line, word)) {
-		if (word[0] == '@') {	/* macro */
-			if (strcmp(word, "@pnponly") == 0) {
-				new_dep->options |= OPT_PNP_ONLY;
-				continue;
-			}
-			new_dep->macronames = realloc(new_dep->macronames, sizeof(char *) * (new_dep->nummacros + 1));
-			if (new_dep->macronames == NULL) {
-				fprintf(stderr, "No enough memory\n");
-				exit(EXIT_FAILURE);
-			}
-			new_dep->macronames[new_dep->nummacros] = strdup(word);
-			if (new_dep->macronames[new_dep->nummacros] == NULL) {
-				fprintf(stderr, "No enough memory\n");
-				exit(EXIT_FAILURE);
-			}
-			new_dep->nummacros++;
-			continue;
-		}
-		new_dep->depnames = realloc(new_dep->depnames, sizeof(char *) * (numdeps + 1));
-		new_dep->deps = realloc(new_dep->deps, sizeof(dep *) * (numdeps + 1));
-		if (new_dep->depnames == NULL || new_dep->deps == NULL) {
-			fprintf(stderr, "No enough memory\n");
-			exit(EXIT_FAILURE);
-		}
-		new_dep->depnames[numdeps] = strdup(word);
-		if (new_dep->depnames[numdeps] == NULL) {
-			fprintf(stderr, "No enough memory\n");
-			exit(EXIT_FAILURE);
-		}
-		new_dep->deps[numdeps++] = NULL;
-	}
-	new_dep->numdeps = numdeps;
-	free(word);
-	return;
-}
-
-static void add_makefile_text(char **dst, const char *src)
-{
-	int len = *dst ? strlen(*dst) : 0;
-	char *tmp;
-	
-	tmp = malloc(len + strlen(src) + 2);
-	if (tmp == NULL) {
-		fprintf(stderr, "No enough memory\n");
-		exit(EXIT_FAILURE);
-	}
-	if (*dst) {
-		strcpy(tmp, *dst);
-		free(*dst);
-	} else {
-		tmp[0] = 0;
-	}
-	strcat(tmp, src);
-	strcat(tmp, "\n");
-	*dst = tmp;
-}
-
-// Parse makefile output description
-static void parse_makefile_outdesc(char *line)
-{
-	static enum {
-		NONE = 0,
-		HEADER = 1,
-		FOOTER = 2,
-	} command = NONE;
-	static makefileMacro *macro = NULL;
-	char *word;
-	
-	word = malloc(strlen(line) + 1);
-	if (word == NULL) {
-		fprintf(stderr, "No enough memory\n");
-		exit(EXIT_FAILURE);
-	}
-	get_word(line, word);
-	if (macro == NULL) {
-		if (!strcmp(word, "group")) {
-			get_word(line, word);
-			if (word[0] == '\0') {
-				fprintf(stderr, "macro group has null name\n");
-				exit(EXIT_FAILURE);
-			}
-			macro = (makefileMacro *) calloc(1, sizeof(makefileMacro));
-			if (macro == NULL) {
-				fprintf(stderr, "No enough memory\n");
-				exit(EXIT_FAILURE);
-			}
-			macro->name = strdup(word);
-			if (macro->name == NULL) {
-				fprintf(stderr, "No enough memory\n");
-				exit(EXIT_FAILURE);
-			}
-			return;
-		} else {
-			fprintf(stderr, "Unknown command '%s' for makefile macro section\n", word);
-			exit(EXIT_FAILURE);
-		}
-	}
-	if (command == NONE) {
-		if (!strcmp(word, "endgroup")) {
-			get_word(line, word);
-			if (word[0] == '\0') {
-				fprintf(stderr, "macro endgroup has null name\n");
-				exit(EXIT_FAILURE);
-			}
-			if (strcmp(macro->name, word)) {
-				fprintf(stderr, "endgroup name does not match group name\n");
-				exit(EXIT_FAILURE);
-			}
-			macro->link = makefileMacros;
-			makefileMacros = macro;
-			macro = NULL;
-			return;
-		} else if (!strcmp(word, "header")) {
-			command = HEADER;
-		} else if (!strcmp(word, "footer")) {
-			command = FOOTER;
-		} else if (!strcmp(word, "indent")) {
-			get_word(line, word);
-			macro->indent = atoi(word);
-		} else if (!strcmp(word, "ignore_in")) {
-			get_word(line, word);
-			add_makefile_text(&macro->ignore_in, word);
-		} else {
-			fprintf(stderr, "unknown command %s (none scope)\n", word);
-			exit(EXIT_FAILURE);
-		}
-	} else if (!strcmp(word, "line")) {
-		if (command == HEADER)
-			add_makefile_text(&macro->header, line);
-		else if (command == FOOTER)
-			add_makefile_text(&macro->footer, line);
-		else {
-			fprintf(stderr, "wrong line command usage\n");
-			exit(EXIT_FAILURE);
-		}
-	} else if (!strcmp(word, "endheader")) {
-		if (command != HEADER) {
-			fprintf(stderr, "wrong endheader command usage\n");
-			exit(EXIT_FAILURE);
-		}
-		command = NONE;
-	} else if (!strcmp(word, "endfooter")) {
-		if (command != FOOTER) {
-			fprintf(stderr, "wrong endfooter command usage\n");
-			exit(EXIT_FAILURE);
-		}
-		command = NONE;
-	} else {
-		fprintf(stderr, "wrong %s command (%i scope)\n", word, command);
-		exit(EXIT_FAILURE);
-	}
-}
-
-static dep *alloc_mem_for_dep(Type type)
-{
-	dep * firstdep = Deps, * ndep;
-
-	ndep = (dep *) calloc(1, sizeof(dep));
-	if (ndep == NULL) {
-		fprintf(stderr, "No enough memory\n");
-		exit(EXIT_FAILURE);
-	}
-	ndep->type = type;
-	if (!firstdep)
-		return Deps = ndep;
-	while (firstdep->link)
-		firstdep = firstdep->link;
-	return firstdep->link = ndep;
-}
-
-// Put the first word in "line" in "word". Put the rest back in "line"
-static char *get_word(char *line, char *word)
-{
-	int i, j, c;
-	char *full_line;
-
-	if (strlen(line) == 0)
-		return NULL;
-
-	i = 0;
-	while (line[i] == ' ' || line[i] == '\t')
-		i++;
-	c = line[i];
-	if (c != '\'' && c != '"') {
-		c = ' ';
-	} else {
-		i++;
-	}
-
-	if (strlen(line) == i)
-		return NULL;
-
-	full_line = malloc(strlen(line + i) + 1);
-	if (full_line == NULL) {
-		fprintf(stderr, "No enough memory\n");
-		exit(EXIT_FAILURE);
-	}
-	strcpy(full_line, line + i);
-	for (i = 0; i < strlen(full_line); i++) {
-		if ((c != ' ' && full_line[i] != c) ||
-		    (c == ' ' && full_line[i] != '\t'
-		     && full_line[i] != ' '))
-			word[i] = full_line[i];
-		else {
-			// We got the whole word
-			word[i++] = '\0';
-			while (full_line[i] != '\0' &&
-			       (full_line[i] == ' ' || full_line[i] == '\t'))
-				i++;
-			for (j = 0; i < strlen(full_line); i++, j++)
-				line[j] = full_line[i];
-			line[j] = '\0';
-			free(full_line);
-			return word;
-		}
-	}
-	// This was the last word
-	word[i] = '\0';
-	line[0] = '\0';
-	free(full_line);
-	return word;
-}
-
-// Find the dependency named "depname"
-static dep *find_dep(char *parent, char *depname)
-{
-	dep *temp_dep = Deps;
-
-	while (temp_dep) {
-		// fprintf(stderr, "depname = '%s', name = '%s'\n", depname, temp_dep->name);
-		if (!strcmp(depname, temp_dep->name))
-			return temp_dep;
-		temp_dep = temp_dep->link;
-	}
-#ifdef WARNINGS
-	fprintf(stderr, "Warning: Unsatisfied dep for %s: %s\n", parent,
-		depname);
-#endif
-	return NULL;
-}
-
-// Find the macro named "depname"
-static makefileMacro *find_makefileMacro(char *macroname)
-{
-	makefileMacro *macro = makefileMacros;
-
-	if (!macroname)
-		return NULL;
-	if (macroname[0] == '-')
-		return NULL;
-	while (macro) {
-		// fprintf(stderr, "macroname = '%s', name = '%s'\n", macroname, macro->name);
-		if (!strcmp(macroname, macro->name))
-			return macro;
-		macro = macro->link;
-	}
-	return NULL;
-}
-
-// Resolve all dependencies
-static void resolve_dep(dep * parent)
-{
-	int idx;
-
-	while (parent) {
-		for (idx = 0; idx < parent->numdeps; idx++)
-			parent->deps[idx] = find_dep(parent->name, parent->depnames[idx]);
-		parent = parent->link;
-	}
-}
-
-// add a new macro to subdep
-static void add_macro_to_subdep(subdep *subdep, const char *macroname, int add)
-{
-	char *str;
-	int i;
-
-	for (i = 0; i < subdep->nummacros; i++)
-		if (!strcmp(subdep->macronames[i], macroname) ||
-		    (subdep->macronames[i][0] == '-' &&
-		     !strcmp(subdep->macronames[i] + 1, macroname)))
-			return;
-	subdep->macronames = realloc(subdep->macronames, sizeof(char *) * (subdep->nummacros + 1));
-	if (add) {
-		str = strdup(macroname);
-	} else {
-		str = malloc(strlen(macroname)+2);
-		if (str) {
-			str[0] = '-';
-			strcpy(str+1, macroname);
-		}
-	}
-	if (subdep->macronames == NULL || str == NULL) {
-		fprintf(stderr, "No enough memory\n");
-		exit(EXIT_FAILURE);
-	}
-	subdep->macronames[subdep->nummacros++] = str;
-}
-
-// Fill list[] with all deps for dependency
-static int make_list_of_deps_for_dep1(dep * parent, dep * dependency, subdep **list, int num)
-{
-	int i, j;
-	int add;
-	dep *dep;
-	subdep *new_dep, *old_dep;
-
-	if (dependency->hitflag) {
-		fprintf(stderr, "endless dependency for %s parent %s\n", dependency->name, parent ? parent->name : "(none)");
-		exit(EXIT_FAILURE);
-	}
-	dependency->hitflag = 1;
-	for (i = 0; i < dependency->numdeps; i++) {
-		dep = dependency->deps[i];
-		if (dep) {
-			add = 1;
-			for (j = 0; j < num; j++) {
-				old_dep = &(*list)[j];
-				if (!strcmp(old_dep->dep->name, dep->name)) {
-					add = 0;
-					break;
-				}
-			}
-			if (add) {
-				*list = realloc(*list, sizeof(subdep) * (num + 1));
-				if (*list == NULL) {
-					fprintf(stderr, "No enough memory\n");
-					exit(EXIT_FAILURE);
-				}
-				new_dep = &((*list)[num++]);
-				new_dep->dep = dep;
-				new_dep->nummacros = 0;
-				new_dep->macronames = NULL;
-				for (j = 0; j < dependency->nummacros; j++)
-					add_macro_to_subdep(new_dep, dependency->macronames[j], 1);
-				for (j = 0; j < dep->nummacros; j++)
-					add_macro_to_subdep(new_dep, dep->macronames[j], 1);
-				num = make_list_of_deps_for_dep1(dependency, dep, list, num);
-			} else {
-				for (j = 0; j < dependency->nummacros; j++)
-					add_macro_to_subdep(old_dep, dependency->macronames[j], 0);
-				for (j = 0; j < dep->nummacros; j++)
-					add_macro_to_subdep(old_dep, dep->macronames[j], 0);
-			}
-		}
-	}
-	return num;
-}
-
-// Clear all print flags
-static void clear_printflags(void)
-{
-	dep *temp_dep = Deps;
-
-	while (temp_dep) {
-		temp_dep->printflag = 0;
-		if (temp_dep->printed) {
-			free(temp_dep->printed);
-			temp_dep->printed = NULL;
-		}
-		temp_dep = temp_dep->link;
-	}
-}
-
-// Fill list[] with all deps for dependency
-static int make_list_of_deps_for_dep(dep * dependency, subdep **list)
-{
-	dep * temp_dep = Deps;
-
-	while (temp_dep) {
-		temp_dep->hitflag = 0;
-		temp_dep = temp_dep->link;
-	}
-	*list = NULL;
-	return make_list_of_deps_for_dep1(NULL, dependency, list, 0);
-}
-
-// Free memory for all deps in Toplevel and Deps
-static void del_all_from_list(void)
-{
-	int idx;
-	dep *list = Deps, *next;
-
-	while (list) {
-		next = list->link;
-		if (list->depnames) {
-			for (idx = 0; idx < list->numdeps; idx++)
-				if (list->depnames[idx])
-					free(list->depnames[idx]);
-			free(list->depnames);
-		}
-		if (list->macronames) {
-			for (idx = 0; idx < list->nummacros; idx++)
-				if (list->macronames[idx])
-					free(list->macronames[idx]);
-			free(list->macronames);
-		}
-		if (list->name)
-			free(list->name);
-		if (list->deps)
-			free(list->deps);
-		free(list);
-		list = next;
-	}
-}
-
-// Free subdep list memory
-static void free_subdep_list(subdep *list, int num)
-{
-	int idx;
-	
-	if (list == NULL)
-		return;
-	for (idx = 0; idx < num; idx++) {
-		int mac;
-		subdep *sdep = &list[idx];
-
-		if (sdep->macronames) {
-			for (mac = 0; mac < sdep->nummacros; mac++)
-				if (sdep->macronames[mac])
-					free(sdep->macronames[mac]);
-			free(sdep->macronames);
-		}
-	}
-	free(list);
-}
-
-// Print spaces
-static void print_indent(int indent)
-{
-	while (indent >= 8) {
-		printf("\t");
-		indent -= 8;
-	}
-	while (indent-- > 0)
-		printf(" ");
-}
-
-// Check ignore_in
-static int check_ignore_in(makefileMacro *macro, const char *dir)
-{
-	char *str;
-	
-	if (macro == NULL)
-		return 1;
-	str = macro->ignore_in;	
-	while (str) {
-		if (strlen(str) < strlen(dir))
-			return 0;
-		if (!strncmp(str, dir, strlen(dir)) && (str[strlen(dir)] == '\0' || str[strlen(dir)] == '\n'))
-			return 1;
-		while (*str && *str != '\n')
-			str++;
-		if (*str == '\n')
-			str++;
-	}
-	return 0;
-}
-
-// Add to printed
-static void add_printed(dep *tempdep, const char *name)
-{
-	if (!tempdep->printed) {
-		tempdep->printed = strdup(name);
-	} else {
-		tempdep->printed = realloc(tempdep->printed, strlen(tempdep->printed) + strlen(name) + 2);
-		strcat(tempdep->printed, " ");
-		strcat(tempdep->printed, name);
-	}
-}
-
-// Is printed?
-static int is_printed(dep *tempdep, const char *name)
-{
-	char *str = tempdep->printed;
-	
-	if (str == NULL)
-		return 0;
-	while (*str) {
-		if (!strncmp(str, name, strlen(name)) &&
-		    (str[strlen(name)] == ' ' || str[strlen(name)] == '\0'))
-		    	return 1;
-		while (*str && *str != ' ')
-			str++;
-		if (*str == ' ')
-			str++;
-	}
-	return 0;
-}	
-
-// Output in Makefile.in format
-static void output_makefile1(const char *dir, int all)
-{
-	dep *tempdep;
-	subdep *list;
-	char *text;
-	int num, idx, midx, vidx, lidx, first, mfirst, macroloop, indent;
-	int nummacros = 0, indir = 0;
-	makefileMacro **macros = NULL;
-
-	for (tempdep = Deps; tempdep; tempdep = tempdep->link) {
-		if (!all && tempdep->type != TYPE_TOPLEVEL)
-			continue;
-		if (tempdep->printflag)
-			continue;
-		indir = !dir || !strcmp(dir, tempdep->dir);
-		for (midx = 0; midx < tempdep->nummacros; midx++) {
-			makefileMacro *macro = find_makefileMacro(tempdep->macronames[midx++]);
-			if (check_ignore_in(macro, dir))
-				continue;
-			for (vidx = 0; vidx < nummacros; vidx++) {
-				if (macros[vidx] == macro)
-					break;
-			}
-			if (vidx >= nummacros) {
-				macros = (makefileMacro **)realloc(macros, sizeof(makefileMacro *) * (nummacros + 1));
-				if (macros == NULL) {
-					fprintf(stderr, "No enough memory\n");
-					exit(EXIT_FAILURE);
-				}
-				macros[nummacros++] = macro;
-			}
-			if (macro != NULL)
-				goto __out1_1;
-		}
-		first = 1;
-		num = make_list_of_deps_for_dep(tempdep, &list);
-		for (idx = 0; idx < num; idx++) {
-			subdep *ldep = &list[idx];
-			if (dir && strcmp(dir, ldep->dep->dir))
-				continue;
-			for (midx = 0; midx < ldep->nummacros; midx++) {
-				makefileMacro *macro;
-				macro = find_makefileMacro(ldep->macronames[midx++]);
-				if (check_ignore_in(macro, dir))
-					continue;
-				for (vidx = 0; vidx < nummacros; vidx++) {
-					if (macros[vidx] == macro)
-						break;
-				}
-				if (vidx >= nummacros) {
-					macros = (makefileMacro **)realloc(macros, sizeof(makefileMacro *) * (nummacros + 1));
-					if (macros == NULL) {
-						fprintf(stderr, "No enough memory\n");
-						exit(EXIT_FAILURE);
-					}
-					macros[nummacros++] = macro;
-				}
-				if (macro != NULL)
-					goto __out1;
-			}
-			if (is_printed(tempdep, ldep->dep->name))
-				goto __out1;
-			if (first) {
-				text = convert_to_config_uppercase("CONFIG_", tempdep->name);
-				printf("obj-$(%s) +=", text);
-				free(text);
-				tempdep->printflag = 1;
-				first = 0;
-				if (indir)
-					printf(" %s.o", tempdep->name);
-			}
-			add_printed(tempdep, ldep->dep->name);
-			printf(" %s.o", ldep->dep->name);
-		}
-	__out1:
-		free_subdep_list(list, num);
-		if (!first)
-			printf("\n");
-		if (first && indir) {
-			text = convert_to_config_uppercase("CONFIG_", tempdep->name);
-			printf("obj-$(%s) += %s.o\n", text, tempdep->name);
-			free(text);
-			tempdep->printflag = 1;
-		}
-	}
- __out1_1:
-	if (nummacros == 0)
-		macroloop = 0;
-	else {
-		macroloop = 1;
-		for (idx = 1; idx < nummacros; idx++)
-			macroloop <<= 1;
-	}
-	for (lidx = 1; lidx <= macroloop; lidx++) {
-		indent = 0;
-		mfirst = 1;
-		for (tempdep = Deps; tempdep; tempdep = tempdep->link) {
-			if (!all && tempdep->type != TYPE_TOPLEVEL)
-				continue;
-			indir = !dir || !strcmp(dir, tempdep->dir);
-			first = 1;
-			for (midx = 0; midx < tempdep->nummacros; midx++) {
-				makefileMacro *macro = find_makefileMacro(tempdep->macronames[midx]);
-				if (macro == NULL)
-					goto __ok2_2;
-				for (vidx = 0; vidx < nummacros; vidx++) {
-					if (!(lidx & (1 << vidx)))
-						continue;
-					if (macro == macros[vidx])
-						goto __ok2_2;
-				}
-				goto __out2_2;
-			}
-		      __ok2_2:
-			num = make_list_of_deps_for_dep(tempdep, &list);
-			for (idx = 0; idx < num; idx++) {
-				subdep *ldep = &list[idx];
-				if (!ldep->nummacros)
-					continue;
-				if (dir && strcmp(dir, ldep->dep->dir))
-					continue;
-				for (midx = 0; midx < ldep->nummacros; midx++) {
-					makefileMacro *macro = find_makefileMacro(ldep->macronames[midx]);
-					if (macro == NULL)
-						goto __ok2;
-					for (vidx = 0; vidx < nummacros; vidx++) {
-						if (!(lidx & (1 << vidx)))
-							continue;
-						if (macro == macros[vidx])
-							goto __ok2;
-					}
-					goto __out2;
-				}
-			      __ok2:
-			      	if (is_printed(tempdep, ldep->dep->name))
-			      		goto __out2;
-				if (first) {
-					if (mfirst) {
-						for (vidx = 0; vidx < nummacros; vidx++) {
-							makefileMacro *macro;
-							if (!(lidx & (1 << vidx)))
-								continue;
-							macro = macros[vidx];
-							if (macro->header) {
-								print_indent(indent);
-								printf(macro->header);
-							}
-							indent += macro->indent;
-						}
-						mfirst = 0;
-					}
-					text = convert_to_config_uppercase("CONFIG_", tempdep->name);
-					print_indent(indent);
-					printf("obj-$(%s) +=", text);
-					free(text);
-					first = 0;
-					if (!tempdep->printflag && indir)
-						printf(" %s.o", tempdep->name);
-				}
-				add_printed(tempdep, ldep->dep->name);
-				printf(" %s.o", ldep->dep->name);
-			}
-		__out2:
-			free_subdep_list(list, num);
-			if (!first)
-				printf("\n");
-		}
-	__out2_2:
-		if (!mfirst) {
-			for (vidx = 0; vidx < nummacros; vidx++) {
-				makefileMacro *macro;
-				if (!(lidx & (1 << vidx)))
-					continue;
-				macro = macros[vidx];
-				indent -= macro->indent;
-				if (macro->footer) {	
-					print_indent(indent);
-					printf(macro->footer);
-				}
-			}
-		}
-	}
-}
-
-// Output in Makefile.in format
-static void output_makefile(const char *dir, int all)
-{
-	printf("# Toplevel Module Dependency\n");
-	clear_printflags();
-	output_makefile1(dir, all);
-}
-
-// Print out ALL deps for firstdep (Cards, Deps)
-void output_card_list(dep *firstdep, int space, int size)
-{
-	dep *temp_dep=firstdep;
-	char *card_name;
-	int tmp_size = 0, first = 1, idx;
-
-	printf("  [");
-	for (idx = 0; idx < space; idx++)
-		printf(" ");
-	while(temp_dep) {
-		if (temp_dep->type == TYPE_TOPLEVEL) {
-			card_name=get_card_name(temp_dep->name);
-			if (!first) {
-				printf(", ");
-				tmp_size += 2;
-			} else {
-				first = 0;
-			}
-			if (tmp_size + strlen(card_name) + 2 > size) {
-				printf("]\n  [");
-				for (idx = 0; idx < space; idx++)
-					printf(" ");
-				tmp_size = 0;
-			}
-			printf(card_name);
-			tmp_size += strlen(card_name);
-			free(card_name);
-		}
-		temp_dep=temp_dep->link;
-	}
-}
-
-// Output in acinlude.m4
-static void output_acinclude(void)
-{
-	dep *tempdep;
-	char *text;
-	
-	printf("dnl ALSA soundcard configuration\n");
-	printf("dnl Find out which cards to compile driver for\n");
-	printf("dnl Copyright (c) by Anders Semb Hermansen <ahermans@vf.telia.no>,\n");
-	printf("dnl                  Jaroslav Kysela <perex@suse.cz>\n\n");
-
-	printf("AC_DEFUN(ALSA_TOPLEVEL_INIT, [\n");
-	for (tempdep = Deps; tempdep; tempdep = tempdep->link) {
-		if (tempdep->type != TYPE_TOPLEVEL)
-			continue;
-		text = convert_to_config_uppercase("CONFIG_", tempdep->name);
-		printf("\t%s=\"\"\n", text);
-		free(text);
-	}
-	printf("])\n\n");
-
-	printf("AC_DEFUN(ALSA_TOPLEVEL_ALL, [\n");
-	for (tempdep = Deps; tempdep; tempdep = tempdep->link) {
-		int put_if = 1;
-		if (tempdep->type != TYPE_TOPLEVEL)
-			continue;
-		if (tempdep->options & OPT_PNP_ONLY)
-			printf("\tif test \"$CONFIG_ISAPNP\" = \"y\"; then\n");
-		else if (strstr(tempdep->name, "pc98")) /* exception... */
-			printf("\tif test \"$CONFIG_X86_PC9800\" = \"y\"; then\n");
-		else if (strstr(tempdep->dir, "/isa"))
-			printf("\tif test \"$CONFIG_ISA\" = \"y\"; then\n");
-		else if (strstr(tempdep->dir, "/pci"))
-			printf("\tif test \"$CONFIG_PCI\" = \"y\"; then\n");
-		else if (strstr(tempdep->dir, "/usb"))
-			printf("\tif test \"$CONFIG_USB\" = \"y\"; then\n");
-		else if (strstr(tempdep->dir, "/ppc"))
-			printf("\tif test \"$CONFIG_PPC\" = \"y\"; then\n");
-		else if (strstr(tempdep->dir, "/arm"))
-			printf("\tif test \"$CONFIG_ARM\" = \"y\"; then\n");
-		else if (strstr(tempdep->dir, "/parisc"))
-			printf("\tif test \"$CONFIG_PARISC\" = \"y\"; then\n");
-		else if (strstr(tempdep->dir, "/pcmcia"))
-			printf("\tif test \"$CONFIG_PCMCIA\" = \"y\"; then\n");
-		else
-			put_if = 0;
-		text = convert_to_config_uppercase("CONFIG_", tempdep->name);
-		printf("\t%s=\"m\"\n", text);
-		printf("\tAC_DEFINE(%s_MODULE)\n", text);
-		if (put_if)
-			printf("\tfi\n");
-		free(text);
-	}
-	printf("])\n\n");
-	
-	printf("AC_DEFUN(ALSA_TOPLEVEL_SELECT, [\n");
-	printf("dnl Check for which cards to compile driver for...\n");
-	printf("AC_MSG_CHECKING(for which soundcards to compile driver for)\n");
-	printf("AC_ARG_WITH(cards,\n\
-  [  --with-cards=<list>     compile driver for cards in <list>; ]\n\
-  [                        cards may be separated with commas; ]\n\
-  [                        'all' compiles all drivers; ]\n\
-  [                        Possible cards are: ]\n");
-	output_card_list(Deps, 24, 50);
-	printf(" ],\n");
-	printf("  cards=\"$withval\", cards=\"all\")\n");
-	printf("if test \"$cards\" = \"all\"; then\n");
-	printf("  ALSA_TOPLEVEL_ALL\n");
-	printf("  AC_MSG_RESULT(all)\n");
-	printf("else\n");
-	printf("  cards=`echo $cards | sed 's/,/ /g'`\n");
-	printf("  for card in $cards\n");
-	printf("  do\n");
-	printf("    case \"$card\" in\n");
-	for (tempdep = Deps; tempdep; tempdep = tempdep->link) {
-		if (tempdep->type != TYPE_TOPLEVEL)
-			continue;
-		text = get_card_name(tempdep->name);
-		printf("\t%s)\n", text);
-		free(text);
-		text = convert_to_config_uppercase("CONFIG_", tempdep->name);
-		printf("\t\t%s=\"m\"\n", text);
-		printf("\t\tAC_DEFINE(%s_MODULE)\n", text);
-		printf("\t\t;;\n");
-		free(text);
-	}
-	printf("\t*)\n");
-	printf("\t\techo \"Unknown soundcard $card, exiting!\"\n");
-	printf("\t\texit 1\n");
-	printf("\t\t;;\n");
-	printf("    esac\n");
-	printf("  done\n");
-	printf("  AC_MSG_RESULT($cards)\n");
-	printf("fi\n");
-	for (tempdep = Deps; tempdep; tempdep = tempdep->link) {
-		if (tempdep->type != TYPE_TOPLEVEL)
-			continue;
-		text = convert_to_config_uppercase("CONFIG_", tempdep->name);
-		printf("AC_SUBST(%s)\n", text);
-		free(text);
-	}
-	printf("])\n\n");
-}
-
-// Output in toplevel.conf
-static void output_makeconf(void)
-{
-	dep *tempdep;
-	char *text;
-	
-	printf("# Soundcard configuration for ALSA driver\n");
-	printf("# Copyright (c) by Anders Semb Hermansen <ahermans@vf.telia.no>,\n");
-	printf("#                  Jaroslav Kysela <perex@suse.cz>\n\n");
-	for (tempdep = Deps; tempdep; tempdep = tempdep->link) {
-		if (tempdep->type != TYPE_TOPLEVEL)
-			continue;
-		text = convert_to_config_uppercase("CONFIG_", tempdep->name);
-		printf("%s=@%s@\n", text, text);
-		free(text);
-	}
-}
-
-// Output in config.h
-static void output_include(void)
-{
-	dep *tempdep;
-	char *text;
-	
-	printf("/* Soundcard configuration for ALSA driver */\n");
-	printf("/* Copyright (c) by Anders Semb Hermansen <ahermans@vf.telia.no>, */\n");
-	printf("/*                  Jaroslav Kysela <perex@suse.cz> */\n\n");
-	for (tempdep = Deps; tempdep; tempdep = tempdep->link) {
-		if (tempdep->type != TYPE_TOPLEVEL)
-			continue;
-		text = convert_to_config_uppercase("CONFIG_", tempdep->name);
-		printf("#undef %s_MODULE\n", text);
-		free(text);
-	}
-}
-
-// example: snd-sb16 -> CONFIG_SND_SB16
-static char *convert_to_config_uppercase(const char *pre, const char *line)
-{
-	char *holder, *p;
-	int i;
-
-	holder = malloc(strlen(line) * 2 + strlen(pre) + 1);
-	if (holder == NULL) {
-		fprintf(stderr, "No enough memory\n");
-		exit(EXIT_FAILURE);
-	}
-	p = strcpy(holder, pre) + strlen(pre);
-	for (i = 0; i < strlen(line); i++)
-		switch (line[i]) {
-		case '-':
-			*p++ = '_';
-			break;
-		default:
-			*p++ = toupper(line[i]);
-			break;
-		}
-
-	*p++ = '\0';
-
-	return holder;
-}
-
-#if 0
-// example: a'b -> a\'b
-static char *convert_to_escape(const char *line)
-{
-	char *holder, *p;
-	int i;
-
-	holder = malloc(strlen(line) + 1);
-	if (holder == NULL) {
-		fprintf(stderr, "No enough memory\n");
-		exit(EXIT_FAILURE);
-	}
-	p = holder;
-	for (i = 0; i < strlen(line); i++)
-		switch (line[i]) {
-		case '\'':
-			*p++ = '`';
-			break;
-		default:
-			*p++ = line[i];
-			break;
-		}
-
-	*p++ = '\0';
-
-	return holder;
-}
-#endif
-
-// example: snd-sb16 -> sb16
-static char *remove_word(const char *remove, const char *line)
-{
-	char *holder;
-	int i;
-
-	holder=malloc(strlen(line)-strlen(remove)+1);
-	if(holder==NULL)
-	{
-		fprintf(stderr, "Not enough memory\n");
-		exit(EXIT_FAILURE);
-	}
-
-	for(i=strlen(remove);i<strlen(line);i++)
-		holder[i-strlen(remove)]=line[i];
-
-	holder[i-strlen(remove)]='\0';
-
-	return holder;
-}
-
-// example: snd-sb16 -> sb16
-static char *get_card_name(const char *line)
-{
-	if (strncmp(line, "snd-", 4)) {
-		fprintf(stderr, "Invalid card name '%s'\n", line);
-		exit(EXIT_FAILURE);
-	}
-	return remove_word("snd-", line);
-}
-
-// Main function
-int main(int argc, char *argv[])
-{
-	int method = METHOD_MAKEFILE;
-	int argidx = 1, all = 0;
-	char *filename, *dir = NULL;
-
-	// Find out which method to use
-	if (argc < 2)
-		usage(argv[0]);
-	if (strcmp(argv[argidx], "--makefile") == 0)
-		method = METHOD_MAKEFILE;
-	else if (strcmp(argv[argidx], "--acinclude") == 0)
-		method = METHOD_ACINCLUDE;
-	else if (strcmp(argv[argidx], "--makeconf") == 0)
-		method = METHOD_MAKECONF;
-	else if (strcmp(argv[argidx], "--include") == 0)
-		method = METHOD_INCLUDE;
-	else
-		usage(argv[0]);
-	argidx++;
-	
-	if (method == METHOD_MAKEFILE) {
-		// Select directory
-		if (argc > argidx && strcmp(argv[argidx], "--dir") == 0) {
-			if (argc > ++argidx)
-				dir = argv[argidx++];
-			else
-				dir = NULL;
-		} else
-			dir = NULL;
-	
-		// Select all dependencies
-		if (argc > argidx && strcmp(argv[argidx], "--all") == 0) {
-			argidx++;
-			all = 1;
-		} else
-			all = 0;
-	}
-
-	// Check the filename
-	if (argc > argidx)
-		filename = argv[argidx++];
-	else
-		filename = NULL;
-
-	// Read the file into memory
-	if (read_file(filename) < 0) {
-		fprintf(stderr, "Error reading %s: %s",
-			filename ? filename : "stdin", strerror(errno));
-		exit(EXIT_FAILURE);
-	}
-	// Resolve dependencies
-	resolve_dep(Deps);
-
-	// Use method
-	switch (method) {
-	case METHOD_MAKEFILE:
-		output_makefile(dir, all);
-		break;
-	case METHOD_ACINCLUDE:
-		output_acinclude();
-		break;
-	case METHOD_MAKECONF:
-		output_makeconf();
-		break;
-	case METHOD_INCLUDE:
-		output_include();
-		break;
-	default:
-		fprintf(stderr, "This should not happen!\n");
-		usage(argv[0]);
-		break;
-	}
-
-	// Free some memory
-	del_all_from_list();
-
-	exit(EXIT_SUCCESS);
-}
-
-// Print out syntax
-static void usage(char *programname)
-{
-	fprintf(stderr, "Usage: %s --makefile --dir directory <cfgfile>\n", programname);
-	fprintf(stderr, "       %s --acinclude <cfgfile>\n", programname);
-	fprintf(stderr, "       %s --makeconf <cfgfile>\n", programname);
-	exit(EXIT_FAILURE);
-}
Index: debian/alsa-driver/alsa-kernel/scripts/mod-deps.h
diff -u debian/alsa-driver/alsa-kernel/scripts/mod-deps.h:1.1.1.1 debian/alsa-driver/alsa-kernel/scripts/mod-deps.h:removed
--- debian/alsa-driver/alsa-kernel/scripts/mod-deps.h:1.1.1.1	Sun Dec 30 02:26:48 2001
+++ debian/alsa-driver/alsa-kernel/scripts/mod-deps.h	Tue Apr 13 13:39:27 2004
@@ -1,90 +0,0 @@
-/*
- *  Utility to find soundcard dependencies from modules.config
- *  Copyright (c) by Anders Semb Hermansen <ahermans@vf.telia.no>,
- *		     Martin Dahl <dahlm@vf.telia.no>
- *
- *   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.
- *
- *   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 General Public License for more details.
- *
- *   You should have received a copy of the GNU General Public License
- *   along with this program; if not, write to the Free Software
- *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
- *
- */
-
-#ifndef __SND_DEPS_H__
-#define __SND_DEPS_H__
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <ctype.h>
-#include <errno.h>
-
-// Defines
-#define MODULEDEPFILE "../modules.config" // modules.config filename
-#define MODULENAME_MAXLENGTH 30 // Maximum length of module name
-#define WARNINGS // Output warnings to stderr
-
-#define METHOD_ACINCLUDE 1 // Output method
-#define METHOD_MAKEFILE 2
-#define METHOD_CINCLUDE 3
-#define METHOD_CONFIGIN 4
-
-#define TYPE_CARDS 1
-#define TYPE_DEPS 2
-
-// Typedefs
-typedef char depname[MODULENAME_MAXLENGTH];
-
-typedef struct depStruct
-{
-	depname name;
-	char *comment;
-	int numdeps;
-	struct depStruct **deps;
-	struct depStruct *link;
-} dep;
-
-// Globals
-extern dep *Cards; // All cards
-extern dep *Deps; // All other modules
-
-// Prototypes
-
-// snd-deps-output.c
-int main(int argc, char *argv[]);
-void usage(char *programname);
-void output_acinclude(void);
-void output_makefile(void);
-void output_cinclude(void);
-void output_configin(void);
-void output_need_bool(const char *dst, const char *src, int no_default);
-void output_dep(dep *firstdep, char *format, int num);
-void output1_dep(dep *firstdep);
-void output2_dep(dep *firstdep);
-void output_card(dep *firstdep, char *card_format, char *dep_format);
-void output_card_list(dep *firstdep, int space, int size);
-void output1_card(dep *firstdep);
-char *convert_to_config_uppercase(const char *pre, const char *line);
-char *convert_to_escape(const char *line);
-char *remove_word(const char *remove, const char *line);
-char *get_card_name(const char *line);
-
-// snd-deps-find.c
-int read_file(char *filename);
-void add_dep(char *line, dep *firstdep, short type);
-dep *alloc_mem_for_dep(dep *firstdep, short type);
-char *get_word(char *line, char *word);
-dep *find_dep(char *parent, char *depname);
-int make_list_of_deps_for_dep(dep *dependency, depname list[], int num);
-void del_all_from_list(void);
-
-#endif // __SND_DEPS_H__
Index: debian/alsa-driver/alsa-kernel/scripts/patch-2.5
diff -u debian/alsa-driver/alsa-kernel/scripts/patch-2.5:1.1.1.1 debian/alsa-driver/alsa-kernel/scripts/patch-2.5:removed
--- debian/alsa-driver/alsa-kernel/scripts/patch-2.5:1.1.1.1	Sat Feb  2 12:05:19 2002
+++ debian/alsa-driver/alsa-kernel/scripts/patch-2.5	Tue Apr 13 13:39:27 2004
@@ -1,266 +0,0 @@
-diff -ruN linux-2.5.2-pre1/MAINTAINERS linux/MAINTAINERS
---- linux-2.5.2-pre1/MAINTAINERS	Sun Dec 23 16:47:36 2001
-+++ linux/MAINTAINERS	Sun Dec 23 18:21:22 2001
-@@ -1374,6 +1374,12 @@
- L:	linux-net@vger.kernel.org
- S:	Maintained
- 
-+SOUND - ALSA
-+P:	Jaroslav Kysela
-+M:	perex@suse.cz
-+L:	alsa-devel@alsa-project.org
-+S:	Maintained
-+
- SOUND
- P:	Alan Cox
- M:	alan@redhat.com
---- linux-2.5.3pre6/Makefile.orig	Wed Jan 30 18:46:08 2002
-+++ linux-2.5.3pre6/Makefile	Wed Jan 30 18:57:26 2002
-@@ -122,7 +122,7 @@
- NETWORKS	=net/network.o
- 
- LIBS		=$(TOPDIR)/lib/lib.a
--SUBDIRS		=kernel lib drivers mm fs net ipc
-+SUBDIRS		=kernel lib drivers mm fs net ipc sound
- 
- DRIVERS-n :=
- DRIVERS-y :=
-@@ -157,7 +157,7 @@
- DRIVERS-y += drivers/cdrom/driver.o
- endif
- 
--DRIVERS-$(CONFIG_SOUND) += drivers/sound/sounddrivers.o
-+DRIVERS-$(CONFIG_SOUND) += sound/sound.o
- DRIVERS-$(CONFIG_PCI) += drivers/pci/driver.o
- DRIVERS-$(CONFIG_MTD) += drivers/mtd/mtdlink.o
- DRIVERS-$(CONFIG_PCMCIA) += drivers/pcmcia/pcmcia.o
-@@ -199,7 +199,7 @@
- 	drivers/char/drm/*-mod.c \
- 	drivers/pci/devlist.h drivers/pci/classlist.h drivers/pci/gen-devlist \
- 	drivers/zorro/devlist.h drivers/zorro/gen-devlist \
--	drivers/sound/bin2hex drivers/sound/hex2hex \
-+	sound/oss/bin2hex sound/oss/hex2hex \
- 	drivers/atm/fore200e_mkfirm drivers/atm/{pca,sba}*{.bin,.bin1,.bin2} \
- 	drivers/scsi/aic7xxx/aicasm/aicasm_gram.c \
- 	drivers/scsi/aic7xxx/aicasm/aicasm_scan.c \
-@@ -220,11 +220,11 @@
- 	drivers/net/hamradio/soundmodem/sm_tbl_{hapn4800,psk4800}.h \
- 	drivers/net/hamradio/soundmodem/sm_tbl_{afsk2400_7,afsk2400_8}.h \
- 	drivers/net/hamradio/soundmodem/gentbl \
--	drivers/sound/*_boot.h drivers/sound/.*.boot \
--	drivers/sound/msndinit.c \
--	drivers/sound/msndperm.c \
--	drivers/sound/pndsperm.c \
--	drivers/sound/pndspini.c \
-+	sound/oss/*_boot.h sound/oss/.*.boot \
-+	sound/oss/msndinit.c \
-+	sound/oss/msndperm.c \
-+	sound/oss/pndsperm.c \
-+	sound/oss/pndspini.c \
- 	drivers/atm/fore200e_*_fw.c drivers/atm/.fore200e_*.fw \
- 	.version .config* config.in config.old \
- 	scripts/tkparse scripts/kconfig.tk scripts/kconfig.tmp \
-@@ -339,7 +339,7 @@
- init/do_mounts.o: init/do_mounts.c include/config/MARKER
- 	$(CC) $(CFLAGS) $(CFLAGS_KERNEL) $(PROFILING) -c -o $*.o $<
- 
--fs lib mm ipc kernel drivers net: dummy
-+fs lib mm ipc kernel drivers net sound: dummy
- 	$(MAKE) CFLAGS="$(CFLAGS) $(CFLAGS_KERNEL)" $(subst $@, _dir_$@, $@)
- 
- TAGS: dummy
-diff -ruN linux-2.5.2-pre1/Rules.make linux/Rules.make
---- linux-2.5.2-pre1/Rules.make	Wed Mar  7 04:31:01 2001
-+++ linux/Rules.make	Sun Dec 23 18:20:06 2001
-@@ -206,6 +206,8 @@
- ifneq "$(strip $(export-objs))" ""
- 
- MODINCL = $(TOPDIR)/include/linux/modules
-+MODCURDIR = $(subst $(TOPDIR)/,,$(shell /bin/pwd))
-+MODPREFIX = $(subst /,-,$(MODCURDIR))__
- 
- # The -w option (enable warnings) for genksyms will return here in 2.1
- # So where has it gone?
-@@ -220,20 +222,20 @@
- 	genksyms_smp_prefix := 
- endif
- 
--$(MODINCL)/%.ver: %.c
--	@if [ ! -r $(MODINCL)/$*.stamp -o $(MODINCL)/$*.stamp -ot $< ]; then \
-+$(MODINCL)/$(MODPREFIX)%.ver: %.c
-+	@if [ ! -r $(MODINCL)/$(MODPREFIX)$*.stamp -o $(MODINCL)/$(MODPREFIX)$*.stamp -ot $< ]; then \
- 		echo '$(CC) $(CFLAGS) $(EXTRA_CFLAGS) -E -D__GENKSYMS__ $<'; \
- 		echo '| $(GENKSYMS) $(genksyms_smp_prefix) -k $(VERSION).$(PATCHLEVEL).$(SUBLEVEL) > $@.tmp'; \
- 		$(CC) $(CFLAGS) $(EXTRA_CFLAGS) -E -D__GENKSYMS__ $< \
- 		| $(GENKSYMS) $(genksyms_smp_prefix) -k $(VERSION).$(PATCHLEVEL).$(SUBLEVEL) > $@.tmp; \
- 		if [ -r $@ ] && cmp -s $@ $@.tmp; then echo $@ is unchanged; rm -f $@.tmp; \
- 		else echo mv $@.tmp $@; mv -f $@.tmp $@; fi; \
--	fi; touch $(MODINCL)/$*.stamp
-+	fi; touch $(MODINCL)/$(MODPREFIX)$*.stamp
- 	
--$(addprefix $(MODINCL)/,$(export-objs:.o=.ver)): $(TOPDIR)/include/linux/autoconf.h
-+$(addprefix $(MODINCL)/$(MODPREFIX),$(export-objs:.o=.ver)): $(TOPDIR)/include/linux/autoconf.h
- 
- # updates .ver files but not modversions.h
--fastdep: $(addprefix $(MODINCL)/,$(export-objs:.o=.ver))
-+fastdep: $(addprefix $(MODINCL)/$(MODPREFIX),$(export-objs:.o=.ver))
- 
- # updates .ver files and modversions.h like before (is this needed?)
- dep: fastdep update-modverfile
-diff -ruN linux-2.5.2-pre1/arch/alpha/config.in linux/arch/alpha/config.in
---- linux-2.5.2-pre1/arch/alpha/config.in	Wed Nov 21 00:49:31 2001
-+++ linux/arch/alpha/config.in	Sun Dec 23 18:20:06 2001
-@@ -364,7 +364,7 @@
- 
- tristate 'Sound card support' CONFIG_SOUND
- if [ "$CONFIG_SOUND" != "n" ]; then
--  source drivers/sound/Config.in
-+  source sound/Config.in
- fi
- endmenu
- 
-diff -ruN linux-2.5.2-pre1/arch/arm/config.in linux/arch/arm/config.in
---- linux-2.5.2-pre1/arch/arm/config.in	Fri Nov  9 22:58:02 2001
-+++ linux/arch/arm/config.in	Sun Dec 23 18:20:06 2001
-@@ -575,7 +575,7 @@
- 
-    tristate 'Sound support' CONFIG_SOUND
-    if [ "$CONFIG_SOUND" != "n" ]; then
--      source drivers/sound/Config.in
-+      source sound/Config.in
-    fi
-    endmenu
- fi
-diff -ruN linux-2.5.2-pre1/arch/cris/config.in linux/arch/cris/config.in
---- linux-2.5.2-pre1/arch/cris/config.in	Mon Oct 15 22:42:14 2001
-+++ linux/arch/cris/config.in	Sun Dec 23 18:20:06 2001
-@@ -236,7 +236,7 @@
- 
- tristate 'Sound card support' CONFIG_SOUND
- if [ "$CONFIG_SOUND" != "n" ]; then
--  source drivers/sound/Config.in
-+  source sound/Config.in
- fi
- endmenu
- 
-diff -ruN linux-2.5.2-pre1/arch/i386/config.in linux/arch/i386/config.in
---- linux-2.5.2-pre1/arch/i386/config.in	Mon Nov 12 20:58:08 2001
-+++ linux/arch/i386/config.in	Sun Dec 23 18:20:06 2001
-@@ -386,7 +386,7 @@
- 
- tristate 'Sound card support' CONFIG_SOUND
- if [ "$CONFIG_SOUND" != "n" ]; then
--   source drivers/sound/Config.in
-+   source sound/Config.in
- fi
- endmenu
- 
-diff -ruN linux-2.5.2-pre1/arch/ia64/config.in linux/arch/ia64/config.in
---- linux-2.5.2-pre1/arch/ia64/config.in	Fri Nov  9 23:26:17 2001
-+++ linux/arch/ia64/config.in	Sun Dec 23 18:20:06 2001
-@@ -228,7 +228,7 @@
- 
- tristate 'Sound card support' CONFIG_SOUND
- if [ "$CONFIG_SOUND" != "n" ]; then
--  source drivers/sound/Config.in
-+  source sound/Config.in
- fi
- endmenu
- 
-diff -ruN linux-2.5.2-pre1/arch/m68k/config.in linux/arch/m68k/config.in
---- linux-2.5.2-pre1/arch/m68k/config.in	Tue Jun 12 04:15:27 2001
-+++ linux/arch/m68k/config.in	Sun Dec 23 18:20:06 2001
-@@ -527,7 +527,7 @@
- 
- tristate 'Sound support' CONFIG_SOUND
- if [ "$CONFIG_SOUND" != "n" ]; then
--   source drivers/sound/dmasound/Config.in
-+   source sound/oss/dmasound/Config.in
- fi
- endmenu
- 
-diff -ruN linux-2.5.2-pre1/arch/mips/config.in linux/arch/mips/config.in
---- linux-2.5.2-pre1/arch/mips/config.in	Mon Oct 15 22:41:34 2001
-+++ linux/arch/mips/config.in	Sun Dec 23 18:20:06 2001
-@@ -492,7 +492,7 @@
- 
-    tristate 'Sound card support' CONFIG_SOUND
-    if [ "$CONFIG_SOUND" != "n" ]; then
--      source drivers/sound/Config.in
-+      source sound/Config.in
-    fi
-    endmenu
- fi
-diff -ruN linux-2.5.2-pre1/arch/mips64/config.in linux/arch/mips64/config.in
---- linux-2.5.2-pre1/arch/mips64/config.in	Sun Sep  9 19:43:02 2001
-+++ linux/arch/mips64/config.in	Sun Dec 23 18:20:06 2001
-@@ -251,7 +251,7 @@
- 
- tristate 'Sound card support' CONFIG_SOUND
- if [ "$CONFIG_SOUND" != "n" ]; then
--   source drivers/sound/Config.in
-+   source sound/Config.in
- fi
- endmenu
- 
-diff -ruN linux-2.5.2-pre1/arch/parisc/config.in linux/arch/parisc/config.in
---- linux-2.5.2-pre1/arch/parisc/config.in	Wed Apr 18 02:19:25 2001
-+++ linux/arch/parisc/config.in	Sun Dec 23 18:20:06 2001
-@@ -178,7 +178,7 @@
- comment 'Sound Drivers'
- tristate 'Sound card support' CONFIG_SOUND
- if [ "$CONFIG_SOUND" != "n" ]; then
--   source drivers/sound/Config.in
-+   source sound/Config.in
- fi
- endmenu
- 
-diff -ruN linux-2.5.2-pre1/arch/ppc/config.in linux/arch/ppc/config.in
---- linux-2.5.2-pre1/arch/ppc/config.in	Fri Nov 16 19:10:08 2001
-+++ linux/arch/ppc/config.in	Sun Dec 23 18:20:06 2001
-@@ -366,8 +366,8 @@
- comment 'Sound'
- tristate 'Sound card support' CONFIG_SOUND
- if [ "$CONFIG_SOUND" != "n" ]; then
--  source drivers/sound/dmasound/Config.in
--  source drivers/sound/Config.in
-+  source sound/oss/dmasound/Config.in
-+  source sound/Config.in
- fi
- 
- endmenu
-diff -ruN linux-2.5.2-pre1/arch/sh/config.in linux/arch/sh/config.in
---- linux-2.5.2-pre1/arch/sh/config.in	Tue Dec 11 19:10:18 2001
-+++ linux/arch/sh/config.in	Sun Dec 23 18:20:06 2001
-@@ -373,7 +373,7 @@
- 
- tristate 'Sound card support' CONFIG_SOUND
- if [ "$CONFIG_SOUND" != "n" ]; then
--   source drivers/sound/Config.in
-+   source sound/Config.in
- fi
- endmenu
- 
-diff -ruN linux-2.5.2-pre1/arch/sparc64/config.in linux/arch/sparc64/config.in
---- linux-2.5.2-pre1/arch/sparc64/config.in	Tue Nov 13 18:16:05 2001
-+++ linux/arch/sparc64/config.in	Sun Dec 23 18:20:06 2001
-@@ -276,7 +276,7 @@
- 
- tristate 'Sound card support' CONFIG_SOUND
- if [ "$CONFIG_SOUND" != "n" ]; then
--   source drivers/sound/Config.in
-+   source sound/Config.in
- fi
- endmenu
- 
---- linux-2.5.3pre6/drivers/Makefile.orig	Wed Jan 30 18:46:09 2002
-+++ linux-2.5.3pre6/drivers/Makefile	Wed Jan 30 18:55:19 2002
-@@ -10,7 +10,7 @@
- 		message/i2o message/fusion scsi md ieee1394 pnp isdn atm \
- 		fc4 net/hamradio i2c acpi bluetooth
- 
--subdir-y :=	base parport char block net sound misc media cdrom hotplug
-+subdir-y :=	base parport char block net misc media cdrom hotplug
- subdir-m :=	$(subdir-y)
- 
- 
Index: debian/alsa-driver/configure
diff -u debian/alsa-driver/configure:1.22 debian/alsa-driver/configure:1.23
--- debian/alsa-driver/configure:1.22	Sun Feb 29 17:13:51 2004
+++ debian/alsa-driver/configure	Tue Apr 13 13:39:25 2004
@@ -271,7 +271,7 @@
 
 ac_unique_file="acore/sound.patch"
 ac_default_prefix=/usr
-ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT RANLIB ac_ct_RANLIB INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA AR AS CPP EGREP SRCDIR CROSS_COMPILE CONFIG_SND_KERNELDIR kaversion kversion kpatchlevel ksublevel kextraversion NEW_KBUILD CONFIG_SND_MVERSION CONFIG_PCI CONFIG_SGI moddir modsubdir moddir_tree processor LD CONFIG_X86 CONFIG_ALPHA CONFIG_L3 CONFIG_ARM CONFIG_PPC CONFIG_ISA CONFIG_PARISC CONFIG_SND_BIT32_EMUL msmp CONFIG_VIDEO_DEV CONFIG_ISAPNP_KERNEL CONFIG_PNP_KERNEL CONFIG_ISAPNP CONFIG_PNP CONFIG_SND_VERSION CONFIG_SND_DATE CONFIG_SND_SEQUENCER CONFIG_SND_OSSEMUL CONFIG_SND_RTCTIMER CONFIG_RTC CONFIG_USB CONFIG_PCMCIA CONFIG_X86_PC9800 CONFIG_SND_DUMMY CONFIG_SND_VIRMIDI CONFIG_SND_SERIAL_U16550 CONFIG_SND_MTPAV CONFIG_SND_MPU401 CONFIG_SND_ALS100 CONFIG_SND_AZT2320 CONFIG_SND_CMI8330 CONFIG_SND_DT019X CONFIG_SND_ES18XX CONFIG_SND_OPL3SA2 CONFIG_SND_SGALAXY CONFIG_SND_SSCAPE CONFIG_SND_AD1816A CONFIG_SND_AD1848 CONFIG_SND_CS4231 CONFIG_SND_CS4232 CONFIG_SND_CS4236 CONFIG_SND_PC98_CS4232 CONFIG_SND_ES1688 CONFIG_SND_GUSCLASSIC CONFIG_SND_GUSMAX CONFIG_SND_GUSEXTREME CONFIG_SND_INTERWAVE CONFIG_SND_INTERWAVE_STB CONFIG_SND_OPTI92X_AD1848 CONFIG_SND_OPTI92X_CS4231 CONFIG_SND_OPTI93X CONFIG_SND_SB8 CONFIG_SND_SB16 CONFIG_SND_SBAWE CONFIG_SND_ES968 CONFIG_SND_WAVEFRONT CONFIG_SND_ALS4000 CONFIG_SND_AZT3328 CONFIG_SND_BT87X CONFIG_SND_CMIPCI CONFIG_SND_CS4281 CONFIG_SND_ENS1370 CONFIG_SND_ENS1371 CONFIG_SND_ES1938 CONFIG_SND_ES1968 CONFIG_SND_FM801 CONFIG_SND_INTEL8X0 CONFIG_SND_MAESTRO3 CONFIG_SND_RME32 CONFIG_SND_RME96 CONFIG_SND_SONICVIBES CONFIG_SND_VIA82XX CONFIG_SND_ALI5451 CONFIG_SND_CS46XX CONFIG_SND_EMU10K1 CONFIG_SND_ICE1712 CONFIG_SND_ICE1724 CONFIG_SND_KORG1212 CONFIG_SND_MIXART CONFIG_SND_NM256 CONFIG_SND_RME9652 CONFIG_SND_HDSP CONFIG_SND_TRIDENT CONFIG_SND_VX222 CONFIG_SND_YMFPCI CONFIG_SND_POWERMAC CONFIG_SND_SA11XX_UDA1341 CONFIG_SND_USB_AUDIO CONFIG_SND_HARMONY CONFIG_SND_VXPOCKET CONFIG_SND_VXP440 CONFIG_SND_SERIALMIDI CONFIG_SND_INTEL8X0M CONFIG_SND_HDSPM CONFIG_SND_ATIIXP CONFIG_SND_PDPLUS CONFIG_SND_MSND_PINNACLE CONFIG_SND_PDAUDIOCF CONFIG_SND_USB_USX2Y CONFIG_SND_AU8810 CONFIG_SND_AU8820 CONFIG_SND_AU8830 c_opts m_opts GENKSYMS EXTRA_INCLUDES KERNEL_INC LIBOBJS LTLIBOBJS'
+ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT RANLIB ac_ct_RANLIB INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA AR AS CPP EGREP SRCDIR CROSS_COMPILE CONFIG_SND_KERNELDIR kaversion kversion kpatchlevel ksublevel kextraversion NEW_KBUILD CONFIG_SND_MVERSION CONFIG_PCI CONFIG_EXPERIMENTAL CONFIG_SGI moddir modsubdir moddir_tree processor LD CONFIG_X86 CONFIG_ALPHA CONFIG_L3 CONFIG_ARM CONFIG_PPC CONFIG_ISA CONFIG_PARISC CONFIG_SND_BIT32_EMUL msmp CONFIG_VIDEO_DEV CONFIG_ISAPNP_KERNEL CONFIG_PNP_KERNEL CONFIG_ISAPNP CONFIG_PNP CONFIG_SND_VERSION CONFIG_SND_DATE CONFIG_SND_SEQUENCER CONFIG_SND_RTCTIMER CONFIG_RTC CONFIG_USB CONFIG_PCMCIA CONFIG_X86_PC9800 CONFIG_SOUND CONFIG_SND CONFIG_SPARC64 CONFIG_PPC64 CONFIG_X86_64 CONFIG_IA32_EMULATION CONFIG_SND_TIMER CONFIG_SND_PCM CONFIG_SND_HWDEP CONFIG_SND_RAWMIDI CONFIG_SND_SEQ_DUMMY CONFIG_SND_OSSEMUL CONFIG_SND_MIXER_OSS CONFIG_SND_PCM_OSS CONFIG_SND_SEQUENCER_OSS CONFIG_SND_VERBOSE_PRINTK CONFIG_SND_DEBUG CONFIG_SND_DEBUG_MEMORY CONFIG_SND_DEBUG_DETECT CONFIG_SND_MPU401_UART CONFIG_SND_OPL3_LIB CONFIG_SND_OPL4_LIB CONFIG_SND_VX_LIB CONFIG_SND_DUMMY CONFIG_SND_VIRMIDI CONFIG_SND_MTPAV CONFIG_SND_SERIAL_U16550 CONFIG_SND_MPU401 CONFIG_SND_SERIALMIDI CONFIG_SND_AD1816A CONFIG_SND_AD1848 CONFIG_SND_CS4231 CONFIG_SND_CS4232 CONFIG_SND_CS4236 CONFIG_SND_PC98_CS4232 CONFIG_SND_ES968 CONFIG_SND_ES1688 CONFIG_SND_ES18XX CONFIG_SND_GUSCLASSIC CONFIG_SND_GUSEXTREME CONFIG_SND_GUSMAX CONFIG_SND_INTERWAVE CONFIG_SND_INTERWAVE_STB CONFIG_SND_OPTI92X_AD1848 CONFIG_SND_OPTI92X_CS4231 CONFIG_SND_OPTI93X CONFIG_SND_SB8 CONFIG_SND_SB16 CONFIG_SND_SBAWE CONFIG_SND_SB16_CSP CONFIG_SND_WAVEFRONT CONFIG_SND_ALS100 CONFIG_SND_AZT2320 CONFIG_SND_CMI8330 CONFIG_SND_DT019X CONFIG_SND_OPL3SA2 CONFIG_SND_SGALAXY CONFIG_SND_SSCAPE CONFIG_SND_MSND_PINNACLE CONFIG_SND_AC97_CODEC CONFIG_SND_ALI5451 CONFIG_SND_ATIIXP CONFIG_SND_AU8810 CONFIG_SND_AU8820 CONFIG_SND_AU8830 CONFIG_SND_AZT3328 CONFIG_SND_BT87X CONFIG_SND_CS46XX CONFIG_SND_CS46XX_NEW_DSP CONFIG_SND_CS4281 CONFIG_SND_EMU10K1 CONFIG_SND_KORG1212 CONFIG_SND_MIXART CONFIG_SND_NM256 CONFIG_SND_RME32 CONFIG_SND_RME96 CONFIG_SND_RME9652 CONFIG_SND_HDSP CONFIG_SND_TRIDENT CONFIG_SND_YMFPCI CONFIG_SND_ALS4000 CONFIG_SND_CMIPCI CONFIG_SND_ENS1370 CONFIG_SND_ENS1371 CONFIG_SND_ES1938 CONFIG_SND_ES1968 CONFIG_SND_MAESTRO3 CONFIG_SND_FM801 CONFIG_SND_FM801_TEA575X CONFIG_SND_ICE1712 CONFIG_SND_ICE1724 CONFIG_SND_INTEL8X0 CONFIG_SND_INTEL8X0M CONFIG_SND_SONICVIBES CONFIG_SND_VIA82XX CONFIG_SND_VX222 CONFIG_SND_PDPLUS CONFIG_SND_HDSPM CONFIG_SND_POWERMAC CONFIG_SND_SA11XX_UDA1341 CONFIG_ARCH_SA1100 CONFIG_SND_USB_AUDIO CONFIG_SND_USB_USX2Y CONFIG_SND_VXPOCKET CONFIG_SND_VXP440 CONFIG_SND_PDAUDIOCF CONFIG_SPARC32 CONFIG_SND_SUN_AMD7930 CONFIG_SBUS CONFIG_SND_SUN_CS4231 CONFIG_SND_HARMONY CONFIG_SOUND_PRIME c_opts m_opts GENKSYMS EXTRA_INCLUDES KERNEL_INC LIBOBJS LTLIBOBJS'
 ac_subst_files=''
 
 # Initialize some variables set by options.
@@ -813,7 +813,7 @@
   --with-redhat=no,yes,auto  specify Red Hat kernel build
   --with-moddir=/path     give the path for the alsa driver kernel modules
                           /lib/modules/<KVER>/misc
-  --with-debug=level      give the debug level (none,basic,memory,full,detect)
+  --with-debug=level      give the debug level (none,basic,full,detect)
   --with-isapnp=yes,no,auto  driver will (not) be compiled with ISA PnP support
   --with-sequencer=yes,no  driver will (not) be compiled with sequencer support
   --with-oss=no,yes       driver will (not) be compiled with OSS/Free emulation
@@ -823,22 +823,24 @@
                           cards may be separated with commas;
                           'all' compiles all drivers;
                           Possible cards are:
-                          dummy, virmidi, serial-u16550, mtpav, mpu401,
-                          als100, azt2320, cmi8330, dt019x, es18xx,
-                          opl3sa2, sgalaxy, sscape, ad1816a, ad1848,
-                          cs4231, cs4232, cs4236, pc98-cs4232, es1688,
-                          gusclassic, gusmax, gusextreme, interwave,
-                          interwave-stb, opti92x-ad1848, opti92x-cs4231,
-                          opti93x, sb8, sb16, sbawe, es968, wavefront,
-                          als4000, azt3328, bt87x, cmipci, cs4281, ens1370,
-                          ens1371, es1938, es1968, fm801, intel8x0,
-                          maestro3, rme32, rme96, sonicvibes, via82xx,
-                          ali5451, cs46xx, emu10k1, ice1712, ice1724,
-                          korg1212, mixart, nm256, rme9652, hdsp, trident,
-                          vx222, ymfpci, powermac, sa11xx-uda1341,
-                          usb-audio, harmony, vxpocket, vxp440, serialmidi,
-                          intel8x0m, hdspm, atiixp, pdplus, msnd-pinnacle,
-                          pdaudiocf, usb-usx2y, au8810, au8820, au8830
+                          seq-dummy, dummy, virmidi, mtpav, serial-u16550,
+                          mpu401, serialmidi, ad1816a, ad1848, cs4231,
+                          cs4232, cs4236, pc98-cs4232, es968, es1688,
+                          es18xx, gusclassic, gusextreme, gusmax,
+                          interwave, interwave-stb, opti92x-ad1848,
+                          opti92x-cs4231, opti93x, sb8, sb16, sbawe,
+                          wavefront, als100, azt2320, cmi8330, dt019x,
+                          opl3sa2, sgalaxy, sscape, msnd-pinnacle,
+                          ac97-codec, ali5451, atiixp, au8810, au8820,
+                          au8830, azt3328, bt87x, cs46xx, cs4281, emu10k1,
+                          korg1212, mixart, nm256, rme32, rme96, rme9652,
+                          hdsp, trident, ymfpci, als4000, cmipci, ens1370,
+                          ens1371, es1938, es1968, maestro3, fm801,
+                          fm801-tea575x, ice1712, ice1724, intel8x0,
+                          intel8x0m, sonicvibes, via82xx, vx222, pdplus,
+                          hdspm, powermac, sa11xx-uda1341, usb-audio,
+                          usb-usx2y, vxpocket, vxp440, pdaudiocf,
+                          sun-amd7930, sun-cs4231, harmony
 
 Some influential environment variables:
   CC          C compiler command
@@ -1255,7 +1257,7 @@
 
 
 
-CONFIG_SND_VERSION="1.0.3"
+CONFIG_SND_VERSION="1.0.4"
 
 ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
@@ -2981,6 +2983,137 @@
 echo "$as_me:$LINENO: result: $SRCDIR" >&5
 echo "${ECHO_T}$SRCDIR" >&6
 
+
+	CONFIG_SOUND=""
+	CONFIG_SND=""
+	CONFIG_SND_BIT32_EMUL=""
+	CONFIG_SPARC64=""
+	CONFIG_PPC64=""
+	CONFIG_X86_64=""
+	CONFIG_IA32_EMULATION=""
+	CONFIG_SND_TIMER=""
+	CONFIG_SND_PCM=""
+	CONFIG_SND_HWDEP=""
+	CONFIG_SND_RAWMIDI=""
+	CONFIG_SND_SEQUENCER=""
+	CONFIG_SND_SEQ_DUMMY=""
+	CONFIG_SND_OSSEMUL=""
+	CONFIG_SND_MIXER_OSS=""
+	CONFIG_SND_PCM_OSS=""
+	CONFIG_SND_SEQUENCER_OSS=""
+	CONFIG_SND_RTCTIMER=""
+	CONFIG_RTC=""
+	CONFIG_SND_VERBOSE_PRINTK=""
+	CONFIG_SND_DEBUG=""
+	CONFIG_SND_DEBUG_MEMORY=""
+	CONFIG_SND_DEBUG_DETECT=""
+	CONFIG_SND_MPU401_UART=""
+	CONFIG_SND_OPL3_LIB=""
+	CONFIG_SND_OPL4_LIB=""
+	CONFIG_SND_VX_LIB=""
+	CONFIG_SND_DUMMY=""
+	CONFIG_SND_VIRMIDI=""
+	CONFIG_SND_MTPAV=""
+	CONFIG_SND_SERIAL_U16550=""
+	CONFIG_SND_MPU401=""
+	CONFIG_SND_SERIALMIDI=""
+	CONFIG_ISA=""
+	CONFIG_SND_AD1816A=""
+	CONFIG_ISAPNP=""
+	CONFIG_SND_AD1848=""
+	CONFIG_SND_CS4231=""
+	CONFIG_SND_CS4232=""
+	CONFIG_SND_CS4236=""
+	CONFIG_SND_PC98_CS4232=""
+	CONFIG_X86_PC9800=""
+	CONFIG_SND_ES968=""
+	CONFIG_SND_ES1688=""
+	CONFIG_SND_ES18XX=""
+	CONFIG_SND_GUSCLASSIC=""
+	CONFIG_SND_GUSEXTREME=""
+	CONFIG_SND_GUSMAX=""
+	CONFIG_SND_INTERWAVE=""
+	CONFIG_SND_INTERWAVE_STB=""
+	CONFIG_SND_OPTI92X_AD1848=""
+	CONFIG_SND_OPTI92X_CS4231=""
+	CONFIG_SND_OPTI93X=""
+	CONFIG_SND_SB8=""
+	CONFIG_SND_SB16=""
+	CONFIG_SND_SBAWE=""
+	CONFIG_SND_SB16_CSP=""
+	CONFIG_SND_WAVEFRONT=""
+	CONFIG_SND_ALS100=""
+	CONFIG_SND_AZT2320=""
+	CONFIG_SND_CMI8330=""
+	CONFIG_SND_DT019X=""
+	CONFIG_SND_OPL3SA2=""
+	CONFIG_SND_SGALAXY=""
+	CONFIG_SND_SSCAPE=""
+	CONFIG_SND_MSND_PINNACLE=""
+	CONFIG_PCI=""
+	CONFIG_SND_AC97_CODEC=""
+	CONFIG_SND_ALI5451=""
+	CONFIG_SND_ATIIXP=""
+	CONFIG_SND_AU8810=""
+	CONFIG_SND_AU8820=""
+	CONFIG_SND_AU8830=""
+	CONFIG_SND_AZT3328=""
+	CONFIG_EXPERIMENTAL=""
+	CONFIG_SND_BT87X=""
+	CONFIG_SND_CS46XX=""
+	CONFIG_SND_CS46XX_NEW_DSP=""
+	CONFIG_SND_CS4281=""
+	CONFIG_SND_EMU10K1=""
+	CONFIG_SND_KORG1212=""
+	CONFIG_SND_MIXART=""
+	CONFIG_SND_NM256=""
+	CONFIG_SND_RME32=""
+	CONFIG_SND_RME96=""
+	CONFIG_SND_RME9652=""
+	CONFIG_SND_HDSP=""
+	CONFIG_SND_TRIDENT=""
+	CONFIG_SND_YMFPCI=""
+	CONFIG_SND_ALS4000=""
+	CONFIG_SND_CMIPCI=""
+	CONFIG_SND_ENS1370=""
+	CONFIG_SND_ENS1371=""
+	CONFIG_SND_ES1938=""
+	CONFIG_SND_ES1968=""
+	CONFIG_SND_MAESTRO3=""
+	CONFIG_SND_FM801=""
+	CONFIG_SND_FM801_TEA575X=""
+	CONFIG_VIDEO_DEV=""
+	CONFIG_SND_ICE1712=""
+	CONFIG_SND_ICE1724=""
+	CONFIG_SND_INTEL8X0=""
+	CONFIG_SND_INTEL8X0M=""
+	CONFIG_SND_SONICVIBES=""
+	CONFIG_SND_VIA82XX=""
+	CONFIG_SND_VX222=""
+	CONFIG_SND_PDPLUS=""
+	CONFIG_SND_HDSPM=""
+	CONFIG_PPC=""
+	CONFIG_SND_POWERMAC=""
+	CONFIG_ARM=""
+	CONFIG_SND_SA11XX_UDA1341=""
+	CONFIG_ARCH_SA1100=""
+	CONFIG_L3=""
+	CONFIG_USB=""
+	CONFIG_SND_USB_AUDIO=""
+	CONFIG_SND_USB_USX2Y=""
+	CONFIG_PCMCIA=""
+	CONFIG_SND_VXPOCKET=""
+	CONFIG_SND_VXP440=""
+	CONFIG_SND_PDAUDIOCF=""
+	CONFIG_SPARC32=""
+	CONFIG_SND_SUN_AMD7930=""
+	CONFIG_SBUS=""
+	CONFIG_SND_SUN_CS4231=""
+	CONFIG_PARISC=""
+	CONFIG_SND_HARMONY=""
+	CONFIG_SOUND_PRIME=""
+
+
 echo "$as_me:$LINENO: checking cross compile" >&5
 echo $ECHO_N "checking cross compile... $ECHO_C" >&6
 
@@ -3163,6 +3296,7 @@
 
 #include <stdio.h>
 #include <ctype.h>
+#include <string.h>
 #include "$CONFIG_SND_KERNELDIR/include/linux/compile.h"
 int main()
 {
@@ -3185,6 +3319,8 @@
      *dptr = *ptr;
    *dptr = '\t';
    *dptr = '\0';
+   if (!strcmp(compiler, " "))
+	compiler[0] = '\0';
    fprintf(f,"%s\n",compiler);
    fclose(f);
    }
@@ -3873,6 +4009,34 @@
   fi
 fi
 
+  echo "$as_me:$LINENO: checking for kernel linux/dma-mapping.h" >&5
+echo $ECHO_N "checking for kernel linux/dma-mapping.h... $ECHO_C" >&6
+  if test -f "$CONFIG_SND_KERNELDIR/include/linux/dma-mapping.h"; then
+    echo "$as_me:$LINENO: result: \"yes\"" >&5
+echo "${ECHO_T}\"yes\"" >&6
+    if test -f include/linux/dma-mapping.h; then
+      echo "Removing a dummy linux/dma-mapping.h."
+      rm -f include/linux/dma-mapping.h
+    fi
+  else
+    echo "$as_me:$LINENO: result: \"no\"" >&5
+echo "${ECHO_T}\"no\"" >&6
+    if test ! -f include/linux/dma-mapping.h; then
+      if test -z "" ; then
+        echo "Creating a dummy <linux/dma-mapping.h>..."
+        mkdir -p include/linux
+        mkdir -p include/asm
+        touch include/linux/dma-mapping.h
+      else
+        echo "Creating <linux/dma-mapping.h>..."
+        mkdir -p include/linux
+        mkdir -p include/asm
+        echo "" > include/linux/dma-mapping.h
+      fi
+    fi
+  fi
+
+
   echo "$as_me:$LINENO: checking for kernel asm/hw_irq.h" >&5
 echo $ECHO_N "checking for kernel asm/hw_irq.h... $ECHO_C" >&6
   if test -f "$CONFIG_SND_KERNELDIR/include/asm/hw_irq.h"; then
@@ -4225,6 +4389,65 @@
 
 
 
+
+  boolvar="CONFIG_EXPERIMENTAL"
+  boolvar1="CONFIG_EXPERIMENTAL_MODULE"
+  echo "$as_me:$LINENO: checking for Experimental drivers in kernel" >&5
+echo $ECHO_N "checking for Experimental drivers in kernel... $ECHO_C" >&6
+  ac_save_CFLAGS="$CFLAGS"
+  CFLAGS="$CFLAGS $KERNEL_INC $HACK_KERNEL_INC"
+  boolchk=""
+  if test "$cross_compiling" = yes; then
+  echo "$as_me:$LINENO: result: \"unknown\"" >&5
+echo "${ECHO_T}\"unknown\"" >&6;boolchk=""
+
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+#include "$CONFIG_SND_KERNELDIR/include/linux/autoconf.h"
+int main( void ) {
+#if !defined($boolvar) && !defined($boolvar1)
+  exit(1);
+#else
+  exit(0);
+#endif
+}
+
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  echo "$as_me:$LINENO: result: \"yes\"" >&5
+echo "${ECHO_T}\"yes\"" >&6;boolchk="y"
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+echo "$as_me:$LINENO: result: \"no\"" >&5
+echo "${ECHO_T}\"no\"" >&6;boolchk=""
+fi
+rm -f core core.* *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+  CFLAGS="$ac_save_CFLAGS"
+  eval $boolvar="$boolchk"
+
+
+
 echo "$as_me:$LINENO: checking for SGI/MIPS (HAL2) architecture" >&5
 echo $ECHO_N "checking for SGI/MIPS (HAL2) architecture... $ECHO_C" >&6
 CONFIG_SGI=""
@@ -4282,6 +4505,7 @@
 fi;
 case "$verbose_printk" in
   yes)
+    CONFIG_SND_VERBOSE_PRINTK=y
     cat >>confdefs.h <<\_ACEOF
 #define CONFIG_SND_VERBOSE_PRINTK 1
 _ACEOF
@@ -4310,54 +4534,40 @@
   basic)
     echo "$as_me:$LINENO: result: basic" >&5
 echo "${ECHO_T}basic" >&6
+    CONFIG_SND_DEBUG=y
     cat >>confdefs.h <<\_ACEOF
 #define CONFIG_SND_DEBUG 1
 _ACEOF
 
     ;;
-  memory)
-    echo "$as_me:$LINENO: result: memory" >&5
-echo "${ECHO_T}memory" >&6
-    cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_DEBUG 1
-_ACEOF
-
-    cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_DEBUG_MEMORY 1
-_ACEOF
-
-    ;;
-  full)
+  memory|full)
     echo "$as_me:$LINENO: result: full" >&5
 echo "${ECHO_T}full" >&6
+    CONFIG_SND_DEBUG=y
     cat >>confdefs.h <<\_ACEOF
 #define CONFIG_SND_DEBUG 1
 _ACEOF
 
+    CONFIG_SND_DEBUG_MEMORY=y
     cat >>confdefs.h <<\_ACEOF
 #define CONFIG_SND_DEBUG_MEMORY 1
 _ACEOF
 
-    cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_DEBUG_FULL 1
-_ACEOF
-
     ;;
   detect)
     echo "$as_me:$LINENO: result: detect" >&5
 echo "${ECHO_T}detect" >&6
+    CONFIG_SND_DEBUG=y
     cat >>confdefs.h <<\_ACEOF
 #define CONFIG_SND_DEBUG 1
 _ACEOF
 
+    CONFIG_SND_DEBUG_MEMORY=y
     cat >>confdefs.h <<\_ACEOF
 #define CONFIG_SND_DEBUG_MEMORY 1
 _ACEOF
 
-    cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_DEBUG_FULL 1
-_ACEOF
-
+    CONFIG_SND_DEBUG_DETECT=y
     cat >>confdefs.h <<\_ACEOF
 #define CONFIG_SND_DEBUG_DETECT 1
 _ACEOF
@@ -4925,6 +5135,7 @@
 fi
 
 
+if test $kpatchlevel -gt 2; then
 
   boolvar="CONFIG_VIDEO_DEV"
   boolvar1="CONFIG_VIDEO_DEV_MODULE"
@@ -4983,6 +5194,7 @@
   eval $boolvar="$boolchk"
 
 
+fi
 
 echo "$as_me:$LINENO: checking for ISA PnP driver in kernel" >&5
 echo $ECHO_N "checking for ISA PnP driver in kernel... $ECHO_C" >&6
@@ -5983,7 +6195,6 @@
 if test "$ossemul" = "yes"; then
   CONFIG_SND_OSSEMUL="y"
 fi
-
 if test "$CONFIG_SND_OSSEMUL" = "y"; then
   cat >>confdefs.h <<\_ACEOF
 #define CONFIG_SND_OSSEMUL 1
@@ -6415,87 +6626,6 @@
 
 
 
-	CONFIG_SND_DUMMY=""
-	CONFIG_SND_VIRMIDI=""
-	CONFIG_SND_SERIAL_U16550=""
-	CONFIG_SND_MTPAV=""
-	CONFIG_SND_MPU401=""
-	CONFIG_SND_ALS100=""
-	CONFIG_SND_AZT2320=""
-	CONFIG_SND_CMI8330=""
-	CONFIG_SND_DT019X=""
-	CONFIG_SND_ES18XX=""
-	CONFIG_SND_OPL3SA2=""
-	CONFIG_SND_SGALAXY=""
-	CONFIG_SND_SSCAPE=""
-	CONFIG_SND_AD1816A=""
-	CONFIG_SND_AD1848=""
-	CONFIG_SND_CS4231=""
-	CONFIG_SND_CS4232=""
-	CONFIG_SND_CS4236=""
-	CONFIG_SND_PC98_CS4232=""
-	CONFIG_SND_ES1688=""
-	CONFIG_SND_GUSCLASSIC=""
-	CONFIG_SND_GUSMAX=""
-	CONFIG_SND_GUSEXTREME=""
-	CONFIG_SND_INTERWAVE=""
-	CONFIG_SND_INTERWAVE_STB=""
-	CONFIG_SND_OPTI92X_AD1848=""
-	CONFIG_SND_OPTI92X_CS4231=""
-	CONFIG_SND_OPTI93X=""
-	CONFIG_SND_SB8=""
-	CONFIG_SND_SB16=""
-	CONFIG_SND_SBAWE=""
-	CONFIG_SND_ES968=""
-	CONFIG_SND_WAVEFRONT=""
-	CONFIG_SND_ALS4000=""
-	CONFIG_SND_AZT3328=""
-	CONFIG_SND_BT87X=""
-	CONFIG_SND_CMIPCI=""
-	CONFIG_SND_CS4281=""
-	CONFIG_SND_ENS1370=""
-	CONFIG_SND_ENS1371=""
-	CONFIG_SND_ES1938=""
-	CONFIG_SND_ES1968=""
-	CONFIG_SND_FM801=""
-	CONFIG_SND_INTEL8X0=""
-	CONFIG_SND_MAESTRO3=""
-	CONFIG_SND_RME32=""
-	CONFIG_SND_RME96=""
-	CONFIG_SND_SONICVIBES=""
-	CONFIG_SND_VIA82XX=""
-	CONFIG_SND_ALI5451=""
-	CONFIG_SND_CS46XX=""
-	CONFIG_SND_EMU10K1=""
-	CONFIG_SND_ICE1712=""
-	CONFIG_SND_ICE1724=""
-	CONFIG_SND_KORG1212=""
-	CONFIG_SND_MIXART=""
-	CONFIG_SND_NM256=""
-	CONFIG_SND_RME9652=""
-	CONFIG_SND_HDSP=""
-	CONFIG_SND_TRIDENT=""
-	CONFIG_SND_VX222=""
-	CONFIG_SND_YMFPCI=""
-	CONFIG_SND_POWERMAC=""
-	CONFIG_SND_SA11XX_UDA1341=""
-	CONFIG_SND_USB_AUDIO=""
-	CONFIG_SND_HARMONY=""
-	CONFIG_SND_VXPOCKET=""
-	CONFIG_SND_VXP440=""
-	CONFIG_SND_SERIALMIDI=""
-	CONFIG_SND_INTEL8X0M=""
-	CONFIG_SND_HDSPM=""
-	CONFIG_SND_ATIIXP=""
-	CONFIG_SND_PDPLUS=""
-	CONFIG_SND_MSND_PINNACLE=""
-	CONFIG_SND_PDAUDIOCF=""
-	CONFIG_SND_USB_USX2Y=""
-	CONFIG_SND_AU8810=""
-	CONFIG_SND_AU8820=""
-	CONFIG_SND_AU8830=""
-
-
 echo "$as_me:$LINENO: checking for which soundcards to compile driver for" >&5
 echo $ECHO_N "checking for which soundcards to compile driver for... $ECHO_C" >&6
 
@@ -6508,544 +6638,664 @@
 fi;
 if test "$cards" = "all"; then
 
-	CONFIG_SND_DUMMY="m"
+	CONFIG_SND="m"
 	cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_DUMMY_MODULE 1
+#define CONFIG_SND_MODULE 1
 _ACEOF
 
-	CONFIG_SND_VIRMIDI="m"
+	CONFIG_SND_TIMER="m"
 	cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_VIRMIDI_MODULE 1
+#define CONFIG_SND_TIMER_MODULE 1
 _ACEOF
 
-	CONFIG_SND_SERIAL_U16550="m"
+	CONFIG_SND_PCM="m"
 	cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_SERIAL_U16550_MODULE 1
+#define CONFIG_SND_PCM_MODULE 1
 _ACEOF
 
-	CONFIG_SND_MTPAV="m"
+	CONFIG_SND_HWDEP="m"
 	cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_MTPAV_MODULE 1
+#define CONFIG_SND_HWDEP_MODULE 1
 _ACEOF
 
-	CONFIG_SND_MPU401="m"
+	CONFIG_SND_RAWMIDI="m"
 	cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_MPU401_MODULE 1
+#define CONFIG_SND_RAWMIDI_MODULE 1
 _ACEOF
 
-	if test "$CONFIG_ISAPNP" = "y"; then
-	CONFIG_SND_ALS100="m"
+	CONFIG_SND_MPU401_UART="m"
 	cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_ALS100_MODULE 1
+#define CONFIG_SND_MPU401_UART_MODULE 1
 _ACEOF
 
-	fi
-	if test "$CONFIG_ISAPNP" = "y"; then
-	CONFIG_SND_AZT2320="m"
+	CONFIG_SND_OPL3_LIB="m"
 	cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_AZT2320_MODULE 1
+#define CONFIG_SND_OPL3_LIB_MODULE 1
 _ACEOF
 
-	fi
-	if test "$CONFIG_ISA" = "y"; then
-	CONFIG_SND_CMI8330="m"
+	CONFIG_SND_OPL4_LIB="m"
 	cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_CMI8330_MODULE 1
+#define CONFIG_SND_OPL4_LIB_MODULE 1
 _ACEOF
 
-	fi
-	if test "$CONFIG_ISAPNP" = "y"; then
-	CONFIG_SND_DT019X="m"
+	CONFIG_SND_VX_LIB="m"
 	cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_DT019X_MODULE 1
+#define CONFIG_SND_VX_LIB_MODULE 1
+_ACEOF
+
+	if ( test "$CONFIG_SND_SEQUENCER" == "y" -o "$CONFIG_SND_SEQUENCER" == "m" ); then
+	  CONFIG_SND_SEQ_DUMMY="m"
+	  cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_SEQ_DUMMY_MODULE 1
 _ACEOF
 
 	fi
-	if test "$CONFIG_ISA" = "y"; then
-	CONFIG_SND_ES18XX="m"
+	CONFIG_SND_DUMMY="m"
 	cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_ES18XX_MODULE 1
+#define CONFIG_SND_DUMMY_MODULE 1
+_ACEOF
+
+	if ( test "$CONFIG_SND_SEQUENCER" == "y" -o "$CONFIG_SND_SEQUENCER" == "m" ); then
+	  CONFIG_SND_VIRMIDI="m"
+	  cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_VIRMIDI_MODULE 1
 _ACEOF
 
 	fi
-	if test "$CONFIG_ISA" = "y"; then
-	CONFIG_SND_OPL3SA2="m"
+	CONFIG_SND_MTPAV="m"
 	cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_OPL3SA2_MODULE 1
+#define CONFIG_SND_MTPAV_MODULE 1
 _ACEOF
 
-	fi
-	if test "$CONFIG_ISA" = "y"; then
-	CONFIG_SND_SGALAXY="m"
+	CONFIG_SND_SERIAL_U16550="m"
 	cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_SGALAXY_MODULE 1
+#define CONFIG_SND_SERIAL_U16550_MODULE 1
 _ACEOF
 
-	fi
-	if test "$CONFIG_ISA" = "y"; then
-	CONFIG_SND_SSCAPE="m"
+	CONFIG_SND_MPU401="m"
 	cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_SSCAPE_MODULE 1
+#define CONFIG_SND_MPU401_MODULE 1
 _ACEOF
 
-	fi
-	if test "$CONFIG_ISAPNP" = "y"; then
-	CONFIG_SND_AD1816A="m"
+	CONFIG_SND_SERIALMIDI="m"
 	cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_SERIALMIDI_MODULE 1
+_ACEOF
+
+	if ( test "$CONFIG_ISA" == "y" -o "$CONFIG_ISA" == "m" ) &&
+	   ( test "$CONFIG_ISAPNP" == "y" -o "$CONFIG_ISAPNP" == "m" ); then
+	  CONFIG_SND_AD1816A="m"
+	  cat >>confdefs.h <<\_ACEOF
 #define CONFIG_SND_AD1816A_MODULE 1
 _ACEOF
 
 	fi
-	if test "$CONFIG_ISA" = "y"; then
-	CONFIG_SND_AD1848="m"
-	cat >>confdefs.h <<\_ACEOF
+	if ( test "$CONFIG_ISA" == "y" -o "$CONFIG_ISA" == "m" ); then
+	  CONFIG_SND_AD1848="m"
+	  cat >>confdefs.h <<\_ACEOF
 #define CONFIG_SND_AD1848_MODULE 1
 _ACEOF
 
 	fi
-	if test "$CONFIG_ISA" = "y"; then
-	CONFIG_SND_CS4231="m"
-	cat >>confdefs.h <<\_ACEOF
+	if ( test "$CONFIG_ISA" == "y" -o "$CONFIG_ISA" == "m" ); then
+	  CONFIG_SND_CS4231="m"
+	  cat >>confdefs.h <<\_ACEOF
 #define CONFIG_SND_CS4231_MODULE 1
 _ACEOF
 
 	fi
-	if test "$CONFIG_ISA" = "y"; then
-	CONFIG_SND_CS4232="m"
-	cat >>confdefs.h <<\_ACEOF
+	if ( test "$CONFIG_ISA" == "y" -o "$CONFIG_ISA" == "m" ); then
+	  CONFIG_SND_CS4232="m"
+	  cat >>confdefs.h <<\_ACEOF
 #define CONFIG_SND_CS4232_MODULE 1
 _ACEOF
 
 	fi
-	if test "$CONFIG_ISA" = "y"; then
-	CONFIG_SND_CS4236="m"
-	cat >>confdefs.h <<\_ACEOF
+	if ( test "$CONFIG_ISA" == "y" -o "$CONFIG_ISA" == "m" ); then
+	  CONFIG_SND_CS4236="m"
+	  cat >>confdefs.h <<\_ACEOF
 #define CONFIG_SND_CS4236_MODULE 1
 _ACEOF
 
 	fi
-	if test "$CONFIG_X86_PC9800" = "y"; then
-	CONFIG_SND_PC98_CS4232="m"
-	cat >>confdefs.h <<\_ACEOF
+	if ( test "$CONFIG_ISA" == "y" -o "$CONFIG_ISA" == "m" ) &&
+	   ( test "$CONFIG_X86_PC9800" == "y" -o "$CONFIG_X86_PC9800" == "m" ); then
+	  CONFIG_SND_PC98_CS4232="m"
+	  cat >>confdefs.h <<\_ACEOF
 #define CONFIG_SND_PC98_CS4232_MODULE 1
 _ACEOF
 
 	fi
-	if test "$CONFIG_ISA" = "y"; then
-	CONFIG_SND_ES1688="m"
+	CONFIG_X86_PC9800="m"
 	cat >>confdefs.h <<\_ACEOF
+#define CONFIG_X86_PC9800_MODULE 1
+_ACEOF
+
+	if ( test "$CONFIG_ISA" == "y" -o "$CONFIG_ISA" == "m" ) &&
+	   ( test "$CONFIG_ISAPNP" == "y" -o "$CONFIG_ISAPNP" == "m" ); then
+	  CONFIG_SND_ES968="m"
+	  cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_ES968_MODULE 1
+_ACEOF
+
+	fi
+	if ( test "$CONFIG_ISA" == "y" -o "$CONFIG_ISA" == "m" ); then
+	  CONFIG_SND_ES1688="m"
+	  cat >>confdefs.h <<\_ACEOF
 #define CONFIG_SND_ES1688_MODULE 1
 _ACEOF
 
 	fi
-	if test "$CONFIG_ISA" = "y"; then
-	CONFIG_SND_GUSCLASSIC="m"
-	cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_GUSCLASSIC_MODULE 1
+	if ( test "$CONFIG_ISA" == "y" -o "$CONFIG_ISA" == "m" ); then
+	  CONFIG_SND_ES18XX="m"
+	  cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_ES18XX_MODULE 1
 _ACEOF
 
 	fi
-	if test "$CONFIG_ISA" = "y"; then
-	CONFIG_SND_GUSMAX="m"
-	cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_GUSMAX_MODULE 1
+	if ( test "$CONFIG_ISA" == "y" -o "$CONFIG_ISA" == "m" ); then
+	  CONFIG_SND_GUSCLASSIC="m"
+	  cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_GUSCLASSIC_MODULE 1
 _ACEOF
 
 	fi
-	if test "$CONFIG_ISA" = "y"; then
-	CONFIG_SND_GUSEXTREME="m"
-	cat >>confdefs.h <<\_ACEOF
+	if ( test "$CONFIG_ISA" == "y" -o "$CONFIG_ISA" == "m" ); then
+	  CONFIG_SND_GUSEXTREME="m"
+	  cat >>confdefs.h <<\_ACEOF
 #define CONFIG_SND_GUSEXTREME_MODULE 1
 _ACEOF
 
 	fi
-	if test "$CONFIG_ISA" = "y"; then
-	CONFIG_SND_INTERWAVE="m"
-	cat >>confdefs.h <<\_ACEOF
+	if ( test "$CONFIG_ISA" == "y" -o "$CONFIG_ISA" == "m" ); then
+	  CONFIG_SND_GUSMAX="m"
+	  cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_GUSMAX_MODULE 1
+_ACEOF
+
+	fi
+	if ( test "$CONFIG_ISA" == "y" -o "$CONFIG_ISA" == "m" ); then
+	  CONFIG_SND_INTERWAVE="m"
+	  cat >>confdefs.h <<\_ACEOF
 #define CONFIG_SND_INTERWAVE_MODULE 1
 _ACEOF
 
 	fi
-	if test "$CONFIG_ISA" = "y"; then
-	CONFIG_SND_INTERWAVE_STB="m"
-	cat >>confdefs.h <<\_ACEOF
+	if ( test "$CONFIG_ISA" == "y" -o "$CONFIG_ISA" == "m" ); then
+	  CONFIG_SND_INTERWAVE_STB="m"
+	  cat >>confdefs.h <<\_ACEOF
 #define CONFIG_SND_INTERWAVE_STB_MODULE 1
 _ACEOF
 
 	fi
-	if test "$CONFIG_ISA" = "y"; then
-	CONFIG_SND_OPTI92X_AD1848="m"
-	cat >>confdefs.h <<\_ACEOF
+	if ( test "$CONFIG_ISA" == "y" -o "$CONFIG_ISA" == "m" ); then
+	  CONFIG_SND_OPTI92X_AD1848="m"
+	  cat >>confdefs.h <<\_ACEOF
 #define CONFIG_SND_OPTI92X_AD1848_MODULE 1
 _ACEOF
 
 	fi
-	if test "$CONFIG_ISA" = "y"; then
-	CONFIG_SND_OPTI92X_CS4231="m"
-	cat >>confdefs.h <<\_ACEOF
+	if ( test "$CONFIG_ISA" == "y" -o "$CONFIG_ISA" == "m" ); then
+	  CONFIG_SND_OPTI92X_CS4231="m"
+	  cat >>confdefs.h <<\_ACEOF
 #define CONFIG_SND_OPTI92X_CS4231_MODULE 1
 _ACEOF
 
 	fi
-	if test "$CONFIG_ISA" = "y"; then
-	CONFIG_SND_OPTI93X="m"
-	cat >>confdefs.h <<\_ACEOF
+	if ( test "$CONFIG_ISA" == "y" -o "$CONFIG_ISA" == "m" ); then
+	  CONFIG_SND_OPTI93X="m"
+	  cat >>confdefs.h <<\_ACEOF
 #define CONFIG_SND_OPTI93X_MODULE 1
 _ACEOF
 
 	fi
-	if test "$CONFIG_ISA" = "y"; then
-	CONFIG_SND_SB8="m"
-	cat >>confdefs.h <<\_ACEOF
+	if ( test "$CONFIG_ISA" == "y" -o "$CONFIG_ISA" == "m" ); then
+	  CONFIG_SND_SB8="m"
+	  cat >>confdefs.h <<\_ACEOF
 #define CONFIG_SND_SB8_MODULE 1
 _ACEOF
 
 	fi
-	if test "$CONFIG_ISA" = "y"; then
-	CONFIG_SND_SB16="m"
-	cat >>confdefs.h <<\_ACEOF
+	if ( test "$CONFIG_ISA" == "y" -o "$CONFIG_ISA" == "m" ); then
+	  CONFIG_SND_SB16="m"
+	  cat >>confdefs.h <<\_ACEOF
 #define CONFIG_SND_SB16_MODULE 1
 _ACEOF
 
 	fi
-	if test "$CONFIG_ISA" = "y"; then
-	CONFIG_SND_SBAWE="m"
-	cat >>confdefs.h <<\_ACEOF
+	if ( test "$CONFIG_ISA" == "y" -o "$CONFIG_ISA" == "m" ); then
+	  CONFIG_SND_SBAWE="m"
+	  cat >>confdefs.h <<\_ACEOF
 #define CONFIG_SND_SBAWE_MODULE 1
 _ACEOF
 
 	fi
-	if test "$CONFIG_ISAPNP" = "y"; then
-	CONFIG_SND_ES968="m"
-	cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_ES968_MODULE 1
+	if ( test "$CONFIG_ISA" == "y" -o "$CONFIG_ISA" == "m" ) &&
+	   ( test "$CONFIG_SND_SB16" == "y" -o "$CONFIG_SND_SB16" == "m" ) ||
+	   ( test "$CONFIG_SND_SBAWE" == "y" -o "$CONFIG_SND_SBAWE" == "m" ); then
+	  CONFIG_SND_SB16_CSP="y"
+	  cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_SB16_CSP 1
 _ACEOF
 
 	fi
-	if test "$CONFIG_ISA" = "y"; then
-	CONFIG_SND_WAVEFRONT="m"
-	cat >>confdefs.h <<\_ACEOF
+	if ( test "$CONFIG_ISA" == "y" -o "$CONFIG_ISA" == "m" ); then
+	  CONFIG_SND_WAVEFRONT="m"
+	  cat >>confdefs.h <<\_ACEOF
 #define CONFIG_SND_WAVEFRONT_MODULE 1
 _ACEOF
 
 	fi
-	if test "$CONFIG_PCI" = "y"; then
-	CONFIG_SND_ALS4000="m"
-	cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_ALS4000_MODULE 1
+	if ( test "$CONFIG_ISA" == "y" -o "$CONFIG_ISA" == "m" ) &&
+	   ( test "$CONFIG_ISAPNP" == "y" -o "$CONFIG_ISAPNP" == "m" ); then
+	  CONFIG_SND_ALS100="m"
+	  cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_ALS100_MODULE 1
 _ACEOF
 
 	fi
-	if test "$CONFIG_PCI" = "y"; then
-	CONFIG_SND_AZT3328="m"
-	cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_AZT3328_MODULE 1
+	if ( test "$CONFIG_ISA" == "y" -o "$CONFIG_ISA" == "m" ) &&
+	   ( test "$CONFIG_ISAPNP" == "y" -o "$CONFIG_ISAPNP" == "m" ); then
+	  CONFIG_SND_AZT2320="m"
+	  cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_AZT2320_MODULE 1
 _ACEOF
 
 	fi
-	if test "$CONFIG_PCI" = "y"; then
-	CONFIG_SND_BT87X="m"
-	cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_BT87X_MODULE 1
+	if ( test "$CONFIG_ISA" == "y" -o "$CONFIG_ISA" == "m" ); then
+	  CONFIG_SND_CMI8330="m"
+	  cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_CMI8330_MODULE 1
 _ACEOF
 
 	fi
-	if test "$CONFIG_PCI" = "y"; then
-	CONFIG_SND_CMIPCI="m"
-	cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_CMIPCI_MODULE 1
+	if ( test "$CONFIG_ISA" == "y" -o "$CONFIG_ISA" == "m" ) &&
+	   ( test "$CONFIG_ISAPNP" == "y" -o "$CONFIG_ISAPNP" == "m" ); then
+	  CONFIG_SND_DT019X="m"
+	  cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_DT019X_MODULE 1
 _ACEOF
 
 	fi
-	if test "$CONFIG_PCI" = "y"; then
-	CONFIG_SND_CS4281="m"
-	cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_CS4281_MODULE 1
+	if ( test "$CONFIG_ISA" == "y" -o "$CONFIG_ISA" == "m" ); then
+	  CONFIG_SND_OPL3SA2="m"
+	  cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_OPL3SA2_MODULE 1
 _ACEOF
 
 	fi
-	if test "$CONFIG_PCI" = "y"; then
-	CONFIG_SND_ENS1370="m"
-	cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_ENS1370_MODULE 1
+	if ( test "$CONFIG_ISA" == "y" -o "$CONFIG_ISA" == "m" ); then
+	  CONFIG_SND_SGALAXY="m"
+	  cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_SGALAXY_MODULE 1
 _ACEOF
 
 	fi
-	if test "$CONFIG_PCI" = "y"; then
-	CONFIG_SND_ENS1371="m"
-	cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_ENS1371_MODULE 1
+	if ( test "$CONFIG_ISA" == "y" -o "$CONFIG_ISA" == "m" ); then
+	  CONFIG_SND_SSCAPE="m"
+	  cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_SSCAPE_MODULE 1
 _ACEOF
 
 	fi
-	if test "$CONFIG_PCI" = "y"; then
-	CONFIG_SND_ES1938="m"
-	cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_ES1938_MODULE 1
+	if ( test "$CONFIG_ISA" == "y" -o "$CONFIG_ISA" == "m" ); then
+	  CONFIG_SND_MSND_PINNACLE="m"
+	  cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_MSND_PINNACLE_MODULE 1
 _ACEOF
 
 	fi
-	if test "$CONFIG_PCI" = "y"; then
-	CONFIG_SND_ES1968="m"
+	CONFIG_SND_AC97_CODEC="m"
 	cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_ES1968_MODULE 1
+#define CONFIG_SND_AC97_CODEC_MODULE 1
+_ACEOF
+
+	if ( test "$CONFIG_PCI" == "y" -o "$CONFIG_PCI" == "m" ); then
+	  CONFIG_SND_ALI5451="m"
+	  cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_ALI5451_MODULE 1
 _ACEOF
 
 	fi
-	if test "$CONFIG_PCI" = "y"; then
-	CONFIG_SND_FM801="m"
-	cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_FM801_MODULE 1
+	if ( test "$CONFIG_PCI" == "y" -o "$CONFIG_PCI" == "m" ); then
+	  CONFIG_SND_ATIIXP="m"
+	  cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_ATIIXP_MODULE 1
 _ACEOF
 
 	fi
-	if test "$CONFIG_PCI" = "y"; then
-	CONFIG_SND_INTEL8X0="m"
-	cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_INTEL8X0_MODULE 1
+	if ( test "$CONFIG_PCI" == "y" -o "$CONFIG_PCI" == "m" ); then
+	  CONFIG_SND_AU8810="m"
+	  cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_AU8810_MODULE 1
 _ACEOF
 
 	fi
-	if test "$CONFIG_PCI" = "y"; then
-	CONFIG_SND_MAESTRO3="m"
-	cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_MAESTRO3_MODULE 1
+	if ( test "$CONFIG_PCI" == "y" -o "$CONFIG_PCI" == "m" ); then
+	  CONFIG_SND_AU8820="m"
+	  cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_AU8820_MODULE 1
 _ACEOF
 
 	fi
-	if test "$CONFIG_PCI" = "y"; then
-	CONFIG_SND_RME32="m"
-	cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_RME32_MODULE 1
+	if ( test "$CONFIG_PCI" == "y" -o "$CONFIG_PCI" == "m" ); then
+	  CONFIG_SND_AU8830="m"
+	  cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_AU8830_MODULE 1
 _ACEOF
 
 	fi
-	if test "$CONFIG_PCI" = "y"; then
-	CONFIG_SND_RME96="m"
-	cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_RME96_MODULE 1
+	if ( test "$CONFIG_PCI" == "y" -o "$CONFIG_PCI" == "m" ) &&
+	   ( test "$CONFIG_EXPERIMENTAL" == "y" -o "$CONFIG_EXPERIMENTAL" == "m" ); then
+	  CONFIG_SND_AZT3328="m"
+	  cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_AZT3328_MODULE 1
 _ACEOF
 
 	fi
-	if test "$CONFIG_PCI" = "y"; then
-	CONFIG_SND_SONICVIBES="m"
-	cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_SONICVIBES_MODULE 1
+	if ( test "$CONFIG_PCI" == "y" -o "$CONFIG_PCI" == "m" ); then
+	  CONFIG_SND_BT87X="m"
+	  cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_BT87X_MODULE 1
 _ACEOF
 
 	fi
-	if test "$CONFIG_PCI" = "y"; then
-	CONFIG_SND_VIA82XX="m"
-	cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_VIA82XX_MODULE 1
+	if ( test "$CONFIG_PCI" == "y" -o "$CONFIG_PCI" == "m" ); then
+	  CONFIG_SND_CS46XX="m"
+	  cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_CS46XX_MODULE 1
 _ACEOF
 
 	fi
-	if test "$CONFIG_PCI" = "y"; then
-	CONFIG_SND_ALI5451="m"
-	cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_ALI5451_MODULE 1
+	if ( test "$CONFIG_PCI" == "y" -o "$CONFIG_PCI" == "m" ) &&
+	   ( test "$CONFIG_SND_CS46XX" == "y" -o "$CONFIG_SND_CS46XX" == "m" ) &&
+	   ( test "$CONFIG_EXPERIMENTAL" == "y" -o "$CONFIG_EXPERIMENTAL" == "m" ); then
+	  CONFIG_SND_CS46XX_NEW_DSP="y"
+	  cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_CS46XX_NEW_DSP 1
 _ACEOF
 
 	fi
-	if test "$CONFIG_PCI" = "y"; then
-	CONFIG_SND_CS46XX="m"
-	cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_CS46XX_MODULE 1
+	if ( test "$CONFIG_PCI" == "y" -o "$CONFIG_PCI" == "m" ); then
+	  CONFIG_SND_CS4281="m"
+	  cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_CS4281_MODULE 1
 _ACEOF
 
 	fi
-	if test "$CONFIG_PCI" = "y"; then
-	CONFIG_SND_EMU10K1="m"
-	cat >>confdefs.h <<\_ACEOF
+	if ( test "$CONFIG_PCI" == "y" -o "$CONFIG_PCI" == "m" ); then
+	  CONFIG_SND_EMU10K1="m"
+	  cat >>confdefs.h <<\_ACEOF
 #define CONFIG_SND_EMU10K1_MODULE 1
 _ACEOF
 
 	fi
-	if test "$CONFIG_PCI" = "y"; then
-	CONFIG_SND_ICE1712="m"
-	cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_ICE1712_MODULE 1
+	if ( test "$CONFIG_PCI" == "y" -o "$CONFIG_PCI" == "m" ); then
+	  CONFIG_SND_KORG1212="m"
+	  cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_KORG1212_MODULE 1
 _ACEOF
 
 	fi
-	if test "$CONFIG_PCI" = "y"; then
-	CONFIG_SND_ICE1724="m"
-	cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_ICE1724_MODULE 1
+	if ( test "$CONFIG_PCI" == "y" -o "$CONFIG_PCI" == "m" ); then
+	  CONFIG_SND_MIXART="m"
+	  cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_MIXART_MODULE 1
 _ACEOF
 
 	fi
-	if test "$CONFIG_PCI" = "y"; then
-	CONFIG_SND_KORG1212="m"
-	cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_KORG1212_MODULE 1
+	if ( test "$CONFIG_PCI" == "y" -o "$CONFIG_PCI" == "m" ); then
+	  CONFIG_SND_NM256="m"
+	  cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_NM256_MODULE 1
 _ACEOF
 
 	fi
-	if test "$CONFIG_PCI" = "y"; then
-	CONFIG_SND_MIXART="m"
-	cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_MIXART_MODULE 1
+	if ( test "$CONFIG_PCI" == "y" -o "$CONFIG_PCI" == "m" ); then
+	  CONFIG_SND_RME32="m"
+	  cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_RME32_MODULE 1
 _ACEOF
 
 	fi
-	if test "$CONFIG_PCI" = "y"; then
-	CONFIG_SND_NM256="m"
-	cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_NM256_MODULE 1
+	if ( test "$CONFIG_PCI" == "y" -o "$CONFIG_PCI" == "m" ); then
+	  CONFIG_SND_RME96="m"
+	  cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_RME96_MODULE 1
 _ACEOF
 
 	fi
-	if test "$CONFIG_PCI" = "y"; then
-	CONFIG_SND_RME9652="m"
-	cat >>confdefs.h <<\_ACEOF
+	if ( test "$CONFIG_PCI" == "y" -o "$CONFIG_PCI" == "m" ); then
+	  CONFIG_SND_RME9652="m"
+	  cat >>confdefs.h <<\_ACEOF
 #define CONFIG_SND_RME9652_MODULE 1
 _ACEOF
 
 	fi
-	if test "$CONFIG_PCI" = "y"; then
-	CONFIG_SND_HDSP="m"
-	cat >>confdefs.h <<\_ACEOF
+	if ( test "$CONFIG_PCI" == "y" -o "$CONFIG_PCI" == "m" ); then
+	  CONFIG_SND_HDSP="m"
+	  cat >>confdefs.h <<\_ACEOF
 #define CONFIG_SND_HDSP_MODULE 1
 _ACEOF
 
 	fi
-	if test "$CONFIG_PCI" = "y"; then
-	CONFIG_SND_TRIDENT="m"
-	cat >>confdefs.h <<\_ACEOF
+	if ( test "$CONFIG_PCI" == "y" -o "$CONFIG_PCI" == "m" ); then
+	  CONFIG_SND_TRIDENT="m"
+	  cat >>confdefs.h <<\_ACEOF
 #define CONFIG_SND_TRIDENT_MODULE 1
 _ACEOF
 
 	fi
-	if test "$CONFIG_PCI" = "y"; then
-	CONFIG_SND_VX222="m"
-	cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_VX222_MODULE 1
+	if ( test "$CONFIG_PCI" == "y" -o "$CONFIG_PCI" == "m" ); then
+	  CONFIG_SND_YMFPCI="m"
+	  cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_YMFPCI_MODULE 1
 _ACEOF
 
 	fi
-	if test "$CONFIG_PCI" = "y"; then
-	CONFIG_SND_YMFPCI="m"
-	cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_YMFPCI_MODULE 1
+	if ( test "$CONFIG_PCI" == "y" -o "$CONFIG_PCI" == "m" ); then
+	  CONFIG_SND_ALS4000="m"
+	  cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_ALS4000_MODULE 1
 _ACEOF
 
 	fi
-	if test "$CONFIG_PPC" = "y"; then
-	CONFIG_SND_POWERMAC="m"
-	cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_POWERMAC_MODULE 1
+	if ( test "$CONFIG_PCI" == "y" -o "$CONFIG_PCI" == "m" ); then
+	  CONFIG_SND_CMIPCI="m"
+	  cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_CMIPCI_MODULE 1
 _ACEOF
 
 	fi
-	if test "$CONFIG_ARM" = "y"; then
-	CONFIG_SND_SA11XX_UDA1341="m"
-	cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_SA11XX_UDA1341_MODULE 1
+	if ( test "$CONFIG_PCI" == "y" -o "$CONFIG_PCI" == "m" ); then
+	  CONFIG_SND_ENS1370="m"
+	  cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_ENS1370_MODULE 1
 _ACEOF
 
 	fi
-	if test "$CONFIG_USB" = "y"; then
-	CONFIG_SND_USB_AUDIO="m"
-	cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_USB_AUDIO_MODULE 1
+	if ( test "$CONFIG_PCI" == "y" -o "$CONFIG_PCI" == "m" ); then
+	  CONFIG_SND_ENS1371="m"
+	  cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_ENS1371_MODULE 1
 _ACEOF
 
 	fi
-	if test "$CONFIG_PARISC" = "y"; then
-	CONFIG_SND_HARMONY="m"
-	cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_HARMONY_MODULE 1
+	if ( test "$CONFIG_PCI" == "y" -o "$CONFIG_PCI" == "m" ); then
+	  CONFIG_SND_ES1938="m"
+	  cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_ES1938_MODULE 1
 _ACEOF
 
 	fi
-	if test "$CONFIG_PCMCIA" = "y"; then
-	CONFIG_SND_VXPOCKET="m"
-	cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_VXPOCKET_MODULE 1
+	if ( test "$CONFIG_PCI" == "y" -o "$CONFIG_PCI" == "m" ); then
+	  CONFIG_SND_ES1968="m"
+	  cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_ES1968_MODULE 1
 _ACEOF
 
 	fi
-	if test "$CONFIG_PCMCIA" = "y"; then
-	CONFIG_SND_VXP440="m"
-	cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_VXP440_MODULE 1
+	if ( test "$CONFIG_PCI" == "y" -o "$CONFIG_PCI" == "m" ); then
+	  CONFIG_SND_MAESTRO3="m"
+	  cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_MAESTRO3_MODULE 1
 _ACEOF
 
 	fi
-	CONFIG_SND_SERIALMIDI="m"
-	cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_SERIALMIDI_MODULE 1
+	if ( test "$CONFIG_PCI" == "y" -o "$CONFIG_PCI" == "m" ); then
+	  CONFIG_SND_FM801="m"
+	  cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_FM801_MODULE 1
 _ACEOF
 
-	if test "$CONFIG_PCI" = "y"; then
-	CONFIG_SND_INTEL8X0M="m"
-	cat >>confdefs.h <<\_ACEOF
+	fi
+	if ( test "$CONFIG_PCI" == "y" -o "$CONFIG_PCI" == "m" ) &&
+	   ( test "$CONFIG_VIDEO_DEV" == "y" -o "$CONFIG_VIDEO_DEV" == "m" ); then
+	  CONFIG_SND_FM801_TEA575X="m"
+	  cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_FM801_TEA575X_MODULE 1
+_ACEOF
+
+	fi
+	if ( test "$CONFIG_PCI" == "y" -o "$CONFIG_PCI" == "m" ); then
+	  CONFIG_SND_ICE1712="m"
+	  cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_ICE1712_MODULE 1
+_ACEOF
+
+	fi
+	if ( test "$CONFIG_PCI" == "y" -o "$CONFIG_PCI" == "m" ); then
+	  CONFIG_SND_ICE1724="m"
+	  cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_ICE1724_MODULE 1
+_ACEOF
+
+	fi
+	if ( test "$CONFIG_PCI" == "y" -o "$CONFIG_PCI" == "m" ); then
+	  CONFIG_SND_INTEL8X0="m"
+	  cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_INTEL8X0_MODULE 1
+_ACEOF
+
+	fi
+	if ( test "$CONFIG_PCI" == "y" -o "$CONFIG_PCI" == "m" ) &&
+	   ( test "$CONFIG_EXPERIMENTAL" == "y" -o "$CONFIG_EXPERIMENTAL" == "m" ); then
+	  CONFIG_SND_INTEL8X0M="m"
+	  cat >>confdefs.h <<\_ACEOF
 #define CONFIG_SND_INTEL8X0M_MODULE 1
 _ACEOF
 
 	fi
-	if test "$CONFIG_PCI" = "y"; then
-	CONFIG_SND_HDSPM="m"
-	cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_HDSPM_MODULE 1
+	if ( test "$CONFIG_PCI" == "y" -o "$CONFIG_PCI" == "m" ); then
+	  CONFIG_SND_SONICVIBES="m"
+	  cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_SONICVIBES_MODULE 1
 _ACEOF
 
 	fi
-	if test "$CONFIG_PCI" = "y"; then
-	CONFIG_SND_ATIIXP="m"
-	cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_ATIIXP_MODULE 1
+	if ( test "$CONFIG_PCI" == "y" -o "$CONFIG_PCI" == "m" ); then
+	  CONFIG_SND_VIA82XX="m"
+	  cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_VIA82XX_MODULE 1
 _ACEOF
 
 	fi
-	if test "$CONFIG_PCI" = "y"; then
-	CONFIG_SND_PDPLUS="m"
-	cat >>confdefs.h <<\_ACEOF
+	if ( test "$CONFIG_PCI" == "y" -o "$CONFIG_PCI" == "m" ); then
+	  CONFIG_SND_VX222="m"
+	  cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_VX222_MODULE 1
+_ACEOF
+
+	fi
+	if ( test "$CONFIG_PCI" == "y" -o "$CONFIG_PCI" == "m" ); then
+	  CONFIG_SND_PDPLUS="m"
+	  cat >>confdefs.h <<\_ACEOF
 #define CONFIG_SND_PDPLUS_MODULE 1
 _ACEOF
 
 	fi
-	if test "$CONFIG_ISA" = "y"; then
-	CONFIG_SND_MSND_PINNACLE="m"
-	cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_MSND_PINNACLE_MODULE 1
+	if ( test "$CONFIG_PCI" == "y" -o "$CONFIG_PCI" == "m" ); then
+	  CONFIG_SND_HDSPM="m"
+	  cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_HDSPM_MODULE 1
 _ACEOF
 
 	fi
-	if test "$CONFIG_PCMCIA" = "y"; then
-	CONFIG_SND_PDAUDIOCF="m"
-	cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_PDAUDIOCF_MODULE 1
+	if ( test "$CONFIG_PPC" == "y" -o "$CONFIG_PPC" == "m" ); then
+	  CONFIG_SND_POWERMAC="m"
+	  cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_POWERMAC_MODULE 1
 _ACEOF
 
 	fi
-	if test "$CONFIG_USB" = "y"; then
-	CONFIG_SND_USB_USX2Y="m"
-	cat >>confdefs.h <<\_ACEOF
+	if ( test "$CONFIG_ARM" == "y" -o "$CONFIG_ARM" == "m" ) &&
+	   ( test "$CONFIG_ARCH_SA1100" == "y" -o "$CONFIG_ARCH_SA1100" == "m" ) &&
+	   ( test "$CONFIG_L3" == "y" -o "$CONFIG_L3" == "m" ); then
+	  CONFIG_SND_SA11XX_UDA1341="m"
+	  cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_SA11XX_UDA1341_MODULE 1
+_ACEOF
+
+	fi
+	if ( test "$CONFIG_USB" == "y" -o "$CONFIG_USB" == "m" ); then
+	  CONFIG_SND_USB_AUDIO="m"
+	  cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_USB_AUDIO_MODULE 1
+_ACEOF
+
+	fi
+	if ( test "$CONFIG_USB" == "y" -o "$CONFIG_USB" == "m" ); then
+	  CONFIG_SND_USB_USX2Y="m"
+	  cat >>confdefs.h <<\_ACEOF
 #define CONFIG_SND_USB_USX2Y_MODULE 1
 _ACEOF
 
 	fi
-	if test "$CONFIG_PCI" = "y"; then
-	CONFIG_SND_AU8810="m"
-	cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_AU8810_MODULE 1
+	if ( test "$CONFIG_PCMCIA" == "y" -o "$CONFIG_PCMCIA" == "m" ) &&
+	   ( test "$CONFIG_ISA" == "y" -o "$CONFIG_ISA" == "m" ); then
+	  CONFIG_SND_VXPOCKET="m"
+	  cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_VXPOCKET_MODULE 1
 _ACEOF
 
 	fi
-	if test "$CONFIG_PCI" = "y"; then
-	CONFIG_SND_AU8820="m"
-	cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_AU8820_MODULE 1
+	if ( test "$CONFIG_PCMCIA" == "y" -o "$CONFIG_PCMCIA" == "m" ) &&
+	   ( test "$CONFIG_ISA" == "y" -o "$CONFIG_ISA" == "m" ); then
+	  CONFIG_SND_VXP440="m"
+	  cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_VXP440_MODULE 1
 _ACEOF
 
 	fi
-	if test "$CONFIG_PCI" = "y"; then
-	CONFIG_SND_AU8830="m"
-	cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_AU8830_MODULE 1
+	if ( test "$CONFIG_PCMCIA" == "y" -o "$CONFIG_PCMCIA" == "m" ) &&
+	   ( test "$CONFIG_ISA" == "y" -o "$CONFIG_ISA" == "m" ); then
+	  CONFIG_SND_PDAUDIOCF="m"
+	  cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_PDAUDIOCF_MODULE 1
+_ACEOF
+
+	fi
+	if ((( test "$CONFIG_SPARC32" == "y" -o "$CONFIG_SPARC32" == "m" ) ||
+	   ( test "$CONFIG_SPARC64" == "y" -o "$CONFIG_SPARC64" == "m" ))) &&
+	   ( test "$CONFIG_SBUS" == "y" -o "$CONFIG_SBUS" == "m" ); then
+	  CONFIG_SND_SUN_AMD7930="m"
+	  cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_SUN_AMD7930_MODULE 1
+_ACEOF
+
+	fi
+	if ((( test "$CONFIG_SPARC32" == "y" -o "$CONFIG_SPARC32" == "m" ) ||
+	   ( test "$CONFIG_SPARC64" == "y" -o "$CONFIG_SPARC64" == "m" ))); then
+	  CONFIG_SND_SUN_CS4231="m"
+	  cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_SUN_CS4231_MODULE 1
+_ACEOF
+
+	fi
+	if ( test "$CONFIG_PARISC" == "y" -o "$CONFIG_PARISC" == "m" ); then
+	  CONFIG_SND_HARMONY="m"
+	  cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_HARMONY_MODULE 1
 _ACEOF
 
 	fi
@@ -7057,556 +7307,2735 @@
   for card in $cards
   do
     case "$card" in
-	dummy)
-		CONFIG_SND_DUMMY="m"
+	seq-dummy)
+		CONFIG_SND="m"
 		cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_DUMMY_MODULE 1
+#define CONFIG_SND_MODULE 1
 _ACEOF
 
-		;;
-	virmidi)
-		CONFIG_SND_VIRMIDI="m"
+		CONFIG_SND_SEQ_DUMMY="m"
 		cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_VIRMIDI_MODULE 1
+#define CONFIG_SND_SEQ_DUMMY_MODULE 1
 _ACEOF
 
 		;;
-	serial-u16550)
-		CONFIG_SND_SERIAL_U16550="m"
+	dummy)
+		CONFIG_SND="m"
 		cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_SERIAL_U16550_MODULE 1
+#define CONFIG_SND_MODULE 1
 _ACEOF
 
-		;;
-	mtpav)
-		CONFIG_SND_MTPAV="m"
+		CONFIG_SND_TIMER="m"
 		cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_MTPAV_MODULE 1
+#define CONFIG_SND_TIMER_MODULE 1
 _ACEOF
 
-		;;
-	mpu401)
-		CONFIG_SND_MPU401="m"
+		CONFIG_SND_PCM="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_PCM_MODULE 1
+_ACEOF
+
+		CONFIG_SND_DUMMY="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_DUMMY_MODULE 1
+_ACEOF
+
+		;;
+	virmidi)
+		CONFIG_SND="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_MODULE 1
+_ACEOF
+
+		CONFIG_SND_TIMER="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_TIMER_MODULE 1
+_ACEOF
+
+		CONFIG_SND_RAWMIDI="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_RAWMIDI_MODULE 1
+_ACEOF
+
+		CONFIG_SND_VIRMIDI="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_VIRMIDI_MODULE 1
+_ACEOF
+
+		;;
+	mtpav)
+		CONFIG_SND="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_MODULE 1
+_ACEOF
+
+		CONFIG_SND_TIMER="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_TIMER_MODULE 1
+_ACEOF
+
+		CONFIG_SND_RAWMIDI="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_RAWMIDI_MODULE 1
+_ACEOF
+
+		CONFIG_SND_MTPAV="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_MTPAV_MODULE 1
+_ACEOF
+
+		;;
+	serial-u16550)
+		CONFIG_SND="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_MODULE 1
+_ACEOF
+
+		CONFIG_SND_TIMER="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_TIMER_MODULE 1
+_ACEOF
+
+		CONFIG_SND_RAWMIDI="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_RAWMIDI_MODULE 1
+_ACEOF
+
+		CONFIG_SND_SERIAL_U16550="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_SERIAL_U16550_MODULE 1
+_ACEOF
+
+		;;
+	mpu401)
+		CONFIG_SND="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_MODULE 1
+_ACEOF
+
+		CONFIG_SND_TIMER="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_TIMER_MODULE 1
+_ACEOF
+
+		CONFIG_SND_RAWMIDI="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_RAWMIDI_MODULE 1
+_ACEOF
+
+		CONFIG_SND_MPU401_UART="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_MPU401_UART_MODULE 1
+_ACEOF
+
+		CONFIG_SND_MPU401="m"
 		cat >>confdefs.h <<\_ACEOF
 #define CONFIG_SND_MPU401_MODULE 1
 _ACEOF
 
-		;;
-	als100)
-		CONFIG_SND_ALS100="m"
+		;;
+	serialmidi)
+		CONFIG_SND="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_MODULE 1
+_ACEOF
+
+		CONFIG_SND_RAWMIDI="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_RAWMIDI_MODULE 1
+_ACEOF
+
+		CONFIG_SND_SERIALMIDI="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_SERIALMIDI_MODULE 1
+_ACEOF
+
+		;;
+	ad1816a)
+		CONFIG_SND="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_MODULE 1
+_ACEOF
+
+		CONFIG_SND_TIMER="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_TIMER_MODULE 1
+_ACEOF
+
+		CONFIG_SND_HWDEP="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_HWDEP_MODULE 1
+_ACEOF
+
+		CONFIG_SND_RAWMIDI="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_RAWMIDI_MODULE 1
+_ACEOF
+
+		CONFIG_SND_OPL3_LIB="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_OPL3_LIB_MODULE 1
+_ACEOF
+
+		CONFIG_SND_MPU401_UART="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_MPU401_UART_MODULE 1
+_ACEOF
+
+		CONFIG_SND_PCM="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_PCM_MODULE 1
+_ACEOF
+
+		CONFIG_SND_AD1816A="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_AD1816A_MODULE 1
+_ACEOF
+
+		;;
+	ad1848)
+		CONFIG_SND="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_MODULE 1
+_ACEOF
+
+		CONFIG_SND_TIMER="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_TIMER_MODULE 1
+_ACEOF
+
+		CONFIG_SND_PCM="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_PCM_MODULE 1
+_ACEOF
+
+		CONFIG_SND_AD1848="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_AD1848_MODULE 1
+_ACEOF
+
+		;;
+	cs4231)
+		CONFIG_SND="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_MODULE 1
+_ACEOF
+
+		CONFIG_SND_TIMER="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_TIMER_MODULE 1
+_ACEOF
+
+		CONFIG_SND_RAWMIDI="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_RAWMIDI_MODULE 1
+_ACEOF
+
+		CONFIG_SND_MPU401_UART="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_MPU401_UART_MODULE 1
+_ACEOF
+
+		CONFIG_SND_PCM="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_PCM_MODULE 1
+_ACEOF
+
+		CONFIG_SND_CS4231="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_CS4231_MODULE 1
+_ACEOF
+
+		;;
+	cs4232)
+		CONFIG_SND="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_MODULE 1
+_ACEOF
+
+		CONFIG_SND_TIMER="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_TIMER_MODULE 1
+_ACEOF
+
+		CONFIG_SND_HWDEP="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_HWDEP_MODULE 1
+_ACEOF
+
+		CONFIG_SND_RAWMIDI="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_RAWMIDI_MODULE 1
+_ACEOF
+
+		CONFIG_SND_OPL3_LIB="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_OPL3_LIB_MODULE 1
+_ACEOF
+
+		CONFIG_SND_MPU401_UART="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_MPU401_UART_MODULE 1
+_ACEOF
+
+		CONFIG_SND_PCM="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_PCM_MODULE 1
+_ACEOF
+
+		CONFIG_SND_CS4232="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_CS4232_MODULE 1
+_ACEOF
+
+		;;
+	cs4236)
+		CONFIG_SND="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_MODULE 1
+_ACEOF
+
+		CONFIG_SND_TIMER="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_TIMER_MODULE 1
+_ACEOF
+
+		CONFIG_SND_HWDEP="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_HWDEP_MODULE 1
+_ACEOF
+
+		CONFIG_SND_RAWMIDI="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_RAWMIDI_MODULE 1
+_ACEOF
+
+		CONFIG_SND_OPL3_LIB="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_OPL3_LIB_MODULE 1
+_ACEOF
+
+		CONFIG_SND_MPU401_UART="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_MPU401_UART_MODULE 1
+_ACEOF
+
+		CONFIG_SND_PCM="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_PCM_MODULE 1
+_ACEOF
+
+		CONFIG_SND_CS4236="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_CS4236_MODULE 1
+_ACEOF
+
+		;;
+	pc98-cs4232)
+		CONFIG_SND="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_MODULE 1
+_ACEOF
+
+		CONFIG_SND_TIMER="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_TIMER_MODULE 1
+_ACEOF
+
+		CONFIG_SND_HWDEP="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_HWDEP_MODULE 1
+_ACEOF
+
+		CONFIG_SND_RAWMIDI="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_RAWMIDI_MODULE 1
+_ACEOF
+
+		CONFIG_SND_OPL3_LIB="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_OPL3_LIB_MODULE 1
+_ACEOF
+
+		CONFIG_SND_MPU401_UART="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_MPU401_UART_MODULE 1
+_ACEOF
+
+		CONFIG_SND_PCM="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_PCM_MODULE 1
+_ACEOF
+
+		CONFIG_SND_PC98_CS4232="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_PC98_CS4232_MODULE 1
+_ACEOF
+
+		;;
+	es968)
+		CONFIG_SND="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_MODULE 1
+_ACEOF
+
+		CONFIG_SND_TIMER="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_TIMER_MODULE 1
+_ACEOF
+
+		CONFIG_SND_RAWMIDI="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_RAWMIDI_MODULE 1
+_ACEOF
+
+		CONFIG_SND_MPU401_UART="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_MPU401_UART_MODULE 1
+_ACEOF
+
+		CONFIG_SND_PCM="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_PCM_MODULE 1
+_ACEOF
+
+		CONFIG_SND_ES968="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_ES968_MODULE 1
+_ACEOF
+
+		;;
+	es1688)
+		CONFIG_SND="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_MODULE 1
+_ACEOF
+
+		CONFIG_SND_TIMER="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_TIMER_MODULE 1
+_ACEOF
+
+		CONFIG_SND_HWDEP="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_HWDEP_MODULE 1
+_ACEOF
+
+		CONFIG_SND_RAWMIDI="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_RAWMIDI_MODULE 1
+_ACEOF
+
+		CONFIG_SND_OPL3_LIB="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_OPL3_LIB_MODULE 1
+_ACEOF
+
+		CONFIG_SND_MPU401_UART="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_MPU401_UART_MODULE 1
+_ACEOF
+
+		CONFIG_SND_PCM="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_PCM_MODULE 1
+_ACEOF
+
+		CONFIG_SND_ES1688="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_ES1688_MODULE 1
+_ACEOF
+
+		;;
+	es18xx)
+		CONFIG_SND="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_MODULE 1
+_ACEOF
+
+		CONFIG_SND_TIMER="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_TIMER_MODULE 1
+_ACEOF
+
+		CONFIG_SND_HWDEP="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_HWDEP_MODULE 1
+_ACEOF
+
+		CONFIG_SND_RAWMIDI="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_RAWMIDI_MODULE 1
+_ACEOF
+
+		CONFIG_SND_OPL3_LIB="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_OPL3_LIB_MODULE 1
+_ACEOF
+
+		CONFIG_SND_MPU401_UART="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_MPU401_UART_MODULE 1
+_ACEOF
+
+		CONFIG_SND_PCM="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_PCM_MODULE 1
+_ACEOF
+
+		CONFIG_SND_ES18XX="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_ES18XX_MODULE 1
+_ACEOF
+
+		;;
+	gusclassic)
+		CONFIG_SND="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_MODULE 1
+_ACEOF
+
+		CONFIG_SND_TIMER="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_TIMER_MODULE 1
+_ACEOF
+
+		CONFIG_SND_RAWMIDI="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_RAWMIDI_MODULE 1
+_ACEOF
+
+		CONFIG_SND_PCM="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_PCM_MODULE 1
+_ACEOF
+
+		CONFIG_SND_GUSCLASSIC="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_GUSCLASSIC_MODULE 1
+_ACEOF
+
+		;;
+	gusextreme)
+		CONFIG_SND="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_MODULE 1
+_ACEOF
+
+		CONFIG_SND_TIMER="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_TIMER_MODULE 1
+_ACEOF
+
+		CONFIG_SND_RAWMIDI="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_RAWMIDI_MODULE 1
+_ACEOF
+
+		CONFIG_SND_HWDEP="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_HWDEP_MODULE 1
+_ACEOF
+
+		CONFIG_SND_MPU401_UART="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_MPU401_UART_MODULE 1
+_ACEOF
+
+		CONFIG_SND_PCM="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_PCM_MODULE 1
+_ACEOF
+
+		CONFIG_SND_GUSEXTREME="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_GUSEXTREME_MODULE 1
+_ACEOF
+
+		;;
+	gusmax)
+		CONFIG_SND="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_MODULE 1
+_ACEOF
+
+		CONFIG_SND_TIMER="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_TIMER_MODULE 1
+_ACEOF
+
+		CONFIG_SND_RAWMIDI="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_RAWMIDI_MODULE 1
+_ACEOF
+
+		CONFIG_SND_PCM="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_PCM_MODULE 1
+_ACEOF
+
+		CONFIG_SND_GUSMAX="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_GUSMAX_MODULE 1
+_ACEOF
+
+		;;
+	interwave)
+		CONFIG_SND="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_MODULE 1
+_ACEOF
+
+		CONFIG_SND_TIMER="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_TIMER_MODULE 1
+_ACEOF
+
+		CONFIG_SND_RAWMIDI="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_RAWMIDI_MODULE 1
+_ACEOF
+
+		CONFIG_SND_PCM="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_PCM_MODULE 1
+_ACEOF
+
+		CONFIG_SND_INTERWAVE="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_INTERWAVE_MODULE 1
+_ACEOF
+
+		;;
+	interwave-stb)
+		CONFIG_SND="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_MODULE 1
+_ACEOF
+
+		CONFIG_SND_TIMER="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_TIMER_MODULE 1
+_ACEOF
+
+		CONFIG_SND_RAWMIDI="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_RAWMIDI_MODULE 1
+_ACEOF
+
+		CONFIG_SND_PCM="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_PCM_MODULE 1
+_ACEOF
+
+		CONFIG_SND_INTERWAVE_STB="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_INTERWAVE_STB_MODULE 1
+_ACEOF
+
+		;;
+	opti92x-ad1848)
+		CONFIG_SND="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_MODULE 1
+_ACEOF
+
+		CONFIG_SND_TIMER="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_TIMER_MODULE 1
+_ACEOF
+
+		CONFIG_SND_HWDEP="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_HWDEP_MODULE 1
+_ACEOF
+
+		CONFIG_SND_RAWMIDI="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_RAWMIDI_MODULE 1
+_ACEOF
+
+		CONFIG_SND_OPL3_LIB="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_OPL3_LIB_MODULE 1
+_ACEOF
+
+		CONFIG_SND_OPL4_LIB="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_OPL4_LIB_MODULE 1
+_ACEOF
+
+		CONFIG_SND_MPU401_UART="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_MPU401_UART_MODULE 1
+_ACEOF
+
+		CONFIG_SND_PCM="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_PCM_MODULE 1
+_ACEOF
+
+		CONFIG_SND_OPTI92X_AD1848="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_OPTI92X_AD1848_MODULE 1
+_ACEOF
+
+		;;
+	opti92x-cs4231)
+		CONFIG_SND="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_MODULE 1
+_ACEOF
+
+		CONFIG_SND_TIMER="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_TIMER_MODULE 1
+_ACEOF
+
+		CONFIG_SND_HWDEP="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_HWDEP_MODULE 1
+_ACEOF
+
+		CONFIG_SND_RAWMIDI="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_RAWMIDI_MODULE 1
+_ACEOF
+
+		CONFIG_SND_OPL3_LIB="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_OPL3_LIB_MODULE 1
+_ACEOF
+
+		CONFIG_SND_OPL4_LIB="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_OPL4_LIB_MODULE 1
+_ACEOF
+
+		CONFIG_SND_MPU401_UART="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_MPU401_UART_MODULE 1
+_ACEOF
+
+		CONFIG_SND_PCM="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_PCM_MODULE 1
+_ACEOF
+
+		CONFIG_SND_OPTI92X_CS4231="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_OPTI92X_CS4231_MODULE 1
+_ACEOF
+
+		;;
+	opti93x)
+		CONFIG_SND="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_MODULE 1
+_ACEOF
+
+		CONFIG_SND_TIMER="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_TIMER_MODULE 1
+_ACEOF
+
+		CONFIG_SND_HWDEP="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_HWDEP_MODULE 1
+_ACEOF
+
+		CONFIG_SND_RAWMIDI="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_RAWMIDI_MODULE 1
+_ACEOF
+
+		CONFIG_SND_OPL3_LIB="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_OPL3_LIB_MODULE 1
+_ACEOF
+
+		CONFIG_SND_MPU401_UART="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_MPU401_UART_MODULE 1
+_ACEOF
+
+		CONFIG_SND_PCM="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_PCM_MODULE 1
+_ACEOF
+
+		CONFIG_SND_OPTI93X="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_OPTI93X_MODULE 1
+_ACEOF
+
+		;;
+	sb8)
+		CONFIG_SND="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_MODULE 1
+_ACEOF
+
+		CONFIG_SND_TIMER="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_TIMER_MODULE 1
+_ACEOF
+
+		CONFIG_SND_HWDEP="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_HWDEP_MODULE 1
+_ACEOF
+
+		CONFIG_SND_OPL3_LIB="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_OPL3_LIB_MODULE 1
+_ACEOF
+
+		CONFIG_SND_RAWMIDI="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_RAWMIDI_MODULE 1
+_ACEOF
+
+		CONFIG_SND_PCM="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_PCM_MODULE 1
+_ACEOF
+
+		CONFIG_SND_SB8="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_SB8_MODULE 1
+_ACEOF
+
+		;;
+	sb16)
+		CONFIG_SND="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_MODULE 1
+_ACEOF
+
+		CONFIG_SND_TIMER="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_TIMER_MODULE 1
+_ACEOF
+
+		CONFIG_SND_HWDEP="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_HWDEP_MODULE 1
+_ACEOF
+
+		CONFIG_SND_RAWMIDI="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_RAWMIDI_MODULE 1
+_ACEOF
+
+		CONFIG_SND_OPL3_LIB="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_OPL3_LIB_MODULE 1
+_ACEOF
+
+		CONFIG_SND_MPU401_UART="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_MPU401_UART_MODULE 1
+_ACEOF
+
+		CONFIG_SND_PCM="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_PCM_MODULE 1
+_ACEOF
+
+		CONFIG_SND_SB16="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_SB16_MODULE 1
+_ACEOF
+
+		;;
+	sbawe)
+		CONFIG_SND="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_MODULE 1
+_ACEOF
+
+		CONFIG_SND_TIMER="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_TIMER_MODULE 1
+_ACEOF
+
+		CONFIG_SND_HWDEP="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_HWDEP_MODULE 1
+_ACEOF
+
+		CONFIG_SND_RAWMIDI="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_RAWMIDI_MODULE 1
+_ACEOF
+
+		CONFIG_SND_OPL3_LIB="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_OPL3_LIB_MODULE 1
+_ACEOF
+
+		CONFIG_SND_MPU401_UART="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_MPU401_UART_MODULE 1
+_ACEOF
+
+		CONFIG_SND_PCM="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_PCM_MODULE 1
+_ACEOF
+
+		CONFIG_SND_SBAWE="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_SBAWE_MODULE 1
+_ACEOF
+
+		;;
+	sb16-csp)
+		CONFIG_SND="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_MODULE 1
+_ACEOF
+
+		CONFIG_SND_SB16_CSP="y"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_SB16_CSP 1
+_ACEOF
+
+		;;
+	wavefront)
+		CONFIG_SND="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_MODULE 1
+_ACEOF
+
+		CONFIG_SND_TIMER="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_TIMER_MODULE 1
+_ACEOF
+
+		CONFIG_SND_HWDEP="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_HWDEP_MODULE 1
+_ACEOF
+
+		CONFIG_SND_RAWMIDI="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_RAWMIDI_MODULE 1
+_ACEOF
+
+		CONFIG_SND_OPL3_LIB="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_OPL3_LIB_MODULE 1
+_ACEOF
+
+		CONFIG_SND_MPU401_UART="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_MPU401_UART_MODULE 1
+_ACEOF
+
+		CONFIG_SND_PCM="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_PCM_MODULE 1
+_ACEOF
+
+		CONFIG_SND_WAVEFRONT="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_WAVEFRONT_MODULE 1
+_ACEOF
+
+		;;
+	als100)
+		CONFIG_SND="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_MODULE 1
+_ACEOF
+
+		CONFIG_SND_TIMER="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_TIMER_MODULE 1
+_ACEOF
+
+		CONFIG_SND_HWDEP="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_HWDEP_MODULE 1
+_ACEOF
+
+		CONFIG_SND_RAWMIDI="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_RAWMIDI_MODULE 1
+_ACEOF
+
+		CONFIG_SND_OPL3_LIB="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_OPL3_LIB_MODULE 1
+_ACEOF
+
+		CONFIG_SND_MPU401_UART="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_MPU401_UART_MODULE 1
+_ACEOF
+
+		CONFIG_SND_PCM="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_PCM_MODULE 1
+_ACEOF
+
+		CONFIG_SND_ALS100="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_ALS100_MODULE 1
+_ACEOF
+
+		;;
+	azt2320)
+		CONFIG_SND="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_MODULE 1
+_ACEOF
+
+		CONFIG_SND_TIMER="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_TIMER_MODULE 1
+_ACEOF
+
+		CONFIG_SND_HWDEP="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_HWDEP_MODULE 1
+_ACEOF
+
+		CONFIG_SND_RAWMIDI="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_RAWMIDI_MODULE 1
+_ACEOF
+
+		CONFIG_SND_OPL3_LIB="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_OPL3_LIB_MODULE 1
+_ACEOF
+
+		CONFIG_SND_MPU401_UART="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_MPU401_UART_MODULE 1
+_ACEOF
+
+		CONFIG_SND_PCM="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_PCM_MODULE 1
+_ACEOF
+
+		CONFIG_SND_AZT2320="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_AZT2320_MODULE 1
+_ACEOF
+
+		;;
+	cmi8330)
+		CONFIG_SND="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_MODULE 1
+_ACEOF
+
+		CONFIG_SND_TIMER="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_TIMER_MODULE 1
+_ACEOF
+
+		CONFIG_SND_PCM="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_PCM_MODULE 1
+_ACEOF
+
+		CONFIG_SND_CMI8330="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_CMI8330_MODULE 1
+_ACEOF
+
+		;;
+	dt019x)
+		CONFIG_SND="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_MODULE 1
+_ACEOF
+
+		CONFIG_SND_TIMER="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_TIMER_MODULE 1
+_ACEOF
+
+		CONFIG_SND_HWDEP="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_HWDEP_MODULE 1
+_ACEOF
+
+		CONFIG_SND_RAWMIDI="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_RAWMIDI_MODULE 1
+_ACEOF
+
+		CONFIG_SND_OPL3_LIB="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_OPL3_LIB_MODULE 1
+_ACEOF
+
+		CONFIG_SND_MPU401_UART="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_MPU401_UART_MODULE 1
+_ACEOF
+
+		CONFIG_SND_PCM="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_PCM_MODULE 1
+_ACEOF
+
+		CONFIG_SND_DT019X="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_DT019X_MODULE 1
+_ACEOF
+
+		;;
+	opl3sa2)
+		CONFIG_SND="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_MODULE 1
+_ACEOF
+
+		CONFIG_SND_TIMER="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_TIMER_MODULE 1
+_ACEOF
+
+		CONFIG_SND_HWDEP="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_HWDEP_MODULE 1
+_ACEOF
+
+		CONFIG_SND_RAWMIDI="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_RAWMIDI_MODULE 1
+_ACEOF
+
+		CONFIG_SND_OPL3_LIB="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_OPL3_LIB_MODULE 1
+_ACEOF
+
+		CONFIG_SND_MPU401_UART="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_MPU401_UART_MODULE 1
+_ACEOF
+
+		CONFIG_SND_PCM="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_PCM_MODULE 1
+_ACEOF
+
+		CONFIG_SND_OPL3SA2="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_OPL3SA2_MODULE 1
+_ACEOF
+
+		;;
+	sgalaxy)
+		CONFIG_SND="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_MODULE 1
+_ACEOF
+
+		CONFIG_SND_TIMER="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_TIMER_MODULE 1
+_ACEOF
+
+		CONFIG_SND_PCM="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_PCM_MODULE 1
+_ACEOF
+
+		CONFIG_SND_SGALAXY="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_SGALAXY_MODULE 1
+_ACEOF
+
+		;;
+	sscape)
+		CONFIG_SND="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_MODULE 1
+_ACEOF
+
+		CONFIG_SND_TIMER="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_TIMER_MODULE 1
+_ACEOF
+
+		CONFIG_SND_RAWMIDI="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_RAWMIDI_MODULE 1
+_ACEOF
+
+		CONFIG_SND_HWDEP="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_HWDEP_MODULE 1
+_ACEOF
+
+		CONFIG_SND_MPU401_UART="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_MPU401_UART_MODULE 1
+_ACEOF
+
+		CONFIG_SND_PCM="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_PCM_MODULE 1
+_ACEOF
+
+		CONFIG_SND_SSCAPE="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_SSCAPE_MODULE 1
+_ACEOF
+
+		;;
+	msnd-pinnacle)
+		CONFIG_SND="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_MODULE 1
+_ACEOF
+
+		CONFIG_SND_TIMER="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_TIMER_MODULE 1
+_ACEOF
+
+		CONFIG_SND_RAWMIDI="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_RAWMIDI_MODULE 1
+_ACEOF
+
+		CONFIG_SND_PCM="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_PCM_MODULE 1
+_ACEOF
+
+		CONFIG_SND_MSND_PINNACLE="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_MSND_PINNACLE_MODULE 1
+_ACEOF
+
+		;;
+	ac97-codec)
+		CONFIG_SND="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_MODULE 1
+_ACEOF
+
+		CONFIG_SND_TIMER="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_TIMER_MODULE 1
+_ACEOF
+
+		CONFIG_SND_PCM="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_PCM_MODULE 1
+_ACEOF
+
+		CONFIG_SND_AC97_CODEC="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_AC97_CODEC_MODULE 1
+_ACEOF
+
+		;;
+	ali5451)
+		CONFIG_SND="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_MODULE 1
+_ACEOF
+
+		CONFIG_SND_TIMER="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_TIMER_MODULE 1
+_ACEOF
+
+		CONFIG_SND_RAWMIDI="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_RAWMIDI_MODULE 1
+_ACEOF
+
+		CONFIG_SND_PCM="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_PCM_MODULE 1
+_ACEOF
+
+		CONFIG_SND_MPU401_UART="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_MPU401_UART_MODULE 1
+_ACEOF
+
+		CONFIG_SND_AC97_CODEC="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_AC97_CODEC_MODULE 1
+_ACEOF
+
+		CONFIG_SND_ALI5451="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_ALI5451_MODULE 1
+_ACEOF
+
+		;;
+	atiixp)
+		CONFIG_SND="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_MODULE 1
+_ACEOF
+
+		CONFIG_SND_TIMER="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_TIMER_MODULE 1
+_ACEOF
+
+		CONFIG_SND_PCM="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_PCM_MODULE 1
+_ACEOF
+
+		CONFIG_SND_AC97_CODEC="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_AC97_CODEC_MODULE 1
+_ACEOF
+
+		CONFIG_SND_ATIIXP="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_ATIIXP_MODULE 1
+_ACEOF
+
+		;;
+	au8810)
+		CONFIG_SND="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_MODULE 1
+_ACEOF
+
+		CONFIG_SND_TIMER="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_TIMER_MODULE 1
+_ACEOF
+
+		CONFIG_SND_RAWMIDI="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_RAWMIDI_MODULE 1
+_ACEOF
+
+		CONFIG_SND_PCM="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_PCM_MODULE 1
+_ACEOF
+
+		CONFIG_SND_MPU401_UART="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_MPU401_UART_MODULE 1
+_ACEOF
+
+		CONFIG_SND_AC97_CODEC="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_AC97_CODEC_MODULE 1
+_ACEOF
+
+		CONFIG_SND_AU8810="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_AU8810_MODULE 1
+_ACEOF
+
+		;;
+	au8820)
+		CONFIG_SND="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_MODULE 1
+_ACEOF
+
+		CONFIG_SND_TIMER="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_TIMER_MODULE 1
+_ACEOF
+
+		CONFIG_SND_RAWMIDI="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_RAWMIDI_MODULE 1
+_ACEOF
+
+		CONFIG_SND_PCM="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_PCM_MODULE 1
+_ACEOF
+
+		CONFIG_SND_MPU401_UART="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_MPU401_UART_MODULE 1
+_ACEOF
+
+		CONFIG_SND_AC97_CODEC="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_AC97_CODEC_MODULE 1
+_ACEOF
+
+		CONFIG_SND_AU8820="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_AU8820_MODULE 1
+_ACEOF
+
+		;;
+	au8830)
+		CONFIG_SND="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_MODULE 1
+_ACEOF
+
+		CONFIG_SND_TIMER="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_TIMER_MODULE 1
+_ACEOF
+
+		CONFIG_SND_RAWMIDI="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_RAWMIDI_MODULE 1
+_ACEOF
+
+		CONFIG_SND_PCM="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_PCM_MODULE 1
+_ACEOF
+
+		CONFIG_SND_MPU401_UART="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_MPU401_UART_MODULE 1
+_ACEOF
+
+		CONFIG_SND_AC97_CODEC="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_AC97_CODEC_MODULE 1
+_ACEOF
+
+		CONFIG_SND_AU8830="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_AU8830_MODULE 1
+_ACEOF
+
+		;;
+	azt3328)
+		CONFIG_SND="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_MODULE 1
+_ACEOF
+
+		CONFIG_SND_TIMER="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_TIMER_MODULE 1
+_ACEOF
+
+		CONFIG_SND_HWDEP="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_HWDEP_MODULE 1
+_ACEOF
+
+		CONFIG_SND_RAWMIDI="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_RAWMIDI_MODULE 1
+_ACEOF
+
+		CONFIG_SND_OPL3_LIB="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_OPL3_LIB_MODULE 1
+_ACEOF
+
+		CONFIG_SND_MPU401_UART="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_MPU401_UART_MODULE 1
+_ACEOF
+
+		CONFIG_SND_PCM="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_PCM_MODULE 1
+_ACEOF
+
+		CONFIG_SND_AZT3328="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_AZT3328_MODULE 1
+_ACEOF
+
+		;;
+	bt87x)
+		CONFIG_SND="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_MODULE 1
+_ACEOF
+
+		CONFIG_SND_TIMER="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_TIMER_MODULE 1
+_ACEOF
+
+		CONFIG_SND_PCM="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_PCM_MODULE 1
+_ACEOF
+
+		CONFIG_SND_BT87X="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_BT87X_MODULE 1
+_ACEOF
+
+		;;
+	cs46xx)
+		CONFIG_SND="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_MODULE 1
+_ACEOF
+
+		CONFIG_SND_TIMER="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_TIMER_MODULE 1
+_ACEOF
+
+		CONFIG_SND_PCM="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_PCM_MODULE 1
+_ACEOF
+
+		CONFIG_SND_RAWMIDI="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_RAWMIDI_MODULE 1
+_ACEOF
+
+		CONFIG_SND_AC97_CODEC="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_AC97_CODEC_MODULE 1
+_ACEOF
+
+		CONFIG_SND_CS46XX="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_CS46XX_MODULE 1
+_ACEOF
+
+		;;
+	cs46xx-new-dsp)
+		CONFIG_SND="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_MODULE 1
+_ACEOF
+
+		CONFIG_SND_CS46XX_NEW_DSP="y"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_CS46XX_NEW_DSP 1
+_ACEOF
+
+		;;
+	cs4281)
+		CONFIG_SND="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_MODULE 1
+_ACEOF
+
+		CONFIG_SND_TIMER="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_TIMER_MODULE 1
+_ACEOF
+
+		CONFIG_SND_HWDEP="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_HWDEP_MODULE 1
+_ACEOF
+
+		CONFIG_SND_PCM="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_PCM_MODULE 1
+_ACEOF
+
+		CONFIG_SND_OPL3_LIB="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_OPL3_LIB_MODULE 1
+_ACEOF
+
+		CONFIG_SND_RAWMIDI="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_RAWMIDI_MODULE 1
+_ACEOF
+
+		CONFIG_SND_AC97_CODEC="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_AC97_CODEC_MODULE 1
+_ACEOF
+
+		CONFIG_SND_CS4281="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_CS4281_MODULE 1
+_ACEOF
+
+		;;
+	emu10k1)
+		CONFIG_SND="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_MODULE 1
+_ACEOF
+
+		CONFIG_SND_TIMER="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_TIMER_MODULE 1
+_ACEOF
+
+		CONFIG_SND_PCM="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_PCM_MODULE 1
+_ACEOF
+
+		CONFIG_SND_HWDEP="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_HWDEP_MODULE 1
+_ACEOF
+
+		CONFIG_SND_RAWMIDI="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_RAWMIDI_MODULE 1
+_ACEOF
+
+		CONFIG_SND_AC97_CODEC="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_AC97_CODEC_MODULE 1
+_ACEOF
+
+		CONFIG_SND_EMU10K1="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_EMU10K1_MODULE 1
+_ACEOF
+
+		;;
+	korg1212)
+		CONFIG_SND="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_MODULE 1
+_ACEOF
+
+		CONFIG_SND_TIMER="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_TIMER_MODULE 1
+_ACEOF
+
+		CONFIG_SND_PCM="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_PCM_MODULE 1
+_ACEOF
+
+		CONFIG_SND_KORG1212="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_KORG1212_MODULE 1
+_ACEOF
+
+		;;
+	mixart)
+		CONFIG_SND="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_MODULE 1
+_ACEOF
+
+		CONFIG_SND_TIMER="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_TIMER_MODULE 1
+_ACEOF
+
+		CONFIG_SND_HWDEP="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_HWDEP_MODULE 1
+_ACEOF
+
+		CONFIG_SND_PCM="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_PCM_MODULE 1
+_ACEOF
+
+		CONFIG_SND_MIXART="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_MIXART_MODULE 1
+_ACEOF
+
+		;;
+	nm256)
+		CONFIG_SND="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_MODULE 1
+_ACEOF
+
+		CONFIG_SND_TIMER="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_TIMER_MODULE 1
+_ACEOF
+
+		CONFIG_SND_PCM="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_PCM_MODULE 1
+_ACEOF
+
+		CONFIG_SND_AC97_CODEC="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_AC97_CODEC_MODULE 1
+_ACEOF
+
+		CONFIG_SND_NM256="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_NM256_MODULE 1
+_ACEOF
+
+		;;
+	rme32)
+		CONFIG_SND="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_MODULE 1
+_ACEOF
+
+		CONFIG_SND_TIMER="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_TIMER_MODULE 1
+_ACEOF
+
+		CONFIG_SND_PCM="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_PCM_MODULE 1
+_ACEOF
+
+		CONFIG_SND_RME32="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_RME32_MODULE 1
+_ACEOF
+
+		;;
+	rme96)
+		CONFIG_SND="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_MODULE 1
+_ACEOF
+
+		CONFIG_SND_TIMER="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_TIMER_MODULE 1
+_ACEOF
+
+		CONFIG_SND_PCM="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_PCM_MODULE 1
+_ACEOF
+
+		CONFIG_SND_RME96="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_RME96_MODULE 1
+_ACEOF
+
+		;;
+	rme9652)
+		CONFIG_SND="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_MODULE 1
+_ACEOF
+
+		CONFIG_SND_TIMER="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_TIMER_MODULE 1
+_ACEOF
+
+		CONFIG_SND_PCM="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_PCM_MODULE 1
+_ACEOF
+
+		CONFIG_SND_RME9652="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_RME9652_MODULE 1
+_ACEOF
+
+		;;
+	hdsp)
+		CONFIG_SND="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_MODULE 1
+_ACEOF
+
+		CONFIG_SND_TIMER="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_TIMER_MODULE 1
+_ACEOF
+
+		CONFIG_SND_HWDEP="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_HWDEP_MODULE 1
+_ACEOF
+
+		CONFIG_SND_RAWMIDI="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_RAWMIDI_MODULE 1
+_ACEOF
+
+		CONFIG_SND_PCM="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_PCM_MODULE 1
+_ACEOF
+
+		CONFIG_SND_HDSP="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_HDSP_MODULE 1
+_ACEOF
+
+		;;
+	trident)
+		CONFIG_SND="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_MODULE 1
+_ACEOF
+
+		CONFIG_SND_TIMER="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_TIMER_MODULE 1
+_ACEOF
+
+		CONFIG_SND_RAWMIDI="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_RAWMIDI_MODULE 1
+_ACEOF
+
+		CONFIG_SND_PCM="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_PCM_MODULE 1
+_ACEOF
+
+		CONFIG_SND_MPU401_UART="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_MPU401_UART_MODULE 1
+_ACEOF
+
+		CONFIG_SND_AC97_CODEC="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_AC97_CODEC_MODULE 1
+_ACEOF
+
+		CONFIG_SND_TRIDENT="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_TRIDENT_MODULE 1
+_ACEOF
+
+		;;
+	ymfpci)
+		CONFIG_SND="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_MODULE 1
+_ACEOF
+
+		CONFIG_SND_TIMER="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_TIMER_MODULE 1
+_ACEOF
+
+		CONFIG_SND_HWDEP="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_HWDEP_MODULE 1
+_ACEOF
+
+		CONFIG_SND_RAWMIDI="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_RAWMIDI_MODULE 1
+_ACEOF
+
+		CONFIG_SND_PCM="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_PCM_MODULE 1
+_ACEOF
+
+		CONFIG_SND_OPL3_LIB="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_OPL3_LIB_MODULE 1
+_ACEOF
+
+		CONFIG_SND_MPU401_UART="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_MPU401_UART_MODULE 1
+_ACEOF
+
+		CONFIG_SND_AC97_CODEC="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_AC97_CODEC_MODULE 1
+_ACEOF
+
+		CONFIG_SND_YMFPCI="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_YMFPCI_MODULE 1
+_ACEOF
+
+		;;
+	als4000)
+		CONFIG_SND="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_MODULE 1
+_ACEOF
+
+		CONFIG_SND_TIMER="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_TIMER_MODULE 1
+_ACEOF
+
+		CONFIG_SND_HWDEP="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_HWDEP_MODULE 1
+_ACEOF
+
+		CONFIG_SND_RAWMIDI="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_RAWMIDI_MODULE 1
+_ACEOF
+
+		CONFIG_SND_OPL3_LIB="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_OPL3_LIB_MODULE 1
+_ACEOF
+
+		CONFIG_SND_MPU401_UART="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_MPU401_UART_MODULE 1
+_ACEOF
+
+		CONFIG_SND_PCM="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_PCM_MODULE 1
+_ACEOF
+
+		CONFIG_SND_ALS4000="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_ALS4000_MODULE 1
+_ACEOF
+
+		;;
+	cmipci)
+		CONFIG_SND="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_MODULE 1
+_ACEOF
+
+		CONFIG_SND_TIMER="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_TIMER_MODULE 1
+_ACEOF
+
+		CONFIG_SND_HWDEP="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_HWDEP_MODULE 1
+_ACEOF
+
+		CONFIG_SND_RAWMIDI="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_RAWMIDI_MODULE 1
+_ACEOF
+
+		CONFIG_SND_OPL3_LIB="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_OPL3_LIB_MODULE 1
+_ACEOF
+
+		CONFIG_SND_MPU401_UART="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_MPU401_UART_MODULE 1
+_ACEOF
+
+		CONFIG_SND_PCM="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_PCM_MODULE 1
+_ACEOF
+
+		CONFIG_SND_CMIPCI="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_CMIPCI_MODULE 1
+_ACEOF
+
+		;;
+	ens1370)
+		CONFIG_SND="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_MODULE 1
+_ACEOF
+
+		CONFIG_SND_TIMER="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_TIMER_MODULE 1
+_ACEOF
+
+		CONFIG_SND_RAWMIDI="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_RAWMIDI_MODULE 1
+_ACEOF
+
+		CONFIG_SND_PCM="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_PCM_MODULE 1
+_ACEOF
+
+		CONFIG_SND_ENS1370="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_ENS1370_MODULE 1
+_ACEOF
+
+		;;
+	ens1371)
+		CONFIG_SND="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_MODULE 1
+_ACEOF
+
+		CONFIG_SND_TIMER="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_TIMER_MODULE 1
+_ACEOF
+
+		CONFIG_SND_PCM="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_PCM_MODULE 1
+_ACEOF
+
+		CONFIG_SND_RAWMIDI="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_RAWMIDI_MODULE 1
+_ACEOF
+
+		CONFIG_SND_AC97_CODEC="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_AC97_CODEC_MODULE 1
+_ACEOF
+
+		CONFIG_SND_ENS1371="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_ENS1371_MODULE 1
+_ACEOF
+
+		;;
+	es1938)
+		CONFIG_SND="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_MODULE 1
+_ACEOF
+
+		CONFIG_SND_TIMER="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_TIMER_MODULE 1
+_ACEOF
+
+		CONFIG_SND_HWDEP="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_HWDEP_MODULE 1
+_ACEOF
+
+		CONFIG_SND_RAWMIDI="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_RAWMIDI_MODULE 1
+_ACEOF
+
+		CONFIG_SND_PCM="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_PCM_MODULE 1
+_ACEOF
+
+		CONFIG_SND_OPL3_LIB="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_OPL3_LIB_MODULE 1
+_ACEOF
+
+		CONFIG_SND_MPU401_UART="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_MPU401_UART_MODULE 1
+_ACEOF
+
+		CONFIG_SND_AC97_CODEC="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_AC97_CODEC_MODULE 1
+_ACEOF
+
+		CONFIG_SND_ES1938="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_ES1938_MODULE 1
+_ACEOF
+
+		;;
+	es1968)
+		CONFIG_SND="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_MODULE 1
+_ACEOF
+
+		CONFIG_SND_TIMER="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_TIMER_MODULE 1
+_ACEOF
+
+		CONFIG_SND_RAWMIDI="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_RAWMIDI_MODULE 1
+_ACEOF
+
+		CONFIG_SND_PCM="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_PCM_MODULE 1
+_ACEOF
+
+		CONFIG_SND_MPU401_UART="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_MPU401_UART_MODULE 1
+_ACEOF
+
+		CONFIG_SND_AC97_CODEC="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_AC97_CODEC_MODULE 1
+_ACEOF
+
+		CONFIG_SND_ES1968="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_ES1968_MODULE 1
+_ACEOF
+
+		;;
+	maestro3)
+		CONFIG_SND="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_MODULE 1
+_ACEOF
+
+		CONFIG_SND_TIMER="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_TIMER_MODULE 1
+_ACEOF
+
+		CONFIG_SND_PCM="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_PCM_MODULE 1
+_ACEOF
+
+		CONFIG_SND_AC97_CODEC="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_AC97_CODEC_MODULE 1
+_ACEOF
+
+		CONFIG_SND_MAESTRO3="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_MAESTRO3_MODULE 1
+_ACEOF
+
+		;;
+	fm801)
+		CONFIG_SND="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_MODULE 1
+_ACEOF
+
+		CONFIG_SND_TIMER="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_TIMER_MODULE 1
+_ACEOF
+
+		CONFIG_SND_HWDEP="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_HWDEP_MODULE 1
+_ACEOF
+
+		CONFIG_SND_RAWMIDI="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_RAWMIDI_MODULE 1
+_ACEOF
+
+		CONFIG_SND_PCM="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_PCM_MODULE 1
+_ACEOF
+
+		CONFIG_SND_OPL3_LIB="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_OPL3_LIB_MODULE 1
+_ACEOF
+
+		CONFIG_SND_MPU401_UART="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_MPU401_UART_MODULE 1
+_ACEOF
+
+		CONFIG_SND_AC97_CODEC="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_AC97_CODEC_MODULE 1
+_ACEOF
+
+		CONFIG_SND_FM801="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_FM801_MODULE 1
+_ACEOF
+
+		;;
+	fm801-tea575x)
+		CONFIG_SND="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_MODULE 1
+_ACEOF
+
+		CONFIG_SND_FM801_TEA575X="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_FM801_TEA575X_MODULE 1
+_ACEOF
+
+		;;
+	ice1712)
+		CONFIG_SND="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_MODULE 1
+_ACEOF
+
+		CONFIG_SND_TIMER="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_TIMER_MODULE 1
+_ACEOF
+
+		CONFIG_SND_RAWMIDI="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_RAWMIDI_MODULE 1
+_ACEOF
+
+		CONFIG_SND_PCM="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_PCM_MODULE 1
+_ACEOF
+
+		CONFIG_SND_MPU401_UART="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_MPU401_UART_MODULE 1
+_ACEOF
+
+		CONFIG_SND_AC97_CODEC="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_AC97_CODEC_MODULE 1
+_ACEOF
+
+		CONFIG_SND_ICE1712="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_ICE1712_MODULE 1
+_ACEOF
+
+		;;
+	ice1724)
+		CONFIG_SND="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_MODULE 1
+_ACEOF
+
+		CONFIG_SND_TIMER="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_TIMER_MODULE 1
+_ACEOF
+
+		CONFIG_SND_RAWMIDI="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_RAWMIDI_MODULE 1
+_ACEOF
+
+		CONFIG_SND_PCM="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_PCM_MODULE 1
+_ACEOF
+
+		CONFIG_SND_MPU401_UART="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_MPU401_UART_MODULE 1
+_ACEOF
+
+		CONFIG_SND_AC97_CODEC="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_AC97_CODEC_MODULE 1
+_ACEOF
+
+		CONFIG_SND_ICE1724="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_ICE1724_MODULE 1
+_ACEOF
+
+		;;
+	intel8x0)
+		CONFIG_SND="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_MODULE 1
+_ACEOF
+
+		CONFIG_SND_TIMER="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_TIMER_MODULE 1
+_ACEOF
+
+		CONFIG_SND_RAWMIDI="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_RAWMIDI_MODULE 1
+_ACEOF
+
+		CONFIG_SND_PCM="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_PCM_MODULE 1
+_ACEOF
+
+		CONFIG_SND_MPU401_UART="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_MPU401_UART_MODULE 1
+_ACEOF
+
+		CONFIG_SND_AC97_CODEC="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_AC97_CODEC_MODULE 1
+_ACEOF
+
+		CONFIG_SND_INTEL8X0="m"
 		cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_ALS100_MODULE 1
+#define CONFIG_SND_INTEL8X0_MODULE 1
 _ACEOF
 
 		;;
-	azt2320)
-		CONFIG_SND_AZT2320="m"
+	intel8x0m)
+		CONFIG_SND="m"
 		cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_AZT2320_MODULE 1
+#define CONFIG_SND_MODULE 1
 _ACEOF
 
-		;;
-	cmi8330)
-		CONFIG_SND_CMI8330="m"
+		CONFIG_SND_TIMER="m"
 		cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_CMI8330_MODULE 1
+#define CONFIG_SND_TIMER_MODULE 1
 _ACEOF
 
-		;;
-	dt019x)
-		CONFIG_SND_DT019X="m"
+		CONFIG_SND_PCM="m"
 		cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_DT019X_MODULE 1
+#define CONFIG_SND_PCM_MODULE 1
 _ACEOF
 
-		;;
-	es18xx)
-		CONFIG_SND_ES18XX="m"
+		CONFIG_SND_AC97_CODEC="m"
 		cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_ES18XX_MODULE 1
+#define CONFIG_SND_AC97_CODEC_MODULE 1
 _ACEOF
 
-		;;
-	opl3sa2)
-		CONFIG_SND_OPL3SA2="m"
+		CONFIG_SND_INTEL8X0M="m"
 		cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_OPL3SA2_MODULE 1
+#define CONFIG_SND_INTEL8X0M_MODULE 1
 _ACEOF
 
 		;;
-	sgalaxy)
-		CONFIG_SND_SGALAXY="m"
+	sonicvibes)
+		CONFIG_SND="m"
 		cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_SGALAXY_MODULE 1
+#define CONFIG_SND_MODULE 1
 _ACEOF
 
-		;;
-	sscape)
-		CONFIG_SND_SSCAPE="m"
+		CONFIG_SND_TIMER="m"
 		cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_SSCAPE_MODULE 1
+#define CONFIG_SND_TIMER_MODULE 1
 _ACEOF
 
-		;;
-	ad1816a)
-		CONFIG_SND_AD1816A="m"
+		CONFIG_SND_HWDEP="m"
 		cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_AD1816A_MODULE 1
+#define CONFIG_SND_HWDEP_MODULE 1
 _ACEOF
 
-		;;
-	ad1848)
-		CONFIG_SND_AD1848="m"
+		CONFIG_SND_RAWMIDI="m"
 		cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_AD1848_MODULE 1
+#define CONFIG_SND_RAWMIDI_MODULE 1
 _ACEOF
 
-		;;
-	cs4231)
-		CONFIG_SND_CS4231="m"
+		CONFIG_SND_PCM="m"
 		cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_CS4231_MODULE 1
+#define CONFIG_SND_PCM_MODULE 1
 _ACEOF
 
-		;;
-	cs4232)
-		CONFIG_SND_CS4232="m"
+		CONFIG_SND_OPL3_LIB="m"
 		cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_CS4232_MODULE 1
+#define CONFIG_SND_OPL3_LIB_MODULE 1
 _ACEOF
 
-		;;
-	cs4236)
-		CONFIG_SND_CS4236="m"
+		CONFIG_SND_MPU401_UART="m"
 		cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_CS4236_MODULE 1
+#define CONFIG_SND_MPU401_UART_MODULE 1
 _ACEOF
 
-		;;
-	pc98-cs4232)
-		CONFIG_SND_PC98_CS4232="m"
+		CONFIG_SND_AC97_CODEC="m"
 		cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_PC98_CS4232_MODULE 1
+#define CONFIG_SND_AC97_CODEC_MODULE 1
 _ACEOF
 
-		;;
-	es1688)
-		CONFIG_SND_ES1688="m"
+		CONFIG_SND_SONICVIBES="m"
 		cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_ES1688_MODULE 1
+#define CONFIG_SND_SONICVIBES_MODULE 1
 _ACEOF
 
 		;;
-	gusclassic)
-		CONFIG_SND_GUSCLASSIC="m"
+	via82xx)
+		CONFIG_SND="m"
 		cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_GUSCLASSIC_MODULE 1
+#define CONFIG_SND_MODULE 1
 _ACEOF
 
-		;;
-	gusmax)
-		CONFIG_SND_GUSMAX="m"
+		CONFIG_SND_TIMER="m"
 		cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_GUSMAX_MODULE 1
+#define CONFIG_SND_TIMER_MODULE 1
 _ACEOF
 
-		;;
-	gusextreme)
-		CONFIG_SND_GUSEXTREME="m"
+		CONFIG_SND_RAWMIDI="m"
 		cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_GUSEXTREME_MODULE 1
+#define CONFIG_SND_RAWMIDI_MODULE 1
 _ACEOF
 
-		;;
-	interwave)
-		CONFIG_SND_INTERWAVE="m"
+		CONFIG_SND_PCM="m"
 		cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_INTERWAVE_MODULE 1
+#define CONFIG_SND_PCM_MODULE 1
 _ACEOF
 
-		;;
-	interwave-stb)
-		CONFIG_SND_INTERWAVE_STB="m"
+		CONFIG_SND_MPU401_UART="m"
 		cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_INTERWAVE_STB_MODULE 1
+#define CONFIG_SND_MPU401_UART_MODULE 1
 _ACEOF
 
-		;;
-	opti92x-ad1848)
-		CONFIG_SND_OPTI92X_AD1848="m"
+		CONFIG_SND_AC97_CODEC="m"
 		cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_OPTI92X_AD1848_MODULE 1
+#define CONFIG_SND_AC97_CODEC_MODULE 1
 _ACEOF
 
-		;;
-	opti92x-cs4231)
-		CONFIG_SND_OPTI92X_CS4231="m"
+		CONFIG_SND_VIA82XX="m"
 		cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_OPTI92X_CS4231_MODULE 1
+#define CONFIG_SND_VIA82XX_MODULE 1
 _ACEOF
 
 		;;
-	opti93x)
-		CONFIG_SND_OPTI93X="m"
+	vx222)
+		CONFIG_SND="m"
 		cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_OPTI93X_MODULE 1
+#define CONFIG_SND_MODULE 1
 _ACEOF
 
-		;;
-	sb8)
-		CONFIG_SND_SB8="m"
+		CONFIG_SND_HWDEP="m"
 		cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_SB8_MODULE 1
+#define CONFIG_SND_HWDEP_MODULE 1
 _ACEOF
 
-		;;
-	sb16)
-		CONFIG_SND_SB16="m"
+		CONFIG_SND_TIMER="m"
 		cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_SB16_MODULE 1
+#define CONFIG_SND_TIMER_MODULE 1
 _ACEOF
 
-		;;
-	sbawe)
-		CONFIG_SND_SBAWE="m"
+		CONFIG_SND_PCM="m"
 		cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_SBAWE_MODULE 1
+#define CONFIG_SND_PCM_MODULE 1
 _ACEOF
 
-		;;
-	es968)
-		CONFIG_SND_ES968="m"
+		CONFIG_SND_VX_LIB="m"
 		cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_ES968_MODULE 1
+#define CONFIG_SND_VX_LIB_MODULE 1
 _ACEOF
 
-		;;
-	wavefront)
-		CONFIG_SND_WAVEFRONT="m"
+		CONFIG_SND_VX222="m"
 		cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_WAVEFRONT_MODULE 1
+#define CONFIG_SND_VX222_MODULE 1
 _ACEOF
 
 		;;
-	als4000)
-		CONFIG_SND_ALS4000="m"
+	pdplus)
+		CONFIG_SND="m"
 		cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_ALS4000_MODULE 1
+#define CONFIG_SND_MODULE 1
 _ACEOF
 
-		;;
-	azt3328)
-		CONFIG_SND_AZT3328="m"
+		CONFIG_SND_TIMER="m"
 		cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_AZT3328_MODULE 1
+#define CONFIG_SND_TIMER_MODULE 1
 _ACEOF
 
-		;;
-	bt87x)
-		CONFIG_SND_BT87X="m"
+		CONFIG_SND_PCM="m"
 		cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_BT87X_MODULE 1
+#define CONFIG_SND_PCM_MODULE 1
 _ACEOF
 
-		;;
-	cmipci)
-		CONFIG_SND_CMIPCI="m"
+		CONFIG_SND_PDPLUS="m"
 		cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_CMIPCI_MODULE 1
+#define CONFIG_SND_PDPLUS_MODULE 1
 _ACEOF
 
 		;;
-	cs4281)
-		CONFIG_SND_CS4281="m"
+	hdspm)
+		CONFIG_SND="m"
 		cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_CS4281_MODULE 1
+#define CONFIG_SND_MODULE 1
 _ACEOF
 
-		;;
-	ens1370)
-		CONFIG_SND_ENS1370="m"
+		CONFIG_SND_TIMER="m"
 		cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_ENS1370_MODULE 1
+#define CONFIG_SND_TIMER_MODULE 1
 _ACEOF
 
-		;;
-	ens1371)
-		CONFIG_SND_ENS1371="m"
+		CONFIG_SND_HWDEP="m"
 		cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_ENS1371_MODULE 1
+#define CONFIG_SND_HWDEP_MODULE 1
 _ACEOF
 
-		;;
-	es1938)
-		CONFIG_SND_ES1938="m"
+		CONFIG_SND_PCM="m"
 		cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_ES1938_MODULE 1
+#define CONFIG_SND_PCM_MODULE 1
 _ACEOF
 
-		;;
-	es1968)
-		CONFIG_SND_ES1968="m"
+		CONFIG_SND_HDSPM="m"
 		cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_ES1968_MODULE 1
+#define CONFIG_SND_HDSPM_MODULE 1
 _ACEOF
 
 		;;
-	fm801)
-		CONFIG_SND_FM801="m"
+	powermac)
+		CONFIG_SND="m"
 		cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_FM801_MODULE 1
+#define CONFIG_SND_MODULE 1
 _ACEOF
 
-		;;
-	intel8x0)
-		CONFIG_SND_INTEL8X0="m"
+		CONFIG_SND_TIMER="m"
 		cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_INTEL8X0_MODULE 1
+#define CONFIG_SND_TIMER_MODULE 1
 _ACEOF
 
-		;;
-	maestro3)
-		CONFIG_SND_MAESTRO3="m"
+		CONFIG_SND_PCM="m"
 		cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_MAESTRO3_MODULE 1
+#define CONFIG_SND_PCM_MODULE 1
 _ACEOF
 
-		;;
-	rme32)
-		CONFIG_SND_RME32="m"
+		CONFIG_SND_POWERMAC="m"
 		cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_RME32_MODULE 1
+#define CONFIG_SND_POWERMAC_MODULE 1
 _ACEOF
 
 		;;
-	rme96)
-		CONFIG_SND_RME96="m"
+	sa11xx-uda1341)
+		CONFIG_SND="m"
 		cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_RME96_MODULE 1
+#define CONFIG_SND_MODULE 1
 _ACEOF
 
-		;;
-	sonicvibes)
-		CONFIG_SND_SONICVIBES="m"
+		CONFIG_SND_TIMER="m"
 		cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_SONICVIBES_MODULE 1
+#define CONFIG_SND_TIMER_MODULE 1
 _ACEOF
 
-		;;
-	via82xx)
-		CONFIG_SND_VIA82XX="m"
+		CONFIG_SND_PCM="m"
 		cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_VIA82XX_MODULE 1
+#define CONFIG_SND_PCM_MODULE 1
+_ACEOF
+
+		CONFIG_SND_SA11XX_UDA1341="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_SA11XX_UDA1341_MODULE 1
 _ACEOF
 
 		;;
-	ali5451)
-		CONFIG_SND_ALI5451="m"
+	usb-audio)
+		CONFIG_SND="m"
 		cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_ALI5451_MODULE 1
+#define CONFIG_SND_MODULE 1
+_ACEOF
+
+		CONFIG_SND_TIMER="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_TIMER_MODULE 1
+_ACEOF
+
+		CONFIG_SND_RAWMIDI="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_RAWMIDI_MODULE 1
+_ACEOF
+
+		CONFIG_SND_PCM="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_PCM_MODULE 1
+_ACEOF
+
+		CONFIG_SND_USB_AUDIO="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_USB_AUDIO_MODULE 1
 _ACEOF
 
 		;;
-	cs46xx)
-		CONFIG_SND_CS46XX="m"
+	usb-usx2y)
+		CONFIG_SND="m"
 		cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_CS46XX_MODULE 1
+#define CONFIG_SND_MODULE 1
+_ACEOF
+
+		CONFIG_SND_RAWMIDI="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_RAWMIDI_MODULE 1
+_ACEOF
+
+		CONFIG_SND_TIMER="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_TIMER_MODULE 1
+_ACEOF
+
+		CONFIG_SND_PCM="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_PCM_MODULE 1
+_ACEOF
+
+		CONFIG_SND_HWDEP="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_HWDEP_MODULE 1
+_ACEOF
+
+		CONFIG_SND_USB_AUDIO="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_USB_AUDIO_MODULE 1
+_ACEOF
+
+		CONFIG_SND_USB_USX2Y="m"
+		cat >>confdefs.h <<\_ACEOF
+#define CONFIG_SND_USB_USX2Y_MODULE 1
 _ACEOF
 
 		;;
-	emu10k1)
-		CONFIG_SND_EMU10K1="m"
+	vxpocket)
+		CONFIG_SND="m"
 		cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_EMU10K1_MODULE 1
+#define CONFIG_SND_MODULE 1
 _ACEOF
 
-		;;
-	ice1712)
-		CONFIG_SND_ICE1712="m"
+		CONFIG_SND_HWDEP="m"
 		cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_ICE1712_MODULE 1
+#define CONFIG_SND_HWDEP_MODULE 1
 _ACEOF
 
-		;;
-	ice1724)
-		CONFIG_SND_ICE1724="m"
+		CONFIG_SND_TIMER="m"
 		cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_ICE1724_MODULE 1
+#define CONFIG_SND_TIMER_MODULE 1
 _ACEOF
 
-		;;
-	korg1212)
-		CONFIG_SND_KORG1212="m"
+		CONFIG_SND_PCM="m"
 		cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_KORG1212_MODULE 1
+#define CONFIG_SND_PCM_MODULE 1
 _ACEOF
 
-		;;
-	mixart)
-		CONFIG_SND_MIXART="m"
+		CONFIG_SND_VX_LIB="m"
 		cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_MIXART_MODULE 1
+#define CONFIG_SND_VX_LIB_MODULE 1
 _ACEOF
 
-		;;
-	nm256)
-		CONFIG_SND_NM256="m"
+		CONFIG_SND_VXPOCKET="m"
 		cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_NM256_MODULE 1
+#define CONFIG_SND_VXPOCKET_MODULE 1
 _ACEOF
 
 		;;
-	rme9652)
-		CONFIG_SND_RME9652="m"
+	vxp440)
+		CONFIG_SND="m"
 		cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_RME9652_MODULE 1
+#define CONFIG_SND_MODULE 1
 _ACEOF
 
-		;;
-	hdsp)
-		CONFIG_SND_HDSP="m"
+		CONFIG_SND_HWDEP="m"
 		cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_HDSP_MODULE 1
+#define CONFIG_SND_HWDEP_MODULE 1
 _ACEOF
 
-		;;
-	trident)
-		CONFIG_SND_TRIDENT="m"
+		CONFIG_SND_TIMER="m"
 		cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_TRIDENT_MODULE 1
+#define CONFIG_SND_TIMER_MODULE 1
 _ACEOF
 
-		;;
-	vx222)
-		CONFIG_SND_VX222="m"
+		CONFIG_SND_PCM="m"
 		cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_VX222_MODULE 1
+#define CONFIG_SND_PCM_MODULE 1
 _ACEOF
 
-		;;
-	ymfpci)
-		CONFIG_SND_YMFPCI="m"
+		CONFIG_SND_VX_LIB="m"
 		cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_YMFPCI_MODULE 1
+#define CONFIG_SND_VX_LIB_MODULE 1
 _ACEOF
 
-		;;
-	powermac)
-		CONFIG_SND_POWERMAC="m"
+		CONFIG_SND_VXP440="m"
 		cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_POWERMAC_MODULE 1
+#define CONFIG_SND_VXP440_MODULE 1
 _ACEOF
 
 		;;
-	sa11xx-uda1341)
-		CONFIG_SND_SA11XX_UDA1341="m"
+	pdaudiocf)
+		CONFIG_SND="m"
 		cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_SA11XX_UDA1341_MODULE 1
+#define CONFIG_SND_MODULE 1
 _ACEOF
 
-		;;
-	usb-audio)
-		CONFIG_SND_USB_AUDIO="m"
+		CONFIG_SND_TIMER="m"
 		cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_USB_AUDIO_MODULE 1
+#define CONFIG_SND_TIMER_MODULE 1
 _ACEOF
 
-		;;
-	harmony)
-		CONFIG_SND_HARMONY="m"
+		CONFIG_SND_PCM="m"
 		cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_HARMONY_MODULE 1
+#define CONFIG_SND_PCM_MODULE 1
 _ACEOF
 
-		;;
-	vxpocket)
-		CONFIG_SND_VXPOCKET="m"
+		CONFIG_SND_PDAUDIOCF="m"
 		cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_VXPOCKET_MODULE 1
+#define CONFIG_SND_PDAUDIOCF_MODULE 1
 _ACEOF
 
 		;;
-	vxp440)
-		CONFIG_SND_VXP440="m"
+	sun-amd7930)
+		CONFIG_SND="m"
 		cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_VXP440_MODULE 1
+#define CONFIG_SND_MODULE 1
 _ACEOF
 
-		;;
-	serialmidi)
-		CONFIG_SND_SERIALMIDI="m"
+		CONFIG_SND_TIMER="m"
 		cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_SERIALMIDI_MODULE 1
+#define CONFIG_SND_TIMER_MODULE 1
 _ACEOF
 
-		;;
-	intel8x0m)
-		CONFIG_SND_INTEL8X0M="m"
+		CONFIG_SND_PCM="m"
 		cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_INTEL8X0M_MODULE 1
+#define CONFIG_SND_PCM_MODULE 1
 _ACEOF
 
-		;;
-	hdspm)
-		CONFIG_SND_HDSPM="m"
+		CONFIG_SND_SUN_AMD7930="m"
 		cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_HDSPM_MODULE 1
+#define CONFIG_SND_SUN_AMD7930_MODULE 1
 _ACEOF
 
 		;;
-	atiixp)
-		CONFIG_SND_ATIIXP="m"
+	sun-cs4231)
+		CONFIG_SND="m"
 		cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_ATIIXP_MODULE 1
+#define CONFIG_SND_MODULE 1
 _ACEOF
 
-		;;
-	pdplus)
-		CONFIG_SND_PDPLUS="m"
+		CONFIG_SND_TIMER="m"
 		cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_PDPLUS_MODULE 1
+#define CONFIG_SND_TIMER_MODULE 1
 _ACEOF
 
-		;;
-	msnd-pinnacle)
-		CONFIG_SND_MSND_PINNACLE="m"
+		CONFIG_SND_PCM="m"
 		cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_MSND_PINNACLE_MODULE 1
+#define CONFIG_SND_PCM_MODULE 1
 _ACEOF
 
-		;;
-	pdaudiocf)
-		CONFIG_SND_PDAUDIOCF="m"
+		CONFIG_SND_SUN_CS4231="m"
 		cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_PDAUDIOCF_MODULE 1
+#define CONFIG_SND_SUN_CS4231_MODULE 1
 _ACEOF
 
 		;;
-	usb-usx2y)
-		CONFIG_SND_USB_USX2Y="m"
+	harmony)
+		CONFIG_SND="m"
 		cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_USB_USX2Y_MODULE 1
+#define CONFIG_SND_MODULE 1
 _ACEOF
 
-		;;
-	au8810)
-		CONFIG_SND_AU8810="m"
+		CONFIG_SND_TIMER="m"
 		cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_AU8810_MODULE 1
+#define CONFIG_SND_TIMER_MODULE 1
 _ACEOF
 
-		;;
-	au8820)
-		CONFIG_SND_AU8820="m"
+		CONFIG_SND_PCM="m"
 		cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_AU8820_MODULE 1
+#define CONFIG_SND_PCM_MODULE 1
 _ACEOF
 
-		;;
-	au8830)
-		CONFIG_SND_AU8830="m"
+		CONFIG_SND_HARMONY="m"
 		cat >>confdefs.h <<\_ACEOF
-#define CONFIG_SND_AU8830_MODULE 1
+#define CONFIG_SND_HARMONY_MODULE 1
 _ACEOF
 
 		;;
@@ -7621,6 +10050,66 @@
 fi
 
 
+if test "$CONFIG_SND_OSSEMUL" = "y"; then
+  CONFIG_SND_MIXER_OSS="$CONFIG_SND"
+  CONFIG_SND_PCM_OSS="$CONFIG_SND_PCM"
+  if test -n "$CONFIG_SND_SEQUENCER"; then
+    CONFIG_SND_SEQUENCER_OSS="y"
+  fi
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 
 
 
@@ -8358,6 +10847,7 @@
 s,@NEW_KBUILD@,$NEW_KBUILD,;t t
 s,@CONFIG_SND_MVERSION@,$CONFIG_SND_MVERSION,;t t
 s,@CONFIG_PCI@,$CONFIG_PCI,;t t
+s,@CONFIG_EXPERIMENTAL@,$CONFIG_EXPERIMENTAL,;t t
 s,@CONFIG_SGI@,$CONFIG_SGI,;t t
 s,@moddir@,$moddir,;t t
 s,@modsubdir@,$modsubdir,;t t
@@ -8381,35 +10871,52 @@
 s,@CONFIG_SND_VERSION@,$CONFIG_SND_VERSION,;t t
 s,@CONFIG_SND_DATE@,$CONFIG_SND_DATE,;t t
 s,@CONFIG_SND_SEQUENCER@,$CONFIG_SND_SEQUENCER,;t t
-s,@CONFIG_SND_OSSEMUL@,$CONFIG_SND_OSSEMUL,;t t
 s,@CONFIG_SND_RTCTIMER@,$CONFIG_SND_RTCTIMER,;t t
 s,@CONFIG_RTC@,$CONFIG_RTC,;t t
 s,@CONFIG_USB@,$CONFIG_USB,;t t
 s,@CONFIG_PCMCIA@,$CONFIG_PCMCIA,;t t
 s,@CONFIG_X86_PC9800@,$CONFIG_X86_PC9800,;t t
+s,@CONFIG_SOUND@,$CONFIG_SOUND,;t t
+s,@CONFIG_SND@,$CONFIG_SND,;t t
+s,@CONFIG_SPARC64@,$CONFIG_SPARC64,;t t
+s,@CONFIG_PPC64@,$CONFIG_PPC64,;t t
+s,@CONFIG_X86_64@,$CONFIG_X86_64,;t t
+s,@CONFIG_IA32_EMULATION@,$CONFIG_IA32_EMULATION,;t t
+s,@CONFIG_SND_TIMER@,$CONFIG_SND_TIMER,;t t
+s,@CONFIG_SND_PCM@,$CONFIG_SND_PCM,;t t
+s,@CONFIG_SND_HWDEP@,$CONFIG_SND_HWDEP,;t t
+s,@CONFIG_SND_RAWMIDI@,$CONFIG_SND_RAWMIDI,;t t
+s,@CONFIG_SND_SEQ_DUMMY@,$CONFIG_SND_SEQ_DUMMY,;t t
+s,@CONFIG_SND_OSSEMUL@,$CONFIG_SND_OSSEMUL,;t t
+s,@CONFIG_SND_MIXER_OSS@,$CONFIG_SND_MIXER_OSS,;t t
+s,@CONFIG_SND_PCM_OSS@,$CONFIG_SND_PCM_OSS,;t t
+s,@CONFIG_SND_SEQUENCER_OSS@,$CONFIG_SND_SEQUENCER_OSS,;t t
+s,@CONFIG_SND_VERBOSE_PRINTK@,$CONFIG_SND_VERBOSE_PRINTK,;t t
+s,@CONFIG_SND_DEBUG@,$CONFIG_SND_DEBUG,;t t
+s,@CONFIG_SND_DEBUG_MEMORY@,$CONFIG_SND_DEBUG_MEMORY,;t t
+s,@CONFIG_SND_DEBUG_DETECT@,$CONFIG_SND_DEBUG_DETECT,;t t
+s,@CONFIG_SND_MPU401_UART@,$CONFIG_SND_MPU401_UART,;t t
+s,@CONFIG_SND_OPL3_LIB@,$CONFIG_SND_OPL3_LIB,;t t
+s,@CONFIG_SND_OPL4_LIB@,$CONFIG_SND_OPL4_LIB,;t t
+s,@CONFIG_SND_VX_LIB@,$CONFIG_SND_VX_LIB,;t t
 s,@CONFIG_SND_DUMMY@,$CONFIG_SND_DUMMY,;t t
 s,@CONFIG_SND_VIRMIDI@,$CONFIG_SND_VIRMIDI,;t t
-s,@CONFIG_SND_SERIAL_U16550@,$CONFIG_SND_SERIAL_U16550,;t t
 s,@CONFIG_SND_MTPAV@,$CONFIG_SND_MTPAV,;t t
+s,@CONFIG_SND_SERIAL_U16550@,$CONFIG_SND_SERIAL_U16550,;t t
 s,@CONFIG_SND_MPU401@,$CONFIG_SND_MPU401,;t t
-s,@CONFIG_SND_ALS100@,$CONFIG_SND_ALS100,;t t
-s,@CONFIG_SND_AZT2320@,$CONFIG_SND_AZT2320,;t t
-s,@CONFIG_SND_CMI8330@,$CONFIG_SND_CMI8330,;t t
-s,@CONFIG_SND_DT019X@,$CONFIG_SND_DT019X,;t t
-s,@CONFIG_SND_ES18XX@,$CONFIG_SND_ES18XX,;t t
-s,@CONFIG_SND_OPL3SA2@,$CONFIG_SND_OPL3SA2,;t t
-s,@CONFIG_SND_SGALAXY@,$CONFIG_SND_SGALAXY,;t t
-s,@CONFIG_SND_SSCAPE@,$CONFIG_SND_SSCAPE,;t t
+s,@CONFIG_SND_SERIALMIDI@,$CONFIG_SND_SERIALMIDI,;t t
 s,@CONFIG_SND_AD1816A@,$CONFIG_SND_AD1816A,;t t
 s,@CONFIG_SND_AD1848@,$CONFIG_SND_AD1848,;t t
 s,@CONFIG_SND_CS4231@,$CONFIG_SND_CS4231,;t t
 s,@CONFIG_SND_CS4232@,$CONFIG_SND_CS4232,;t t
 s,@CONFIG_SND_CS4236@,$CONFIG_SND_CS4236,;t t
 s,@CONFIG_SND_PC98_CS4232@,$CONFIG_SND_PC98_CS4232,;t t
+s,@CONFIG_SND_ES968@,$CONFIG_SND_ES968,;t t
 s,@CONFIG_SND_ES1688@,$CONFIG_SND_ES1688,;t t
+s,@CONFIG_SND_ES18XX@,$CONFIG_SND_ES18XX,;t t
 s,@CONFIG_SND_GUSCLASSIC@,$CONFIG_SND_GUSCLASSIC,;t t
-s,@CONFIG_SND_GUSMAX@,$CONFIG_SND_GUSMAX,;t t
 s,@CONFIG_SND_GUSEXTREME@,$CONFIG_SND_GUSEXTREME,;t t
+s,@CONFIG_SND_GUSMAX@,$CONFIG_SND_GUSMAX,;t t
 s,@CONFIG_SND_INTERWAVE@,$CONFIG_SND_INTERWAVE,;t t
 s,@CONFIG_SND_INTERWAVE_STB@,$CONFIG_SND_INTERWAVE_STB,;t t
 s,@CONFIG_SND_OPTI92X_AD1848@,$CONFIG_SND_OPTI92X_AD1848,;t t
@@ -8418,54 +10925,69 @@
 s,@CONFIG_SND_SB8@,$CONFIG_SND_SB8,;t t
 s,@CONFIG_SND_SB16@,$CONFIG_SND_SB16,;t t
 s,@CONFIG_SND_SBAWE@,$CONFIG_SND_SBAWE,;t t
-s,@CONFIG_SND_ES968@,$CONFIG_SND_ES968,;t t
+s,@CONFIG_SND_SB16_CSP@,$CONFIG_SND_SB16_CSP,;t t
 s,@CONFIG_SND_WAVEFRONT@,$CONFIG_SND_WAVEFRONT,;t t
-s,@CONFIG_SND_ALS4000@,$CONFIG_SND_ALS4000,;t t
+s,@CONFIG_SND_ALS100@,$CONFIG_SND_ALS100,;t t
+s,@CONFIG_SND_AZT2320@,$CONFIG_SND_AZT2320,;t t
+s,@CONFIG_SND_CMI8330@,$CONFIG_SND_CMI8330,;t t
+s,@CONFIG_SND_DT019X@,$CONFIG_SND_DT019X,;t t
+s,@CONFIG_SND_OPL3SA2@,$CONFIG_SND_OPL3SA2,;t t
+s,@CONFIG_SND_SGALAXY@,$CONFIG_SND_SGALAXY,;t t
+s,@CONFIG_SND_SSCAPE@,$CONFIG_SND_SSCAPE,;t t
+s,@CONFIG_SND_MSND_PINNACLE@,$CONFIG_SND_MSND_PINNACLE,;t t
+s,@CONFIG_SND_AC97_CODEC@,$CONFIG_SND_AC97_CODEC,;t t
+s,@CONFIG_SND_ALI5451@,$CONFIG_SND_ALI5451,;t t
+s,@CONFIG_SND_ATIIXP@,$CONFIG_SND_ATIIXP,;t t
+s,@CONFIG_SND_AU8810@,$CONFIG_SND_AU8810,;t t
+s,@CONFIG_SND_AU8820@,$CONFIG_SND_AU8820,;t t
+s,@CONFIG_SND_AU8830@,$CONFIG_SND_AU8830,;t t
 s,@CONFIG_SND_AZT3328@,$CONFIG_SND_AZT3328,;t t
 s,@CONFIG_SND_BT87X@,$CONFIG_SND_BT87X,;t t
-s,@CONFIG_SND_CMIPCI@,$CONFIG_SND_CMIPCI,;t t
+s,@CONFIG_SND_CS46XX@,$CONFIG_SND_CS46XX,;t t
+s,@CONFIG_SND_CS46XX_NEW_DSP@,$CONFIG_SND_CS46XX_NEW_DSP,;t t
 s,@CONFIG_SND_CS4281@,$CONFIG_SND_CS4281,;t t
+s,@CONFIG_SND_EMU10K1@,$CONFIG_SND_EMU10K1,;t t
+s,@CONFIG_SND_KORG1212@,$CONFIG_SND_KORG1212,;t t
+s,@CONFIG_SND_MIXART@,$CONFIG_SND_MIXART,;t t
+s,@CONFIG_SND_NM256@,$CONFIG_SND_NM256,;t t
+s,@CONFIG_SND_RME32@,$CONFIG_SND_RME32,;t t
+s,@CONFIG_SND_RME96@,$CONFIG_SND_RME96,;t t
+s,@CONFIG_SND_RME9652@,$CONFIG_SND_RME9652,;t t
+s,@CONFIG_SND_HDSP@,$CONFIG_SND_HDSP,;t t
+s,@CONFIG_SND_TRIDENT@,$CONFIG_SND_TRIDENT,;t t
+s,@CONFIG_SND_YMFPCI@,$CONFIG_SND_YMFPCI,;t t
+s,@CONFIG_SND_ALS4000@,$CONFIG_SND_ALS4000,;t t
+s,@CONFIG_SND_CMIPCI@,$CONFIG_SND_CMIPCI,;t t
 s,@CONFIG_SND_ENS1370@,$CONFIG_SND_ENS1370,;t t
 s,@CONFIG_SND_ENS1371@,$CONFIG_SND_ENS1371,;t t
 s,@CONFIG_SND_ES1938@,$CONFIG_SND_ES1938,;t t
 s,@CONFIG_SND_ES1968@,$CONFIG_SND_ES1968,;t t
+s,@CONFIG_SND_MAESTRO3@,$CONFIG_SND_MAESTRO3,;t t
 s,@CONFIG_SND_FM801@,$CONFIG_SND_FM801,;t t
+s,@CONFIG_SND_FM801_TEA575X@,$CONFIG_SND_FM801_TEA575X,;t t
+s,@CONFIG_SND_ICE1712@,$CONFIG_SND_ICE1712,;t t
+s,@CONFIG_SND_ICE1724@,$CONFIG_SND_ICE1724,;t t
 s,@CONFIG_SND_INTEL8X0@,$CONFIG_SND_INTEL8X0,;t t
-s,@CONFIG_SND_MAESTRO3@,$CONFIG_SND_MAESTRO3,;t t
-s,@CONFIG_SND_RME32@,$CONFIG_SND_RME32,;t t
-s,@CONFIG_SND_RME96@,$CONFIG_SND_RME96,;t t
+s,@CONFIG_SND_INTEL8X0M@,$CONFIG_SND_INTEL8X0M,;t t
 s,@CONFIG_SND_SONICVIBES@,$CONFIG_SND_SONICVIBES,;t t
 s,@CONFIG_SND_VIA82XX@,$CONFIG_SND_VIA82XX,;t t
-s,@CONFIG_SND_ALI5451@,$CONFIG_SND_ALI5451,;t t
-s,@CONFIG_SND_CS46XX@,$CONFIG_SND_CS46XX,;t t
-s,@CONFIG_SND_EMU10K1@,$CONFIG_SND_EMU10K1,;t t
-s,@CONFIG_SND_ICE1712@,$CONFIG_SND_ICE1712,;t t
-s,@CONFIG_SND_ICE1724@,$CONFIG_SND_ICE1724,;t t
-s,@CONFIG_SND_KORG1212@,$CONFIG_SND_KORG1212,;t t
-s,@CONFIG_SND_MIXART@,$CONFIG_SND_MIXART,;t t
-s,@CONFIG_SND_NM256@,$CONFIG_SND_NM256,;t t
-s,@CONFIG_SND_RME9652@,$CONFIG_SND_RME9652,;t t
-s,@CONFIG_SND_HDSP@,$CONFIG_SND_HDSP,;t t
-s,@CONFIG_SND_TRIDENT@,$CONFIG_SND_TRIDENT,;t t
 s,@CONFIG_SND_VX222@,$CONFIG_SND_VX222,;t t
-s,@CONFIG_SND_YMFPCI@,$CONFIG_SND_YMFPCI,;t t
+s,@CONFIG_SND_PDPLUS@,$CONFIG_SND_PDPLUS,;t t
+s,@CONFIG_SND_HDSPM@,$CONFIG_SND_HDSPM,;t t
 s,@CONFIG_SND_POWERMAC@,$CONFIG_SND_POWERMAC,;t t
 s,@CONFIG_SND_SA11XX_UDA1341@,$CONFIG_SND_SA11XX_UDA1341,;t t
+s,@CONFIG_ARCH_SA1100@,$CONFIG_ARCH_SA1100,;t t
 s,@CONFIG_SND_USB_AUDIO@,$CONFIG_SND_USB_AUDIO,;t t
-s,@CONFIG_SND_HARMONY@,$CONFIG_SND_HARMONY,;t t
+s,@CONFIG_SND_USB_USX2Y@,$CONFIG_SND_USB_USX2Y,;t t
 s,@CONFIG_SND_VXPOCKET@,$CONFIG_SND_VXPOCKET,;t t
 s,@CONFIG_SND_VXP440@,$CONFIG_SND_VXP440,;t t
-s,@CONFIG_SND_SERIALMIDI@,$CONFIG_SND_SERIALMIDI,;t t
-s,@CONFIG_SND_INTEL8X0M@,$CONFIG_SND_INTEL8X0M,;t t
-s,@CONFIG_SND_HDSPM@,$CONFIG_SND_HDSPM,;t t
-s,@CONFIG_SND_ATIIXP@,$CONFIG_SND_ATIIXP,;t t
-s,@CONFIG_SND_PDPLUS@,$CONFIG_SND_PDPLUS,;t t
-s,@CONFIG_SND_MSND_PINNACLE@,$CONFIG_SND_MSND_PINNACLE,;t t
 s,@CONFIG_SND_PDAUDIOCF@,$CONFIG_SND_PDAUDIOCF,;t t
-s,@CONFIG_SND_USB_USX2Y@,$CONFIG_SND_USB_USX2Y,;t t
-s,@CONFIG_SND_AU8810@,$CONFIG_SND_AU8810,;t t
-s,@CONFIG_SND_AU8820@,$CONFIG_SND_AU8820,;t t
-s,@CONFIG_SND_AU8830@,$CONFIG_SND_AU8830,;t t
+s,@CONFIG_SPARC32@,$CONFIG_SPARC32,;t t
+s,@CONFIG_SND_SUN_AMD7930@,$CONFIG_SND_SUN_AMD7930,;t t
+s,@CONFIG_SBUS@,$CONFIG_SBUS,;t t
+s,@CONFIG_SND_SUN_CS4231@,$CONFIG_SND_SUN_CS4231,;t t
+s,@CONFIG_SND_HARMONY@,$CONFIG_SND_HARMONY,;t t
+s,@CONFIG_SOUND_PRIME@,$CONFIG_SOUND_PRIME,;t t
 s,@c_opts@,$c_opts,;t t
 s,@m_opts@,$m_opts,;t t
 s,@GENKSYMS@,$GENKSYMS,;t t
Index: debian/alsa-driver/configure.in
diff -u debian/alsa-driver/configure.in:1.22 debian/alsa-driver/configure.in:1.23
--- debian/alsa-driver/configure.in:1.22	Sun Feb 29 17:13:51 2004
+++ debian/alsa-driver/configure.in	Tue Apr 13 13:39:25 2004
@@ -2,9 +2,10 @@
 dnl
 dnl Copyright (c) by Jaroslav Kysela <perex@suse.cz>
 
+AC_PREREQ(2.53)
 AC_INIT(acore/sound.patch)
 AC_PREFIX_DEFAULT(/usr)
-CONFIG_SND_VERSION="1.0.3"
+CONFIG_SND_VERSION="1.0.4"
 
 dnl Checks for programs.
 AC_PROG_CC
@@ -36,6 +37,8 @@
 AC_SUBST(SRCDIR)
 AC_MSG_RESULT($SRCDIR)
 
+ALSA_TOPLEVEL_INIT
+
 dnl Check for cross compile...
 AC_MSG_CHECKING(cross compile)
 AC_ARG_WITH(cross,
@@ -160,6 +163,7 @@
 [AC_TRY_RUN([
 #include <stdio.h>
 #include <ctype.h>
+#include <string.h>
 #include "$CONFIG_SND_KERNELDIR/include/linux/compile.h"
 int main()
 {
@@ -182,6 +186,8 @@
      *dptr = *ptr;
    *dptr = '\t';
    *dptr = '\0';
+   if (!strcmp(compiler, " "))
+	compiler[0] = '\0';
    fprintf(f,"%s\n",compiler);
    fclose(f);
    }
@@ -456,6 +462,7 @@
     touch include/linux/workqueue.h
   fi
 fi
+CHECK_KERNEL_HEADER(linux/dma-mapping.h)
 CHECK_KERNEL_HEADER(asm/hw_irq.h)
 CHECK_KERNEL_HEADER(linux/device.h)
 CHECK_KERNEL_HEADER(linux/jiffies.h, [#include <linux/sched.h>
@@ -487,6 +494,10 @@
 CHECK_KERNEL_CONFIG(CONFIG_PCI, [PCI support in kernel])
 AC_SUBST(CONFIG_PCI)
 
+dnl Check experimental drivers...
+CHECK_KERNEL_CONFIG(CONFIG_EXPERIMENTAL, [Experimental drivers in kernel])
+AC_SUBST(CONFIG_EXPERIMENTAL)
+
 dnl Check for SGI/MIPS (HAL2) support...
 AC_MSG_CHECKING(for SGI/MIPS (HAL2) architecture)
 CONFIG_SGI=""
@@ -534,6 +545,7 @@
   verbose_printk="$enableval", verbose_printk="yes")
 case "$verbose_printk" in
   yes)
+    CONFIG_SND_VERBOSE_PRINTK=y
     AC_DEFINE(CONFIG_SND_VERBOSE_PRINTK)
     AC_MSG_RESULT(on)
     ;;
@@ -546,29 +558,28 @@
 dnl Debug level
 AC_MSG_CHECKING(for debug level)
 AC_ARG_WITH(debug,
-  [  --with-debug=level      give the debug level (none,basic,memory,full,detect)],
+  [  --with-debug=level      give the debug level (none,basic,full,detect)],
   debug="$withval", debug="none")
 case "$debug" in
   basic)
     AC_MSG_RESULT(basic)
+    CONFIG_SND_DEBUG=y
     AC_DEFINE(CONFIG_SND_DEBUG)
     ;;
-  memory)
-    AC_MSG_RESULT(memory)
-    AC_DEFINE(CONFIG_SND_DEBUG)
-    AC_DEFINE(CONFIG_SND_DEBUG_MEMORY)
-    ;;
-  full)
+  memory|full)
     AC_MSG_RESULT(full)
+    CONFIG_SND_DEBUG=y
     AC_DEFINE(CONFIG_SND_DEBUG)
+    CONFIG_SND_DEBUG_MEMORY=y
     AC_DEFINE(CONFIG_SND_DEBUG_MEMORY)
-    AC_DEFINE(CONFIG_SND_DEBUG_FULL)
-    ;;    
+    ;;
   detect)
     AC_MSG_RESULT(detect)
+    CONFIG_SND_DEBUG=y
     AC_DEFINE(CONFIG_SND_DEBUG)
+    CONFIG_SND_DEBUG_MEMORY=y
     AC_DEFINE(CONFIG_SND_DEBUG_MEMORY)
-    AC_DEFINE(CONFIG_SND_DEBUG_FULL)
+    CONFIG_SND_DEBUG_DETECT=y
     AC_DEFINE(CONFIG_SND_DEBUG_DETECT)
     ;;
   *)
@@ -951,9 +962,11 @@
 fi
 AC_SUBST(msmp)
 
-dnl Check for video device support...
+dnl Check for video device support... (2.2 kernels excluded due to API incompatibility)
+if test $kpatchlevel -gt 2; then
 CHECK_KERNEL_CONFIG(CONFIG_VIDEO_DEV, [Video device support in kernel])
 AC_SUBST(CONFIG_VIDEO_DEV)
+fi
 
 dnl Check for ISA PnP driver in kernel...
 AC_MSG_CHECKING(for ISA PnP driver in kernel)
@@ -1388,7 +1401,6 @@
 if test "$ossemul" = "yes"; then
   CONFIG_SND_OSSEMUL="y"
 fi
-AC_SUBST(CONFIG_SND_OSSEMUL)
 if test "$CONFIG_SND_OSSEMUL" = "y"; then
   AC_DEFINE(CONFIG_SND_OSSEMUL)
   AC_DEFINE(CONFIG_SND_MIXER_OSS_MODULE)
@@ -1480,8 +1492,19 @@
 AC_SUBST(CONFIG_X86_PC9800)
 
 dnl Check for which cards to compile driver for...
-ALSA_TOPLEVEL_INIT
 ALSA_TOPLEVEL_SELECT
+
+dnl OSS emulations
+if test "$CONFIG_SND_OSSEMUL" = "y"; then
+  CONFIG_SND_MIXER_OSS="$CONFIG_SND"
+  CONFIG_SND_PCM_OSS="$CONFIG_SND_PCM"
+  if test -n "$CONFIG_SND_SEQUENCER"; then
+    CONFIG_SND_SEQUENCER_OSS="y"
+  fi
+fi
+
+dnl Output all stuffs
+ALSA_TOPLEVEL_OUTPUT
 
 dnl Some late substitutes...
 c_opts="$c_opts -DLINUX"
Index: debian/alsa-driver/debian/changelog
diff -u debian/alsa-driver/debian/changelog:1.230 debian/alsa-driver/debian/changelog:1.231
--- debian/alsa-driver/debian/changelog:1.230	Sat Mar 20 16:44:50 2004
+++ debian/alsa-driver/debian/changelog	Tue Apr 13 13:39:26 2004
@@ -1,5 +1,6 @@
-alsa-driver (1.0.3-2) unstable; urgency=low
+alsa-driver (1.0.4-1) unstable; urgency=low
 
+  * New upstream release
   * Jordi Mallach:
     - debian/po/cs.po: new Czech translation of debconf templates
       (thanks Miroslav Kure <kurem@upcase.inf.upol.cz>; closes: #235644).
@@ -9,7 +10,7 @@
     - debian/control: change Maintainer name to "Debian ALSA Maintainers".
   * Unreleased.
 
- -- Jordi Mallach <jordi@debian.org>  Tue,  9 Mar 2004 17:44:27 +0100
+ -- David B. Harris <dbharris@debian.org>  Tue, 13 Apr 2004 15:37:34 -0400
 
 alsa-driver (1.0.3-1) unstable; urgency=high
 
Index: debian/alsa-driver/include/adriver.h
diff -u debian/alsa-driver/include/adriver.h:1.17 debian/alsa-driver/include/adriver.h:1.18
--- debian/alsa-driver/include/adriver.h:1.17	Sun Feb 29 17:13:51 2004
+++ debian/alsa-driver/include/adriver.h	Tue Apr 13 13:39:26 2004
@@ -57,14 +57,14 @@
 #define request_module(name, args...) snd_compat_request_module(name, ##args)
 #endif
 
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
 #include <linux/compiler.h>
 #ifndef __user
 #define __user
 #endif
 
-#ifdef CONFIG_PCI
+/* for compat layer */
 #include <linux/pci.h>
-#endif
 
 #ifdef LINUX_2_2
 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 2, 18)
@@ -175,6 +175,8 @@
 #define MODULE_LICENSE(license)
 #endif
 
+#endif /* < 2.6.0 */
+
 #ifndef CONFIG_HAVE_STRLCPY
 size_t snd_compat_strlcpy(char *dest, const char *src, size_t size);
 #define strlcpy(dest, src, size) snd_compat_strlcpy(dest, src, size)
@@ -207,8 +209,9 @@
 #define writeq(v, a) do { __writeq((v),(a)); mb(); } while(0)
 #endif
 
-#include <linux/interrupt.h>
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 0)
 #if LINUX_VERSION_CODE < KERNEL_VERSION(2, 5, 28)
+#include <linux/interrupt.h>
 static inline void synchronize_irq_wrapper(unsigned int irq) { synchronize_irq(); }
 #undef synchronize_irq
 #define synchronize_irq(irq)	synchronize_irq_wrapper(irq)
@@ -219,6 +222,7 @@
 #define IRQ_RETVAL(x)	/*void*/
 typedef void irqreturn_t;
 #endif
+#endif /* < 2.6.0 */
 
 #ifndef min
 /*
@@ -241,6 +245,7 @@
 #define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
 #endif
 
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 0)
 #include <linux/devfs_fs_kernel.h>
 #ifdef CONFIG_DEVFS_FS
 #if LINUX_VERSION_CODE < KERNEL_VERSION(2, 5, 29)
@@ -252,7 +257,7 @@
 #undef devfs_remove
 void snd_compat_devfs_remove(const char *fmt, ...);
 #define devfs_remove snd_compat_devfs_remove
-#endif
+#endif /* < 2.5.29 */
 #if LINUX_VERSION_CODE < KERNEL_VERSION(2, 5, 67)
 #undef devfs_mk_dir
 int snd_compat_devfs_mk_dir(const char *dir, ...);
@@ -260,7 +265,7 @@
 #undef devfs_mk_cdev
 int snd_compat_devfs_mk_cdev(dev_t dev, umode_t mode, const char *fmt, ...);
 #define devfs_mk_cdev snd_compat_devfs_mk_cdev
-#endif
+#endif /* < 2.5.67 */
 #if LINUX_VERSION_CODE < KERNEL_VERSION(2, 3, 0)
 static inline void devfs_find_and_unregister (devfs_handle_t dir, const char *name,
 					      unsigned int major, unsigned int minor,
@@ -289,6 +294,7 @@
 #undef devfs_mk_cdev
 #define devfs_mk_cdev(dev, mode, fmt, args...) do { (void)(dev); } while (0)
 #endif /* CONFIG_DEVFS_FS */
+#endif /* < 2.6.0 */
 
 /* workarounds for USB API */
 #if defined(SND_NEED_USB_WRAPPER) && (defined(CONFIG_USB) || defined(CONFIG_USB_MODULE))
@@ -334,7 +340,6 @@
 #define usb_host_config		usb_config_descriptor
 #define usb_host_interface	usb_interface_descriptor
 #define usb_host_endpoint	usb_endpoint_descriptor
-#define get_iface(cfg, num)	(&(cfg)->interface[num])
 #define get_iface_desc(iface)	(iface)
 #define get_endpoint(alt,ep)	(&(alt)->endpoint[ep])
 #define get_ep_desc(ep)		(ep)
@@ -350,9 +355,37 @@
 #define usb_pipe_needs_resubmit(pipe) (!usb_pipeint(pipe))
 #endif
 
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 3, 0)
+enum {
+	USB_SPEED_UNKNOWN = 0,
+	USB_SPEED_LOW, USB_SPEED_FULL,
+	USB_SPEED_HIGH
+};
+#define snd_usb_get_speed(dev) USB_SPEED_FULL
+#endif
+
 #endif /* SND_NEED_USB_WRAPPER && CONFIG_USB */
 
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 5, 24) \
+    && LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 5) \
+    && defined(SND_NEED_USB_SET_INTERFACE) \
+    && (defined(CONFIG_USB) || defined(CONFIG_USB_MODULE))
+
+#include <linux/usb.h>
+
+inline static int real_usb_set_interface(struct usb_device *dev, int interface, int alternate)
+{
+	return usb_set_interface(dev, interface, alternate);
+}
+
+int snd_hack_usb_set_interface(struct usb_device *dev, int interface, int alternate);
+#undef usb_set_interface
+#define usb_set_interface(dev,iface,alt) snd_hack_usb_set_interface(dev,iface,alt)
+
+#endif
+
 /* workqueue-alike; 2.5.45 */
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 0)
 #include <linux/workqueue.h>
 #if LINUX_VERSION_CODE < KERNEL_VERSION(2, 5, 45) && !defined(__WORK_INITIALIZER)
 struct work_struct {
@@ -372,7 +405,8 @@
 	struct work_struct n = __WORK_INITIALIZER(n, f, d)
 int snd_compat_schedule_work(struct work_struct *work);
 #define schedule_work(w) snd_compat_schedule_work(w)
-#endif /* 2.5.45 */
+#endif /* < 2.5.45 */
+#endif /* < 2.6.0 */
 
 /* 2.5 new modules */
 #if LINUX_VERSION_CODE < KERNEL_VERSION(2, 5, 0)
@@ -435,6 +469,13 @@
 
 #if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 0)
 #define snd_card_set_dev(card,dev) /* no struct device */
+#endif
+
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 5, 0)
+#define snd_dma_pci_data(pci)	((struct device *)(pci))
+#define snd_dma_isa_data()	NULL
+#define snd_dma_sbus_data(sbus)	((struct device *)(sbus))
+#define snd_dma_continuous_data(x)	((struct device *)(unsigned long)(x))
 #endif
 
 #endif /* __SOUND_LOCAL_DRIVER_H */
Index: debian/alsa-driver/include/config1.h.in
diff -u debian/alsa-driver/include/config1.h.in:1.11 debian/alsa-driver/include/config1.h.in:1.12
--- debian/alsa-driver/include/config1.h.in:1.11	Sun Feb 29 17:13:51 2004
+++ debian/alsa-driver/include/config1.h.in	Tue Apr 13 13:39:26 2004
@@ -1,30 +1,55 @@
 /* Soundcard configuration for ALSA driver */
-/* Copyright (c) by Anders Semb Hermansen <ahermans@vf.telia.no>, */
-/*                  Jaroslav Kysela <perex@suse.cz> */
+/* Copyright (c) by Jaroslav Kysela <perex@suse.cz>, */
+/*                  Anders Semb Hermansen <ahermans@vf.telia.no> */
 
+#undef CONFIG_SOUND_MODULE
+#undef CONFIG_SND_MODULE
+#undef CONFIG_SND_BIT32_EMUL_MODULE
+#undef CONFIG_SPARC64_MODULE
+#undef CONFIG_PPC64_MODULE
+#undef CONFIG_X86_64_MODULE
+#undef CONFIG_IA32_EMULATION_MODULE
+#undef CONFIG_SND_TIMER_MODULE
+#undef CONFIG_SND_PCM_MODULE
+#undef CONFIG_SND_HWDEP_MODULE
+#undef CONFIG_SND_RAWMIDI_MODULE
+#undef CONFIG_SND_SEQUENCER_MODULE
+#undef CONFIG_SND_SEQ_DUMMY_MODULE
+#undef CONFIG_SND_OSSEMUL_MODULE
+#undef CONFIG_SND_MIXER_OSS_MODULE
+#undef CONFIG_SND_PCM_OSS_MODULE
+#undef CONFIG_SND_SEQUENCER_OSS
+#undef CONFIG_SND_RTCTIMER_MODULE
+#undef CONFIG_RTC_MODULE
+#undef CONFIG_SND_VERBOSE_PRINTK
+#undef CONFIG_SND_DEBUG
+#undef CONFIG_SND_DEBUG_MEMORY
+#undef CONFIG_SND_DEBUG_DETECT
+#undef CONFIG_SND_MPU401_UART_MODULE
+#undef CONFIG_SND_OPL3_LIB_MODULE
+#undef CONFIG_SND_OPL4_LIB_MODULE
+#undef CONFIG_SND_VX_LIB_MODULE
 #undef CONFIG_SND_DUMMY_MODULE
 #undef CONFIG_SND_VIRMIDI_MODULE
-#undef CONFIG_SND_SERIAL_U16550_MODULE
 #undef CONFIG_SND_MTPAV_MODULE
+#undef CONFIG_SND_SERIAL_U16550_MODULE
 #undef CONFIG_SND_MPU401_MODULE
-#undef CONFIG_SND_ALS100_MODULE
-#undef CONFIG_SND_AZT2320_MODULE
-#undef CONFIG_SND_CMI8330_MODULE
-#undef CONFIG_SND_DT019X_MODULE
-#undef CONFIG_SND_ES18XX_MODULE
-#undef CONFIG_SND_OPL3SA2_MODULE
-#undef CONFIG_SND_SGALAXY_MODULE
-#undef CONFIG_SND_SSCAPE_MODULE
+#undef CONFIG_SND_SERIALMIDI_MODULE
+#undef CONFIG_ISA_MODULE
 #undef CONFIG_SND_AD1816A_MODULE
+#undef CONFIG_ISAPNP_MODULE
 #undef CONFIG_SND_AD1848_MODULE
 #undef CONFIG_SND_CS4231_MODULE
 #undef CONFIG_SND_CS4232_MODULE
 #undef CONFIG_SND_CS4236_MODULE
 #undef CONFIG_SND_PC98_CS4232_MODULE
+#undef CONFIG_X86_PC9800_MODULE
+#undef CONFIG_SND_ES968_MODULE
 #undef CONFIG_SND_ES1688_MODULE
+#undef CONFIG_SND_ES18XX_MODULE
 #undef CONFIG_SND_GUSCLASSIC_MODULE
-#undef CONFIG_SND_GUSMAX_MODULE
 #undef CONFIG_SND_GUSEXTREME_MODULE
+#undef CONFIG_SND_GUSMAX_MODULE
 #undef CONFIG_SND_INTERWAVE_MODULE
 #undef CONFIG_SND_INTERWAVE_STB_MODULE
 #undef CONFIG_SND_OPTI92X_AD1848_MODULE
@@ -33,51 +58,75 @@
 #undef CONFIG_SND_SB8_MODULE
 #undef CONFIG_SND_SB16_MODULE
 #undef CONFIG_SND_SBAWE_MODULE
-#undef CONFIG_SND_ES968_MODULE
+#undef CONFIG_SND_SB16_CSP
 #undef CONFIG_SND_WAVEFRONT_MODULE
-#undef CONFIG_SND_ALS4000_MODULE
+#undef CONFIG_SND_ALS100_MODULE
+#undef CONFIG_SND_AZT2320_MODULE
+#undef CONFIG_SND_CMI8330_MODULE
+#undef CONFIG_SND_DT019X_MODULE
+#undef CONFIG_SND_OPL3SA2_MODULE
+#undef CONFIG_SND_SGALAXY_MODULE
+#undef CONFIG_SND_SSCAPE_MODULE
+#undef CONFIG_SND_MSND_PINNACLE_MODULE
+#undef CONFIG_PCI_MODULE
+#undef CONFIG_SND_AC97_CODEC_MODULE
+#undef CONFIG_SND_ALI5451_MODULE
+#undef CONFIG_SND_ATIIXP_MODULE
+#undef CONFIG_SND_AU8810_MODULE
+#undef CONFIG_SND_AU8820_MODULE
+#undef CONFIG_SND_AU8830_MODULE
 #undef CONFIG_SND_AZT3328_MODULE
+#undef CONFIG_EXPERIMENTAL_MODULE
 #undef CONFIG_SND_BT87X_MODULE
-#undef CONFIG_SND_CMIPCI_MODULE
+#undef CONFIG_SND_CS46XX_MODULE
+#undef CONFIG_SND_CS46XX_NEW_DSP
 #undef CONFIG_SND_CS4281_MODULE
+#undef CONFIG_SND_EMU10K1_MODULE
+#undef CONFIG_SND_KORG1212_MODULE
+#undef CONFIG_SND_MIXART_MODULE
+#undef CONFIG_SND_NM256_MODULE
+#undef CONFIG_SND_RME32_MODULE
+#undef CONFIG_SND_RME96_MODULE
+#undef CONFIG_SND_RME9652_MODULE
+#undef CONFIG_SND_HDSP_MODULE
+#undef CONFIG_SND_TRIDENT_MODULE
+#undef CONFIG_SND_YMFPCI_MODULE
+#undef CONFIG_SND_ALS4000_MODULE
+#undef CONFIG_SND_CMIPCI_MODULE
 #undef CONFIG_SND_ENS1370_MODULE
 #undef CONFIG_SND_ENS1371_MODULE
 #undef CONFIG_SND_ES1938_MODULE
 #undef CONFIG_SND_ES1968_MODULE
+#undef CONFIG_SND_MAESTRO3_MODULE
 #undef CONFIG_SND_FM801_MODULE
+#undef CONFIG_SND_FM801_TEA575X_MODULE
+#undef CONFIG_VIDEO_DEV_MODULE
+#undef CONFIG_SND_ICE1712_MODULE
+#undef CONFIG_SND_ICE1724_MODULE
 #undef CONFIG_SND_INTEL8X0_MODULE
-#undef CONFIG_SND_MAESTRO3_MODULE
-#undef CONFIG_SND_RME32_MODULE
-#undef CONFIG_SND_RME96_MODULE
+#undef CONFIG_SND_INTEL8X0M_MODULE
 #undef CONFIG_SND_SONICVIBES_MODULE
 #undef CONFIG_SND_VIA82XX_MODULE
-#undef CONFIG_SND_ALI5451_MODULE
-#undef CONFIG_SND_CS46XX_MODULE
-#undef CONFIG_SND_EMU10K1_MODULE
-#undef CONFIG_SND_ICE1712_MODULE
-#undef CONFIG_SND_ICE1724_MODULE
-#undef CONFIG_SND_KORG1212_MODULE
-#undef CONFIG_SND_MIXART_MODULE
-#undef CONFIG_SND_NM256_MODULE
-#undef CONFIG_SND_RME9652_MODULE
-#undef CONFIG_SND_HDSP_MODULE
-#undef CONFIG_SND_TRIDENT_MODULE
 #undef CONFIG_SND_VX222_MODULE
-#undef CONFIG_SND_YMFPCI_MODULE
+#undef CONFIG_SND_PDPLUS_MODULE
+#undef CONFIG_SND_HDSPM_MODULE
+#undef CONFIG_PPC_MODULE
 #undef CONFIG_SND_POWERMAC_MODULE
+#undef CONFIG_ARM_MODULE
 #undef CONFIG_SND_SA11XX_UDA1341_MODULE
+#undef CONFIG_ARCH_SA1100_MODULE
+#undef CONFIG_L3_MODULE
+#undef CONFIG_USB_MODULE
 #undef CONFIG_SND_USB_AUDIO_MODULE
-#undef CONFIG_SND_HARMONY_MODULE
+#undef CONFIG_SND_USB_USX2Y_MODULE
+#undef CONFIG_PCMCIA_MODULE
 #undef CONFIG_SND_VXPOCKET_MODULE
 #undef CONFIG_SND_VXP440_MODULE
-#undef CONFIG_SND_SERIALMIDI_MODULE
-#undef CONFIG_SND_INTEL8X0M_MODULE
-#undef CONFIG_SND_HDSPM_MODULE
-#undef CONFIG_SND_ATIIXP_MODULE
-#undef CONFIG_SND_PDPLUS_MODULE
-#undef CONFIG_SND_MSND_PINNACLE_MODULE
 #undef CONFIG_SND_PDAUDIOCF_MODULE
-#undef CONFIG_SND_USB_USX2Y_MODULE
-#undef CONFIG_SND_AU8810_MODULE
-#undef CONFIG_SND_AU8820_MODULE
-#undef CONFIG_SND_AU8830_MODULE
+#undef CONFIG_SPARC32_MODULE
+#undef CONFIG_SND_SUN_AMD7930_MODULE
+#undef CONFIG_SBUS_MODULE
+#undef CONFIG_SND_SUN_CS4231_MODULE
+#undef CONFIG_PARISC_MODULE
+#undef CONFIG_SND_HARMONY_MODULE
+#undef CONFIG_SOUND_PRIME_MODULE
Index: debian/alsa-driver/isa/msnd/msnd_pinnacle.c
diff -u debian/alsa-driver/isa/msnd/msnd_pinnacle.c:1.8 debian/alsa-driver/isa/msnd/msnd_pinnacle.c:1.9
--- debian/alsa-driver/isa/msnd/msnd_pinnacle.c:1.8	Wed Dec 24 20:02:31 2003
+++ debian/alsa-driver/isa/msnd/msnd_pinnacle.c	Tue Apr 13 13:39:26 2004
@@ -41,7 +41,7 @@
  * along with this program; if not, write to the Free Software
  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  *
- * msnd_pinnacle.c,v 1.8 2003/11/13 17:08:06 tiwai Exp
+ * msnd_pinnacle.c,v 1.9 2004/03/06 16:55:13 tiwai Exp
  *
  * 12-3-2000  Modified IO port validation  Steve Sycamore
  *
@@ -59,6 +59,7 @@
 #include <linux/config.h>
 #include <linux/version.h>
 #include <linux/module.h>
+#include <linux/interrupt.h>
 #include <linux/slab.h>
 #include <linux/types.h>
 #include <linux/delay.h>
Index: debian/alsa-driver/pci/au88x0/au8810.h
diff -u debian/alsa-driver/pci/au88x0/au8810.h:1.1.1.1 debian/alsa-driver/pci/au88x0/au8810.h:removed
--- debian/alsa-driver/pci/au88x0/au8810.h:1.1.1.1	Mon Oct  6 08:01:03 2003
+++ debian/alsa-driver/pci/au88x0/au8810.h	Tue Apr 13 13:39:27 2004
@@ -1,222 +0,0 @@
-/*
-    Aureal Advantage Soundcard driver.
- */
-
-#define CHIP_AU8810
-
-#define CARD_NAME "Aureal Advantage 3D Sound Processor"
-#define CARD_NAME_SHORT "au8810"
-
-#ifndef PCI_VENDOR_ID_AUREAL
-#define PCI_VENDOR_ID_AUREAL 0x12eb
-#endif
-#ifndef PCI_VENDOR_ID_AUREAL_ADVANTAGE
-#define PCI_DEVICE_ID_AUREAL_ADVANTAGE 0x0003
-#endif
-
-#define hwread(x,y) readl((x)+((y)>>2))
-#define hwwrite(x,y,z) writel((z),(x)+((y)>>2))
-
-#define NR_ADB 0x10
-#define NR_SRC 0x10
-#define NR_A3D 0x10
-#define NR_MIXIN 0x20
-#define NR_MIXOUT 0x10
-#define NR_WT 0x20
-
-/* ADBDMA */
-#define VORTEX_ADBDMA_STAT 0x27e00 /* read only, subbuffer, DMA pos */
-#define		POS_MASK 0x00000fff
-#define     POS_SHIFT 0x0
-#define 	ADB_SUBBUF_MASK 0x00003000  /* ADB only. */
-#define     ADB_SUBBUF_SHIFT 0xc        /* ADB only. */
-#define VORTEX_ADBDMA_CTRL 0x27180 	/* write only; format, flags, DMA pos */
-#define		OFFSET_MASK 0x00000fff
-#define     OFFSET_SHIFT 0x0
-#define		IE_MASK 0x00001000 /* interrupt enable. */
-#define     IE_SHIFT 0xc
-#define     U_MASK 0x00002000  /* Unknown. If you know, tell me. */
-#define     U_SHIFT 0xd
-#define		FMT_MASK 0x0003c000
-#define		FMT_SHIFT 0xe
-// The ADB masks and shift also are valid for the wtdma, except if specified otherwise.
-#define VORTEX_ADBDMA_BUFCFG0 0x27100
-#define VORTEX_ADBDMA_BUFCFG1 0x27104
-#define VORTEX_ADBDMA_BUFBASE 0x27000
-#define VORTEX_ADBDMA_START 0x27c00 /* Which subbuffer starts */
-
-/* WTDMA */
-#define VORTEX_WTDMA_CTRL 0x27fd8  /* format, DMA pos */
-#define VORTEX_WTDMA_STAT 0x27fe8  /* DMA subbuf, DMA pos */
-#define     WT_SUBBUF_MASK 0x3
-#define     WT_SUBBUF_SHIFT 0xc
-#define VORTEX_WTDMA_BUFBASE 0x27fc0
-#define VORTEX_WTDMA_BUFCFG0 0x27fd0
-#define VORTEX_WTDMA_BUFCFG1 0x27fd4
-#define VORTEX_WTDMA_START 0x27fe4 /* which subbuffer is first */
-
-/* ADB */
-#define VORTEX_ADB_SR 0x28400 /* Samplerates enable/disable */
-#define VORTEX_ADB_RTBASE 0x28000
-#define VORTEX_ADB_RTBASE_SIZE (VORTEX_ADB_CHNBASE - VORTEX_ADB_RTBASE)
-#define VORTEX_ADB_CHNBASE 0x282b4
-#define VORTEX_ADB_CHNBASE_SIZE (ADB_MASK - VORTEX_ADB_RTBASE_SIZE)
-#define 	ROUTE_MASK	0xffff
-#define		SOURCE_MASK	0xff00
-#define     ADB_MASK   0xff
-#define		ADB_SHIFT 0x8
-/* ADB address */
-#define		OFFSET_ADBDMA	0x00
-#define		OFFSET_SRCIN	0x40
-#define		OFFSET_SRCOUT	0x20
-#define		OFFSET_MIXIN	0x50
-#define		OFFSET_MIXOUT	0x30
-#define		OFFSET_CODECIN	0x70
-#define		OFFSET_CODECOUT	0x88
-#define		OFFSET_SPORTIN	0x78 /* ch 0x13 */
-#define		OFFSET_SPORTOUT	0x90
-#define		OFFSET_SPDIFOUT	0x92 /* ch 0x14 check this! */
-#define		OFFSET_EQIN		0xa0
-#define		OFFSET_EQOUT	0x7e /* 2 routes on ch 0x11 */
-
-/* ADB route translate helper */
-#define ADB_DMA(x) (x)
-#define ADB_SRCOUT(x) (x + OFFSET_SRCOUT)
-#define ADB_SRCIN(x) (x + OFFSET_SRCIN)
-#define ADB_MIXOUT(x) (x + OFFSET_MIXOUT)
-#define ADB_MIXIN(x) (x + OFFSET_MIXIN)
-#define ADB_CODECIN(x) (x + OFFSET_CODECIN)
-#define ADB_CODECOUT(x) (x + OFFSET_CODECOUT)
-#define ADB_SPORTIN(x) (x + OFFSET_SPORTIN)
-#define ADB_SPORTOUT(x) (x + OFFSET_SPORTOUT)
-#define ADB_SPDIFOUT(x)	(x + OFFSET_SPDIFOUT)
-#define ADB_EQIN(x) (x + OFFSET_EQIN)
-#define ADB_EQOUT(x) (x + OFFSET_EQOUT)
-#define ADB_A3DOUT(x) (x + 0x50) /* A3D blocks */
-#define ADB_A3DIN(x) (x + 0x70)
-
-#define MIX_OUTL    0xe
-#define MIX_OUTR    0xf
-#define MIX_INL     0x1e
-#define MIX_INR     0x1f
-#define MIX_DEFIGAIN 0x00 /* 0x8 => 6dB */
-#define MIX_DEFOGAIN 0x00
-
-/* MIXER */
-#define VORTEX_MIXER_SR 0x21f00
-#define VORTEX_MIXER_CHNBASE 0x21e40
-#define VORTEX_MIXER_RTBASE 0x21e00
-#define 	MIXER_RTBASE_SIZE 0x38
-#define VORTEX_MIX_U0 0x21c00 /* AU8820: 0x9c00 */
-
-/* MIX */
-#define VORTEX_MIX_INVOL_A 0x21000 /* in? */
-#define VORTEX_MIX_INVOL_B 0x20000 /* out? */
-#define VORTEX_MIX_VOL_A 0x21800
-#define VORTEX_MIX_VOL_B 0x20800
-#define VORTEX_MIX_ENIN 0x21a00 /* Input enable bits. 4 bits wide. */
-#define 	VOL_MIN 0x80 /* Input volume when muted. */
-#define		VOL_MAX 0x7f /* FIXME: Not confirmed! Just guessed. */
-
-/* SRC */
-#define VORTEX_SRCBLOCK_SR	0x26cc0
-#define VORTEX_SRC_CHNBASE	0x26c40
-#define VORTEX_SRC_RTBASE	0x26c00
-#define VORTEX_SRC_SOURCE	0x26cc4
-#define VORTEX_SRC_CONVRATIO 0x26e40
-#define VORTEX_SRC_DRIFT0	0x26e80
-#define VORTEX_SRC_DRIFT1	0x26ec0
-#define VORTEX_SRC_DRIFT2	0x26f40
-#define VORTEX_SRC_U0		0x26e00
-#define VORTEX_SRC_U1		0x26f00
-#define VORTEX_SRC_U3		0x26f80
-#define VORTEX_SRC_DATA		0x26800 /* 0xc800 */
-#define VORTEX_SRC_DATA0	0x26000
-
-/* FIFO */
-#define VORTEX_FIFO_ADBCTRL 0x16100 /* Control bits. */
-#define VORTEX_FIFO_WTCTRL 0x16000
-#define		FIFO_RDONLY	0x00000001
-#define		FIFO_CTRL	0x00000002 /* Allow ctrl. ? */
-#define		FIFO_VALID	0x00000010
-#define 	FIFO_EMPTY	0x00000020
-#define		FIFO_U0		0x00001000 /* Unknown. */
-#define		FIFO_U1		0x00010000
-#define		FIFO_SIZE_BITS 5
-#define		FIFO_SIZE	(1<<FIFO_SIZE_BITS) // 0x20
-#define 	FIFO_MASK	(FIFO_SIZE-1) //0x1f	/* at shift left 0xc */
-//#define 	FIFO_MASK	0x1f	/* at shift left 0xb */
-//#define		FIFO_SIZE	0x20
-#define 	FIFO_BITS	0x03880000
-#define VORTEX_FIFO_ADBDATA 0x14000
-#define VORTEX_FIFO_WTDATA 0x10000
-
-/* CODEC */
-#define VORTEX_CODEC_CTRL 0x29184
-#define VORTEX_CODEC_EN 0x29190
-#define		EN_CODEC0	0x00000300
-#define		EN_CODEC1	0x00003000
-#define		EN_CODEC	(EN_CODEC0 | EN_CODEC1)
-#define		EN_SPORT	0x00030000
-#define		EN_SPDIF	0x000c0000
-#define VORTEX_CODEC_CHN 0x29080
-#define VORTEX_CODEC_WRITE 0x00800000
-#define VORTEX_CODEC_ADDSHIFT 16
-#define VORTEX_CODEC_ADDMASK 0x7f0000 /* 0x000f0000*/
-#define VORTEX_CODEC_DATSHIFT 0
-#define VORTEX_CODEC_DATMASK 0xffff
-#define VORTEX_CODEC_IO 0x29188
-
-/* SPDIF */
-#define VORTEX_SPDIF_FLAGS		0x2205c
-#define VORTEX_SPDIF_CFG0		0x291D0
-#define VORTEX_SPDIF_CFG1		0x291D4
-#define VORTEX_SPDIF_SMPRATE	0x29194
-
-/* Sample timer */
-#define VORTEX_SMP_TIME  0x29198
-
-/* IRQ */
-#define VORTEX_IRQ_SOURCE 0x2a000 /* Interrupt source flags. */
-#define 	IRQ_FATAL    0x0001
-#define 	IRQ_PARITY   0x0002
-#define 	IRQ_PCMOUT   0x0020 /* ?? */
-#define 	IRQ_TIMER    0x1000
-#define 	IRQ_MIDI     0x2000
-#define		IRQ_MODEM	0x4000
-
-#define VORTEX_IRQ_U0	0x2a008 /* ?? */
-
-#define VORTEX_CTRL		0x2a00c
-#define 	CTRL_MIDI_EN	0x00000001
-#define 	CTRL_MIDI_PORT	0x00000060
-#define 	CTRL_GAME_EN	0x00000008
-#define 	CTRL_GAME_PORT	0x00000e00
-//#define 	CTRL_IRQ_ENABLE	0x01004000
-#define 	CTRL_IRQ_ENABLE	0x00004000
-
-#define VORTEX_IRQ_CTRL 0x2a004 /* Interrupt source mask. */
-#define 	IRQ_FATAL	0x0001
-#define 	IRQ_PARITY	0x0002
-#define 	IRQ_PCMOUT	0x0020 /* PCM OUT page crossing */
-#define 	IRQ_TIMER	0x1000
-#define 	IRQ_MIDI	0x2000
-#define		IRQ_MODEM	0x4000
-
-/* write: Timer period config / read: TIMER IRQ ack. */
-#define VORTEX_IRQ_STAT 0x2919c
-
-/* DMA */
-#define VORTEX_ENGINE_CTRL 0x27ae8
-#define 	ENGINE_INIT 0x1380000
-
-/* MIDI */ /* GAME. */
-#define VORTEX_MIDI_DATA 0x28800
-#define VORTEX_MIDI_CMD 0x28804  /* Write command / Read status */
-
-#define VORTEX_CTRL2 0x2880c
-#define		CTRL2_GAME_ADCMODE 0x40
-#define VORTEX_GAME_LEGACY 0x28808
-#define VORTEX_GAME_AXIS 0x28810
-#define		AXIS_SIZE 4
-#define		AXIS_RANGE 0x1fff
Index: debian/alsa-driver/pci/au88x0/au8810_core.c
diff -u debian/alsa-driver/pci/au88x0/au8810_core.c:1.1.1.2 debian/alsa-driver/pci/au88x0/au8810_core.c:removed
--- debian/alsa-driver/pci/au88x0/au8810_core.c:1.1.1.2	Mon Nov 17 11:27:28 2003
+++ debian/alsa-driver/pci/au88x0/au8810_core.c	Tue Apr 13 13:39:27 2004
@@ -1,3 +0,0 @@
-#define __NO_VERSION__
-#include "au8810.h"
-#include "au88x0_core.c"
Index: debian/alsa-driver/pci/au88x0/au8810_eq.c
diff -u debian/alsa-driver/pci/au88x0/au8810_eq.c:1.1.1.2 debian/alsa-driver/pci/au88x0/au8810_eq.c:removed
--- debian/alsa-driver/pci/au88x0/au8810_eq.c:1.1.1.2	Mon Nov 17 11:27:28 2003
+++ debian/alsa-driver/pci/au88x0/au8810_eq.c	Tue Apr 13 13:39:27 2004
@@ -1,3 +0,0 @@
-#define __NO_VERSION__
-#include "au8810.h"
-#include "au88x0_eq.c"
Index: debian/alsa-driver/pci/au88x0/au8810_game.c
diff -u debian/alsa-driver/pci/au88x0/au8810_game.c:1.1.1.2 debian/alsa-driver/pci/au88x0/au8810_game.c:removed
--- debian/alsa-driver/pci/au88x0/au8810_game.c:1.1.1.2	Mon Nov 17 11:27:28 2003
+++ debian/alsa-driver/pci/au88x0/au8810_game.c	Tue Apr 13 13:39:27 2004
@@ -1,3 +0,0 @@
-#define __NO_VERSION__
-#include "au8810.h"
-#include "au88x0_game.c"
Index: debian/alsa-driver/pci/au88x0/au8810_mixer.c
diff -u debian/alsa-driver/pci/au88x0/au8810_mixer.c:1.1.1.2 debian/alsa-driver/pci/au88x0/au8810_mixer.c:removed
--- debian/alsa-driver/pci/au88x0/au8810_mixer.c:1.1.1.2	Mon Nov 17 11:27:28 2003
+++ debian/alsa-driver/pci/au88x0/au8810_mixer.c	Tue Apr 13 13:39:27 2004
@@ -1,3 +0,0 @@
-#define __NO_VERSION__
-#include "au8810.h"
-#include "au88x0_mixer.c"
Index: debian/alsa-driver/pci/au88x0/au8810_mpu401.c
diff -u debian/alsa-driver/pci/au88x0/au8810_mpu401.c:1.1.1.2 debian/alsa-driver/pci/au88x0/au8810_mpu401.c:removed
--- debian/alsa-driver/pci/au88x0/au8810_mpu401.c:1.1.1.2	Mon Nov 17 11:27:28 2003
+++ debian/alsa-driver/pci/au88x0/au8810_mpu401.c	Tue Apr 13 13:39:27 2004
@@ -1,3 +0,0 @@
-#define __NO_VERSION__
-#include "au8810.h"
-#include "au88x0_mpu401.c"
Index: debian/alsa-driver/pci/au88x0/au8810_pcm.c
diff -u debian/alsa-driver/pci/au88x0/au8810_pcm.c:1.1.1.2 debian/alsa-driver/pci/au88x0/au8810_pcm.c:removed
--- debian/alsa-driver/pci/au88x0/au8810_pcm.c:1.1.1.2	Mon Nov 17 11:27:28 2003
+++ debian/alsa-driver/pci/au88x0/au8810_pcm.c	Tue Apr 13 13:39:27 2004
@@ -1,3 +0,0 @@
-#define __NO_VERSION__
-#include "au8810.h"
-#include "au88x0_pcm.c"
Index: debian/alsa-driver/pci/au88x0/au8820.h
diff -u debian/alsa-driver/pci/au88x0/au8820.h:1.1.1.1 debian/alsa-driver/pci/au88x0/au8820.h:removed
--- debian/alsa-driver/pci/au88x0/au8820.h:1.1.1.1	Mon Oct  6 08:01:03 2003
+++ debian/alsa-driver/pci/au88x0/au8820.h	Tue Apr 13 13:39:27 2004
@@ -1,227 +0,0 @@
-/*
-    Aureal Vortex Soundcard driver.
-
-    IO addr collected from asp4core.vxd:
-    function    address
-    0005D5A0    13004
-    00080674    14004
-    00080AFF    12818
-
- */
-
-#define CHIP_AU8820
-
-#define CARD_NAME "Aureal Vortex 3D Sound Processor"
-#define CARD_NAME_SHORT "au8820"
-
-#ifndef PCI_VENDOR_ID_AUREAL
-#define PCI_VENDOR_ID_AUREAL 0x12eb
-#endif
-
-#ifndef PCI_VENDOR_ID_AUREAL_VORTEX
-#define PCI_DEVICE_ID_AUREAL_VORTEX 0x0001
-#endif
-
-/* Number of ADB and WT channels */
-#define NR_ADB 0x10
-#define NR_WT 0x20
-#define NR_SRC 0x10
-#define NR_A3D 0x8
-#define NR_MIXIN 0x10
-#define NR_MIXOUT 0x10
-#define NR_WT 0x20
-
-/* ADBDMA */
-#define VORTEX_ADBDMA_STAT 0x105c0 /* read only, subbuffer, DMA pos */
-#define		POS_MASK 0x00000fff
-#define     POS_SHIFT 0x0
-#define 	ADB_SUBBUF_MASK 0x00003000  /* ADB only. */
-#define     ADB_SUBBUF_SHIFT 0xc        /* ADB only. */
-#define VORTEX_ADBDMA_CTRL 0x10580  /* write only, format, flags, DMA pos */
-#define		OFFSET_MASK 0x00000fff
-#define     OFFSET_SHIFT 0x0
-#define		IE_MASK 0x00001000 /* interrupt enable. */
-#define     IE_SHIFT 0xc
-#define     U_MASK 0x00002000  /* Unknown. If you know tell me. */
-#define     U_SHIFT 0xd
-#define		FMT_MASK 0x0003c000
-#define		FMT_SHIFT 0xe
-// The masks and shift also work for the wtdma, if not specified otherwise.
-#define VORTEX_ADBDMA_BUFCFG0 0x10400
-#define VORTEX_ADBDMA_BUFCFG1 0x10404
-#define VORTEX_ADBDMA_BUFBASE 0x10200
-#define VORTEX_ADBDMA_START 0x106c0 /* Which subbuffer starts */
-
-/* ADB */
-#define VORTEX_ADB_SR 0x10a00 /* Samplerates enable/disable */
-#define VORTEX_ADB_RTBASE 0x10800
-#define VORTEX_ADB_RTBASE_SIZE (VORTEX_ADB_CHNBASE - VORTEX_ADB_RTBASE)
-#define VORTEX_ADB_CHNBASE 0x1099c
-#define VORTEX_ADB_CHNBASE_SIZE (ADB_MASK - VORTEX_ADB_RTBASE_SIZE)
-#define 	ROUTE_MASK	0x3fff
-#define     ADB_MASK   0x7f
-#define		ADB_SHIFT 0x7
-//#define     ADB_MIX_MASK 0xf
-/* ADB address */
-#define		OFFSET_ADBDMA	0x00
-#define		OFFSET_SRCOUT	0x10  /* on channel 0x11 */
-#define		OFFSET_SRCIN	0x10  /* on channel < 0x11 */
-#define		OFFSET_MIXOUT	0x20
-#define		OFFSET_MIXIN	0x30
-#define		OFFSET_CODECIN	0x48 /* ADB source */
-#define		OFFSET_CODECOUT	0x58 /* ADB sink/target */
-#define		OFFSET_SPORTOUT	0x60
-#define		OFFSET_SPORTIN	0x78
-#define		OFFSET_SPDIFOUT	0x62
-#define		OFFSET_A3DOUT	0x50
-#define		OFFSET_A3DIN	0x70
-#define		OFFSET_WTOUT	0x00 /* FIXME */
-
-/* ADB route translate helper */
-#define ADB_DMA(x) (x + OFFSET_ADBDMA)
-#define ADB_SRCOUT(x) (x + OFFSET_SRCOUT)
-#define ADB_SRCIN(x) (x + OFFSET_SRCIN)
-#define ADB_MIXOUT(x) (x + OFFSET_MIXOUT)
-#define ADB_MIXIN(x) (x + OFFSET_MIXIN)
-#define ADB_CODECIN(x) (x + OFFSET_CODECIN)
-#define ADB_CODECOUT(x) (x + OFFSET_CODECOUT)
-#define ADB_SPORTOUT(x) (x + OFFSET_SPORTOUT)
-#define ADB_SPORTIN(x) (x + OFFSET_SPORTIN) /* 0x72 ? */
-#define ADB_SPDIFOUT(x) (x + OFFSET_SPDIFOUT)
-#define ADB_A3DOUT(x) (x + OFFSET_A3DOUT) /* 8 A3D blocks */
-#define ADB_A3DIN(x) (x + OFFSET_A3DIN)
-#define ADB_WTOUT(x) (x + OFFSET_WTOUT)
-
-/* WTDMA */
-#define VORTEX_WTDMA_CTRL 0x10500 /* format, DMA pos */
-#define VORTEX_WTDMA_STAT 0x10500 /* DMA subbuf, DMA pos */
-#define     WT_SUBBUF_MASK (0x3 << WT_SUBBUF_SHIFT)
-#define     WT_SUBBUF_SHIFT 0x15
-#define VORTEX_WTDMA_BUFBASE 0x10000
-#define VORTEX_WTDMA_BUFCFG0 0x10300
-#define VORTEX_WTDMA_BUFCFG1 0x10304
-#define VORTEX_WTDMA_START 0x10640 /* which subbuffer is first */
-
-#define VORTEX_WT_BASE 0x9000
-
-/* MIXER */
-#define VORTEX_MIXER_SR 0x9f00
-#define VORTEX_MIXER_CHNBASE 0x9e40
-#define VORTEX_MIXER_RTBASE 0x9e00
-#define 	MIXER_RTBASE_SIZE 0x26
-#define VORTEX_MIX_U0 0x9c00
-
-/* MIX */
-#define VORTEX_MIX_INVOL_A 0x9000 /* in? */
-#define VORTEX_MIX_INVOL_B 0x8000 /* out? */
-#define VORTEX_MIX_VOL_A 0x9800
-#define VORTEX_MIX_VOL_B 0x8800
-#define VORTEX_MIX_ENIN 0x9a00 /* Input enable bits. 4 bits wide. */
-#define 	VOL_MIN 0x80 /* Input volume when muted. */
-#define		VOL_MAX 0x7f /* FIXME: Not confirmed! Just guessed. */
-
-//#define MIX_OUTL    0xe
-//#define MIX_OUTR    0xf
-//#define MIX_INL     0xe
-//#define MIX_INR     0xf
-#define MIX_DEFIGAIN 0x08 /* 0x8 => 6dB */
-#define MIX_DEFOGAIN 0x08
-
-/* SRC */
-#define VORTEX_SRCBLOCK_SR	0xccc0
-#define VORTEX_SRC_CHNBASE	0xcc40
-#define VORTEX_SRC_RTBASE	0xcc00
-#define VORTEX_SRC_SOURCE	0xccc4
-#define VORTEX_SRC_U0		0xce00
-#define VORTEX_SRC_DRIFT0	0xce80
-#define VORTEX_SRC_DRIFT1	0xcec0
-#define VORTEX_SRC_U1		0xcf00
-#define VORTEX_SRC_DRIFT2	0xcf40
-#define VORTEX_SRC_U3		0xcf80
-#define VORTEX_SRC_DATA		0xc800
-#define VORTEX_SRC_DATA0	0xc000
-#define VORTEX_SRC_CONVRATIO 0xce40
-//#define     SRC_RATIO(x) ((((x<<15)/48000) + 1)/2) /* Playback */
-//#define     SRC_RATIO2(x) ((((48000<<15)/x) + 1)/2) /* Recording */
-
-
-/* FIFO */
-#define VORTEX_FIFO_ADBCTRL 0xf800 /* Control bits. */
-#define VORTEX_FIFO_WTCTRL 0xf840
-#define		FIFO_RDONLY	0x00000001
-#define		FIFO_CTRL	0x00000002 /* Allow ctrl. ? */
-#define		FIFO_VALID	0x00000010
-#define 	FIFO_EMPTY	0x00000020
-#define		FIFO_U0		0x00001000 /* Unknown. */
-#define		FIFO_U1		0x00010000
-#define		FIFO_SIZE_BITS 5
-#define		FIFO_SIZE	(1<<FIFO_SIZE_BITS) // 0x20
-#define 	FIFO_MASK	(FIFO_SIZE-1) //0x1f	/* at shift left 0xc */
-#define VORTEX_FIFO_ADBDATA 0xe000
-#define VORTEX_FIFO_WTDATA 0xe800
-
-/* CODEC */
-#define VORTEX_CODEC_CTRL 0x11984
-#define VORTEX_CODEC_EN 0x11990
-#define		EN_CODEC	0x00000300
-#define		EN_SPORT	0x00030000
-#define		EN_SPDIF	0x000c0000
-#define VORTEX_CODEC_CHN 0x11880
-#define VORTEX_CODEC_WRITE 0x00800000
-#define VORTEX_CODEC_ADDSHIFT 16
-#define VORTEX_CODEC_ADDMASK 0x7f0000 /* 0x000f0000*/
-#define VORTEX_CODEC_DATSHIFT 0
-#define VORTEX_CODEC_DATMASK 0xffff
-#define VORTEX_CODEC_IO 0x11988
-
-
-#define VORTEX_SPDIF_FLAGS		0x1005c /* FIXME */
-#define VORTEX_SPDIF_CFG0		0x119D0
-#define VORTEX_SPDIF_CFG1		0x119D4
-#define VORTEX_SPDIF_SMPRATE	0x11994
-
-
-/* Sample timer */
-#define VORTEX_SMP_TIME 0x11998
-
-/* IRQ */
-#define VORTEX_IRQ_SOURCE 0x12800 /* Interrupt source flags. */
-#define 	IRQ_FATAL    0x0001
-#define 	IRQ_PARITY   0x0002
-#define 	IRQ_PCMOUT   0x0020 /* ?? */
-#define 	IRQ_TIMER    0x1000
-#define 	IRQ_MIDI     0x2000
-
-#define VORTEX_IRQ_U0	0x12808 /* ?? */
-
-#define VORTEX_CTRL 0x1280c
-#define 	CTRL_MIDI_EN 0x00000001
-#define 	CTRL_MIDI_PORT 0x00000060
-#define 	CTRL_GAME_EN 0x00000008
-#define 	CTRL_GAME_PORT 0x00000e00
-#define 	CTRL_IRQ_ENABLE 0x4000
-
-#define VORTEX_IRQ_CTRL 0x12804 /* Interrupt source mask. */
-#define 	IRQ_FATAL    0x0001
-#define 	IRQ_PARITY   0x0002
-#define 	IRQ_PCMOUT   0x0020 /* PCM OUT page crossing */
-#define 	IRQ_TIMER    0x1000
-#define 	IRQ_MIDI     0x2000
-
-/* write: Timer period config / read: TIMER IRQ ack. */
-#define VORTEX_IRQ_STAT 0x1199c
-
-/* DMA */
-#define VORTEX_DMA_BUFFER 0x10200
-#define VORTEX_ENGINE_CTRL 0x1060c
-#define 	ENGINE_INIT 0x0L
-
-/* MIDI */ /* GAME. */
-#define VORTEX_MIDI_DATA 0x11000
-#define VORTEX_MIDI_CMD 0x11004  /* Write command / Read status */
-#define VORTEX_GAME_LEGACY 0x11008
-#define VORTEX_CTRL2 0x1100c
-#define 	CTRL2_GAME_ADCMODE 0x40
-#define VORTEX_GAME_AXIS 0x11010
-#define 	AXIS_SIZE 4
-#define		AXIS_RANGE 0x1fff
Index: debian/alsa-driver/pci/au88x0/au8820_core.c
diff -u debian/alsa-driver/pci/au88x0/au8820_core.c:1.1.1.2 debian/alsa-driver/pci/au88x0/au8820_core.c:removed
--- debian/alsa-driver/pci/au88x0/au8820_core.c:1.1.1.2	Mon Nov 17 11:27:28 2003
+++ debian/alsa-driver/pci/au88x0/au8820_core.c	Tue Apr 13 13:39:27 2004
@@ -1,3 +0,0 @@
-#define __NO_VERSION__
-#include "au8820.h"
-#include "au88x0_core.c"
Index: debian/alsa-driver/pci/au88x0/au8820_game.c
diff -u debian/alsa-driver/pci/au88x0/au8820_game.c:1.1.1.2 debian/alsa-driver/pci/au88x0/au8820_game.c:removed
--- debian/alsa-driver/pci/au88x0/au8820_game.c:1.1.1.2	Mon Nov 17 11:27:28 2003
+++ debian/alsa-driver/pci/au88x0/au8820_game.c	Tue Apr 13 13:39:27 2004
@@ -1,3 +0,0 @@
-#define __NO_VERSION__
-#include "au8820.h"
-#include "au88x0_game.c"
Index: debian/alsa-driver/pci/au88x0/au8820_mixer.c
diff -u debian/alsa-driver/pci/au88x0/au8820_mixer.c:1.1.1.2 debian/alsa-driver/pci/au88x0/au8820_mixer.c:removed
--- debian/alsa-driver/pci/au88x0/au8820_mixer.c:1.1.1.2	Mon Nov 17 11:27:28 2003
+++ debian/alsa-driver/pci/au88x0/au8820_mixer.c	Tue Apr 13 13:39:27 2004
@@ -1,3 +0,0 @@
-#define __NO_VERSION__
-#include "au8820.h"
-#include "au88x0_mixer.c"
Index: debian/alsa-driver/pci/au88x0/au8820_mpu401.c
diff -u debian/alsa-driver/pci/au88x0/au8820_mpu401.c:1.1.1.2 debian/alsa-driver/pci/au88x0/au8820_mpu401.c:removed
--- debian/alsa-driver/pci/au88x0/au8820_mpu401.c:1.1.1.2	Mon Nov 17 11:27:28 2003
+++ debian/alsa-driver/pci/au88x0/au8820_mpu401.c	Tue Apr 13 13:39:27 2004
@@ -1,3 +0,0 @@
-#define __NO_VERSION__
-#include "au8820.h"
-#include "au88x0_mpu401.c"
Index: debian/alsa-driver/pci/au88x0/au8820_pcm.c
diff -u debian/alsa-driver/pci/au88x0/au8820_pcm.c:1.1.1.2 debian/alsa-driver/pci/au88x0/au8820_pcm.c:removed
--- debian/alsa-driver/pci/au88x0/au8820_pcm.c:1.1.1.2	Mon Nov 17 11:27:28 2003
+++ debian/alsa-driver/pci/au88x0/au8820_pcm.c	Tue Apr 13 13:39:27 2004
@@ -1,3 +0,0 @@
-#define __NO_VERSION__
-#include "au8820.h"
-#include "au88x0_pcm.c"
Index: debian/alsa-driver/pci/au88x0/au8820_synth.c
diff -u debian/alsa-driver/pci/au88x0/au8820_synth.c:1.1.1.2 debian/alsa-driver/pci/au88x0/au8820_synth.c:removed
--- debian/alsa-driver/pci/au88x0/au8820_synth.c:1.1.1.2	Mon Nov 17 11:27:28 2003
+++ debian/alsa-driver/pci/au88x0/au8820_synth.c	Tue Apr 13 13:39:27 2004
@@ -1,3 +0,0 @@
-#define __NO_VERSION__
-#include "au8820.h"
-#include "au88x0_synth.c"
Index: debian/alsa-driver/pci/au88x0/au8830.h
diff -u debian/alsa-driver/pci/au88x0/au8830.h:1.1.1.1 debian/alsa-driver/pci/au88x0/au8830.h:removed
--- debian/alsa-driver/pci/au88x0/au8830.h:1.1.1.1	Mon Oct  6 08:01:03 2003
+++ debian/alsa-driver/pci/au88x0/au8830.h	Tue Apr 13 13:39:27 2004
@@ -1,236 +0,0 @@
-/*
-    Aureal Vortex Soundcard driver.
-
-    IO addr collected from asp4core.vxd:
-    function    address
-    0005D5A0    13004
-    00080674    14004
-    00080AFF    12818
-
- */
-
-#define CHIP_AU8830
-
-#define CARD_NAME "Aureal Vortex 2 3D Sound Processor"
-#define CARD_NAME_SHORT "au8830"
-
-#ifndef PCI_VENDOR_ID_AUREAL
-#define PCI_VENDOR_ID_AUREAL 0x12eb
-#endif
-#ifndef PCI_VENDOR_ID_AUREAL_VORTEX2
-#define PCI_DEVICE_ID_AUREAL_VORTEX2 0x0002
-#endif
-
-#define hwread(x,y) readl((x)+((y)>>2))
-#define hwwrite(x,y,z) writel((z),(x)+((y)>>2))
-
-#define NR_ADB 0x20
-#define NR_SRC 0x10
-#define NR_A3D 0x10
-#define NR_MIXIN 0x20
-#define NR_MIXOUT 0x10
-#define NR_WT 0x40
-
-/* ADBDMA */
-#define VORTEX_ADBDMA_STAT 0x27e00 /* read only, subbuffer, DMA pos */
-#define		POS_MASK 0x00000fff
-#define     POS_SHIFT 0x0
-#define 	ADB_SUBBUF_MASK 0x00003000  /* ADB only. */
-#define     ADB_SUBBUF_SHIFT 0xc        /* ADB only. */
-#define VORTEX_ADBDMA_CTRL 0x27a00 		/* write only; format, flags, DMA pos */
-#define		OFFSET_MASK 0x00000fff
-#define     OFFSET_SHIFT 0x0
-#define		IE_MASK 0x00001000 /* interrupt enable. */
-#define     IE_SHIFT 0xc
-#define     U_MASK 0x00002000  /* Unknown. If you know, tell me. */
-#define     U_SHIFT 0xd
-#define		FMT_MASK 0x0003c000
-#define		FMT_SHIFT 0xe
-#define		ADB_FIFO_EN_SHIFT	0x15
-#define		ADB_FIFO_EN			(1 << 0x15)
-// The ADB masks and shift also are valid for the wtdma, except if specified otherwise.
-#define VORTEX_ADBDMA_BUFCFG0 0x27800
-#define VORTEX_ADBDMA_BUFCFG1 0x27804
-#define VORTEX_ADBDMA_BUFBASE 0x27400
-#define VORTEX_ADBDMA_START 0x27c00 /* Which subbuffer starts */
-
-/* WTDMA */
-#define VORTEX_WTDMA_CTRL 0x27900 /* format, DMA pos */
-#define VORTEX_WTDMA_STAT 0x27d00 /* DMA subbuf, DMA pos */
-#define     WT_SUBBUF_MASK 0x3
-#define     WT_SUBBUF_SHIFT 0xc
-#define VORTEX_WTDMA_BUFBASE 0x27000
-#define VORTEX_WTDMA_BUFCFG0 0x27600
-#define VORTEX_WTDMA_BUFCFG1 0x27604
-#define VORTEX_WTDMA_START 0x27b00 /* which subbuffer is first */
-
-#define VORTEX_WT_BASE (0x420 << 7)
-
-/* ADB */
-#define VORTEX_ADB_SR 0x28400 /* Samplerates enable/disable */
-#define VORTEX_ADB_RTBASE 0x28000
-#define VORTEX_ADB_RTBASE_SIZE (VORTEX_ADB_CHNBASE - VORTEX_ADB_RTBASE)
-#define VORTEX_ADB_CHNBASE 0x282b4
-#define VORTEX_ADB_CHNBASE_SIZE (ADB_MASK - VORTEX_ADB_RTBASE_SIZE)
-#define 	ROUTE_MASK	0xffff
-#define		SOURCE_MASK	0xff00
-#define     ADB_MASK   0xff
-#define		ADB_SHIFT 0x8
-/* ADB address */
-#define		OFFSET_ADBDMA	0x00
-#define		OFFSET_SRCIN	0x40
-#define		OFFSET_SRCOUT	0x20 /* ch 0x11 */
-#define		OFFSET_MIXIN	0x50 /* ch 0x11 */
-#define		OFFSET_MIXOUT	0x30 /* ch 0x11 */
-#define		OFFSET_CODECIN	0x70 /* ch 0x11 */ /* adb source */
-#define		OFFSET_CODECOUT	0x88 /* ch 0x11 */ /* adb target */
-#define		OFFSET_SPORTIN	0x78 /* ch 0x13 */
-#define		OFFSET_SPORTOUT	0x90 /* ch 0x13 */
-#define		OFFSET_SPDIFOUT	0x92 /* ch 0x14 */
-#define		OFFSET_EQIN		0xa0 /* ch 0x11 */
-#define		OFFSET_EQOUT	0x7e /* ch 0x11 */ /* 2 routes on ch 0x11 */
-#define		OFFSET_WTOUT	0x62 /* 0x64, 0x65, 0xA2, 0xA4, 0xA5 */
-#define		OFFSET_UNKNOWNOUT0	0x66 /* ch 0x11 */
-#define		OFFSET_UNKNOWNOUT1	0x67 /* ch 0x11 */
-#define		OFFSET_UNKNOWNIN0	0x96 /* ch 0x11 */
-#define		OFFSET_UNKNOWNIN1	0x9b /* ch 0x11 */
-
-/* ADB route translate helper */
-#define ADB_DMA(x) (x)
-#define ADB_SRCOUT(x) (x + OFFSET_SRCOUT)
-#define ADB_SRCIN(x) (x + OFFSET_SRCIN)
-#define ADB_MIXOUT(x) (x + OFFSET_MIXOUT)
-#define ADB_MIXIN(x) (x + OFFSET_MIXIN)
-#define ADB_CODECIN(x) (x + OFFSET_CODECIN)
-#define ADB_CODECOUT(x) (x + OFFSET_CODECOUT)
-#define ADB_SPORTIN(x) (x + OFFSET_SPORTIN)
-#define ADB_SPORTOUT(x) (x + OFFSET_SPORTOUT)
-#define ADB_SPDIFOUT(x)	(x + OFFSET_SPDIFOUT)
-#define ADB_EQIN(x) (x + OFFSET_EQIN)
-#define ADB_EQOUT(x) (x + OFFSET_EQOUT)
-#define ADB_A3DOUT(x) (x + 0x50) /* 0x10 A3D blocks */
-#define ADB_A3DIN(x) (x + 0x70)
-#define ADB_WTOUT(x) (x + OFFSET_WTOUT)
-
-#define MIX_DEFIGAIN 0x00
-#define MIX_DEFOGAIN 0x00 /* 0x8->6dB  (6dB = x4) 16 to 18 bit conversion? */
-
-/* MIXER */
-#define VORTEX_MIXER_SR 0x21f00
-#define VORTEX_MIXER_CHNBASE 0x21e40
-#define VORTEX_MIXER_RTBASE 0x21e00
-#define 	MIXER_RTBASE_SIZE 0x38
-#define VORTEX_MIX_U0 0x21c00 /* AU8820: 0x9c00 */
-
-/* MIX */
-#define VORTEX_MIX_INVOL_A 0x21000 /* in? */
-#define VORTEX_MIX_INVOL_B 0x20000 /* out? */
-#define VORTEX_MIX_VOL_A 0x21800
-#define VORTEX_MIX_VOL_B 0x20800
-#define VORTEX_MIX_ENIN 0x21a00 /* Input enable bits. 4 bits wide. */
-#define 	VOL_MIN 0x80 /* Input volume when muted. */
-#define		VOL_MAX 0x7f /* FIXME: Not confirmed! Just guessed. */
-
-/* SRC */
-#define VORTEX_SRCBLOCK_SR	0x26cc0
-#define VORTEX_SRC_CHNBASE	0x26c40
-#define VORTEX_SRC_RTBASE	0x26c00
-#define VORTEX_SRC_SOURCE	0x26cc4
-#define VORTEX_SRC_CONVRATIO 0x26e40
-#define VORTEX_SRC_DRIFT0	0x26e80
-#define VORTEX_SRC_DRIFT1	0x26ec0
-#define VORTEX_SRC_DRIFT2	0x26f40
-#define VORTEX_SRC_U0		0x26e00
-#define		U0_SLOWLOCK		0x200
-#define VORTEX_SRC_U1		0x26f00
-#define VORTEX_SRC_U3		0x26f80
-#define VORTEX_SRC_DATA		0x26800 /* 0xc800 */
-#define VORTEX_SRC_DATA0	0x26000
-
-/* FIFO */
-#define VORTEX_FIFO_ADBCTRL 0x16100 /* Control bits. */
-#define VORTEX_FIFO_WTCTRL 0x16000
-#define		FIFO_RDONLY	0x00000001
-#define		FIFO_CTRL	0x00000002 /* Allow ctrl. ? */
-#define		FIFO_VALID	0x00000010
-#define 	FIFO_EMPTY	0x00000020
-#define		FIFO_U0		0x00002000 /* Unknown. */
-#define		FIFO_U1		0x00040000
-#define		FIFO_SIZE_BITS 6
-#define		FIFO_SIZE	(1<<(FIFO_SIZE_BITS)) // 0x40
-#define 	FIFO_MASK	(FIFO_SIZE-1) //0x3f	/* at shift left 0xc */
-#define 	FIFO_BITS	0x1c400000
-#define VORTEX_FIFO_ADBDATA 0x14000
-#define VORTEX_FIFO_WTDATA 0x10000
-
-/* CODEC */
-#define VORTEX_CODEC_CTRL 0x29184
-#define VORTEX_CODEC_EN 0x29190
-#define		EN_AUDIO0		0x00000300
-#define		EN_MODEM		0x00000c00
-#define		EN_AUDIO1		0x00003000
-#define		EN_SPORT		0x00030000
-#define		EN_SPDIF		0x000c0000
-#define		EN_CODEC		(EN_AUDIO1 | EN_AUDIO0)
-#define VORTEX_CODEC_CHN 0x29080 /* The name "CHN" is wrong. */
-#define VORTEX_CODEC_WRITE 0x00800000
-#define VORTEX_CODEC_ADDSHIFT 16
-#define VORTEX_CODEC_ADDMASK 0x7f0000 /* 0x000f0000*/
-#define VORTEX_CODEC_DATSHIFT 0
-#define VORTEX_CODEC_DATMASK 0xffff
-#define VORTEX_CODEC_IO 0x29188
-
-#define VORTEX_SPDIF_FLAGS		0x2205c
-#define VORTEX_SPDIF_CFG0		0x291D0
-#define VORTEX_SPDIF_CFG1		0x291D4
-#define VORTEX_SPDIF_SMPRATE	0x29194
-
-/* Sample timer */
-#define VORTEX_SMP_TIME  0x29198
-
-/* IRQ */
-#define VORTEX_IRQ_SOURCE 0x2a000 /* Interrupt source flags. */
-#define 	IRQ_FATAL    0x0001
-#define 	IRQ_PARITY   0x0002
-#define 	IRQ_PCMOUT   0x0020 /* ?? */
-#define 	IRQ_TIMER    0x1000
-#define 	IRQ_MIDI     0x2000
-#define		IRQ_MODEM	0x4000
-
-#define VORTEX_IRQ_U0	0x2a008 /* ?? */
-
-#define VORTEX_CTRL		0x2a00c
-#define 	CTRL_MIDI_EN	0x00000001
-#define 	CTRL_MIDI_PORT	0x00000060
-#define 	CTRL_GAME_EN	0x00000008
-#define 	CTRL_GAME_PORT	0x00000e00
-#define		CTRL_SPDIF		0x00000000 /* unknown. Please find this value*/
-#define 	CTRL_SPORT		0x00200000
-#define 	CTRL_UNKNOWN	0x01000000
-#define 	CTRL_IRQ_ENABLE	0x00004000
-
-#define VORTEX_IRQ_CTRL 0x2a004 /* Interrupt source mask. */
-#define 	IRQ_FATAL	0x0001
-#define 	IRQ_PARITY	0x0002
-#define 	IRQ_PCMOUT	0x0020 /* PCM OUT page crossing */
-#define 	IRQ_TIMER	0x1000
-#define 	IRQ_MIDI	0x2000
-#define		IRQ_MODEM	0x4000
-
-/* write: Timer period config / read: TIMER IRQ ack. */
-#define VORTEX_IRQ_STAT 0x2919c
-
-/* DMA */
-#define VORTEX_ENGINE_CTRL 0x27ae8
-#define 	ENGINE_INIT 0x1380000
-
-/* MIDI */ /* GAME. */
-#define VORTEX_MIDI_DATA 0x28800
-#define VORTEX_MIDI_CMD 0x28804  /* Write command / Read status */
-
-#define VORTEX_CTRL2 0x2880c
-#define		CTRL2_GAME_ADCMODE 0x40
-#define VORTEX_GAME_LEGACY 0x28808
-#define VORTEX_GAME_AXIS 0x28810
-#define		AXIS_SIZE 4
-#define		AXIS_RANGE 0x1fff
Index: debian/alsa-driver/pci/au88x0/au8830_core.c
diff -u debian/alsa-driver/pci/au88x0/au8830_core.c:1.1.1.2 debian/alsa-driver/pci/au88x0/au8830_core.c:removed
--- debian/alsa-driver/pci/au88x0/au8830_core.c:1.1.1.2	Mon Nov 17 11:27:28 2003
+++ debian/alsa-driver/pci/au88x0/au8830_core.c	Tue Apr 13 13:39:27 2004
@@ -1,3 +0,0 @@
-#define __NO_VERSION__
-#include "au8830.h"
-#include "au88x0_core.c"
Index: debian/alsa-driver/pci/au88x0/au8830_eq.c
diff -u debian/alsa-driver/pci/au88x0/au8830_eq.c:1.1.1.2 debian/alsa-driver/pci/au88x0/au8830_eq.c:removed
--- debian/alsa-driver/pci/au88x0/au8830_eq.c:1.1.1.2	Mon Nov 17 11:27:28 2003
+++ debian/alsa-driver/pci/au88x0/au8830_eq.c	Tue Apr 13 13:39:27 2004
@@ -1,3 +0,0 @@
-#define __NO_VERSION__
-#include "au8830.h"
-#include "au88x0_eq.c"
Index: debian/alsa-driver/pci/au88x0/au8830_game.c
diff -u debian/alsa-driver/pci/au88x0/au8830_game.c:1.1.1.2 debian/alsa-driver/pci/au88x0/au8830_game.c:removed
--- debian/alsa-driver/pci/au88x0/au8830_game.c:1.1.1.2	Mon Nov 17 11:27:28 2003
+++ debian/alsa-driver/pci/au88x0/au8830_game.c	Tue Apr 13 13:39:27 2004
@@ -1,3 +0,0 @@
-#define __NO_VERSION__
-#include "au8830.h"
-#include "au88x0_game.c"
Index: debian/alsa-driver/pci/au88x0/au8830_mixer.c
diff -u debian/alsa-driver/pci/au88x0/au8830_mixer.c:1.1.1.2 debian/alsa-driver/pci/au88x0/au8830_mixer.c:removed
--- debian/alsa-driver/pci/au88x0/au8830_mixer.c:1.1.1.2	Mon Nov 17 11:27:28 2003
+++ debian/alsa-driver/pci/au88x0/au8830_mixer.c	Tue Apr 13 13:39:27 2004
@@ -1,3 +0,0 @@
-#define __NO_VERSION__
-#include "au8830.h"
-#include "au88x0_mixer.c"
Index: debian/alsa-driver/pci/au88x0/au8830_mpu401.c
diff -u debian/alsa-driver/pci/au88x0/au8830_mpu401.c:1.1.1.2 debian/alsa-driver/pci/au88x0/au8830_mpu401.c:removed
--- debian/alsa-driver/pci/au88x0/au8830_mpu401.c:1.1.1.2	Mon Nov 17 11:27:28 2003
+++ debian/alsa-driver/pci/au88x0/au8830_mpu401.c	Tue Apr 13 13:39:27 2004
@@ -1,3 +0,0 @@
-#define __NO_VERSION__
-#include "au8830.h"
-#include "au88x0_mpu401.c"
Index: debian/alsa-driver/pci/au88x0/au8830_pcm.c
diff -u debian/alsa-driver/pci/au88x0/au8830_pcm.c:1.1.1.2 debian/alsa-driver/pci/au88x0/au8830_pcm.c:removed
--- debian/alsa-driver/pci/au88x0/au8830_pcm.c:1.1.1.2	Mon Nov 17 11:27:28 2003
+++ debian/alsa-driver/pci/au88x0/au8830_pcm.c	Tue Apr 13 13:39:27 2004
@@ -1,3 +0,0 @@
-#define __NO_VERSION__
-#include "au8830.h"
-#include "au88x0_pcm.c"
Index: debian/alsa-driver/pci/au88x0/au8830_synth.c
diff -u debian/alsa-driver/pci/au88x0/au8830_synth.c:1.1.1.2 debian/alsa-driver/pci/au88x0/au8830_synth.c:removed
--- debian/alsa-driver/pci/au88x0/au8830_synth.c:1.1.1.2	Mon Nov 17 11:27:28 2003
+++ debian/alsa-driver/pci/au88x0/au8830_synth.c	Tue Apr 13 13:39:27 2004
@@ -1,3 +0,0 @@
-#define __NO_VERSION__
-#include "au8830.h"
-#include "au88x0_synth.c"
Index: debian/alsa-driver/pci/au88x0/au88x0.c
diff -u debian/alsa-driver/pci/au88x0/au88x0.c:1.1.1.3 debian/alsa-driver/pci/au88x0/au88x0.c:removed
--- debian/alsa-driver/pci/au88x0/au88x0.c:1.1.1.3	Wed Jan 21 11:33:32 2004
+++ debian/alsa-driver/pci/au88x0/au88x0.c	Tue Apr 13 13:39:27 2004
@@ -1,403 +0,0 @@
-/*
- * ALSA driver for the Aureal Vortex family of soundprocessors.
- * Author: Manuel Jander (mjander@embedded.cl)
- *
- *   This driver is the result of the OpenVortex Project from Savannah
- * (savannah.nongnu.org/projects/openvortex). I would like to thank
- * the developers of OpenVortex, Jeff Muizelar and Kester Maddock, from
- * whom i got plenty of help, and their codebase was invaluable.
- *   Thanks to the ALSA developers, they helped a lot working out
- * the ALSA part.
- *   Thanks also to Sourceforge for maintaining the old binary drivers,
- * and the forum, where developers could comunicate.
- *
- * Now at least i can play Legacy DOOM with MIDI music :-)
- */
-
-#include "au88x0.h"
-#include <linux/init.h>
-#include <linux/pci.h>
-#include <linux/slab.h>
-#include <linux/interrupt.h>
-#define SNDRV_GET_ID
-#include <sound/initval.h>
-
-// module parameters (see "Module Parameters")
-static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX;
-static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR;
-static int enable[SNDRV_CARDS] = SNDRV_DEFAULT_ENABLE_PNP;
-static int pcifix[SNDRV_CARDS] = { [0 ... (SNDRV_CARDS-1)] = 255 };
-
-MODULE_PARM(index, "1-" __MODULE_STRING(SNDRV_CARDS) "i");
-MODULE_PARM_DESC(index, "Index value for " CARD_NAME " soundcard.");
-MODULE_PARM_SYNTAX(index, SNDRV_INDEX_DESC);
-MODULE_PARM(id, "1-" __MODULE_STRING(SNDRV_CARDS) "s");
-MODULE_PARM_DESC(id, "ID string for " CARD_NAME " soundcard.");
-MODULE_PARM_SYNTAX(id, SNDRV_ID_DESC);
-MODULE_PARM(enable, "1-" __MODULE_STRING(SNDRV_CARDS) "i");
-MODULE_PARM_DESC(enable, "Enable " CARD_NAME " soundcard.");
-MODULE_PARM_SYNTAX(enable, SNDRV_ENABLE_DESC);
-MODULE_PARM(pcifix, "1-255i");
-MODULE_PARM_DESC(pcifix, "Enable VIA-workaround for " CARD_NAME " soundcard.");
-MODULE_PARM_SYNTAX(pcifix, SNDRV_ENABLED ",allows:{{0,Disabled},{1,Latency},{2,Bridge},{3,Both},{255,Auto}},default:4,dialog:check");
-
-MODULE_DESCRIPTION("Aureal vortex");
-MODULE_CLASSES("{sound}");
-MODULE_LICENSE("GPL");
-MODULE_DEVICES("{{Aureal Semiconductor Inc., Aureal Vortex Sound Processor}}");
-
-#ifndef PCI_VENDOR_ID_VIA 
-#define PCI_VENDOR_ID_VIA 0x1106
-#endif
-#ifndef PCI_DEVICE_ID_VIA_8365_1
-#define PCI_DEVICE_ID_VIA_8365_1 0x8305
-#endif
-
-#ifndef MODULE
-/* format is: snd-mychip=enable,index,id */
-static int __init alsa_card_vortex_setup(char *str) {
-    static unsigned __initdata nr_dev = 0;
-
-    if (nr_dev >= SNDRV_CARDS)
-        return 0;
-    (void) (get_option(&str, &enable[nr_dev]) == 2 &&
-            get_option(&str, &index[nr_dev]) == 2 &&
-            get_id(&str, &id[nr_dev]) == 2);
-    nr_dev++;
-    return 1;
-}
-__setup("snd-au88x0=", alsa_card_vortex_setup);
-#endif /* ifndef MODULE */
-
-
-MODULE_DEVICE_TABLE(pci, snd_vortex_ids);
-
-static void __devinit snd_vortex_workaround(struct pci_dev *vortex, int fix)
-{
-	int rc;
-	struct pci_dev *via = NULL;
-
-		/* autodetect if workarounds are required */
-	if ((via = pci_find_device(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_8365_1, NULL))) {
-		if(fix == 255) {
-			printk(KERN_INFO CARD_NAME
-				": detected VIA KT133/KM133. activating workaround...\n");
-			fix = 3; // do latency and via bridge workaround
-		}
-	}
-
-		/* default value - nothing to do */
-	if (fix == 255)
-		return;
-	
-		/* fix vortex latency */
-	if(fix & 0x01) {
-		if( !(rc = pci_write_config_byte(vortex, 0x40, 0xff)) ) {
-			printk(KERN_INFO CARD_NAME
-					": vortex latency is 0xff\n");
-		}
-		else {
-			printk(KERN_WARNING CARD_NAME ": could not set vortex latency: pci error 0x%x\n", rc);
-		}
-	}
-
-		/* fix via agp bridge */
-	if(via && (fix & 0x02)) {
-		u8 value;
-
-			/*
-			 * only set the bit (Extend PCI#2 Internal Master for
-			 * Efficient Handling of Dummy Requests) if the can
-			 * read the config and it is not already set
-			 */
-
-		if( !(rc = pci_read_config_byte(via, 0x42, &value)) && (
-			(value & 0x10) ||
-			!(rc=pci_write_config_byte(via, 0x42, value|0x10)) ) ) {
-
-			printk(KERN_INFO CARD_NAME
-					": bridge config is 0x%x\n",
-					value|0x10);
-		}
-		else {
-			printk(KERN_WARNING CARD_NAME ": could not set vortex latency: pci error 0x%x\n", rc);
-		}
-	}
-}
-
-
-// component-destructor
-// (see "Management of Cards and Components")
-static int snd_vortex_dev_free(snd_device_t *device) {
-    vortex_t *vortex = snd_magic_cast(vortex_t, device->device_data,
-                                      return -ENXIO);
-    
-    vortex_gameport_unregister(vortex);
-    vortex_core_shutdown(vortex);
-    // Take down PCI interface.
-    synchronize_irq(vortex->irq);
-    free_irq(vortex->irq, vortex);
-    pci_release_regions(vortex->pci_dev);
-    pci_disable_device(vortex->pci_dev);
-    snd_magic_kfree(vortex);
-
-    return 0;
-}
-
-// chip-specific constructor
-// (see "Management of Cards and Components")
-static int __devinit
-snd_vortex_create(snd_card_t *card, struct pci_dev *pci, vortex_t **rchip) {
-    vortex_t *chip;
-    int err;
-    static snd_device_ops_t ops = {
-        .dev_free = snd_vortex_dev_free,
-    };
-
-    *rchip = NULL;
-
-    // check PCI availability (DMA).
-    if ((err = pci_enable_device(pci)) < 0)
-        return err;
-   if (pci_set_dma_mask(pci, VORTEX_DMA_MASK) < 0 ||
-       pci_set_consistent_dma_mask(pci, VORTEX_DMA_MASK) << 0) {
-        printk(KERN_ERR "error to set DMA mask\n");
-        return -ENXIO;
-    }
-
-    chip = snd_magic_kcalloc(vortex_t, 0, GFP_KERNEL);
-    if (chip == NULL)
-        return -ENOMEM;
-
-    chip->card = card;
-
-    // initialize the stuff
-    chip->pci_dev = pci;
-    chip->io = pci_resource_start(pci, 0);
-    chip->vendor = pci->vendor;
-    chip->device = pci->device;
-    chip->card = card;
-    chip->irq = -1;
-    spin_lock_init(&chip->lock);
-
-    // (1) PCI resource allocation
-    // Get MMIO area
-    //
-    if ((err = pci_request_regions(pci, CARD_NAME_SHORT)) != 0) 
-        goto regions_out;
-	
-    chip->mmio = ioremap_nocache(pci_resource_start(pci,0), pci_resource_len(pci,0));
-    if (!chip->mmio) {
-        printk(KERN_ERR "MMIO area remap failed.\n");
-        err = -ENOMEM;
-        goto ioremap_out;
-    }
-
-    /* Init audio core.
-     * This must be done before we do request_irq otherwise we can get spurious
-     * interupts that we do not handle properly and make a mess of things */
-    if ((err = vortex_core_init(chip)) != 0) {
-	printk(KERN_ERR "hw core init failed\n");
-	goto core_out;
-    }
-    
-    if ((err = request_irq(pci->irq, vortex_interrupt, SA_INTERRUPT | SA_SHIRQ,
-                    CARD_NAME_SHORT, (void *) chip)) != 0) {
-        printk(KERN_ERR "cannot grab irq\n");
-        goto irq_out;
-    }
-    chip->irq = pci->irq;
-    
-    pci_set_master(pci);
-    // End of PCI setup.
-
-
-    // Register alsa root device.
-    if ((err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops)) < 0) {
-    	goto alloc_out;
-    }
-
-    snd_card_set_dev(card, &pci->dev);
-
-    *rchip = chip;
-
-    return 0;
-    
-alloc_out:
-    synchronize_irq(chip->irq);
-    free_irq(chip->irq, chip);
-irq_out:
-    vortex_core_shutdown(chip);
-core_out:
-    //FIXME: the type of chip->mmio might need to be changed??
-    iounmap((void*)chip->mmio);
-ioremap_out:
-    pci_release_regions(chip->pci_dev);
-regions_out:
-    pci_disable_device(chip->pci_dev);
-    //FIXME: this not the right place to unregister the gameport
-    vortex_gameport_unregister(chip);
-    return err;
-}
-
-// constructor -- see "Constructor" sub-section
-static int __devinit
-snd_vortex_probe(struct pci_dev *pci, const struct pci_device_id *pci_id) {
-    static int dev;
-    snd_card_t *card;
-    vortex_t *chip;
-    int err;
-
-    // (1)
-    if (dev >= SNDRV_CARDS)
-        return -ENODEV;
-    if (!enable[dev]) {
-        dev++;
-        return -ENOENT;
-    }
-    // (2)
-    card = snd_card_new(index[dev], id[dev], THIS_MODULE, 0);
-    if (card == NULL)
-        return -ENOMEM;
-
-    // (3)
-    if ((err = snd_vortex_create(card, pci, &chip)) < 0) {
-        snd_card_free(card);
-        return err;
-    }
-    snd_vortex_workaround(pci, pcifix[dev]);
-    // (4) Alloc components.
-    // ADB pcm.
-    if ((err = snd_vortex_new_pcm(chip, VORTEX_PCM_ADB, NR_ADB)) < 0) {
-        snd_card_free(card);
-        return err;
-    }
-#ifndef CHIP_AU8820
-	// ADB SPDIF
-    if ((err = snd_vortex_new_pcm(chip, VORTEX_PCM_SPDIF, 1)) < 0) {
-        snd_card_free(card);
-        return err;
-    }	
-#endif
-	/*
-	// ADB I2S
-    if ((err = snd_vortex_new_pcm(chip, VORTEX_PCM_I2S, 1)) < 0) {
-        snd_card_free(card);
-        return err;
-    }
-	*/
-#ifndef CHIP_AU8810
-    // WT pcm.
-    if ((err = snd_vortex_new_pcm(chip, VORTEX_PCM_WT, NR_WT)) < 0) {
-        snd_card_free(card);
-        return err;
-    }
-#endif
-    // snd_ac97_mixer and Vortex mixer.
-    if ((err = snd_vortex_mixer(chip)) < 0) {
-        snd_card_free(card);
-        return err;
-    }
-    if ((err = snd_vortex_midi(chip)) < 0) {
-        snd_card_free(card);
-        return err;
-    }
-    if ((err = vortex_gameport_register(chip)) < 0) {
-        snd_card_free(card);
-        return err;
-    }
-#if 0
-    if (snd_seq_device_new(card, 1, SNDRV_SEQ_DEV_ID_VORTEX_SYNTH,
-                           sizeof(snd_vortex_synth_arg_t), &wave) < 0
-        || wave == NULL) {
-        snd_printk("Can't initialize Aureal wavetable synth\n");
-    } else {
-        snd_vortex_synth_arg_t *arg;
-
-        arg = SNDRV_SEQ_DEVICE_ARGPTR(wave);
-        strcpy(wave->name, "Aureal Synth");
-        arg->hwptr = vortex;
-        arg->index = 1;
-        arg->seq_ports = seq_ports[dev];
-        arg->max_voices = max_synth_voices[dev];
-    }
-#endif
-
-    // (5)
-    strcpy(card->driver, CARD_NAME_SHORT);
-    strcpy(card->shortname, "Aureal Vortex " CARD_NAME_SHORT);
-    sprintf(card->longname, "%s at 0x%lx irq %i",
-            card->shortname, chip->io, chip->irq);
-    
-#ifdef CHIP_AU8830
-    {
-        unsigned char revision;
-        if ((err = pci_read_config_byte(pci, PCI_REVISION_ID, &revision)) < 0) {
-            snd_card_free(card);
-            return err;
-    	}
-
-	if (revision != 0xfe && revision != 0xfa) {
-            printk(KERN_ALERT "vortex: The revision (%x) of your card has not been seen before.\n", revision);
-            printk(KERN_ALERT "vortex: Please email the results of 'lspci -vv' to openvortex-dev@nongnu.org.\n");
-            snd_card_free(card);
-            err = -ENODEV;
-            return err;
-        }
-    }
-#endif
-    // (6)
-    if ((err = snd_card_register(card)) < 0) {
-        snd_card_free(card);
-        return err;
-    }
-    // (7)
-    pci_set_drvdata(pci, chip);
-    dev++;
-	vortex_connect_default(chip, 1);
-    vortex_enable_int(chip);
-    return 0;
-}
-
-// destructor -- see "Destructor" sub-section
-static void __devexit snd_vortex_remove(struct pci_dev *pci) {
-    vortex_t *vortex = snd_magic_cast(vortex_t,
-                                      pci_get_drvdata(pci), return);
-
-    if (vortex) {
-        // Release ALSA stuff.
-        snd_card_free(vortex->card);
-        // Free Vortex struct.
-        pci_set_drvdata(pci, NULL);
-    } else
-        printk("snd_vortex_remove called more than one time!\n");
-}
-
-// pci_driver definition
-static struct pci_driver driver = {
-    .name = CARD_NAME_SHORT,
-    .id_table = snd_vortex_ids,
-    .probe = snd_vortex_probe,
-    .remove = __devexit_p(snd_vortex_remove),
-};
-
-// initialization of the module
-static int __init alsa_card_vortex_init(void) {
-    int err;
-
-    if ((err = pci_module_init(&driver)) < 0) {
-#ifdef MODULE
-        printk(KERN_ERR "Aureal soundcard not found " "or device busy\n");
-#endif
-        return err;
-    }
-    return 0;
-}
-
-// clean up the module
-static void __exit alsa_card_vortex_exit(void) {
-    pci_unregister_driver(&driver);
-}
-
-module_init(alsa_card_vortex_init)
-module_exit(alsa_card_vortex_exit)
Index: debian/alsa-driver/pci/au88x0/au88x0.h
diff -u debian/alsa-driver/pci/au88x0/au88x0.h:1.1.1.2 debian/alsa-driver/pci/au88x0/au88x0.h:removed
--- debian/alsa-driver/pci/au88x0/au88x0.h:1.1.1.2	Fri Nov 21 04:16:33 2003
+++ debian/alsa-driver/pci/au88x0/au88x0.h	Tue Apr 13 13:39:27 2004
@@ -1,211 +0,0 @@
-/*
-    Aureal Vortex Soundcard driver.
-
-    IO addr collected from asp4core.vxd:
-    function    address
-    0005D5A0    13004
-    00080674    14004
-    00080AFF    12818
-
- */
-
-#ifndef __SOUND_AU88X0_H
-#define __SOUND_AU88X0_H
-
-#ifdef __KERNEL__
-#include <sound/driver.h>
-#include <sound/core.h>
-#include <sound/pcm.h>
-#include <sound/rawmidi.h>
-#include <sound/mpu401.h>
-#include <sound/hwdep.h>
-#include <sound/ac97_codec.h>
-#include <asm/io.h>
-#include <linux/init.h>
-#include "au88x0_eq.h"
-
-/*
-#ifndef	PCI_VENDOR_ID_AUREAL
-#define	PCI_VENDOR_ID_AUREAL 0x12eb
-#endif
-#ifndef	PCI_VENDOR_ID_AUREAL_VORTEX
-#define	PCI_DEVICE_ID_AUREAL_VORTEX 0x0001
-#endif
-#ifndef	PCI_VENDOR_ID_AUREAL_VORTEX2
-#define	PCI_DEVICE_ID_AUREAL_VORTEX2 0x0002
-#endif
-#ifndef	PCI_VENDOR_ID_AUREAL_ADVANTAGE
-#define	PCI_DEVICE_ID_AUREAL_ADVANTAGE 0x0003
-#endif
-*/
-#endif
-
-#define	VORTEX_DMA_MASK	0xffffffff
-
-#define	hwread(x,y) readl((x)+((y)>>2))
-#define	hwwrite(x,y,z) writel((z),(x)+((y)>>2))
-
-/* Vortex MPU401 defines. */
-#define	MIDI_CLOCK_DIV		0x61
-/* Standart MPU401 defines. */
-#define	MPU401_RESET		0xff
-#define	MPU401_ENTER_UART	0x3f
-#define	MPU401_ACK		0xfe
-
-// Get src register value to convert from x to y.
-#define	SRC_RATIO(x,y)		((((x<<15)/y) + 1)/2)
-
-/* FIFO software state constants. */
-#define FIFO_STOP 0
-#define FIFO_START 1
-#define FIFO_PAUSE 2
-
-/* ADB Resource */
-#define VORTEX_RESOURCE_DMA		0x00000000
-#define VORTEX_RESOURCE_SRC		0x00000001
-#define VORTEX_RESOURCE_MIXIN	0x00000002
-#define VORTEX_RESOURCE_MIXOUT	0x00000003
-#define VORTEX_RESOURCE_A3D		0x00000004
-#define VORTEX_RESOURCE_LAST	0x00000005
-
-/* Check for SDAC bit in "Extended audio ID" AC97 register */
-#define VORTEX_IS_QUAD(x) ((x->codec == NULL) ?  0 : (x->codec->ext_id|0x80))
-
-/* PCM devices */
-#define VORTEX_PCM_ADB		0
-#define VORTEX_PCM_SPDIF	1
-#define VORTEX_PCM_I2S		2
-#define VORTEX_PCM_A3D		3
-#define VORTEX_PCM_WT		4
-#define VORTEX_PCM_LAST		5
-
-#define MIX_CAPT(x) (vortex->mixcapt[x])
-#define MIX_PLAYB(x) (vortex->mixplayb[x])
-#define MIX_SPDIF(x) (vortex->mixspdif[x])
-
-/* Structs */
-typedef struct {
-    int fifo_enabled;   /* this_24 */
-    int fifo_status;    /* this_1c */
-    int dma_ctrl;       /* this_78 (ADB), this_7c (WT) */
-    int dma_unknown;    /* this_74 (ADB), this_78 (WT) */
-    int cfg0;
-    int cfg1;
-
-    int nr_ch;		/* Nr of PCM channels */
-	int type;		/* Output type (ac97, spdif, i2s, dsp)*/
-	int dma;		/* Hardware DMA index. */
-	int dir;		/* Stream Direction. */
-	u32 resources[5];
-	
-	/* Virtual page extender stuff */
-	int nr_periods;
-	int period_bytes;
-	unsigned long buf_addr;
-	int period_real;
-	int period_virt;
-
-    snd_pcm_substream_t *substream;
-} stream_t;
-
-typedef struct snd_vortex vortex_t;
-struct snd_vortex {
-    /* ALSA structs. */
-	snd_card_t *card;
-	snd_pcm_t *pcm[VORTEX_PCM_LAST];
-	
-    snd_rawmidi_t *rmidi;   /* Legacy Midi interface. */
-	ac97_t *codec;
-
-	/* Stream structs. */
-    stream_t dma_adb[NR_ADB];
-	int spdif_sr;
-#ifndef CHIP_AU8810
-    stream_t dma_wt[NR_WT];
-	unsigned char mixwt[6];	/* WT mixin objects */
-#endif
-	/* Global resources */
-	unsigned char mixcapt[2];
-	unsigned char mixplayb[4];
-	unsigned char mixspdif[2];
-	u32 fixed_res[5];
-	
-	/* Hardware equalizer structs */
-	eqlzr_t eq; 
-	
-	/* Extra controls */
-	//snd_kcontrol_t *eqctrl[20];
-	
-	/* Gameport stuff. */
-	struct gameport *gameport;
-
-	/* PCI hardware resources */
-	unsigned long io;
-	u32 *mmio;
-	unsigned int irq;
-    spinlock_t lock;
-
-	/* PCI device */
-	struct pci_dev * pci_dev;
-	u16 vendor;
-	u16 device;
-	u8 rev;
-};
-
-#define chip_t vortex_t
-
-/* Functions. */
-
-/* SRC */
-void vortex_adb_setsrc(vortex_t *vortex, int adbdma, unsigned int cvrt, int dir);
-
-/* DMA Engines. */
-void vortex_adbdma_setbuffers(vortex_t *vortex, int adbdma, unsigned int addr, int size, int count);
-void vortex_wtdma_setbuffers(vortex_t *vortex, int wtdma, unsigned int addr, int size, int count);
-void vortex_adbdma_setmode(vortex_t *vortex, int adbdma, int ie, int b, int fmt, int d, unsigned long offset);
-void vortex_wtdma_setmode(vortex_t *vortex, int wtdma, int ie, int b, int fmt, int d, unsigned long offset);
-void vortex_adbdma_setstartbuffer(vortex_t *vortex, int adbdma, int sb);
-void vortex_wtdma_setstartbuffer(vortex_t *vortex, int wtdma, int sb);
-
-void vortex_adbdma_startfifo(vortex_t *vortex, int adbdma);
-void vortex_adbdma_stopfifo(vortex_t *vortex, int adbdma);
-void vortex_wtdma_startfifo(vortex_t *vortex, int wtdma);
-void vortex_wtdma_stopfifo(vortex_t *vortex, int wtdma);
-void vortex_adbdma_pausefifo(vortex_t *vortex, int adbdma);
-void vortex_adbdma_resumefifo(vortex_t *vortex, int adbdma);
-void vortex_wtdma_pausefifo(vortex_t *vortex, int wtdma);
-void vortex_wtdma_resumefifo(vortex_t *vortex, int wtdma);
-
-int inline vortex_adbdma_getlinearpos(vortex_t *vortex, int adbdma);
-int inline vortex_wtdma_getlinearpos(vortex_t *vortex, int wtdma);
-
-/* global stuff. */
-void vortex_codec_init(vortex_t *vortex);
-void vortex_codec_write(ac97_t *codec, unsigned short addr,unsigned short data);
-unsigned short vortex_codec_read(ac97_t *codec, unsigned short addr);
-void vortex_spdif_init(vortex_t *vortex, int spdif_sr, int spdif_mode);
-
-int  vortex_core_init(vortex_t *card);
-int  vortex_core_shutdown(vortex_t *card);
-void vortex_enable_int(vortex_t *card);
-irqreturn_t vortex_interrupt(int irq, void *dev_id, struct pt_regs *regs);
-int  vortex_alsafmt_aspfmt(int alsafmt);
-
-/* Connection  stuff. */
-void vortex_connect_default(vortex_t *vortex, int en);
-int  vortex_adb_allocroute(vortex_t *vortex, int dma, int nr_ch, int dir, int type);
-int  vortex_wt_allocroute(vortex_t *vortex, int dma, int nr_ch);
-int  vortex_adb_checkinout(vortex_t *vortex, int resmap[], int out, int restype);
-void vortex_wt_connect(vortex_t *vortex, int en, unsigned char mixers[]);
-void vortex_wt_InitializeWTRegs(vortex_t * vortex);
-
-/* Driver stuff. */
-int vortex_gameport_register(vortex_t *card);
-int vortex_gameport_unregister(vortex_t *card);
-int vortex_eq_init(vortex_t *vortex);
-int vortex_eq_free(vortex_t *vortex);
-/* ALSA stuff. */
-int snd_vortex_new_pcm(vortex_t *vortex, int idx, int nr);
-int snd_vortex_mixer(vortex_t *vortex);
-int snd_vortex_midi(vortex_t *vortex);
-#endif
Index: debian/alsa-driver/pci/au88x0/au88x0_core.c
diff -u debian/alsa-driver/pci/au88x0/au88x0_core.c:1.1.1.3 debian/alsa-driver/pci/au88x0/au88x0_core.c:removed
--- debian/alsa-driver/pci/au88x0/au88x0_core.c:1.1.1.3	Thu Nov 20 03:48:03 2003
+++ debian/alsa-driver/pci/au88x0/au88x0_core.c	Tue Apr 13 13:39:27 2004
@@ -1,2342 +0,0 @@
-/*
-    Vortex core low level functions.
-	
- Author: Manuel Jander (mjander@users.sourceforge.cl)
- These functions are mainly the result of translations made
- from the original disassembly of the au88x0 binary drivers,
- written by Aureal before they went down.
- Many thanks to the Jeff Muizelar, Kester Maddock, and whoever
- contributed to the OpenVortex project.
- The author of this file, put the few available pieces together
- and translated the rest of the riddle (Mix, Src and connection stuff).
- Some things are still to be discovered, and their meanings are unclear.
-
- Some of these functions aren't intended to be really used, rather
- to help to understand how does the AU88X0 chips work. Keep them in, because
- they could be used somewhere in the future.
-
- This code hasn't been tested or proof read thoroughly. If you wanna help,
- take a look at the AU88X0 assembly and check if this matches.
- Functions tested ok so far are (they show the desired effect
- at least):
-   vortex_routes(); (1 bug fixed).
-   vortex_adb_addroute();
-   vortex_adb_addroutes();
-   vortex_connect_codecplay();
-   vortex_src_flushbuffers();
-   vortex_adbdma_setmode();  note: still some unknown arguments!
-   vortex_adbdma_startfifo();
-   vortex_adbdma_stopfifo();
-   vortex_fifo_setadbctrl(); note: still some unknown arguments!
-   vortex_mix_setinputvolumebyte();
-   vortex_mix_enableinput();
-   vortex_mixer_addWTD(); (fixed)
-   vortex_connection_adbdma_src_src();
-   vortex_connection_adbdma_src();
-   vortex_src_change_convratio();
-   vortex_src_addWTD(); (fixed)
-
- History:
-
- 01-03-2003 First revision.
- 01-21-2003 Some bug fixes.
- 17-02-2003 many bugfixes after a big versioning mess.
- 18-02-2003 JAAAAAHHHUUUUUU!!!! The mixer works !! I'm just so happy !
-			 (2 hours later...) I cant believe it! Im really lucky today.
-			 Now the SRC is working too! Yeah! XMMS works !
- 20-02-2003 First steps into the ALSA world.
- 28-02-2003 As my birthday present, i discovered how the DMA buffer pages really
-            work :-). It was all wrong.
- 12-03-2003 ALSA driver starts working (2 channels).
- 16-03-2003 More srcblock_setupchannel discoveries.
- 12-04-2003 AU8830 playback support. Recording in the works.
- 17-04-2003 vortex_route() and vortex_routes() bug fixes. AU8830 recording
- 			works now, but chipn' dale effect is still there.
- 16-05-2003 SrcSetupChannel cleanup. Moved the Src setup stuff entirely
-            into au88x0_pcm.c .
- 06-06-2003 Buffer shifter bugfix. Mixer volume fix.
- 
-*/
-
-#include "au88x0.h"
-#include <linux/delay.h>
-
-
-/*  MIXER (CAsp4Mix.s and CAsp4Mixer.s) */
-
-// FIXME: get rid of this.
-int mchannels[NR_MIXIN];
-int rampchs[NR_MIXIN];
-
-void vortex_mixer_en_sr(vortex_t *vortex, int channel) {
-    hwwrite(vortex->mmio, VORTEX_MIXER_SR, hwread(vortex->mmio, VORTEX_MIXER_SR) | (0x1 << channel));
-}
-void vortex_mixer_dis_sr(vortex_t *vortex, int channel) {
-    hwwrite(vortex->mmio, VORTEX_MIXER_SR,
-	    hwread(vortex->mmio, VORTEX_MIXER_SR) & ~(0x1 << channel));
-}
-
-void vortex_mix_muteinputgain(vortex_t *vortex, unsigned char mix, unsigned char channel) {
-    hwwrite(vortex->mmio, VORTEX_MIX_INVOL_A + ((mix << 5) + channel), 0x80);
-    hwwrite(vortex->mmio, VORTEX_MIX_INVOL_B + ((mix << 5) + channel), 0x80);
-}
-
-int  vortex_mix_getvolume(vortex_t *vortex, unsigned char mix) {
-    int a;
-    a = hwread(vortex->mmio, VORTEX_MIX_VOL_A + (mix << 2)) & 0xff;
-    //FP2LinearFrac(a);
-    return (a);
-}
-
-void vortex_mix_setvolumebyte(vortex_t *vortex, unsigned char mix, unsigned char vol) {
-    int temp;
-    hwwrite(vortex->mmio, VORTEX_MIX_VOL_A + (mix << 2), vol);
-    if (1) {			/*if (this_10) */
-		temp = hwread(vortex->mmio, VORTEX_MIX_VOL_B + (mix << 2));
-		if ((temp != 0x80) || (vol == 0x80))
-	    	return;
-    }
-    hwwrite(vortex->mmio, VORTEX_MIX_VOL_B + (mix << 2), vol);
-}
-
-int  vortex_mix_getinputvolume(vortex_t *vortex, unsigned char mix, int channel, int *vol) {
-    int a;
-    if (!(mchannels[mix] & (1 << channel)))
-	return 0;
-    a = hwread(vortex->mmio,
-	       VORTEX_MIX_INVOL_A + (((mix << 5) + channel) << 2));
-    /*
-       if (rampchs[mix] == 0)
-       a = FP2LinearFrac(a);
-       else
-       a = FP2LinearFracWT(a);
-     */
-    *vol = a;
-    return (0);
-}
-
-void vortex_mix_setinputvolumebyte(vortex_t *vortex, unsigned char mix, int mixin, unsigned char vol) {
-    int temp;
-
-    hwwrite(vortex->mmio, VORTEX_MIX_INVOL_A + (((mix << 5) + mixin) << 2), vol);
-    if (1) {			/* this_10, initialized to 1. */
-    	temp = hwread(vortex->mmio, VORTEX_MIX_INVOL_B + (((mix << 5) + mixin) << 2));
-    	if ((temp != 0x80) || (vol == 0x80))
-	        return;
-    }
-    hwwrite(vortex->mmio, VORTEX_MIX_INVOL_B + (((mix << 5) + mixin) << 2), vol);
-}
-
-int  vortex_mix_getenablebit(vortex_t *vortex, unsigned char mix, int mixin) {
-    int addr, temp;
-    if (mixin >= 0)
-	    addr = mixin;
-    else
-	    addr = mixin + 3;
-    addr = ((mix << 3) + (addr >> 2)) << 2;
-    temp = hwread(vortex->mmio, VORTEX_MIX_ENIN + addr);
-    return ((temp >> (mixin & 3)) & 1);
-}
-
-void vortex_mix_setenablebit(vortex_t *vortex, unsigned char mix, int mixin, int en) {
-    int temp, addr;
-
-    if (mixin < 0)
-        addr = (mixin + 3);
-    else
-	    addr = mixin;
-    addr = ((mix << 3) + (addr >> 2)) << 2;
-    temp = hwread(vortex->mmio, VORTEX_MIX_ENIN + addr);
-    if (en)
-	    temp |= (1 << (mixin & 3));
-    else
-	    temp &= ~(1 << (mixin & 3));
-    /* Mute input. Avoid crackling? */
-    hwwrite(vortex->mmio, VORTEX_MIX_INVOL_B + (((mix << 5) + mixin) << 2), 0x80);
-    /* No idea what this does. */
-    hwwrite(vortex->mmio, VORTEX_MIX_U0 + (mixin << 2), 0x0);
-    hwwrite(vortex->mmio, VORTEX_MIX_U0 + 4 + (mixin << 2), 0x0);
-    /* Write enable bit. */
-    hwwrite(vortex->mmio, VORTEX_MIX_ENIN + addr, temp);
-}
-
-void vortex_mix_killinput(vortex_t *vortex, unsigned char mix, int mixin) {
-    rampchs[mix] &= ~(1 << mixin);
-    vortex_mix_setinputvolumebyte(vortex, mix, mixin, 0x80);
-    mchannels[mix] &= ~(1 << mixin);
-    vortex_mix_setenablebit(vortex, mix, mixin, 0);
-}
-
-void vortex_mix_enableinput(vortex_t *vortex, unsigned char mix, int mixin) {
-    vortex_mix_killinput(vortex, mix, mixin);
-    if ((mchannels[mix] & (1 << mixin)) == 0) {
-	    vortex_mix_setinputvolumebyte(vortex, mix, mixin, 0x80);	/*0x80 : mute */
-	    mchannels[mix] |= (1 << mixin);
-    }
-    vortex_mix_setenablebit(vortex, mix, mixin, 1);
-}
-
-void vortex_mix_disableinput(vortex_t *vortex, unsigned char mix, int channel, int ramp) {
-    if (ramp) {
-	    rampchs[mix] |= (1 << channel);
-	    // Register callback.
-	    //vortex_mix_startrampvolume(vortex);
-	    vortex_mix_killinput(vortex, mix, channel);
-    } else
-	    vortex_mix_killinput(vortex, mix, channel);
-}
-
-int  vortex_mixer_addWTD(vortex_t *vortex, unsigned char mix, unsigned char ch) {
-    int temp, lifeboat = 0, prev;
-
-
-    temp = hwread(vortex->mmio, VORTEX_MIXER_SR);
-    if ((temp & (1 << ch)) == 0) {
-	    hwwrite(vortex->mmio, VORTEX_MIXER_CHNBASE + (ch << 2), mix);
-	    vortex_mixer_en_sr(vortex, ch);
-	    return 1;
-    }
-    prev = VORTEX_MIXER_CHNBASE + (ch << 2);
-    temp = hwread(vortex->mmio, prev);
-    while (temp & 0x10) {
-	    prev = VORTEX_MIXER_RTBASE + ((temp & 0xf) << 2);
-	    temp = hwread(vortex->mmio, prev);
-		//printk(KERN_INFO "vortex: mixAddWTD: while addr=%x, val=%x\n", prev, temp);
-	    if ((++lifeboat) > 0xf) {
-    	    printk(KERN_ERR "vortex_mixer_addWTD: lifeboat overflow\n");
-	        return 0;
-	    }
-    }
-    hwwrite(vortex->mmio, VORTEX_MIXER_RTBASE + ((temp & 0xf) << 2), mix);
-    hwwrite(vortex->mmio, prev, (temp & 0xf) | 0x10);
-    return 1;
-}
-
-int  vortex_mixer_delWTD(vortex_t *vortex, unsigned char mix, unsigned char ch) {
-	int esp14=-1, esp18, eax, ebx, edx, ebp, esi=0;
-	//int esp1f=edi(while)=src, esp10=ch;
-
-    eax = hwread(vortex->mmio, VORTEX_MIXER_SR);
-    if (((1 << ch) & eax) == 0) {
-		printk(KERN_ERR "mix ALARM %x\n", eax);
-		return 0;
-	}
-	ebp = VORTEX_MIXER_CHNBASE + (ch << 2);
-    esp18 = hwread(vortex->mmio, ebp);
-    if (esp18 & 0x10) {
-		ebx = (esp18 & 0xf);
-		if (mix == ebx) {
-			ebx = VORTEX_MIXER_RTBASE + (mix << 2);
-			edx = hwread(vortex->mmio, ebx);
-			//7b60
-			hwwrite(vortex->mmio, ebp, edx);
-			hwwrite(vortex->mmio, ebx, 0);
-		} else {
-			//7ad3
-			edx = hwread(vortex->mmio, VORTEX_MIXER_RTBASE + (ebx << 2));
-			//printk(KERN_INFO "vortex: mixdelWTD: 1 addr=%x, val=%x, src=%x\n", ebx, edx, src);
-			while ((edx & 0xf) != mix) {
-				if ((esi) > 0xf) {
-					printk(KERN_ERR "vortex: mixdelWTD: error lifeboat overflow\n");
-					return 0;
-				}
-				esp14 = ebx;
-				ebx = edx & 0xf;
-				ebp = ebx << 2;
-				edx = hwread(vortex->mmio, VORTEX_MIXER_RTBASE + ebp);
-				//printk(KERN_INFO "vortex: mixdelWTD: while addr=%x, val=%x\n", ebp, edx);
-				esi++;
-			}
-			//7b30
-			ebp = ebx << 2;
-			if (edx & 0x10) {	/* Delete entry in between others */
-				ebx = VORTEX_MIXER_RTBASE + ((edx & 0xf) << 2);
-				edx = hwread(vortex->mmio, ebx);
-				//7b60
-				hwwrite(vortex->mmio, VORTEX_MIXER_RTBASE + ebp, edx);
-				hwwrite(vortex->mmio, ebx, 0);
-				//printk(KERN_INFO "vortex mixdelWTD between addr= 0x%x, val= 0x%x\n", ebp, edx);
-			} else {			/* Delete last entry */
-				//7b83
-				if (esp14 == -1)
-					hwwrite(vortex->mmio, VORTEX_MIXER_CHNBASE + (ch << 2), esp18 & 0xef);
-				else {
-					ebx = (0xffffffe0 & edx) | (0xf & ebx);
-					hwwrite(vortex->mmio, VORTEX_MIXER_RTBASE + (esp14 << 2), ebx);
-					//printk(KERN_INFO "vortex mixdelWTD last addr= 0x%x, val= 0x%x\n", esp14, ebx);
-				}
-				hwwrite(vortex->mmio, VORTEX_MIXER_RTBASE + ebp, 0);
-				return 1;
-			}
-	    }
-    } else {
-		//printk(KERN_INFO "removed last mix\n");
-		//7be0
-		vortex_mixer_dis_sr(vortex, ch);
-		hwwrite(vortex->mmio, ebp, 0);
-    }
-    return 1;
-}
-
-unsigned int vortex_mix_boost6db(unsigned char vol) {
-    return (vol + 8);		/* WOW! what a complex function! */
-}
-
-void vortex_mix_rampvolume(vortex_t *vortex, int mix) {
-    int ch;
-    char a;
-    // This function is intended for ramping down only (see vortex_disableinput()).
-    for (ch = 0; ch < 0x20; ch++) {
-	if (((1 << ch) & rampchs[mix]) == 0)
-	    continue;
-	a = hwread(vortex->mmio,
-		   VORTEX_MIX_INVOL_B + (((mix << 5) + ch) << 2));
-	if (a > -126) {
-	    a -= 2;
-	    hwwrite(vortex->mmio,
-		    VORTEX_MIX_INVOL_A + (((mix << 5) + ch) << 2), a);
-	    hwwrite(vortex->mmio,
-		    VORTEX_MIX_INVOL_B + (((mix << 5) + ch) << 2), a);
-	} else
-	    vortex_mix_killinput(vortex, mix, ch);
-    }
-}
-
-void vortex_mixer_init(vortex_t *vortex) {
-    unsigned long addr;
-    int x;
-
-	// FIXME: get rid of this crap.
-	memset(mchannels, 0, NR_MIXOUT*sizeof(int));
-	memset(rampchs, 0, NR_MIXOUT*sizeof(int));
-
-	addr = VORTEX_MIX_U0 + 0x17c;
-    for (x = 0x5f; x >= 0; x--) {
-		hwwrite(vortex->mmio, addr, 0);
-		addr -= 4;
-    }
-	addr = VORTEX_MIX_ENIN + 0x1fc;
-    for (x = 0x7f; x >= 0; x--) {
-		hwwrite(vortex->mmio, addr, 0);
-		addr -= 4;
-    }
-	addr = VORTEX_MIX_U0 + 0x17c;
-    for (x = 0x5f; x >= 0; x--) {
-		hwwrite(vortex->mmio, addr, 0);
-		addr -= 4;
-    }
-	addr = VORTEX_MIX_INVOL_A + 0x7fc;
-    for (x = 0x1ff; x >= 0; x--) {
-		hwwrite(vortex->mmio, addr, 0x80);
-		addr -= 4;
-    }
-	addr = VORTEX_MIX_VOL_A + 0x3c;
-    for (x = 0xf; x >= 0; x--) {
-		hwwrite(vortex->mmio, addr, 0x80);
-		addr -= 4;
-    }
-	addr = VORTEX_MIX_INVOL_B + 0x7fc;
-    for (x = 0x1ff; x >= 0; x--) {
-		hwwrite(vortex->mmio, addr, 0x80);
-		addr -= 4;
-    }
-	addr = VORTEX_MIX_VOL_B + 0x3c;
-    for (x = 0xf; x >= 0; x--) {
-		hwwrite(vortex->mmio, addr, 0x80);
-		addr -= 4;
-    }
-	addr = VORTEX_MIXER_RTBASE + (MIXER_RTBASE_SIZE-1)*4;
-	for (x = (MIXER_RTBASE_SIZE-1); x >= 0; x--) {
-		hwwrite(vortex->mmio, addr, 0x0);
-		addr -= 4;
-    }
-    hwwrite(vortex->mmio, VORTEX_MIXER_SR, 0);
-    /*
-       call CAsp4Mix__Initialize_CAsp4HwIO____CAsp4Mixer____
-       Register ISR callback for volume smooth fade out.
-       Maybe this avoids clicks when press "stop" ?
-     */
-}
-
-/*  SRC (CAsp4Src.s and CAsp4SrcBlock) */
-
-void vortex_src_en_sr(vortex_t *vortex, int channel) {
-    hwwrite(vortex->mmio, VORTEX_SRCBLOCK_SR, hwread(vortex->mmio, VORTEX_SRCBLOCK_SR) | (0x1 << channel));
-}
-
-void vortex_src_dis_sr(vortex_t *vortex, int channel) {
-    hwwrite(vortex->mmio, VORTEX_SRCBLOCK_SR, hwread(vortex->mmio, VORTEX_SRCBLOCK_SR) & ~(0x1 << channel));
-}
-
-void vortex_src_flushbuffers(vortex_t *vortex, unsigned char src) {
-    int i;
-
-    for (i = 0x1f; i >= 0; i--)
-		hwwrite(vortex->mmio, VORTEX_SRC_DATA0 + (src << 7) + (i << 2), 0);
-    hwwrite(vortex->mmio, VORTEX_SRC_DATA + (src << 3), 0);
-    hwwrite(vortex->mmio, VORTEX_SRC_DATA + (src << 3) + 4, 0);
-}
-
-void vortex_src_cleardrift(vortex_t *vortex, unsigned char src) {
-    hwwrite(vortex->mmio, VORTEX_SRC_DRIFT0 + (src << 2), 0);
-    hwwrite(vortex->mmio, VORTEX_SRC_DRIFT1 + (src << 2), 0);
-    hwwrite(vortex->mmio, VORTEX_SRC_DRIFT2 + (src << 2), 1);
-}
-
-void vortex_src_slowlock(vortex_t *vortex, unsigned char src) {
-    int temp;
-
-    hwwrite(vortex->mmio, VORTEX_SRC_DRIFT2 + (src << 2), 1);
-    hwwrite(vortex->mmio, VORTEX_SRC_DRIFT0 + (src << 2), 0);
-    temp = hwread(vortex->mmio, VORTEX_SRC_U0 + (src << 2));
-    if (temp & 0x200)
-		hwwrite(vortex->mmio, VORTEX_SRC_U0 + (src << 2), temp & ~0x200L);
-}
-
-void vortex_src_set_throttlesource(vortex_t *vortex, unsigned char src, int en) {
-    int temp;
-
-    temp = hwread(vortex->mmio, VORTEX_SRC_SOURCE);
-    if (en)
-		temp |= 1 << src;
-    else
-		temp &= ~(1 << src);
-    hwwrite(vortex->mmio, VORTEX_SRC_SOURCE, temp);
-}
-
-int  vortex_src_persist_convratio(vortex_t *vortex, unsigned char src, int ratio) {
-    int temp, lifeboat = 0;
-
-    do {
-		hwwrite(vortex->mmio, VORTEX_SRC_CONVRATIO + (src << 2), ratio);
-		temp = hwread(vortex->mmio, VORTEX_SRC_CONVRATIO + (src << 2));
-		if ((++lifeboat) > 0x9) {
-            printk(KERN_ERR "Vortex: Src cvr fail\n");
-			break;
-        }
-    } while (temp != ratio);
-    return temp;
-}
-
-void vortex_src_change_convratio(vortex_t *vortex, unsigned char src, int ratio) {
-    int temp, a;
-
-    if ((ratio & 0x10000) && (ratio != 0x10000)) {
-		if (ratio & 0x3fff)
-			a = (0x11 - ((ratio >> 0xe) & 0x3)) - 1;
-		else
-			a = (0x11 - ((ratio >> 0xe) & 0x3)) - 2;
-	} else
-		a = 0xc;
-    temp = hwread(vortex->mmio, VORTEX_SRC_U0 + (src << 2));
-    if (((temp >> 4) & 0xf) != a)
-		hwwrite(vortex->mmio, VORTEX_SRC_U0 + (src << 2), (temp & 0xf) | ((a & 0xf) << 4));
-
-    vortex_src_persist_convratio(vortex, src, ratio);
-}
-
-int  vortex_src_checkratio(vortex_t *vortex, unsigned char src, unsigned int desired_ratio) {
-    int hw_ratio, lifeboat = 0;
-
-    hw_ratio = hwread(vortex->mmio, VORTEX_SRC_CONVRATIO + (src << 2));
-    
-    while (hw_ratio != desired_ratio) {
-		hwwrite(vortex->mmio, VORTEX_SRC_CONVRATIO + (src << 2), desired_ratio);
-		
-		if ((lifeboat++) > 15){
-			printk(KERN_ERR "Vortex: could not set src-%d from %d to %d\n", src, hw_ratio, desired_ratio);
-			break;
-		}
-    }
-    
-    return hw_ratio;
-}
-
-void vortex_src_setupchannel(vortex_t *card, unsigned char src, unsigned int cvr,
-    unsigned int b, int c, int d, int dirplay, int f, unsigned int g, int thsource) {
-    // noplayback: d=2,4,7,0xa,0xb when using first 2 src's.
-	// c: enables pitch sweep.
-	// looks like g is c related. Maybe g is a sweep parameter ?
-	// g = cvr
-	// dirplay: 0 = recording, 1 = playback
-	// d = src hw index.
-		
-    int esi, ebp=0, esp10;
-
-    vortex_src_flushbuffers(card, src);
-
-    if (c) {
-		if ((g & 0x10000) && (g != 0x10000)) {
-			g = 0;
-			esi = 0x7;
-		} else {
-			if ((((short)g) < 0) && (g != 0x8000)) {
-				g = 0;
-				esi = 0x8;
-			} else {
-				g = 1;
-				esi = 0xc;
-			}
-		}
-    } else {
-		if ((cvr & 0x10000) && (cvr != 0x10000)) {
-			g = 0; /*ebx = 0*/
-			esi = 0x11 - ((cvr >> 0xe) & 7);
-			if (cvr & 0x3fff)
-				esi -= 1;
-			else
-				esi -= 2;
-		} else {
-			g = 1;
-			esi = 0xc;
-		}
-    }
-    vortex_src_cleardrift(card, src);
-    vortex_src_set_throttlesource(card, src, thsource);
-
-    if ((dirplay == 0)&&(c == 0)) {
-        if (g)
-            esp10 = 0xf;
-        else
-            esp10 = 0xc;
-        ebp = 0;
-    } else {
-    	if (g)
-		    ebp = 0xf;
-		else
-    		ebp = 0xc;
-		esp10 = 0;       
-    }        
-	hwwrite(card->mmio, VORTEX_SRC_U0 + (src << 2), (f << 0x9) | (c << 0x8) | ((esi&0xf)<<4) | d);
-    /* 0xc0   esi=0xc c=f=0 d=0*/
-	vortex_src_persist_convratio(card, src, cvr);
-    hwwrite(card->mmio, VORTEX_SRC_U1 + (src << 2), b & 0xffff);
-	/* 0   b=0 */
-    hwwrite(card->mmio, VORTEX_SRC_U3 + (src << 2), (g << 0x11) | (dirplay << 0x10) | (ebp << 0x8) | esp10);
-	/* 0x30f00 e=g=1 esp10=0 ebp=f */
-	//printk(KERN_INFO "vortex: SRC %d, d=0x%x, esi=0x%x, esp10=0x%x, ebp=0x%x\n", src, d, esi, esp10, ebp);
-}
-
-void vortex_srcblock_init(vortex_t *vortex) {
-    unsigned long addr;
-    int x;
-    hwwrite(vortex->mmio, VORTEX_SRC_SOURCE+4, 0x1ff);
-    /*
-    for (x=0; x<0x10; x++) {
-		vortex_src_init(&vortex_src[x], x);
-    }
-    */
-    //addr = 0xcc3c;
-	//addr = 0x26c3c;
-	addr = VORTEX_SRC_RTBASE + 0x3c;
-    for (x = 0xf; x >= 0; x--) {
-		hwwrite(vortex->mmio, addr, 0);
-		addr -= 4;
-    }
-    //addr = 0xcc94;
-	//addr = 0x26c94;
-	addr = VORTEX_SRC_CHNBASE + 0x54;
-    for (x = 0x15; x >= 0; x--) {
-		hwwrite(vortex->mmio, addr, 0);
-		addr -= 4;
-    }
-}
-
-int  vortex_src_addWTD(vortex_t *vortex, unsigned char src, unsigned char ch) {
-    int temp, lifeboat = 0, prev;
-	// esp13 = src
-
-    temp = hwread(vortex->mmio, VORTEX_SRCBLOCK_SR);
-    if ((temp & (1 << ch)) == 0) {
-    	hwwrite(vortex->mmio, VORTEX_SRC_CHNBASE + (ch << 2), src);
-    	vortex_src_en_sr(vortex, ch);
-    	return 1;
-    }
-    prev = VORTEX_SRC_CHNBASE + (ch << 2); /*ebp*/
-    temp = hwread(vortex->mmio, prev);
-    //while (temp & NR_SRC) {
-	while (temp & 0x10) {
-	    prev = VORTEX_SRC_RTBASE + ((temp & 0xf) << 2); /*esp12*/
-		//prev = VORTEX_SRC_RTBASE + ((temp & (NR_SRC-1)) << 2); /*esp12*/
-	    temp = hwread(vortex->mmio, prev);
-		//printk(KERN_INFO "vortex: srcAddWTD: while addr=%x, val=%x\n", prev, temp);
-	    if ((++lifeboat) > 0xf) {
-    	    printk(KERN_ERR "vortex_src_addWTD: lifeboat overflow\n");
-	        return 0;
-	    }
-    }
-    hwwrite(vortex->mmio, VORTEX_SRC_RTBASE + ((temp & 0xf) << 2), src);
-    //hwwrite(vortex->mmio, prev, (temp & (NR_SRC-1)) | NR_SRC);
-	hwwrite(vortex->mmio, prev, (temp & 0xf) | 0x10);
-    return 1;
-}
-
-int  vortex_src_delWTD(vortex_t *vortex, unsigned char src, unsigned char ch) {
-	int esp14=-1, esp18, eax, ebx, edx, ebp, esi=0;
-	//int esp1f=edi(while)=src, esp10=ch;
-
-    eax = hwread(vortex->mmio, VORTEX_SRCBLOCK_SR);
-    if (((1 << ch) & eax) == 0) {
-		printk(KERN_ERR "src alarm\n");
-		return 0;
-	}
-	ebp = VORTEX_SRC_CHNBASE + (ch << 2);
-    esp18 = hwread(vortex->mmio, ebp);
-    if (esp18 & 0x10) {
-		ebx = (esp18 & 0xf);
-		if (src == ebx) {
-			ebx = VORTEX_SRC_RTBASE + (src << 2);
-			edx = hwread(vortex->mmio, ebx);
-			//7b60
-			hwwrite(vortex->mmio, ebp, edx);
-			hwwrite(vortex->mmio, ebx, 0);
-		} else {
-			//7ad3
-			edx = hwread(vortex->mmio, VORTEX_SRC_RTBASE + (ebx << 2));
-			//printk(KERN_INFO "vortex: srcdelWTD: 1 addr=%x, val=%x, src=%x\n", ebx, edx, src);
-			while ((edx & 0xf) != src) {
-				if ((esi) > 0xf) {
-					printk("vortex: srcdelWTD: error, lifeboat overflow\n");
-					return 0;
-				}
-				esp14 = ebx;
-				ebx = edx & 0xf;
-				ebp = ebx << 2;
-				edx = hwread(vortex->mmio, VORTEX_SRC_RTBASE + ebp);
-				//printk(KERN_INFO "vortex: srcdelWTD: while addr=%x, val=%x\n", ebp, edx);
-				esi++;
-			}
-			//7b30
-			ebp = ebx << 2;
-			if (edx & 0x10) {	/* Delete entry in between others */
-				ebx = VORTEX_SRC_RTBASE + ((edx & 0xf) << 2);
-				edx = hwread(vortex->mmio, ebx);
-				//7b60
-				hwwrite(vortex->mmio, VORTEX_SRC_RTBASE + ebp, edx);
-				hwwrite(vortex->mmio, ebx, 0);
-				//printk(KERN_INFO "vortex srcdelWTD between addr= 0x%x, val= 0x%x\n", ebp, edx);
-			} else {			/* Delete last entry */
-				//7b83
-				if (esp14 == -1)
-					hwwrite(vortex->mmio, VORTEX_SRC_CHNBASE + (ch << 2), esp18 & 0xef);
-				else {
-					ebx = (0xffffffe0 & edx) | (0xf & ebx);
-					hwwrite(vortex->mmio, VORTEX_SRC_RTBASE + (esp14 << 2), ebx);
-					//printk(KERN_INFO"vortex srcdelWTD last addr= 0x%x, val= 0x%x\n", esp14, ebx);
-				}
-				hwwrite(vortex->mmio, VORTEX_SRC_RTBASE + ebp, 0);
-				return 1;
-			}
-	    }
-    } else {
-		//7be0
-		vortex_src_dis_sr(vortex, ch);
-		hwwrite(vortex->mmio, ebp, 0);
-    }
-    return 1;
-}
-
- /*FIFO*/
-
-void vortex_fifo_clearadbdata(vortex_t *vortex, int fifo, int x) {
-	for (x--; x >= 0; x--)
-		hwwrite(vortex->mmio, VORTEX_FIFO_ADBDATA + (((fifo << FIFO_SIZE_BITS) + x) << 2), 0);
-}
-
-void vortex_fifo_clearwtdata(vortex_t *vortex, int fifo, int x) {
-	if (x < 1)
-		return;
-	for (x--; x >= 0; x--)
-		hwwrite(vortex->mmio, VORTEX_FIFO_WTDATA + (((fifo << FIFO_SIZE_BITS) + x) << 2), 0);
-}
-
-void vortex_fifo_init(vortex_t *vortex) {
-    int x;
-    unsigned long addr;
-
-    /* ADB DMA channels fifos. */
-	addr = VORTEX_FIFO_ADBCTRL + ((NR_ADB-1)*4);
-    for (x = NR_ADB-1; x >= 0; x--) {
-	    hwwrite(vortex->mmio, addr, (FIFO_U0 | FIFO_U1));
-	    if (hwread(vortex->mmio, addr) != (FIFO_U0 | FIFO_U1))
-	        printk(KERN_ERR "bad adb fifo reset!");
-	    vortex_fifo_clearadbdata(vortex, x, FIFO_SIZE);
-	    addr -= 4;
-    }
-
-#ifndef CHIP_AU8810
-    /* WT DMA channels fifos. */
-	addr = VORTEX_FIFO_WTCTRL + ((NR_WT-1)*4);
-    for (x = NR_WT-1; x >= 0; x--) {
-	    hwwrite(vortex->mmio, addr, FIFO_U0);
-	    if (hwread(vortex->mmio, addr) != FIFO_U0)
-    	    printk(KERN_ERR "bad wt fifo reset (0x%08lx, 0x%08x)!\n", addr, hwread(vortex->mmio, addr));
-	    vortex_fifo_clearwtdata(vortex, x, FIFO_SIZE);
-	    addr -= 4;
-    }
-#endif
-    /* below is weird stuff... */
-#ifndef CHIP_AU8820
-    hwwrite(vortex->mmio, 0xf8c0, 0xd03); //0x0843 0xd6b
-#else
-	hwwrite(vortex->mmio, 0x17000, 0x61);
-	hwwrite(vortex->mmio, 0x17004, 0x61);
-	hwwrite(vortex->mmio, 0x17008, 0x61);
-#endif
-}
-
-void vortex_fifo_adbinitialize(vortex_t *vortex, int fifo, int j) {
-    vortex_fifo_clearadbdata(vortex, fifo, FIFO_SIZE);
-#ifdef CHIP_AU8820
-    hwwrite(vortex->mmio, VORTEX_FIFO_ADBCTRL + (fifo << 2), (FIFO_U1 | ((j & FIFO_MASK) << 0xb)));
-#else
-	hwwrite(vortex->mmio, VORTEX_FIFO_ADBCTRL + (fifo << 2), (FIFO_U1 | ((j & FIFO_MASK) << 0xc)));
-#endif
-}
-
-void vortex_fifo_wtinitialize(vortex_t *vortex, int fifo, int j) {
-    vortex_fifo_clearwtdata(vortex, fifo, FIFO_SIZE);
-#ifdef CHIP_AU8820
-    hwwrite(vortex->mmio, VORTEX_FIFO_WTCTRL + (fifo << 2), (FIFO_U1 | ((j & FIFO_MASK) << 0xb)));
-#else
-	hwwrite(vortex->mmio, VORTEX_FIFO_WTCTRL + (fifo << 2), (FIFO_U1 | ((j & FIFO_MASK) << 0xc)));
-#endif
-}
-
-void vortex_fifo_setadbvalid(vortex_t *vortex, int fifo, int en) {
-    hwwrite(vortex->mmio, VORTEX_FIFO_ADBCTRL + (fifo << 2), (hwread(vortex->mmio,
-		VORTEX_FIFO_ADBCTRL + (fifo << 2)) & 0xffffffef) | ((1 & en) << 4) | FIFO_U1);
-}
-
-void vortex_fifo_setwtvalid(vortex_t *vortex, int fifo, int en) {
-    hwwrite(vortex->mmio, VORTEX_FIFO_WTCTRL + (fifo << 2), (hwread(vortex->mmio,
-		VORTEX_FIFO_WTCTRL + (fifo << 2)) & 0xffffffef) | ((en & 1) << 4) | FIFO_U1);
-}
-
-void vortex_fifo_setadbctrl(vortex_t *vortex, int fifo, int b, int priority, int empty, int valid, int f) {
-    int temp, lifeboat=0;
-    //int this_8[NR_ADB] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; /* position */
-	int	this_4=0x2;
-	/* f seems priority related.
-	 * CAsp4AdbDma::SetPriority is the only place that calls SetAdbCtrl with f set to 1
-	 * every where else it is set to 0. It seems, however, that CAsp4AdbDma::SetPriority
-	 * is never called, thus the f related bits remain a mystery for now.
-	 */
-    do {
-		temp = hwread(vortex->mmio, VORTEX_FIFO_ADBCTRL + (fifo << 2));
-		if (lifeboat++ > 0xbb8) {
-			printk(KERN_ERR "Vortex: vortex_fifo_setadbctrl fail\n");
-			break;
-		}
-    } while (temp & FIFO_RDONLY);
-
-	// AU8830 semes to take some special care about fifo content (data).
-	// But i'm just to lazy to translate that :)
-    if (valid) {
-		if ((temp & FIFO_VALID) == 0) {
-			//this_8[fifo] = 0;
-			vortex_fifo_clearadbdata(vortex, fifo, FIFO_SIZE); // this_4
-#ifdef CHIP_AU8820
-			temp = (this_4 & 0x1f) << 0xb;
-#else
-			temp = (this_4 & 0x3f) << 0xc;
-#endif
-			temp = (temp & 0xfffffffd) | ((b & 1) << 1);
-			temp = (temp & 0xfffffff3) | ((priority & 3) << 2);
-			temp = (temp & 0xffffffef) | ((valid & 1) << 4);
-			temp |= FIFO_U1;
-			temp = (temp & 0xffffffdf) | ((empty & 1) << 5);
-#ifdef CHIP_AU8820
-			temp = (temp & 0xfffbffff) | ((f & 1) << 0x12);
-#endif
-#ifdef CHIP_AU8830
-			temp = (temp & 0xf7ffffff) | ((f & 1) << 0x1b);
-			temp = (temp & 0xefffffff) | ((f & 1) << 0x1c);
-#endif
-#ifdef CHIP_AU8810
-			temp = (temp & 0xfeffffff) | ((f & 1) << 0x18);
-			temp = (temp & 0xfdffffff) | ((f & 1) << 0x19);
-#endif
-		}
-    } else {
-		if (temp & FIFO_VALID) {
-#ifdef CHIP_AU8820
-			temp = ((f & 1) << 0x12) | (temp & 0xfffbffef);
-#endif
-#ifdef CHIP_AU8830
-			temp = ((f & 1) << 0x1b) | (temp & 0xe7ffffef) | FIFO_BITS;
-#endif
-#ifdef CHIP_AU8810
-			temp = ((f & 1) << 0x1b) | (temp & 0xfcffffef) | FIFO_BITS;
-#endif			
-		} else
-			/*if (this_8[fifo])*/ vortex_fifo_clearadbdata(vortex, fifo, FIFO_SIZE);
-	}
-	hwwrite(vortex->mmio, VORTEX_FIFO_ADBCTRL + (fifo << 2), temp);
-	hwread(vortex->mmio, VORTEX_FIFO_ADBCTRL + (fifo << 2));
-}
-
-void vortex_fifo_setwtctrl(vortex_t *vortex, int fifo, int b, int priority, int empty, int valid, int f) {
-	int temp=0;
-	int this_4=2;
-
-	if (valid) {
-		vortex_fifo_clearwtdata(vortex, fifo, 0x20);
-		temp = (this_4 & 0x1f) << 0xb;
-	}
-	temp = (temp & 0xfffffffd) | ((b & 1) << 1);
-	temp = (temp & 0xfffdffff) | ((f & 1) << 0x11);
-	temp = (temp & 0xfffffff3) | ((priority & 3) << 2);
-	temp = (temp & 0xffffffef) | ((valid & 1) << 4);
-	temp = (temp & 0xffffffdf) | ((empty & 1) << 5);
-#ifdef FIFO_BITS
-	temp |= FIFO_BITS;
-#endif
-	hwwrite(vortex->mmio, VORTEX_FIFO_WTCTRL + (fifo << 2), temp);
-}
-
-/* ADBDMA */
-
-void vortex_adbdma_init(vortex_t *vortex) {
-}
-
-void vortex_adbdma_setupbuffer(vortex_t *vortex, int adbdma, int sb, u32 addr, u32 size, int sb_next, int c) {
-    // if "c" is 0, then DMA stops when reaching that buffer.
-
-    int offset, shift, mask;
-    stream_t *dma = &vortex->dma_adb[adbdma];
-    int *cfg;
-
-    if (sb_next == -1) {
-        sb_next = sb;
-        if (dma->dma_ctrl & IE_MASK)
-            c = 0;
-    }
-
-    if ((sb >= 0)&&(sb < 4)) {
-        if (sb & 1) {
-            // subbuffer 1 and 3
-            shift = 0x0;
-            mask = 0xf8fff000;
-        } else {
-            // subbuffer 0 and 2
-            shift = 0xc;
-            mask = 0x8f000fff;
-        }
-        if (sb & 2) {
-            // subbuffer 2 and 3
-            cfg = &dma->cfg1;
-            offset = 4;
-        } else {
-            // subbuffer 0 and 1
-            cfg = &dma->cfg0;
-            offset = 0;
-        }
-        *cfg = (*cfg & (mask|0xffffff)) | ((((sb_next & 3)<<4) | ((c&1)<<6))<<24) | 0x80;
-        if (size)
-           *cfg = (*cfg & (mask|0xff000000)) | (((size-1) & 0xfff) << shift);
-        hwwrite(vortex->mmio, VORTEX_ADBDMA_BUFCFG0 + offset + (adbdma << 3), *cfg);
-    }
-    hwwrite(vortex->mmio, VORTEX_ADBDMA_BUFBASE + (((adbdma<<2)+sb)<<2), addr);
-}
-
-void vortex_adbdma_setfirstbuffer(vortex_t *vortex, int adbdma) {
-    stream_t *dma = &vortex->dma_adb[adbdma];
-
-    hwwrite(vortex->mmio, VORTEX_ADBDMA_CTRL + (adbdma << 2), dma->dma_ctrl);
-}
-
-void vortex_adbdma_setstartbuffer(vortex_t *vortex, int adbdma, int sb) {
-    stream_t *dma = &vortex->dma_adb[adbdma];
-	hwwrite(vortex->mmio, VORTEX_ADBDMA_START + (adbdma << 2), (sb << ((NR_ADB-adbdma)*2)));
-	dma->period_real = dma->period_virt = sb;
-}
-
-void vortex_adbdma_setbuffers(vortex_t *vortex, int adbdma, unsigned int addr, int size, int count) {
-	stream_t *dma = &vortex->dma_adb[adbdma];
-
-	dma->period_bytes = size;
-	dma->nr_periods = count;
-	dma->buf_addr = addr;
-
-	// Adb Buffers. Simple linear buffer.
-	hwwrite(vortex->mmio, VORTEX_ADBDMA_BUFBASE + (adbdma << 4), addr);
-	hwwrite(vortex->mmio, VORTEX_ADBDMA_BUFBASE + 0x4 + (adbdma << 4), addr + size);
-	hwwrite(vortex->mmio, VORTEX_ADBDMA_BUFBASE + 0x8 + (adbdma << 4), addr + (size*2));
-	hwwrite(vortex->mmio, VORTEX_ADBDMA_BUFBASE + 0xc + (adbdma << 4), addr + (size*3));
-	
-	size--;
-	switch (count) {
-	case 1:
-		dma->cfg0 = 0x80000000 | 0x40000000 | 0x00000000 | (size << 0xc);
-		dma->cfg1 = 0x00000000 | 0x00000000 | 0x00000000;
-		break;
-	case 2:
-		dma->cfg0 = 0x88000000 | 0x44000000 | 0x10000000 | (size << 0xc) | size;
-		dma->cfg1 = 0x00000000 | 0x00000000 | 0x00000000;
-		break;
-	case 3:
-		dma->cfg0 = 0x88000000 | 0x44000000 | 0x12000000 | (size << 0xc) | size;
-		dma->cfg1 = 0x80000000 | 0x40000000 | 0x00000000 | (size << 0xc);
-		break;
-	case 4:
-	default:
-		dma->cfg0 = 0x88000000 | 0x44000000 | 0x12000000 | (size << 0xc) | size;
-		dma->cfg1 = 0x88000000 | 0x44000000 | 0x30000000 | (size << 0xc) | size;
-		break;
-	}	
-	hwwrite(vortex->mmio, VORTEX_ADBDMA_BUFCFG0 + (adbdma << 3), dma->cfg0);
-	hwwrite(vortex->mmio, VORTEX_ADBDMA_BUFCFG1 + (adbdma << 3), dma->cfg1);
-
-	vortex_adbdma_setfirstbuffer(vortex, adbdma);
-	vortex_adbdma_setstartbuffer(vortex, adbdma, 0);
-}
-
-void vortex_adbdma_setmode(vortex_t *vortex, int adbdma, int ie, int dir, int fmt, int d, unsigned long offset) {
-    stream_t *dma = &vortex->dma_adb[adbdma];
-	
-    dma->dma_unknown = d;
-    dma->dma_ctrl = ((offset & OFFSET_MASK) | (dma->dma_ctrl & ~OFFSET_MASK));
-    /* Enable PCMOUT interrupts. */
-    dma->dma_ctrl = (dma->dma_ctrl & ~IE_MASK) | ((ie << IE_SHIFT) & IE_MASK);
-
-    dma->dma_ctrl = (dma->dma_ctrl & ~U_MASK) | ((dir << U_SHIFT) & U_MASK);
-    dma->dma_ctrl = (dma->dma_ctrl & ~FMT_MASK) | ((fmt << FMT_SHIFT) & FMT_MASK);
-
-    hwwrite(vortex->mmio, VORTEX_ADBDMA_CTRL + (adbdma << 2), dma->dma_ctrl);
-	hwread(vortex->mmio, VORTEX_ADBDMA_CTRL + (adbdma << 2));
-}
-
-void vortex_adbdma_bufshift(vortex_t *vortex, int adbdma) {
-	stream_t *dma = &vortex->dma_adb[adbdma];
-	int page, p, pp, delta, i;
-	
- 	page = (hwread(vortex->mmio, VORTEX_ADBDMA_STAT + (adbdma << 2)) & ADB_SUBBUF_MASK) >> ADB_SUBBUF_SHIFT;
-	if (dma->nr_periods >= 4)
-		delta = (page - dma->period_real) & 3;
-	else {
-		delta = (page - dma->period_real);
-		if (delta < 0)
-			delta += dma->nr_periods;
-	}
-	if (delta == 0)
-		return;
-
-	/* refresh hw page table */
-	if (dma->nr_periods > 4) {
-		for (i=0 ; i < delta; i++) {
-			/* p: audio buffer page index */
-			p = dma->period_virt + i + 4;
-			if (p >= dma->nr_periods)
-				p -= dma->nr_periods;
-			/* pp: hardware DMA page index. */
-			pp = dma->period_real + i;
-			if (pp >= 4)
-				pp -= 4;
-			hwwrite(vortex->mmio, VORTEX_ADBDMA_BUFBASE+(((adbdma << 2)+pp) << 2), dma->buf_addr+((dma->period_bytes)*p));
-			/* Force write thru cache. */
-			hwread(vortex->mmio, VORTEX_ADBDMA_BUFBASE + (((adbdma << 2)+pp) << 2));
-		}
-	}
-	dma->period_virt += delta;
-	dma->period_real = page;
-	if (dma->period_virt >= dma->nr_periods)
-		dma->period_virt -= dma->nr_periods;
-	if ((delta != 1) || (delta < 0))
-		printk(KERN_INFO "vortex: % d virt=0x%d, real=0x%x, delta = %d\n", adbdma, dma->period_virt, dma->period_real, delta);
-}
-
-void vortex_adbdma_setctrl(vortex_t *vortex, int a, int b, int c, int d, int e, int f) {
-    //FIXME
-}
-
-void vortex_adbdma_getposition(vortex_t *vortex, int adbdma, int *subbuf, int *pos) {
-    int temp, edi, eax, ecx, esp10, edx;
-    stream_t *dma = &vortex->dma_adb[adbdma];
-
-    // dma->cfg0: this_7c,  dma->cfg1: this_80.
-
-    // Looks like several hardware bug workarounds are in here.
-    // The most weird function. What a nightmare.
-    do {
-        // Potential lockup, no lifeboat.
-	    temp = hwread(vortex->mmio, VORTEX_ADBDMA_STAT + (adbdma << 2));
-        if (temp == -1) {
-		    // 3ae1
-            //*subbuf = this_88;
-            //*pos = this_84;
-		    return;
-        }
-        esp10 = adbdma;
-		if ((esp10 == ((temp >> 0x13) & 0xf)) && ((char)((temp >> 0x10) & 0xff) < 0))
-            continue;
-        edx = temp >> 0x18;
-        if ((edx & 0xf) != adbdma)
-		    break;
-    } while (edx | 0x10);
-
-    ecx = hwread(vortex->mmio, VORTEX_FIFO_ADBCTRL + (adbdma << 2));
-    *subbuf = (ecx >> 0xc) & 3;
-
-    switch (*subbuf) {
-        case 0:
-            edi = (dma->cfg0 >> 0xc) & 0xfff;
-            eax = (dma->cfg0 >> 24) & 0xff;
-            break;
-        case 1:
-            edi = dma->cfg0 & 0xfff;
-            eax = (dma->cfg0 >> 24) & 0xff;
-            break;
-        case 2:
-            edi = (dma->cfg1 >> 0xc) & 0xfff;
-            eax = (dma->cfg1 >> 24) & 0xff;
-            break;
-        case 3:
-            edi = dma->cfg1 & 0xfff;
-            eax = (dma->cfg1 >> 24) & 0xff;
-            break;
-        default:
-            return;
-    }
-    edi++;
-    if (dma->fifo_enabled == 0)
-	    *subbuf = 0;
-    else {
-        esp10 = dma->dma_unknown;
-        temp = (temp & 0xfff83fff) | ((((temp >> 0xe) & 0x1f) & ~esp10) << 0xe);
-        if (dma->dma_ctrl & 0x2000) {
-            if (esp10) {
-                if ((dma->dma_ctrl & 0x3c000) == 0x20000) /* if stereo */
-                    eax = (0x1c - ((temp >> 0xe) & 0x1f))*2;
-                else
-                    eax = 0x1c - ((temp >> 0xe) & 0x1f);
-            } else {
-                if ((dma->dma_ctrl & 0x3c000) == 0x20000) /* if stereo */
-                    eax = ((~(temp >> 0xe)) & 0x1f)*2;
-                else
-                    eax = (~(temp >> 0xe)) & 0x1f;
-            }
-            if (((ecx & 0x10) == 0) && (dma->fifo_status != FIFO_PAUSE))
-                eax = edi - eax;
-            else
-                eax = (temp & 0xfff) - eax;
-            if (edi > eax)
-                eax = edi;
-        } else {
-            // 3a87
-            if ((dma->dma_ctrl & 0x3c000) == 0x20000) /* if stereo */
-                eax = (temp >>  0xd) & 0x3e;
-            else
-                eax = (temp >> 0xe) & 0x1f;
-        }
-        // 3aa8
-        edi--;
-        if ((ecx & 0x10) == 0) {
-            if (dma->fifo_status == FIFO_PAUSE) {
-                edx = (temp & 0xfff) + eax;
-                eax = edi + 1;
-                if (eax < edx)
-                    eax = edx;
-            } else
-                eax = ((ecx >> 5) & 1) + edi;
-        } else {
-             // 3ad3
-             eax += temp & 0xfff;
-             if (edi >= eax)
-                 eax = edi; // 3b00
-        }
-    }
-    // 3b02
-    *subbuf = eax;
-    // 3b08
-    //this_84 = *pos;
-    //this_88 = *subbuf;
-}
-
-int  vortex_adbdma_getcursubuffer(vortex_t *vortex, int adbdma) {
-    return((hwread(vortex->mmio, VORTEX_ADBDMA_STAT + (adbdma << 2)) & ADB_SUBBUF_MASK) >> ADB_SUBBUF_SHIFT);
-}
-
-int inline vortex_adbdma_getlinearpos(vortex_t *vortex, int adbdma) {
-    stream_t *dma = &vortex->dma_adb[adbdma];
-    int temp;
-
-    temp = hwread(vortex->mmio, VORTEX_ADBDMA_STAT + (adbdma << 2));
- 	temp = (dma->period_virt * dma->period_bytes) + (temp & POS_MASK);
-    return (temp);
-}
-
-void vortex_adbdma_startfifo(vortex_t *vortex, int adbdma) {
-    int this_8=0/*empty*/, this_4=0/*priority*/;
-	stream_t *dma = &vortex->dma_adb[adbdma];
-
-    switch (dma->fifo_status) {
-        case FIFO_START:
-            vortex_fifo_setadbvalid(vortex, adbdma, dma->fifo_enabled ? 0xff:0);
-            break;
-        case FIFO_STOP:
-			this_8 = 1;
-            hwwrite(vortex->mmio, VORTEX_ADBDMA_CTRL + (adbdma << 2), dma->dma_ctrl);
-            vortex_fifo_setadbctrl(vortex, adbdma, dma->dma_unknown, this_4,
-				this_8, dma->fifo_enabled ? 0xff:0, 0);
-            break;
-        case FIFO_PAUSE:
-            vortex_fifo_setadbctrl(vortex, adbdma, dma->dma_unknown, this_4,
-				this_8, dma->fifo_enabled ? 0xff:0, 0);
-            break;
-    }
-    dma->fifo_status = FIFO_START;
-}
-
-void vortex_adbdma_resumefifo(vortex_t *vortex, int adbdma) {
-	stream_t *dma = &vortex->dma_adb[adbdma];
-
-    int this_8=1, this_4=0;
-    switch (dma->fifo_status) {
-        case FIFO_STOP:
-            hwwrite(vortex->mmio, VORTEX_ADBDMA_CTRL + (adbdma << 2), dma->dma_ctrl);
-            vortex_fifo_setadbctrl(vortex, adbdma, dma->dma_unknown, this_4, this_8,
-				dma->fifo_enabled ? 0xff:0, 0);
-            break;
-        case FIFO_PAUSE:
-            vortex_fifo_setadbctrl(vortex, adbdma, dma->dma_unknown, this_4, this_8,
-				dma->fifo_enabled ? 0xff:0, 0);
-            break;
-    }
-   	dma->fifo_status = FIFO_START;
-}
-
-void vortex_adbdma_pausefifo(vortex_t *vortex, int adbdma) {
-	stream_t *dma = &vortex->dma_adb[adbdma];
-
-    int this_8=0, this_4=0;
-    switch (dma->fifo_status) {
-        case FIFO_START:
-            vortex_fifo_setadbctrl(vortex, adbdma, dma->dma_unknown, this_4, this_8, 0, 0);
-            break;
-        case FIFO_STOP:
-            hwwrite(vortex->mmio, VORTEX_ADBDMA_CTRL + (adbdma << 2), dma->dma_ctrl);
-            vortex_fifo_setadbctrl(vortex, adbdma, dma->dma_unknown, this_4, this_8, 0, 0);
-            break;
-    }
-    dma->fifo_status = FIFO_PAUSE;
-}
-
-void vortex_adbdma_stopfifo(vortex_t *vortex, int adbdma) {
-	stream_t *dma = &vortex->dma_adb[adbdma];
-
-    int this_4=0, this_8=0;
-    if (dma->fifo_status == FIFO_START)
-        vortex_fifo_setadbctrl(vortex, adbdma, dma->dma_unknown, this_4, this_8, 0, 0);
-    else if (dma->fifo_status == FIFO_STOP)
-        return;
-    dma->fifo_status = FIFO_STOP;
-    dma->fifo_enabled = 0;
-}
-
-/* WTDMA */
-#ifndef CHIP_AU8810
-void vortex_wtdma_init(vortex_t *vortex) {
-}
-
-void vortex_wtdma_setupbuffer(vortex_t *vortex, int wtdma, int sb, u32 addr, u32 size, int sb_next, int c) {
-    int offset, shift, mask;
-    stream_t *dma = &vortex->dma_wt[wtdma];
-    int *cfg;
-
-    if (sb_next == -1) {
-        sb_next = sb;
-        if (dma->dma_ctrl & IE_MASK)
-            c = 0;
-    }
-
-    if ((sb >= 0)&&(sb < 4)) {
-        if (sb & 1) {
-            /* subbuffer 1 and 3 */
-            shift = 0x0;
-            mask = 0xf8fff000;
-        } else {
-            /* subbuffer 0 and 2 */
-            shift = 0xc;
-            mask = 0x8f000fff;
-        }
-        if (sb & 2) {
-            /* subbuffer 2 and 3 */
-            cfg = &dma->cfg1;
-            offset = 4;
-        } else {
-            /* subbuffer 0 and 1 */
-            cfg = &dma->cfg0;
-            offset = 0;
-        }
-        *cfg = (*cfg & (mask|0xffffff)) | ((((sb_next & 3)<<4) | ((c&1)<<6))<<24) | 0x80;
-        if (size)
-           *cfg = (*cfg & (mask|0xff000000)) | (((size-1) & 0xfff) << shift);
-        hwwrite(vortex->mmio, VORTEX_WTDMA_BUFCFG0 + offset + (wtdma << 3), *cfg);
-    }
-    hwwrite(vortex->mmio, VORTEX_WTDMA_BUFBASE + (((wtdma<<2)+sb)<<2), addr);
-}
-
-void vortex_wtdma_setfirstbuffer(vortex_t *vortex, int wtdma) {
-    //int this_7c=dma_ctrl;
-    stream_t *dma = &vortex->dma_wt[wtdma];
-
-    hwwrite(vortex->mmio, VORTEX_WTDMA_CTRL + (wtdma << 2), dma->dma_ctrl);
-}
-
-void vortex_wtdma_setstartbuffer(vortex_t *vortex, int wtdma, int sb) {
-	stream_t *dma = &vortex->dma_wt[wtdma];
-    hwwrite(vortex->mmio, VORTEX_WTDMA_START + (wtdma << 2), (sb << ((~wtdma)&0xf)*2));
-	dma->period_real = dma->period_virt = sb;
-}
-
-void vortex_wtdma_setbuffers(vortex_t *vortex, int wtdma, unsigned int addr, int size, int count) {
-    stream_t *dma = &vortex->dma_wt[wtdma];
-
-	/* Wt buffer. */
-	hwwrite(vortex->mmio, VORTEX_WTDMA_BUFBASE + (wtdma << 4), addr);
-	hwwrite(vortex->mmio, VORTEX_WTDMA_BUFBASE + 0x4 + (wtdma << 4), addr + size);
-	hwwrite(vortex->mmio, VORTEX_WTDMA_BUFBASE + 0x8 + (wtdma << 4), addr + (size*2));
-	hwwrite(vortex->mmio, VORTEX_WTDMA_BUFBASE + 0xc + (wtdma << 4), addr + (size*3));
-
-	switch (count) {
-        	case 1:
-			dma->cfg0 = 0xce000000;
-			dma->cfg1 = 0xfc000000;
-			break;
-		case 2:
-			dma->cfg0 = 0xdc000000;
-			dma->cfg1 = 0xfc000000;
-			break;
-		case 3:
-			dma->cfg0 = 0xde000000;
-			dma->cfg1 = 0xcc000000;
-			break;
-		case 4:
-		default:
-			dma->cfg0 = 0xde000000;
-			dma->cfg1 = 0xfc000000;
-			break;
-	}
-	size--;
-	dma->cfg0 |= (size << 0xc) | size;
-	dma->cfg1 |= (size << 0xc) | size;
-	//printk(KERN_INFO "vortex: wt buffer cfg: 0x%8x  0x%8x\n", dma->cfg0, dma->cfg1);
-	hwwrite(vortex->mmio, VORTEX_WTDMA_BUFCFG0 + (wtdma << 3), dma->cfg0);
-	hwwrite(vortex->mmio, VORTEX_WTDMA_BUFCFG1 + (wtdma << 3), dma->cfg1);
-
-	vortex_wtdma_setfirstbuffer(vortex, wtdma);
-	vortex_wtdma_setstartbuffer(vortex, wtdma, 0);
-}
-
-void vortex_wtdma_setmode(vortex_t *vortex, int wtdma, int ie, int dir, int fmt, int d, unsigned long offset) {
-	stream_t *dma = &vortex->dma_wt[wtdma];
-
-    dma->dma_unknown = d;
-    dma->dma_ctrl = ((offset & OFFSET_MASK) | (dma->dma_ctrl & ~OFFSET_MASK));
-    /* PCMOUT interrupt */
-    dma->dma_ctrl = (dma->dma_ctrl & ~IE_MASK) | ((ie << IE_SHIFT) & IE_MASK);
-
-    dma->dma_ctrl = (dma->dma_ctrl & U_MASK) | ((dir << U_SHIFT) & U_MASK);
-    dma->dma_ctrl = (dma->dma_ctrl & FMT_MASK) | ((fmt << FMT_SHIFT) & FMT_MASK);
-
-    hwwrite(vortex->mmio, VORTEX_WTDMA_CTRL + (wtdma << 2), dma->dma_ctrl);
-}
-
-void vortex_wtdma_bufshift(vortex_t *vortex, int wtdma) {
-	stream_t *dma = &vortex->dma_wt[wtdma];
-	int page, p, delta, i;
-
-	page = (hwread(vortex->mmio, VORTEX_WTDMA_STAT + (wtdma << 2)) >> 0xc) & 0x3;
-	delta = (page - dma->period_real) & 3;
-
-	/* refresh hw page table */
-	if (dma->nr_periods > 4) {
-		for (i=0 ; i < delta; i++) {
-			p = dma->period_virt + i;
-			if (p >= dma->nr_periods)
-				p -= dma->nr_periods;
-			hwwrite(vortex->mmio, VORTEX_WTDMA_BUFBASE+(((wtdma << 2)+(p & 3)) << 2), dma->buf_addr + ((dma->period_bytes)*p));
-		}
-	}
-	dma->period_virt += delta;
-	if (dma->period_virt >= dma->nr_periods)
-		dma->period_virt -= dma->nr_periods;
-	dma->period_real = page;
-
-	if (delta != 1)
-		printk(KERN_WARNING "vortex: wt page = %d, delta = %d\n", dma->period_virt, delta);
-}
-
-void vortex_wtdma_getposition(vortex_t *vortex, int wtdma, int *subbuf, int *pos) {
-    int temp;
-    temp = hwread(vortex->mmio, VORTEX_WTDMA_STAT + (wtdma << 2));
-    *subbuf = (temp >> WT_SUBBUF_SHIFT) & WT_SUBBUF_MASK;
-    *pos = temp & POS_MASK;
-}
-
-int  vortex_wtdma_getcursubuffer(vortex_t *vortex, int wtdma) {
-    return((hwread(vortex->mmio, VORTEX_ADBDMA_STAT + (wtdma << 2)) >> POS_SHIFT) & POS_MASK);
-}
-
-int inline vortex_wtdma_getlinearpos(vortex_t *vortex, int wtdma) {
-    stream_t *dma = &vortex->dma_wt[wtdma];
-    int temp;
-
-    temp = hwread(vortex->mmio, VORTEX_WTDMA_STAT + (wtdma << 2));
-    //temp = (temp & POS_MASK) + (((temp>>WT_SUBBUF_SHIFT) & WT_SUBBUF_MASK)*(dma->cfg0&POS_MASK));
-	temp = (temp & POS_MASK) + ((dma->period_virt)*(dma->period_bytes));
-    return temp;
-}
-
-void vortex_wtdma_startfifo(vortex_t *vortex, int wtdma) {
-	stream_t *dma = &vortex->dma_wt[wtdma];
-	int this_8=0, this_4=0;
-
-	switch (dma->fifo_status) {
-        case FIFO_START:
-            vortex_fifo_setwtvalid(vortex, wtdma, dma->fifo_enabled ? 0xff:0);
-            break;
-        case FIFO_STOP:
-			this_8 = 1;
-            hwwrite(vortex->mmio, VORTEX_WTDMA_CTRL + (wtdma << 2), dma->dma_ctrl);
-            vortex_fifo_setwtctrl(vortex, wtdma, dma->dma_unknown, this_4,
-				this_8, dma->fifo_enabled ? 0xff:0, 0);
-            break;
-        case FIFO_PAUSE:
-            vortex_fifo_setwtctrl(vortex, wtdma, dma->dma_unknown, this_4,
-				this_8, dma->fifo_enabled ? 0xff:0, 0);
-            break;
-	}
-	dma->fifo_status = FIFO_START;
-}
-
-void vortex_wtdma_resumefifo(vortex_t *vortex, int wtdma) {
-	stream_t *dma = &vortex->dma_wt[wtdma];
-
-    int this_8=0, this_4=0;
-    switch (dma->fifo_status) {
-        case FIFO_STOP:
-            hwwrite(vortex->mmio, VORTEX_WTDMA_CTRL + (wtdma << 2), dma->dma_ctrl);
-            vortex_fifo_setwtctrl(vortex, wtdma, dma->dma_unknown, this_4, this_8,
-				dma->fifo_enabled ? 0xff:0, 0);
-            break;
-        case FIFO_PAUSE:
-            vortex_fifo_setwtctrl(vortex, wtdma, dma->dma_unknown, this_4, this_8,
-				dma->fifo_enabled ? 0xff:0, 0);
-            break;
-    }
-    dma->fifo_status = FIFO_START;
-}
-
-void vortex_wtdma_pausefifo(vortex_t *vortex, int wtdma) {
-	stream_t *dma = &vortex->dma_wt[wtdma];
-
-    int this_8=0, this_4=0;
-    switch (dma->fifo_status) {
-        case FIFO_START:
-            vortex_fifo_setwtctrl(vortex, wtdma, dma->dma_unknown, this_4, this_8, 0, 0);
-            break;
-        case FIFO_STOP:
-            hwwrite(vortex->mmio, VORTEX_WTDMA_CTRL + (wtdma << 2), dma->dma_ctrl);
-            vortex_fifo_setwtctrl(vortex, wtdma, dma->dma_unknown, this_4, this_8, 0, 0);
-            break;
-    }
-    dma->fifo_status = FIFO_PAUSE;
-}
-
-void vortex_wtdma_stopfifo(vortex_t *vortex, int wtdma) {
-	stream_t *dma = &vortex->dma_wt[wtdma];
-
-    int this_4=0, this_8=0;
-    if (dma->fifo_status == FIFO_START)
-        vortex_fifo_setwtctrl(vortex, wtdma, dma->dma_unknown, this_4, this_8, 0, 0);
-    else if (dma->fifo_status == FIFO_STOP)
-        return;
-    dma->fifo_status = FIFO_STOP;
-    dma->fifo_enabled = 0;
-}
-
-void vortex_wtdma_chain(vortex_t *vortex, int wtdma, char sb1, char sb0) {
-    stream_t *dma = &vortex->dma_wt[wtdma];
-    int *cfg;
-    int offset;
-
-    if (sb0 == -1)
-        sb1 = sb0;
-    // this_0x80: cfg0, this_0x84: cfg1.
-
-    switch (sb0) {
-        case 0:
-            dma->cfg0 = (dma->cfg0 & 0xcfffffff) | ((((sb1 & 0x3) | 4) <<4 )  << 24);
-            cfg = &dma->cfg0;
-            offset = VORTEX_WTDMA_BUFCFG0;
-            break;
-        case 1:
-            dma->cfg0 = (dma->cfg0 & 0xfcffffff) | (((sb1 & 0x3) | 0x4) << 24);
-            cfg = &dma->cfg0;
-            offset = VORTEX_WTDMA_BUFCFG0;
-            break;
-        case 2:
-            dma->cfg1 = (dma->cfg1 & 0xfcffffff) | ((((sb1 & 0x3) | 4) << 4) << 24);
-            cfg = &dma->cfg1;
-            offset = VORTEX_WTDMA_BUFCFG1;
-            break;
-        case 3:
-            dma->cfg1 = (dma->cfg1 & 0xfcffffff) | (((sb1 & 0x3) | 0x4) << 24);
-            cfg = &dma->cfg1;
-            offset = VORTEX_WTDMA_BUFCFG1;
-            break;
-        default:
-            return;
-    }
-    hwwrite(vortex->mmio, offset + (wtdma << 3), *cfg);
-}
-
-#endif
-/* ADB */
-
-typedef int ADBRamLink;
-void vortex_adb_init(vortex_t *vortex) {
-	int i;
-	/* it looks like we are writing more than we need to...
-	 * if we write what we are supposed to it breaks things... */
-	hwwrite(vortex->mmio, VORTEX_ADB_SR, 0);
-	for(i=0; i<VORTEX_ADB_RTBASE_SIZE; i++)
-		hwwrite(vortex->mmio, VORTEX_ADB_RTBASE + (i<<2), 
-				hwread(vortex->mmio, VORTEX_ADB_RTBASE + (i<<2)) | ROUTE_MASK);
-	for(i=0; i<VORTEX_ADB_CHNBASE_SIZE; i++){
-		hwwrite(vortex->mmio, VORTEX_ADB_CHNBASE + (i<<2), 
-				hwread(vortex->mmio, VORTEX_ADB_CHNBASE + (i<<2)) | ROUTE_MASK);
-	}
-}
-
-void vortex_adb_en_sr(vortex_t *vortex, int channel) {
-    hwwrite(vortex->mmio, VORTEX_ADB_SR,
-	    hwread(vortex->mmio, VORTEX_ADB_SR) | (0x1 << channel));
-}
-
-void vortex_adb_dis_sr(vortex_t *vortex, int channel) {
-    hwwrite(vortex->mmio, VORTEX_ADB_SR,
-	    hwread(vortex->mmio, VORTEX_ADB_SR) & ~(0x1 << channel));
-}
-
-void vortex_adb_addroutes(vortex_t *vortex, unsigned char channel, ADBRamLink *route, int rnum) {
-    int temp, prev, lifeboat = 0;
-
-    if ((rnum <= 0)||(route == NULL))
-		return;
-	/* Write last routes. */
-	rnum--;
-    hwwrite(vortex->mmio, VORTEX_ADB_RTBASE + ((route[rnum] & ADB_MASK) << 2), ROUTE_MASK);
-    while (rnum > 0) {
-	    hwwrite(vortex->mmio,	VORTEX_ADB_RTBASE + ((route[rnum-1] & ADB_MASK) << 2), route[rnum]);
-	    rnum--;
-    }
-    /* Write first route. */
-    temp = hwread(vortex->mmio, VORTEX_ADB_CHNBASE + (channel << 2)) & ADB_MASK;
-    if (temp == ADB_MASK) {
-	    /* First entry on this channel. */
-	    hwwrite(vortex->mmio, VORTEX_ADB_CHNBASE + (channel << 2), route[0]);
-	    vortex_adb_en_sr(vortex, channel);
-	    return;
-    }
-    /* Not first entry on this channel. Need to link. */
-    do {
-		prev = temp;
-	    temp = hwread(vortex->mmio, VORTEX_ADB_RTBASE + (temp << 2)) & ADB_MASK;
-	    if ((lifeboat++) > ADB_MASK) {
-	        printk(KERN_ERR "vortex_adb_addroutes: unending route!\n");
-	        return;
-	    }
-    } while (temp != ADB_MASK);
-    hwwrite(vortex->mmio, VORTEX_ADB_RTBASE + (prev << 2), route[0]);
-}
-
-void vortex_adb_delroutes(vortex_t *vortex, unsigned char channel, ADBRamLink route0, ADBRamLink route1) {
-    int temp, lifeboat = 0, prev;
-
-    /* Find route. */
-    temp = hwread(vortex->mmio, VORTEX_ADB_CHNBASE + (channel << 2)) & ADB_MASK;
-    if (temp == (route0 & ADB_MASK)) {
-	    temp = hwread(vortex->mmio, VORTEX_ADB_RTBASE + ((route1 & ADB_MASK) << 2));
-	    if ((temp & ADB_MASK) == ADB_MASK)
-    	    vortex_adb_dis_sr(vortex, channel);
-    	hwwrite(vortex->mmio, VORTEX_ADB_CHNBASE + (channel << 2), temp);
-    	return;
-    }
-    do {
-	    prev = temp;
-	    temp = hwread(vortex->mmio, VORTEX_ADB_RTBASE + (prev << 2)) & ADB_MASK;
-	    if (((lifeboat++) > ADB_MASK) || (temp == ADB_MASK)) {
-    	    printk(KERN_ERR "vortex_adb_delroutes: route not found!\n");
-	        return;
-	    }
-    } while (temp != (route0 & ADB_MASK));
-    temp = hwread(vortex->mmio, VORTEX_ADB_RTBASE + (temp << 2));
-    if ((temp & ADB_MASK) == route1)
-        temp = hwread(vortex->mmio, VORTEX_ADB_RTBASE + (temp << 2));
-    /* Make bridge over deleted route. */
-    hwwrite(vortex->mmio, VORTEX_ADB_RTBASE + (prev << 2), temp);
-}
-
-void vortex_route(vortex_t *vortex, int en, unsigned char channel, unsigned char source, unsigned char dest) {
-    ADBRamLink route;
-
-    route = ((source & ADB_MASK) << ADB_SHIFT) | (dest & ADB_MASK);
-    if (en) {
-		vortex_adb_addroutes(vortex, channel, &route, 1);
-		if ((source < (OFFSET_SRCOUT+NR_SRC)) && (source >= OFFSET_SRCOUT))
-			vortex_src_addWTD(vortex, (source - OFFSET_SRCOUT), channel);
-		else if ((source < (OFFSET_MIXOUT+NR_MIXOUT)) && (source >= OFFSET_MIXOUT))
-			vortex_mixer_addWTD(vortex, (source - OFFSET_MIXOUT), channel);
-    } else {
-		vortex_adb_delroutes(vortex, channel, route, route);
-		if ((source < (OFFSET_SRCOUT+NR_SRC)) && (source >= OFFSET_SRCOUT))
-			vortex_src_delWTD(vortex, (source - OFFSET_SRCOUT), channel);
-		else if ((source < (OFFSET_MIXOUT+NR_MIXOUT)) && (source >= OFFSET_MIXOUT))
-			vortex_mixer_delWTD(vortex, (source - OFFSET_MIXOUT), channel);
-    }
-}
-
-void vortex_routes(vortex_t *vortex, int en, unsigned char channel, unsigned char source,
-    unsigned char dest0, unsigned char dest1) {
-    ADBRamLink route[2];
-
-    route[0] = ((source & ADB_MASK) << ADB_SHIFT) | (dest0 & ADB_MASK);
-    route[1] = ((source & ADB_MASK) << ADB_SHIFT) | (dest1 & ADB_MASK);
-
-    if (en) {
-		vortex_adb_addroutes(vortex, channel, route, 2);
-		if ((source < (OFFSET_SRCOUT+NR_SRC)) && (source >= (OFFSET_SRCOUT)))
-			vortex_src_addWTD(vortex, (source - OFFSET_SRCOUT), channel);
-		else if ((source < (OFFSET_MIXOUT+NR_MIXOUT)) && (source >= (OFFSET_MIXOUT)))
-			vortex_mixer_addWTD(vortex, (source - OFFSET_MIXOUT), channel);
-    } else {
-		vortex_adb_delroutes(vortex, channel, route[0], route[1]);
-		if ((source < (OFFSET_SRCOUT+NR_SRC)) && (source >= (OFFSET_SRCOUT)))
-			vortex_src_delWTD(vortex, (source - OFFSET_SRCOUT), channel);
-		else if ((source < (OFFSET_MIXOUT+NR_MIXOUT)) && (source >= (OFFSET_MIXOUT)))
-			vortex_mixer_delWTD(vortex, (source - OFFSET_MIXOUT), channel);
-    }
-}
-
-/* Route two sources to same target. Sources must be of same class !!! */
-void vortex_routeLRT(vortex_t *vortex, int en, unsigned char ch, unsigned char source0,
-    unsigned char source1, unsigned char dest) {
-    ADBRamLink route[2];
-
-    route[0] = ((source0 & ADB_MASK) << ADB_SHIFT) | (dest & ADB_MASK);
-    route[1] = ((source1 & ADB_MASK) << ADB_SHIFT) | (dest & ADB_MASK);
-
-	if (dest < 0x10)
-		route[1] = (route[1] & ~ADB_MASK) | (dest + 0x20);
-
-    if (en) {
-		vortex_adb_addroutes(vortex, ch, route, 2);
-		if ((source0 < (OFFSET_SRCOUT+NR_SRC)) && (source0 >= OFFSET_SRCOUT)) {
-			vortex_src_addWTD(vortex, (source0 - OFFSET_SRCOUT), ch);
-			vortex_src_addWTD(vortex, (source1 - OFFSET_SRCOUT), ch);
-		}
-		else if ((source0 < (OFFSET_MIXOUT+NR_MIXOUT)) && (source0 >= OFFSET_MIXOUT)) {
-			vortex_mixer_addWTD(vortex, (source0 - OFFSET_MIXOUT), ch);
-			vortex_mixer_addWTD(vortex, (source1 - OFFSET_MIXOUT), ch);
-		}
-    } else {
-		vortex_adb_delroutes(vortex, ch, route[0], route[1]);
-		if ((source0 < (OFFSET_SRCOUT+NR_SRC)) && (source0 >= OFFSET_SRCOUT)) {
-			vortex_src_delWTD(vortex, (source0 - OFFSET_SRCOUT), ch);
-			vortex_src_delWTD(vortex, (source1 - OFFSET_SRCOUT), ch);
-		}
-		else if ((source0 < (OFFSET_MIXOUT+NR_MIXOUT)) && (source0 >= OFFSET_MIXOUT)) {
-			vortex_mixer_delWTD(vortex, (source0 - OFFSET_MIXOUT), ch);
-			vortex_mixer_delWTD(vortex, (source1 - OFFSET_MIXOUT), ch);
-		}
-    }
-}
-
-/* Connection stuff */
-
-// Connect adbdma to src('s).
-void vortex_connection_adbdma_src(vortex_t *vortex, int en, unsigned char ch,
-    unsigned char adbdma, unsigned char src) {
-    vortex_route(vortex, en, ch, ADB_DMA(adbdma), ADB_SRCIN(src));
-}
-
-void vortex_connection_adbdma_src_src(vortex_t *vortex, int en, unsigned char channel,
-    unsigned char adbdma, unsigned char src0, unsigned char src1) {
-    vortex_routes(vortex, en, channel, ADB_DMA(adbdma), ADB_SRCIN(src0), ADB_SRCIN(src1));
-}
-
-// Connect SRC to mixin.
-void vortex_connection_src_mixin(vortex_t *vortex, int en, unsigned char channel,
-    unsigned char src, unsigned char mixin) {
-    vortex_route(vortex, en, channel, ADB_SRCOUT(src), ADB_MIXIN(mixin));
-}
-
-// Connect mixin with mix output.
-void vortex_connection_mixin_mix(vortex_t *vortex, int en, unsigned char mixin, unsigned char mix, int a) {
-    if (en) {
-		vortex_mix_enableinput(vortex, mix, mixin);
-        vortex_mix_setinputvolumebyte(vortex, mix, mixin, MIX_DEFIGAIN);	// added to original code.
-    } else
-	    vortex_mix_disableinput(vortex, mix, mixin, a);
-}
-
-// Connect absolut address to mixin.
-void vortex_connection_adb_mixin(vortex_t *vortex, int en, unsigned char channel,
-    unsigned char source, unsigned char mixin) {
-    vortex_route(vortex, en, channel, source, ADB_MIXIN(mixin));
-}
-
-// Connect two mix to AdbDma.
-void vortex_connection_mix_mix_adbdma(vortex_t *vortex, int en, unsigned char ch,
-    unsigned char mix0, unsigned char mix1, unsigned char adbdma) {
-
-    ADBRamLink routes[2];
-    routes[0] = (((mix0 + OFFSET_MIXOUT) & ADB_MASK) << ADB_SHIFT) | (adbdma & ADB_MASK);
-    routes[1] = (((mix1 + OFFSET_MIXOUT) & ADB_MASK) << ADB_SHIFT) | ((adbdma + 0x20 /*OFFSET_MIXOUT*/) & ADB_MASK);
-    if (en) {
-	    vortex_adb_addroutes(vortex, ch, routes, 0x2);
-		vortex_mixer_addWTD(vortex, mix0, ch);
-		vortex_mixer_addWTD(vortex, mix1, ch);
-    }
-	else {
-		vortex_adb_delroutes(vortex, ch, routes[0], routes[1]);
-		vortex_mixer_delWTD(vortex, mix0, ch);
-		vortex_mixer_delWTD(vortex, mix1, ch);
-    }
-}
-
-void vortex_connection_src_adbdma(vortex_t *vortex, int en, unsigned char ch,
-    unsigned char src, unsigned char adbdma) {
-    vortex_route(vortex, en, ch, ADB_SRCOUT(src), ADB_DMA(adbdma));
-}
-
-void vortex_connection_src_src_adbdma(vortex_t *vortex, int en, unsigned char ch,
-    unsigned char src0, unsigned char src1, unsigned char adbdma) {
-
-	vortex_routeLRT(vortex, en, ch, ADB_SRCOUT(src0), ADB_SRCOUT(src1), ADB_DMA(adbdma));
-}
-
-// mix to absolut address.
-void vortex_connection_mix_adb(vortex_t *vortex, int en, unsigned char ch,
-    unsigned char mix, unsigned char dest) {
-    vortex_route(vortex, en, ch, ADB_MIXOUT(mix), dest);
-    vortex_mix_setvolumebyte(vortex, mix, MIX_DEFOGAIN);	// added to original code.
-}
-
-// mixer to src.
-void vortex_connection_mix_src(vortex_t *vortex, int en, unsigned char ch,
-    unsigned char mix, unsigned char src) {
-    vortex_route(vortex, en, ch, ADB_MIXOUT(mix), ADB_SRCIN(src));
-    vortex_mix_setvolumebyte(vortex, mix, MIX_DEFOGAIN);	// added to original code.
-}
-
-/* CODEC connect. */
-void vortex_connect_codecplay(vortex_t *vortex, int en, unsigned char mixers[]) {
-#ifdef CHIP_AU8820
-	vortex_connection_mix_adb(vortex, en, 0x11, mixers[0], ADB_CODECOUT(0));
-	vortex_connection_mix_adb(vortex, en, 0x11, mixers[1], ADB_CODECOUT(1));
-#else
-#if 1
-	// Connect front channels through EQ.
-	vortex_connection_mix_adb(vortex, en, 0x11, mixers[0], ADB_EQIN(0));
-	vortex_connection_mix_adb(vortex, en, 0x11, mixers[1], ADB_EQIN(1));
-    vortex_route(vortex, en, 0x11, ADB_EQOUT(0), ADB_CODECOUT(0));
-    vortex_route(vortex, en, 0x11, ADB_EQOUT(1), ADB_CODECOUT(1));
-	/* Check if reg 0x28 has SDAC bit set. */
-	if (VORTEX_IS_QUAD(vortex)) {
-		/* Rear channel. Note: ADB_CODECOUT(0+2) and (1+2) is for AC97 modem */
-		vortex_connection_mix_adb(vortex, en, 0x11, mixers[2], ADB_CODECOUT(0+4));
-		vortex_connection_mix_adb(vortex, en, 0x11, mixers[3], ADB_CODECOUT(1+4));
-		printk("SDAC detected ");
-	}
-#else
-	// Use plain direct output to codec.
-	vortex_connection_mix_adb(vortex, en, 0x11, mixers[0], ADB_CODECOUT(0));
-	vortex_connection_mix_adb(vortex, en, 0x11, mixers[1], ADB_CODECOUT(1));
-#endif	
-#endif
-}
-
-void vortex_connect_codecrec(vortex_t *vortex, int en, unsigned char mixin0, unsigned char mixin1) {
-	/*
-	 Enable: 0x1, 0x1
-	 Channel: 0x11, 0x11
-	 ADB Source address: 0x48, 0x49
-	 Destination Asp4Topology_0x9c,0x98
-	*/
-	vortex_connection_adb_mixin(vortex, en, 0x11, ADB_CODECIN(0), mixin0);
-	vortex_connection_adb_mixin(vortex, en, 0x11, ADB_CODECIN(1), mixin1);
-}
-
-// Higher level audio path (de)allocator.
-
-/* Resource manager */
-static int resnum[VORTEX_RESOURCE_LAST] = {NR_ADB, NR_SRC, NR_MIXIN, NR_MIXOUT, NR_A3D};
-/*
- Checkout/Checkin resource of given type. 
- stream: resource map to be used. If NULL means that we want to allocate
- the DMA resource (root of all other resources).
- out: Mean checkout if != 0. Else mean Checkin resource.
- restype: Indicates type of resource to be checked in or out.
-*/
-int  vortex_adb_checkinout(vortex_t *vortex, int resmap[], int out, int restype) {
-	int i, qty = resnum[restype], resinuse=0;
-         
-	if (out) {
-		/* Gather used resources by all streams. */
-		for (i=0; i<NR_ADB; i++) {
-			resinuse |= vortex->dma_adb[i].resources[restype];
-		}
-		resinuse |= vortex->fixed_res[restype];
-		/* Find and take free resource. */
-		for (i=0; i<qty; i++) {
-			if ((resinuse & (1 << i)) == 0) {
-				if (resmap != NULL)
-					resmap[restype] |= (1 << i);
-				else
-					vortex->dma_adb[i].resources[restype] |= (1 << i);
-				//printk("vortex: ResManager: type %d out %d\n", restype, i);
-				return i;
-			}
-		}
-	} else {
-		if (resmap == NULL)
-			return -EINVAL;
-		/* Checkin first resource of type restype. */
-		for (i=0; i<qty; i++) {
-			if (resmap[restype] & (1 << i)) {
-				resmap[restype] &= ~(1 << i);
-				//printk("vortex: ResManager: type %d in %d\n",restype, i);
-				return i;
-			}
-		}
-		if (vortex->fixed_res[restype] & (1 << i)) {
-				vortex->fixed_res[restype] &= ~(1 << i);
-				//printk("vortex: ResManager (fixed rsc): type %d in %d\n",restype, i);
-				return i;
-		}
-	}
-	printk("vortex: ResManager: type %d FATAL\n", restype);
-	return -ENOMEM;
-}
-
-/* Default Connections  */
-void vortex_connect_default(vortex_t *vortex, int en) {
-    
-	// FIXME: check if checkout was succesful.
-	// Connect AC97 codec.
-	vortex->mixplayb[0] = vortex_adb_checkinout(vortex, vortex->fixed_res, en, VORTEX_RESOURCE_MIXOUT);
-	vortex->mixplayb[1] = vortex_adb_checkinout(vortex, vortex->fixed_res, en, VORTEX_RESOURCE_MIXOUT);
-	if (VORTEX_IS_QUAD(vortex)) {
-		vortex->mixplayb[2] = vortex_adb_checkinout(vortex, vortex->fixed_res, en, VORTEX_RESOURCE_MIXOUT);
-		vortex->mixplayb[3] = vortex_adb_checkinout(vortex, vortex->fixed_res, en, VORTEX_RESOURCE_MIXOUT);
-	}
-	vortex_connect_codecplay(vortex, en, vortex->mixplayb);
-	
-	vortex->mixcapt[0] = vortex_adb_checkinout(vortex, vortex->fixed_res, en, VORTEX_RESOURCE_MIXIN);
-	vortex->mixcapt[1] = vortex_adb_checkinout(vortex, vortex->fixed_res, en, VORTEX_RESOURCE_MIXIN);
-	vortex_connect_codecrec(vortex, en, MIX_CAPT(0), MIX_CAPT(1));
-	
-	// Connect SPDIF
-	vortex->mixspdif[0] = vortex_adb_checkinout(vortex, vortex->fixed_res, en, VORTEX_RESOURCE_MIXOUT);
-	vortex->mixspdif[1] = vortex_adb_checkinout(vortex, vortex->fixed_res, en, VORTEX_RESOURCE_MIXOUT);
-	vortex_connection_mix_adb(vortex, en, 0x14, vortex->mixspdif[0], ADB_SPDIFOUT(0));
-	vortex_connection_mix_adb(vortex, en, 0x14, vortex->mixspdif[1], ADB_SPDIFOUT(1));
-	
-	// Connect I2S
-	
-	// Connect DSP interface (not here i think...)
-	
-	// Connect MODEM
-	
-#ifndef CHIP_AU8810
-	//vortex_wt_connect(vortex, en, vortex->mixplayb);
-#endif	
-	/* Fast Play Workaround */
-#ifndef CHIP_AU8820
-	vortex->fixed_res[VORTEX_RESOURCE_DMA] = 0x00000001;
-#endif
-}
-
-/*
-  Allocate nr_ch pcm audio routes if dma < 0. If dma >= 0, existing routes
-  are deallocated.
-  dma: DMA engine routes to be deallocated when dma >= 0.
-  nr_ch: Number of channels to be de/allocated.
-  dir: direction of stream. Uses same values as substream->stream.
-  type: Type of audio output/source (codec, spdif, i2s, dsp, etc)
-  Return: Return allocated DMA or same DMA passed as "dma" when dma >= 0.
-*/
-int  vortex_adb_allocroute(vortex_t *vortex, int dma, int nr_ch, int dir, int type) {
-	stream_t *stream;
-	int i, en;
-	
-	if ((nr_ch == 3) || ((dir == SNDRV_PCM_STREAM_CAPTURE)&&(nr_ch > 2)))
-		return -EBUSY;
-	
-	spin_lock(&vortex->lock);
-	if (dma >= 0) {
-   		en = 0;
-		vortex_adb_checkinout(vortex, vortex->dma_adb[dma].resources, en, VORTEX_RESOURCE_DMA);
-	} else {
-		en = 1;
-		if ((dma = vortex_adb_checkinout(vortex, NULL, en, VORTEX_RESOURCE_DMA)) < 0)
-			return -EBUSY;
-	}
-	
-	stream = &vortex->dma_adb[dma];
-	stream->dma = dma;
-	stream->dir = dir;
-	stream->type = type;	
-	
-	// FIXME: check for success of checkout or checkin.
-	if (dir == SNDRV_PCM_STREAM_PLAYBACK) {
-		int src[4], mix[4], a3d=0, ch_top;
-		
-		/* Get SRC and MIXER hardware resources. */
-		if (stream->type != VORTEX_PCM_SPDIF) {
-			for (i=0; i<nr_ch; i++) {
-				if ((src[i] = vortex_adb_checkinout(vortex, stream->resources, en, VORTEX_RESOURCE_SRC))<0) {
-					memset(stream->resources, 0, sizeof(unsigned char)*VORTEX_RESOURCE_LAST);
-					return -EBUSY;
-				}
-				if ((mix[i] = vortex_adb_checkinout(vortex, stream->resources, en, VORTEX_RESOURCE_MIXIN))<0) {
-					memset(stream->resources, 0, sizeof(unsigned char)*VORTEX_RESOURCE_LAST);
-					return -EBUSY;
-				}
-			}
-		}
-		if (stream->type == VORTEX_PCM_A3D) {
-			if ((a3d = vortex_adb_checkinout(vortex, stream->resources, en, VORTEX_RESOURCE_A3D))<0) {
-				memset(stream->resources, 0, sizeof(unsigned char)*VORTEX_RESOURCE_LAST);
-				return -EBUSY;
-			}
-		}
-		/* Make SPDIF out exclusive to "spdif" device when in use. */
-		if ((stream->type == VORTEX_PCM_SPDIF)&&(en)) {
-			vortex_route(vortex, 0, 0x14, ADB_MIXOUT(vortex->mixspdif[0]), ADB_SPDIFOUT(0));
-			vortex_route(vortex, 0, 0x14, ADB_MIXOUT(vortex->mixspdif[1]), ADB_SPDIFOUT(1));
-		}
-		/* Make playback routes. */
-		for (i=0; i<nr_ch; i++) {
-			if (stream->type == VORTEX_PCM_ADB) {
-				vortex_connection_adbdma_src(vortex, en, src[nr_ch-1], dma, src[i]);
-				vortex_connection_src_mixin(vortex, en, 0x11, src[i], mix[i]);
-				vortex_connection_mixin_mix(vortex, en, mix[i], MIX_PLAYB(i), 0);
-				vortex_connection_mixin_mix(vortex, en, mix[i], MIX_SPDIF(i % 2), 0);
-				vortex_mix_setinputvolumebyte(vortex, MIX_SPDIF(i % 2), mix[i], MIX_DEFIGAIN);
-			}
-			if (stream->type == VORTEX_PCM_A3D) {
-				vortex_connection_adbdma_src(vortex, en, src[nr_ch-1], dma, src[i]);
-				vortex_route(vortex, en, 0x11, ADB_SRCOUT(src[i]), ADB_A3DIN(a3d));
-				vortex_route(vortex, en, 0x11, ADB_A3DOUT(a3d), ADB_MIXIN(mix[i]));
-				vortex_connection_mixin_mix(vortex, en, mix[i], MIX_PLAYB(i), 0);
-				vortex_connection_mixin_mix(vortex, en, mix[i], MIX_SPDIF(i % 2), 0);				
-				vortex_mix_setinputvolumebyte(vortex, MIX_SPDIF(i % 2), mix[i], MIX_DEFIGAIN);
-			}
-			if (stream->type == VORTEX_PCM_SPDIF)
-				vortex_route(vortex, en, 0x14, ADB_DMA(stream->dma), ADB_SPDIFOUT(i));
-		}
-		if (stream->type != VORTEX_PCM_SPDIF) {
-			ch_top = (VORTEX_IS_QUAD(vortex) ? 4 : 2);
-				for (i=nr_ch; i<ch_top; i++) {
-					vortex_connection_mixin_mix(vortex, en, mix[i % nr_ch], MIX_PLAYB(i), 0);
-					vortex_connection_mixin_mix(vortex, en, mix[i % nr_ch], MIX_SPDIF(i % 2), 0);
-					vortex_mix_setinputvolumebyte(vortex, MIX_SPDIF(i % 2), mix[i % nr_ch], MIX_DEFIGAIN);
-				}
-		} else {
-			if (nr_ch == 1)
-				vortex_route(vortex, en, 0x14, ADB_DMA(stream->dma), ADB_SPDIFOUT(1));
-		}
-		/* Reconnect SPDIF out when "spdif" device is down. */
-		if ((stream->type == VORTEX_PCM_SPDIF)&&(!en)) {
-			vortex_route(vortex, 1, 0x14, ADB_MIXOUT(vortex->mixspdif[0]), ADB_SPDIFOUT(0));
-			vortex_route(vortex, 1, 0x14, ADB_MIXOUT(vortex->mixspdif[1]), ADB_SPDIFOUT(1));
-		}		
-	} else {
-		int src[2], mix[2];
-		
-		/* Get SRC and MIXER hardware resources. */
-		for (i=0; i<nr_ch; i++) {
-			if ((mix[i] = vortex_adb_checkinout(vortex, stream->resources, en, VORTEX_RESOURCE_MIXOUT))<0) {
-				memset(stream->resources, 0, sizeof(unsigned char)*VORTEX_RESOURCE_LAST);
-				return -EBUSY;
-			}
-			if ((src[i] = vortex_adb_checkinout(vortex, stream->resources, en, VORTEX_RESOURCE_SRC))<0) {
-				memset(stream->resources, 0, sizeof(unsigned char)*VORTEX_RESOURCE_LAST);
-				return -EBUSY;
-			}
-		}
-		
-		/* Make capture routes. */
-		vortex_connection_mixin_mix(vortex, en, MIX_CAPT(0), mix[0], 0);
-		vortex_connection_mix_src(vortex, en, 0x11, mix[0], src[0]);
-		if (nr_ch == 1) {
-			vortex_connection_mixin_mix(vortex, en, MIX_CAPT(1), mix[0], 0);
-			vortex_connection_src_adbdma(vortex, en, src[nr_ch-1], src[0], dma);
-		} else {
-			vortex_connection_mixin_mix(vortex, en, MIX_CAPT(1), mix[1], 0);
-			vortex_connection_mix_src(vortex, en, 0x11, mix[1], src[1]);
-			vortex_connection_src_src_adbdma(vortex, en, src[0], src[0], src[1], dma);
-		}
-	}
-	vortex->dma_adb[dma].nr_ch = nr_ch;
-	spin_unlock(&vortex->lock);
-	
-#if 0
-	/* AC97 Codec channel setup. FIXME: this has no effect !! */
-	if (nr_ch < 4) {
-		/* Copy stereo to rear channel (surround) */
-		snd_ac97_write_cache(vortex->codec, AC97_SIGMATEL_DAC2INVERT, snd_ac97_read(vortex->codec, AC97_SIGMATEL_DAC2INVERT) | 4);
-	} else {
-		/* Allow separate front a rear channels. */
-		snd_ac97_write_cache(vortex->codec, AC97_SIGMATEL_DAC2INVERT, snd_ac97_read(vortex->codec, AC97_SIGMATEL_DAC2INVERT) & ~((u32)4));
-	}
-#endif
-	return dma;
-}
-/*
- Set the SampleRate of the SRC's attached to the given DMA engine.
- */
-void vortex_adb_setsrc(vortex_t *vortex, int adbdma, unsigned int rate, int dir) {
-    stream_t *stream = &(vortex->dma_adb[adbdma]);
-    int i, cvrt;
-    	
-	/* dir=1:play ; dir=0:rec */
-    if (dir)
-        cvrt = SRC_RATIO(rate,48000);
-    else
-        cvrt = SRC_RATIO(48000,rate);
-	
-	/* Setup SRC's */
-	for (i=0; i<NR_SRC; i++) {
-		if (stream->resources[VORTEX_RESOURCE_SRC] & (1<<i))
-			vortex_src_setupchannel(vortex, i, cvrt, 0, 0, i, dir, 0, cvrt, dir);
-	}
-}
-
-// Timer and ISR functions.
-
-void vortex_settimer(vortex_t *vortex, int period) {
-    //set the timer period to <period> 48000ths of a second.
-	hwwrite(vortex->mmio, VORTEX_IRQ_STAT, period);
-}
-
-void vortex_enable_timer_int(vortex_t *card){
-	hwwrite(card->mmio, VORTEX_IRQ_CTRL, hwread(card->mmio, VORTEX_IRQ_CTRL) | IRQ_TIMER | 0x60);
-}
-
-void vortex_disable_timer_int(vortex_t *card){
-	hwwrite(card->mmio, VORTEX_IRQ_CTRL, hwread(card->mmio, VORTEX_IRQ_CTRL) & ~IRQ_TIMER);
-}
-
-void vortex_enable_int(vortex_t *card){
-	// CAsp4ISR__EnableVortexInt_void_
-	hwwrite(card->mmio, VORTEX_CTRL, hwread(card->mmio, VORTEX_CTRL) | CTRL_IRQ_ENABLE);
-	hwwrite(card->mmio, VORTEX_IRQ_CTRL, (hwread(card->mmio, VORTEX_IRQ_CTRL) & 0xffffefc0) | 0x24);
-}
-
-void vortex_disable_int(vortex_t *card){
-	hwwrite(card->mmio, VORTEX_CTRL, hwread(card->mmio, VORTEX_CTRL) & ~CTRL_IRQ_ENABLE);
-}
-
-irqreturn_t vortex_interrupt(int irq, void *dev_id, struct pt_regs *regs) {
-	vortex_t *vortex = snd_magic_cast(vortex_t, dev_id, return IRQ_NONE);
-	int i, handled;
-	u32 source;	
-	//check if the interrupt is ours.
-	if (!(hwread(vortex->mmio, VORTEX_IRQ_U0) & 0x1))
-		return IRQ_NONE;
-	
-	// This is the Interrrupt Enable flag we set before (consistency check).
-	if ((hwread(vortex->mmio, VORTEX_CTRL) & 0x0000ff00) == CTRL_IRQ_ENABLE)
-		return IRQ_HANDLED;
-	
-	source = hwread(vortex->mmio, VORTEX_IRQ_SOURCE);
-	// Reset IRQ flags.
-	hwwrite(vortex->mmio, VORTEX_IRQ_SOURCE, source);
-	hwread(vortex->mmio, VORTEX_IRQ_SOURCE);
-	// Is at least one IRQ flag set?
-	if (source == 0) {
-		printk(KERN_ERR "vortex: missing irq source\n");
-		return IRQ_NONE;
-	}
-	
-	//printk(KERN_INFO "IRQ: 0x%x\n", source);
-
-	handled = 0;
-	// Attend every interrupt source.
-	if (source & IRQ_FATAL) {
-		printk(KERN_ERR "vortex: IRQ fatal error\n");
-		handled = 1;
-	}
-	if (source & IRQ_PARITY) {
-		printk(KERN_ERR "vortex: IRQ parity error\n");
-		handled = 1;
-	}
-	if (source & IRQ_PCMOUT) {
-		/* ALSA period acknowledge. */
-		for (i=0; i<NR_ADB; i++) {
-			if (vortex->dma_adb[i].fifo_status == FIFO_START) {
-				vortex_adbdma_bufshift(vortex, i);
-				snd_pcm_period_elapsed(vortex->dma_adb[i].substream);
-			}
-		}
-#ifndef CHIP_AU8810
-		for (i=0; i<NR_WT; i++) {
-			if (vortex->dma_wt[i].fifo_status == FIFO_START) {
-				vortex_wtdma_bufshift(vortex, i);
-				snd_pcm_period_elapsed(vortex->dma_wt[i].substream);
-			}
-		}
-#endif
-		handled = 1;
-	}
-	//Acknowledge the Timer interrupt
-	if (source & IRQ_TIMER) {
-		hwread(vortex->mmio, VORTEX_IRQ_STAT);
-		handled = 1;
-	}
-	if (source & IRQ_MIDI) {
-		snd_mpu401_uart_interrupt(vortex->irq, vortex->rmidi->private_data, regs);
-		handled = 1;
-	}
-	
-	if (!handled) {
-		printk(KERN_ERR "vortex: unknown irq source %x\n", source);
-	}
-	return IRQ_RETVAL(handled);
-}
-
-/* Codec */
-
-#define POLL_COUNT 1000
-void vortex_codec_init(vortex_t *vortex) {
-    int i;
-
-	for(i =0; i<32; i++){
-		hwwrite(vortex->mmio,(VORTEX_CODEC_CHN+(i<<2)),0);
-		udelay(2000);
-	}
-	if (0) {
-		hwwrite(vortex->mmio,VORTEX_CODEC_CTRL,0x8068);
-		udelay(1000);
-		hwwrite(vortex->mmio,VORTEX_CODEC_CTRL,0x00e8);
-		udelay(1000);
-	} else {
-		hwwrite(vortex->mmio,VORTEX_CODEC_CTRL,0x00a8);
-		udelay(2000);
-		hwwrite(vortex->mmio,VORTEX_CODEC_CTRL,0x80a8);
-		udelay(2000);
-		hwwrite(vortex->mmio,VORTEX_CODEC_CTRL,0x80e8);
-		udelay(2000);
-		hwwrite(vortex->mmio,VORTEX_CODEC_CTRL,0x80a8);
-		udelay(2000);
-		hwwrite(vortex->mmio,VORTEX_CODEC_CTRL,0x00a8);
-		udelay(2000);
-		hwwrite(vortex->mmio,VORTEX_CODEC_CTRL,0x00e8);
-	}
-	for(i =0; i<32; i++){
-		hwwrite(vortex->mmio,(VORTEX_CODEC_CHN+(i<<2)),0);
-		udelay(5000);
-	}
-	hwwrite(vortex->mmio,VORTEX_CODEC_CTRL,0xe8);
-	udelay(1000);
-	/* Enable codec channels 0 and 1. */
-	hwwrite(vortex->mmio,VORTEX_CODEC_EN, hwread(vortex->mmio,VORTEX_CODEC_EN) | EN_CODEC);
-}
-
-void vortex_codec_write(ac97_t *codec, unsigned short addr, unsigned short data){
-
-	vortex_t *card = (vortex_t*)codec->private_data;
-	unsigned long flags;
-	unsigned int lifeboat = 0;
-	spin_lock_irqsave(&card->lock, flags);
-	
-	/* wait for transactions to clear */
-	while (!(hwread(card->mmio, VORTEX_CODEC_CTRL) & 0x100)) {
-		udelay(100);
-		if (lifeboat++ > POLL_COUNT) {
-			printk(KERN_ERR "vortex: ac97 codec stuck busy\n");
-			spin_unlock_irqrestore(&card->lock, flags);
-			return;
-		}
-	}
-	/* write register */
- 	hwwrite(card->mmio, VORTEX_CODEC_IO, ((addr << VORTEX_CODEC_ADDSHIFT) & VORTEX_CODEC_ADDMASK) |
-	 		((data << VORTEX_CODEC_DATSHIFT) & VORTEX_CODEC_DATMASK) | VORTEX_CODEC_WRITE);
-	
-	/* Flush Caches.*/
-	hwread(card->mmio, VORTEX_CODEC_IO);
-	
-	spin_unlock_irqrestore(&card->lock, flags);
-}
-
-unsigned short vortex_codec_read(ac97_t *codec, unsigned short addr) {
-
-	vortex_t *card = (vortex_t*)codec->private_data;
-	u32 read_addr, data;
-	unsigned long flags;
-	unsigned lifeboat = 0;
-	
-	spin_lock_irqsave(&card->lock, flags);
-
-	/* wait for transactions to clear */
-	while (!(hwread(card->mmio, VORTEX_CODEC_CTRL) & 0x100)) {
-		udelay(100);
-		if (lifeboat++ > POLL_COUNT) {
-			printk(KERN_ERR "vortex: ac97 codec stuck busy\n");
-			spin_unlock_irqrestore(&card->lock, flags);
-			return 0xffff;
-		}
-	}	
-	/* set up read address */
-	read_addr = ((addr << VORTEX_CODEC_ADDSHIFT) & VORTEX_CODEC_ADDMASK);
-	hwwrite(card->mmio, VORTEX_CODEC_IO, read_addr);
-
-	/* wait for address */
-	{
-		udelay(100);
-		data = hwread(card->mmio, VORTEX_CODEC_IO);
-		if (lifeboat++ > POLL_COUNT) {
-			printk(KERN_ERR "vortex: ac97 address never arrived\n");
-			spin_unlock_irqrestore(&card->lock, flags);
-			return 0xffff;
-		}
-	} while ((data & VORTEX_CODEC_ADDMASK) != (addr << VORTEX_CODEC_ADDSHIFT));
-	
-	/* Unlock. */
-	spin_unlock_irqrestore(&card->lock, flags);
-	
-	/* return data. */
-	return (u16)(data & VORTEX_CODEC_DATMASK);
-}
-
-/* SPDIF support  */
-void vortex_spdif_init(vortex_t *vortex, int spdif_sr, int spdif_mode) {
-	int i, this_38 = 0, this_04=0, this_08=0, this_0c=0;
-	
-	/* CAsp4Spdif::InitializeSpdifHardware(void) */
-	hwwrite(vortex->mmio, VORTEX_SPDIF_FLAGS, hwread(vortex->mmio, VORTEX_SPDIF_FLAGS) & 0xfff3fffd);
-	//for (i=0x291D4; i<0x29200; i+=4)
-	for (i=0; i<11; i++)
-		hwwrite(vortex->mmio, VORTEX_SPDIF_CFG1 + (i<<2), 0);
-	//hwwrite(vortex->mmio, 0x29190, hwread(vortex->mmio, 0x29190) | 0xc0000);
-	hwwrite(vortex->mmio, VORTEX_CODEC_EN, hwread(vortex->mmio, VORTEX_CODEC_EN) | EN_SPDIF);
-
-	/* CAsp4Spdif::ProgramSRCInHardware(enum  SPDIF_SR,enum	 SPDIFMODE) */
-	if (this_04 && this_08) {
-		int edi;
-		
-		i = (((0x5DC00000 / spdif_sr) + 1) >> 1);
-		if (i > 0x800) {
-			if (i < 0x1ffff)
-				edi = (i >> 1);
-			else 
-				edi = 0x1ffff;
-		} else {
-			i = edi = 0x800;
-		}
-		/* this_04 and this_08 are the CASp4Src's (samplerate converters) */
-		vortex_src_setupchannel(vortex, this_04, edi, 0, 1, this_0c, 1, 0, edi, 1);
-		vortex_src_setupchannel(vortex, this_08, edi, 0, 1, this_0c, 1, 0, edi, 1);
-	}
-	
-	i = spdif_sr;
-	spdif_sr |= 0x8c;
-	switch (i) {
-		case 32000:
-			this_38 &= 0xFFFFFFFE;
-			this_38 &= 0xFFFFFFFD;
-			this_38 &= 0xF3FFFFFF;
-			this_38 |= 0x03000000;
-			this_38 &= 0xFFFFFF3F;
-			spdif_sr &= 0xFFFFFFFD;
-			spdif_sr |= 1;
-			break;
-		case 44100:
-			this_38 &= 0xFFFFFFFE;
-			this_38 &= 0xFFFFFFFD;
-			this_38 &= 0xF0FFFFFF;
-			this_38 |= 0x03000000;
-			this_38 &= 0xFFFFFF3F;
-			spdif_sr &= 0xFFFFFFFC;
-			break;
-		case 48000:
-			if (spdif_mode == 1) {
-				this_38 &= 0xFFFFFFFE;
-				this_38 &= 0xFFFFFFFD;
-				this_38 &= 0xF2FFFFFF;
-				this_38 |= 0x02000000;
-				this_38 &= 0xFFFFFF3F;
-			} else {
-				this_38 |= 0x00000003;
-				this_38 &= 0xFFFFFFBF;
-				this_38 |= 0x80;
-			}
-			spdif_sr |= 2;
-			spdif_sr &= 0xFFFFFFFE;
-			break;
-		
-	}
-	hwwrite(vortex->mmio, VORTEX_SPDIF_CFG0, this_38 & 0xffff);
-	hwwrite(vortex->mmio, VORTEX_SPDIF_CFG1, this_38 >> 0x10);
-	hwwrite(vortex->mmio, VORTEX_SPDIF_SMPRATE, spdif_sr);
-}
-
-/* Initialization */
-
-int vortex_core_init(vortex_t *vortex) {
-
-	printk(KERN_INFO "Vortex: hardware init.... ");
-	/* Hardware Init. */
-	hwwrite(vortex->mmio, VORTEX_CTRL, 0xffffffff);
-    udelay(5000);
-    hwwrite(vortex->mmio, VORTEX_CTRL, hwread(vortex->mmio, VORTEX_CTRL) & 0xffdfffff);
-	udelay(5000);
-	/* Reset IRQ flags */
-	hwwrite(vortex->mmio, VORTEX_IRQ_SOURCE, 0xffffffff);
-	hwread(vortex->mmio, VORTEX_IRQ_STAT);
-
-	vortex_codec_init(vortex);
-	
-#ifdef CHIP_AU8830
-	hwwrite(vortex->mmio, VORTEX_CTRL, hwread(vortex->mmio, VORTEX_CTRL) | 0x1000000);
-#endif	
-	
-    /* Audio engine init. */
-	vortex_fifo_init(vortex);
-	hwwrite(vortex->mmio, VORTEX_ENGINE_CTRL, 0x0);	//, 0xc83c7e58, 0xc5f93e58
-	vortex_adb_init(vortex);
-	/* Routing blocks init. */
-	vortex_adbdma_init(vortex);
-	vortex_mixer_init(vortex);
-	vortex_srcblock_init(vortex);
-#ifndef CHIP_AU8820
-	vortex_eq_init(vortex);
-	vortex_spdif_init(vortex, 48000, 1);
-#endif
-#ifndef CHIP_AU8810
-	vortex_wt_InitializeWTRegs(vortex);
-#endif
-	// Moved to au88x0.c
-	//vortex_connect_default(vortex, 1);
-
-    vortex_settimer(vortex, 0x90);
-    // Enable Interrupts.
-    // vortex_enable_int() must be first !!
-    //	hwwrite(vortex->mmio, VORTEX_IRQ_CTRL, 0);
-    // vortex_enable_int(vortex);
-    //vortex_enable_timer_int(vortex);
-    //vortex_disable_timer_int(vortex);
-
-    printk(KERN_INFO "done.\n");
-
-    return 0;
-}
-
-int vortex_core_shutdown(vortex_t *vortex) {
-
-    printk(KERN_INFO "Vortex: hardware shutdown...");
-#ifndef CHIP_AU8820	
-	vortex_eq_free(vortex);
-#endif
-    vortex_disable_timer_int(vortex);
-	vortex_disable_int(vortex);
-    vortex_connect_default(vortex, 0);
-    /* Reset all DMA fifos. */
-	vortex_fifo_init(vortex);
-    /* Erase all audio routes. */
-	vortex_adb_init(vortex);
-
-    /* Disable MPU401 */
-	//hwwrite(vortex->mmio, VORTEX_IRQ_CTRL, hwread(vortex->mmio, VORTEX_IRQ_CTRL) & ~IRQ_MIDI);
-	//hwwrite(vortex->mmio, VORTEX_CTRL, hwread(vortex->mmio, VORTEX_CTRL) & ~CTRL_MIDI_EN);
-
-    hwwrite(vortex->mmio, VORTEX_IRQ_CTRL, 0);
-	hwwrite(vortex->mmio, VORTEX_CTRL, 0);
-	udelay(5000);
-	hwwrite(vortex->mmio, VORTEX_IRQ_SOURCE, 0xffff);
-
-    printk(KERN_INFO "done.\n");
-    return 0;
-}
-
-/* Alsa support. */
-
-int vortex_alsafmt_aspfmt(int alsafmt) {
-    int fmt;
-
-    switch (alsafmt) {
-        case SNDRV_PCM_FORMAT_U8: fmt = 0x1;
-            break;
-        case SNDRV_PCM_FORMAT_MU_LAW: fmt = 0x2;
-            break;
-        case SNDRV_PCM_FORMAT_A_LAW: fmt = 0x3;
-            break;
-        case SNDRV_PCM_FORMAT_SPECIAL: fmt = 0x4; /* guess. */
-            break;
-        case SNDRV_PCM_FORMAT_IEC958_SUBFRAME_LE: fmt = 0x5; /* guess. */
-            break;
-        case SNDRV_PCM_FORMAT_S16_LE: fmt = 0x8;
-            break;
-        default: fmt = 0x8;
-            printk(KERN_ERR "vortex: format unsupported %d\n", alsafmt);
-            break;
-    }
-    return fmt;
-}
-
-/* Some not yet useful translations. */
-
-typedef enum {
-	ASPFMTLINEAR16 = 0, /* 0x8 */
-	ASPFMTLINEAR8,      /* 0x1 */
-	ASPFMTULAW,         /* 0x2 */
-	ASPFMTALAW,         /* 0x3 */
-	ASPFMTSPORT,        /* ? */
-	ASPFMTSPDIF,        /* ? */
-} ASPENCODING;
-
-int  vortex_translateformat(vortex_t *vortex, char bits, char nch, int encod) {
-	int a, this_194;
-
-	if ((bits != 8) || (bits != 16))
-		return -1;
-
-	switch (encod) {
-		case 0:
-			if (bits == 0x10)
-				a = 8; // 16 bit
-			break;
-		case 1:
-			if (bits == 8)
-				a = 1; // 8 bit
-			break;
-		case 2: a = 2; // U_LAW
-			break;
-		case 3: a = 3; // A_LAW
-			break;
-	}
-	switch (nch) {
-		case 1: this_194 = 0;
-			break;
-		case 2:	this_194 = 1;
-			break;
-		case 4: this_194 = 1;
-			break;
-		case 6: this_194 = 1;
-			break;
-	}
-	return(a);
-}
-
-void vortex_cdmacore_setformat(vortex_t *vortex, int bits, int nch) {
-	short int d, this_148;
-
-	d = ((bits >> 3)*nch);
-	this_148 = 0xbb80 / d;
-}
Index: debian/alsa-driver/pci/au88x0/au88x0_eq.c
diff -u debian/alsa-driver/pci/au88x0/au88x0_eq.c:1.1.1.1 debian/alsa-driver/pci/au88x0/au88x0_eq.c:removed
--- debian/alsa-driver/pci/au88x0/au88x0_eq.c:1.1.1.1	Mon Oct  6 08:01:04 2003
+++ debian/alsa-driver/pci/au88x0/au88x0_eq.c	Tue Apr 13 13:39:27 2004
@@ -1,833 +0,0 @@
-/***************************************************************************
- *            au88x0_eq.c
- *  Aureal Vortex Hardware EQ control/access.
- *
- *  Sun Jun  8 18:19:19 2003
- *  2003  Manuel Jander (mjander@users.sourceforge.net)
- *  
- *  02 July 2003: First time something works :)
- *  
- *  TODO:
- *     - Debug (testing)
- *     - Implement peak visualization support.
- *
- ****************************************************************************/
-#include "au88x0.h"
-#include "au88x0_eq.h"
-#include "au88x0_eqdata.c"
-
-/* CEqHw.s */
-void vortex_EqHw_SetTimeConsts(vortex_t *vortex, u16 a, u16 b) {
-	hwwrite(vortex->mmio, 0x2b3c4, a);
-	hwwrite(vortex->mmio, 0x2b3c8, b);
-}
-
-void vortex_EqHw_GetTimeConsts(vortex_t *vortex, u16 *a, u16 *b) {
-	*a = hwread(vortex->mmio, 0x2b3c4);
-	*b = hwread(vortex->mmio, 0x2b3c8);
-}
-
-void vortex_EqHw_SetLeftCoefs(vortex_t *vortex, u16 a[]) {
-	eqhw_t *eqhw = &(vortex->eq.this04);
-	int eax, i = 0, n /*esp2c*/ = 0;
-	
-	if (eqhw->this04 <= n)
-		return;
-		
-	do {
-		hwwrite(vortex->mmio, 0x2b000 + n*0x30, a[i+0]);
-		hwwrite(vortex->mmio, 0x2b004 + n*0x30, a[i+1]);
-		
-		if (eqhw->this08 == 0) {
-			hwwrite(vortex->mmio, 0x2b008 + n*0x30, a[i+2]);
-			hwwrite(vortex->mmio, 0x2b00c + n*0x30, a[i+3]);
-			eax = a[i+4]; //esp24;
-		} else {
-			if (a[2+i] == 0x8000)
-				eax = 0x7fff;
-			else
-				eax = ~a[2+i];
-			hwwrite(vortex->mmio, 0x2b008 + n*0x30, eax & 0xffff);
-			if (a[3+i] == 0x8000)
-				eax = 0x7fff;
-			else
-				eax = ~a[3+i];
-			hwwrite(vortex->mmio, 0x2b00c + n*0x30, eax & 0xffff);
-			if (a[4+i] == 0x8000)
-				eax = 0x7fff;
-			else
-				eax = ~a[4+i];
-		}
-		hwwrite(vortex->mmio, 0x2b010 + n*0x30, eax);
-		
-		n++;
-		i += 5;
-	} while(n < eqhw->this04);	
-}
-
-void vortex_EqHw_GetLeftCoefs(vortex_t *vortex, u16 a[]) {
-	
-	
-}
-
-void vortex_EqHw_SetRightCoefs(vortex_t *vortex, u16 a[]) {
-	eqhw_t *eqhw = &(vortex->eq.this04);
-	int i = 0, n /*esp2c*/ = 0, eax;
-	
-	if (eqhw->this04 <= n)
-		return;
-	
-	do {
-		hwwrite(vortex->mmio, 0x2b1e0 + n*0x30, a[0+i]);
-		hwwrite(vortex->mmio, 0x2b1e4 + n*0x30, a[1+i]);
-		
-		if (eqhw->this08 == 0) {
-			hwwrite(vortex->mmio, 0x2b1e8 + n*0x30, a[2+i]);
-			hwwrite(vortex->mmio, 0x2b1ec + n*0x30, a[3+i]);
-			eax = a[4+i]; //*esp24;
-		} else {
-			if (a[2+i] == 0x8000)
-				eax = 0x7fff;
-			else
-				eax = ~(a[2+i]);
-			hwwrite(vortex->mmio, 0x2b1e8 + n*0x30, eax & 0xffff);
-			if (a[3+i] == 0x8000)
-				eax = 0x7fff;
-			else
-				eax = ~a[3+i];
-			hwwrite(vortex->mmio, 0x2b1ec + n*0x30, eax & 0xffff);
-			if (a[4+i] == 0x8000)
-				eax = 0x7fff;
-			else
-				eax = ~a[4+i];
-		}
-		hwwrite(vortex->mmio, 0x2b1f0 + n*0x30, eax);
-		i += 5;
-		n++;	
-	} while (n < eqhw->this04);
-	
-}
-
-void vortex_EqHw_GetRightCoefs(vortex_t *vortex, u16 a[]) {
-	
-	
-}
-
-void vortex_EqHw_SetLeftStates(vortex_t *vortex, u16 a[], u16 b[]) {
-	eqhw_t *eqhw = &(vortex->eq.this04);
-	int i = 0, ebx = 0;
-	
-	hwwrite(vortex->mmio, 0x2b3fc, a[0]);
-	hwwrite(vortex->mmio, 0x2b400, a[1]);
-	
-	if (eqhw->this04 < 0)
-		return;
-	
-	do {
-		hwwrite(vortex->mmio, 0x2b014 + (i*0xc), b[i]);
-		hwwrite(vortex->mmio, 0x2b018 + (i*0xc), b[1+i]);
-		hwwrite(vortex->mmio, 0x2b01c + (i*0xc), b[2+i]);
-		hwwrite(vortex->mmio, 0x2b020 + (i*0xc), b[3+i]);
-		i += 4;
-		ebx++;
-	} while (eqhw->this04 > ebx);
-}
-
-void vortex_EqHw_GetLeftStates(vortex_t *vortex, u16 *a, u16 b[]) {
-
-	
-}
-
-void vortex_EqHw_SetRightStates(vortex_t *vortex, u16 a[], u16 b[]) {
-	eqhw_t *eqhw = &(vortex->eq.this04);
-	int i = 0, ebx = 0;
-	
-	hwwrite(vortex->mmio, 0x2b404, a[0]);
-	hwwrite(vortex->mmio, 0x2b408, a[1]);
-	
-	if (eqhw->this04 < 0)
-		return;
-		
-	do {
-		hwwrite(vortex->mmio, 0x2b1f4 + (i*0xc), b[i]);
-		hwwrite(vortex->mmio, 0x2b1f8 + (i*0xc), b[1+i]);
-		hwwrite(vortex->mmio, 0x2b1fc + (i*0xc), b[2+i]);
-		hwwrite(vortex->mmio, 0x2b200 + (i*0xc), b[3+i]);		
-		i += 4;
-		ebx++;
-	} while (ebx < eqhw->this04);
-}
-
-void vortex_EqHw_GetRightStates(vortex_t *vortex, u16 *a, u16 b[]) {
-	
-}
-
-void vortex_EqHw_SetBypassGain(vortex_t *vortex, u16 a, u16 b) {
-	eqhw_t *eqhw = &(vortex->eq.this04);
-	int eax;
-	
-	if (eqhw->this08 == 0) {
-		hwwrite(vortex->mmio, 0x2b3d4, a);
-		hwwrite(vortex->mmio, 0x2b3ec, b);
-	} else {
-		if (a == 0x8000)
-			eax = 0x7fff;
-		else
-			eax = ~a;
-		hwwrite(vortex->mmio, 0x2b3d4, eax & 0xffff);
-		if (b == 0x8000)
-			eax = 0x7fff;
-		else
-			eax = ~b;
-		hwwrite(vortex->mmio, 0x2b3ec, eax & 0xffff);
-	}
-}
-
-void vortex_EqHw_SetA3DBypassGain(vortex_t *vortex, u16 a, u16 b) {
-	
-	hwwrite(vortex->mmio, 0x2b3e0, a);
-	hwwrite(vortex->mmio, 0x2b3f8, b);
-}
-
-void vortex_EqHw_SetCurrBypassGain(vortex_t *vortex, u16 a, u16 b) {
-	
-	hwwrite(vortex->mmio, 0x2b3d0, a);
-	hwwrite(vortex->mmio, 0x2b3e8, b);
-}
-
-void vortex_EqHw_SetCurrA3DBypassGain(vortex_t *vortex, u16 a, u16 b) {
-	
-	hwwrite(vortex->mmio, 0x2b3dc, a);
-	hwwrite(vortex->mmio, 0x2b3f4, b);
-}
-
-void vortex_EqHw_SetLeftGainsSingleTarget(vortex_t *vortex, u16 index, u16 b) {
-	hwwrite(vortex->mmio, 0x2b02c + (index*0x30), b);
-}
-
-void vortex_EqHw_SetRightGainsSingleTarget(vortex_t *vortex, u16 index, u16 b) {
-	hwwrite(vortex->mmio, 0x2b20c + (index*0x30), b);
-}
-
-void vortex_EqHw_SetLeftGainsTarget(vortex_t *vortex, u16 a[]) {
-	eqhw_t *eqhw = &(vortex->eq.this04);
-	int ebx=0;
-	
-	if (eqhw->this04 < 0)
-		return;
-	do {
-		hwwrite(vortex->mmio, 0x2b02c + ebx*0x30, a[ebx]);
-		ebx++;
-	} while (ebx < eqhw->this04);
-}
-
-void vortex_EqHw_SetRightGainsTarget(vortex_t *vortex, u16 a[]) {
-	eqhw_t *eqhw = &(vortex->eq.this04);
-	int ebx=0;
-	
-	if (eqhw->this04 < 0)
-		return;
-	
-	do {
-		hwwrite(vortex->mmio, 0x2b20c + ebx*0x30, a[ebx]);
-		ebx++;
-	} while (ebx < eqhw->this04);	
-}
-
-void vortex_EqHw_GetLeftGainsTarget(vortex_t *vortex, u16 a[]) {
-	eqhw_t *eqhw = &(vortex->eq.this04);
-	int ebx=0;
-	
-	if (eqhw->this04 < 0)
-		return;
-	
-	do {
-		a[ebx] = hwread(vortex->mmio, 0x2b02c + ebx*0x30);
-		ebx++;
-	} while (ebx < eqhw->this04);
-}
-
-void vortex_EqHw_GetRightGainsTarget(vortex_t *vortex, u16 a[]) {
-	eqhw_t *eqhw = &(vortex->eq.this04);
-	int ebx=0;
-	
-	if (eqhw->this04 < 0)
-		return;
-	
-	do {
-		a[ebx] = hwread(vortex->mmio, 0x2b20c + ebx*0x30);
-		ebx++;
-	} while (ebx < eqhw->this04);	
-}
-
-void vortex_EqHw_SetLeftGainsCurrent(vortex_t *vortex, u16 a[]) {
-	eqhw_t *eqhw = &(vortex->eq.this04);
-	int ebx=0;
-	
-	if (eqhw->this04 < 0)
-		return;
-	
-	do {
-		hwwrite(vortex->mmio, 0x2b028 + ebx*0x30, a[ebx]);
-		ebx++;
-	} while (ebx < eqhw->this04);
-}
-
-void vortex_EqHw_SetRightGainsCurrent(vortex_t *vortex, u16 a[]) {
-	eqhw_t *eqhw = &(vortex->eq.this04);
-	int ebx=0;
-	
-	if (eqhw->this04 < 0)
-		return;
-	
-	do {
-		hwwrite(vortex->mmio, 0x2b208 + ebx*0x30, a[ebx]);
-		ebx++;
-	} while (ebx < eqhw->this04);	
-}
-
-void vortex_EqHw_GetLeftGainsCurrent(vortex_t *vortex, u16 a[]) {
-	eqhw_t *eqhw = &(vortex->eq.this04);
-	int ebx=0;
-	
-	if (eqhw->this04 < 0)
-		return;
-	
-	do {
-		a[ebx] = hwread(vortex->mmio, 0x2b028 + ebx*0x30);
-		ebx++;
-	} while (ebx < eqhw->this04);
-}
-
-void vortex_EqHw_GetRightGainsCurrent(vortex_t *vortex, u16 a[]) {
-	eqhw_t *eqhw = &(vortex->eq.this04);
-	int ebx=0;
-	
-	if (eqhw->this04 < 0)
-		return;
-	
-	do {
-		a[ebx] = hwread(vortex->mmio, 0x2b208 + ebx*0x30);
-		ebx++;
-	} while (ebx < eqhw->this04);	
-}
-
-void vortex_EqHw_SetLevels(vortex_t *vortex, u16 a[]) {
-	eqhw_t *eqhw = &(vortex->eq.this04);
-	int ebx;
-	
-	if (eqhw->this04 < 0)
-		return;
-	
-	ebx = 0;
-	do {
-		hwwrite(vortex->mmio, 0x2b024 + ebx*0x30, a[ebx]);
-		ebx++;
-	} while (ebx < eqhw->this04);
-	
-	hwwrite(vortex->mmio, 0x2b3cc, a[eqhw->this04]);
-	hwwrite(vortex->mmio, 0x2b3d8, a[eqhw->this04+1]);
-	
-	ebx = 0;
-	do {
-		hwwrite(vortex->mmio, 0x2b204 + ebx*0x30, a[ebx + (eqhw->this04+2)]);
-		ebx++;
-	} while (ebx < eqhw->this04);
-	
-	hwwrite(vortex->mmio, 0x2b3e4, a[2+(eqhw->this04*2)]);
-	hwwrite(vortex->mmio, 0x2b3f0, a[3+(eqhw->this04*2)]);
-}
-
-void vortex_EqHw_GetLevels(vortex_t *vortex, u16 a[]) {
-	eqhw_t *eqhw = &(vortex->eq.this04);
-	int ebx;
-	
-	if (eqhw->this04 < 0)
-		return;
-	
-	ebx = 0;
-	do {
-		a[ebx] = hwread(vortex->mmio, 0x2b024 + ebx*0x30);
-		ebx++;
-	} while (ebx < eqhw->this04);
-	
-	a[eqhw->this04] = hwread(vortex->mmio, 0x2b3cc);
-	a[eqhw->this04+1] = hwread(vortex->mmio, 0x2b3d8);
-	
-	ebx = 0;
-	do {
-		a[ebx+(eqhw->this04+2)] = hwread(vortex->mmio, 0x2b204 + ebx*0x30);
-		ebx++;
-	} while (ebx < eqhw->this04);
-	
-	a[2+(eqhw->this04*2)] = hwread(vortex->mmio, 0x2b3e4);
-	a[3+(eqhw->this04*2)] = hwread(vortex->mmio, 0x2b3f0);
-}
-
-void vortex_EqHw_SetControlReg(vortex_t *vortex, unsigned long reg) {
-	hwwrite(vortex->mmio, 0x2b440, reg);
-}
-
-void vortex_EqHw_GetControlReg(vortex_t *vortex, unsigned long *reg) {
-	*reg = hwread(vortex->mmio, 0x2b440);
-}
-
-void vortex_EqHw_SetSampleRate(vortex_t *vortex, int sr) {
-	hwwrite(vortex->mmio, 0x2b440, ((sr & 0x1f) << 3) | 0xb800);
-}
-
-void vortex_EqHw_GetSampleRate(vortex_t *vortex, int *sr) {
-	*sr = (hwread(vortex->mmio, 0x2b440) >> 3) & 0x1f;
-}
-
-void vortex_EqHw_Enable(vortex_t *vortex) {
-	hwwrite(vortex->mmio, 0x2b440, 0xf001);
-}
-
-void vortex_EqHw_Disable(vortex_t *vortex) {
-	hwwrite(vortex->mmio, 0x2b440, 0xf000);
-}
-
-/* Reset (zero) buffers */
-void vortex_EqHw_ZeroIO(vortex_t *vortex) {
-	int i;
-	for (i=0; i<0x8; i++)
-		hwwrite(vortex->mmio, 0x2b410 + (i<<2), 0x0);
-	for (i=0; i<0x4; i++)
-		hwwrite(vortex->mmio, 0x2b430 + (i<<2), 0x0);
-}
-
-void vortex_EqHw_ZeroA3DIO(vortex_t *vortex) {
-	int i;
-	for (i=0; i<0x4; i++)
-		hwwrite(vortex->mmio, 0x2b410 + (i<<2), 0x0);	
-}
-
-void vortex_EqHw_ZeroState(vortex_t *vortex) {
-	
-	vortex_EqHw_SetControlReg(vortex, 0);
-	vortex_EqHw_ZeroIO(vortex);
-	hwwrite(vortex->mmio, 0x2b3c0, 0);
-	
-	vortex_EqHw_SetTimeConsts(vortex, 0, 0);
-	
-	vortex_EqHw_SetLeftCoefs(vortex, asEqCoefsZeros);
-	vortex_EqHw_SetRightCoefs(vortex, asEqCoefsZeros);
-	
-	vortex_EqHw_SetLeftGainsCurrent(vortex, eq_gains_zero);
-	vortex_EqHw_SetRightGainsCurrent(vortex, eq_gains_zero);
-	vortex_EqHw_SetLeftGainsTarget(vortex, eq_gains_zero);
-	vortex_EqHw_SetRightGainsTarget(vortex, eq_gains_zero);
-	
-	vortex_EqHw_SetBypassGain(vortex, 0, 0);
-	vortex_EqHw_SetA3DBypassGain(vortex, 0, 0);
-	vortex_EqHw_SetLeftStates(vortex, eq_states_zero, asEqOutStateZeros);
-	vortex_EqHw_SetRightStates(vortex, eq_states_zero, asEqOutStateZeros);
-	vortex_EqHw_SetLevels(vortex, (u16*)eq_levels);
-}
-
-/* Program coeficients as pass through */
-void vortex_EqHw_ProgramPipe(vortex_t *vortex) {
-	vortex_EqHw_SetTimeConsts(vortex, 0, 0);
-	
-	vortex_EqHw_SetLeftCoefs(vortex, asEqCoefsPipes);
-	vortex_EqHw_SetRightCoefs(vortex, asEqCoefsPipes);
-	
-	vortex_EqHw_SetLeftGainsCurrent(vortex, eq_gains_current);
-	vortex_EqHw_SetRightGainsCurrent(vortex, eq_gains_current);
-	vortex_EqHw_SetLeftGainsTarget(vortex, eq_gains_current);
-	vortex_EqHw_SetRightGainsTarget(vortex, eq_gains_current);
-}
-/* Program EQ block as 10 band Equalizer */
-void vortex_EqHw_Program10Band(vortex_t *vortex, auxxEqCoeffSet_t *coefset) {
-	
-	vortex_EqHw_SetTimeConsts(vortex, 0xc, 0x7fe0);
-	
-	vortex_EqHw_SetLeftCoefs(vortex, coefset->LeftCoefs);
-	vortex_EqHw_SetRightCoefs(vortex, coefset->RightCoefs);
-	
-	vortex_EqHw_SetLeftGainsCurrent(vortex, coefset->LeftGains);
-	
-	vortex_EqHw_SetRightGainsTarget(vortex, coefset->RightGains);
-	vortex_EqHw_SetLeftGainsTarget(vortex, coefset->LeftGains);
-	
-	vortex_EqHw_SetRightGainsCurrent(vortex, coefset->RightGains);
-}
-
-
-void vortex_EqHw_GetTenBandLevels(vortex_t *vortex, u16 peaks[]) {
-	eqhw_t *eqhw = &(vortex->eq.this04);
-	int i; 
-	
-	if (eqhw->this04 > 0)
-		return;
-	
-	for (i=0; i<eqhw->this04; i++)
-		peaks[i] = hwread(vortex->mmio, 0x2B024 + i*0x30);
-	for (i=0; i<eqhw->this04; i++)
-		peaks[i+eqhw->this04] = hwread(vortex->mmio, 0x2B204 + i*0x30);
-}
-/* CEqlzr.s */
-
-int  vortex_Eqlzr_GetLeftGain(vortex_t *vortex, u16 index, u16 *gain) {
-	eqlzr_t *eq = &(vortex->eq);
-	
-	if (eq->this28) {
-		*gain = eq->this130[index];
-		return 0;
-	}
-	return 1;
-}
-
-void vortex_Eqlzr_SetLeftGain(vortex_t *vortex, u16 index, u16 gain) {
-	eqlzr_t *eq = &(vortex->eq);
-
-	if (eq->this28 == 0)
-		return;
-	
-	eq->this130[index] = gain;
-	if (eq->this54)
-		return;
-	
-	vortex_EqHw_SetLeftGainsSingleTarget(vortex, index, gain);
-}
-
-int  vortex_Eqlzr_GetRightGain(vortex_t *vortex, u16 index, u16 *gain) {
-	eqlzr_t *eq = &(vortex->eq);
-	
-	if (eq->this28) {
-		*gain = eq->this130[index + eq->this10];
-		return 0;
-	}
-	return 1;
-}
-
-void vortex_Eqlzr_SetRightGain(vortex_t *vortex, u16 index, u16 gain) {
-	eqlzr_t *eq = &(vortex->eq);
-	
-	if (eq->this28 == 0)
-		return;
-	
-	eq->this130[index + eq->this10] = gain;
-	if (eq->this54)
-		return;
-	
-	vortex_EqHw_SetRightGainsSingleTarget(vortex, index, gain);
-}
-
-int  vortex_Eqlzr_GetAllBands(vortex_t *vortex, u16 *gains, unsigned long *cnt) {
-	eqlzr_t *eq = &(vortex->eq);
-	int si=0;
-	
-	if (eq->this10 == 0)
-		return 1;
-	
-	{
-		if (vortex_Eqlzr_GetLeftGain(vortex, si, &gains[si]))
-			return 1;			
-		if (vortex_Eqlzr_GetRightGain(vortex, si, &gains[si + eq->this10]))
-			return 1;
-		si++;
-	} while (eq->this10 > si);
-	*cnt = si*2;
-	return 0;
-}
-
-int  vortex_Eqlzr_SetAllBandsFromActiveCoeffSet(vortex_t *vortex) {
-	eqlzr_t *eq = &(vortex->eq);
-	
-	vortex_EqHw_SetLeftGainsTarget(vortex, eq->this130);
-	vortex_EqHw_SetRightGainsTarget(vortex, &(eq->this130[eq->this10]));
-	
-	return 0;
-}
-
-int  vortex_Eqlzr_SetAllBands(vortex_t *vortex, u16 gains[], unsigned long count) {
-	eqlzr_t *eq = &(vortex->eq);
-	int i;
-	
-	if (((eq->this10)*2 != count) || (eq->this28 == 0))
-		return 1;
-	
-	if (0 < count) {
-		for (i=0; i<count; i++) {
-			eq->this130[i] = gains[i];
-		}
-	}
-	if (eq->this54)
-		return 0;
-	return vortex_Eqlzr_SetAllBandsFromActiveCoeffSet(vortex);
-}
-
-void vortex_Eqlzr_ProgramA3dBypassGain(vortex_t *vortex) {
-	eqlzr_t *eq = &(vortex->eq);
-	int eax, ebx;
-	
-	if (eq->this54)
-		eax = eq->this0e;
-	else
-		eax = eq->this0a;
-	ebx = (eax * eq->this58) >> 0x10;
-	eax = (eax * eq->this5c) >> 0x10;
-	vortex_EqHw_SetA3DBypassGain(vortex, ebx, eax);
-}
-
-void vortex_Eqlzr_SetBypass(vortex_t *vortex, long bp) {
-	eqlzr_t *eq = &(vortex->eq);
-	
-	if ((eq->this28) && (bp == 0)) {
-		vortex_Eqlzr_SetAllBandsFromActiveCoeffSet(vortex);
-		vortex_EqHw_SetBypassGain(vortex, eq->this08, eq->this08);
-	} else {
-		vortex_EqHw_SetLeftGainsTarget(vortex, (u16*)(eq->this14));
-		vortex_EqHw_SetRightGainsTarget(vortex, (u16*)(eq->this14));
-		vortex_EqHw_SetBypassGain(vortex, eq->this0c, eq->this0c);
-	}
-	// FIXME: no yet implemented.
-	vortex_Eqlzr_ProgramA3dBypassGain(vortex);
-}
-
-void vortex_Eqlzr_ReadAndSetActiveCoefSet(vortex_t *vortex) {
-	eqlzr_t *eq = &(vortex->eq);
-	
-	/* Set EQ BiQuad filter coeficients */
-	memcpy(&(eq->coefset), &asEqCoefsNormal, sizeof(auxxEqCoeffSet_t));
-	/* Set EQ Band gain levels and dump into hardware registers. */
-	vortex_Eqlzr_SetAllBands(vortex, eq_gains_normal, eq->this10*2);	
-}
-
-#if 0
-void vortex_Eqlzr_vortex_SetA3dBypassVolume()
-void vortex_Eqlzr_ShutDownA3d()
-#endif
-
-int  vortex_Eqlzr_GetAllPeaks(vortex_t *vortex, u16 *peaks, int *count) {
-	eqlzr_t *eq = &(vortex->eq);
-	
-	if (eq->this10 == 0)
-		return 1;
-	*count = eq->this10 * 2;
-	vortex_EqHw_GetTenBandLevels(vortex, peaks);
-	return 0;
-}
-
-auxxEqCoeffSet_t *vortex_Eqlzr_GetActiveCoefSet(vortex_t *vortex) {
-	eqlzr_t *eq = &(vortex->eq);
-	
-	return (&(eq->coefset));
-}
-
-void vortex_Eqlzr_init(vortex_t *vortex) {
-	eqlzr_t *eq = &(vortex->eq);
-	
-	/* Object constructor */
-	//eq->this04 = 0;
-	eq->this08 = 0; /* Bypass gain with EQ in use. */
-	eq->this0a = 0x5999; 
-	eq->this0c = 0x5999; /* Bypass gain with EQ disabled. */
-	eq->this0e = 0x5999;
-	
-	eq->this10 = 0xa; /* 10 eq frequency bands. */
-	eq->this04.this04 = eq->this10;
-	eq->this28 = 0x1; /* if 1 => Allow read access to this130 (gains) */
-	eq->this54 = 0x0; /* if 1 => Dont Allow access to hardware (gains) */
-	eq->this58 = 0xffff;
-	eq->this5c = 0xffff;
-	
-	/* Set gains. */
-	memset(eq->this14, 0, 2*10);
-	
-	/* Actual init. */
-	vortex_EqHw_ZeroState(vortex);
-	vortex_EqHw_SetSampleRate(vortex, 0x11);
-	vortex_Eqlzr_ReadAndSetActiveCoefSet(vortex);
-	
-	vortex_EqHw_Program10Band(vortex, &(eq->coefset));
-	vortex_Eqlzr_SetBypass(vortex, eq->this54);
-	vortex_EqHw_Enable(vortex);
-}
-
-/* ALSA interface */
-
-/* Control interface */
-static int snd_vortex_eqtoggle_info(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t *uinfo) {
-	uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN;
-	uinfo->count = 1;
-	uinfo->value.integer.min = 0;
-	uinfo->value.integer.max = 1;
-	return 0;
-}
-
-static int snd_vortex_eqtoggle_get(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucontrol) {
-	vortex_t *vortex = snd_kcontrol_chip(kcontrol);
-	eqlzr_t *eq = &(vortex->eq);
-	//int i = kcontrol->private_value;
-	
-	ucontrol->value.integer.value[0] = eq->this54 ? 0 : 1;
-	
-	return 0;
-}
-
-static int snd_vortex_eqtoggle_put(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucontrol) {
-	vortex_t *vortex = snd_kcontrol_chip(kcontrol);
-	eqlzr_t *eq = &(vortex->eq);
-	//int i = kcontrol->private_value;
-	
-	eq->this54 = ucontrol->value.integer.value[0] ? 0 : 1;
-	vortex_Eqlzr_SetBypass(vortex, eq->this54);
-	
-	return 1; /* Allways changes */
-}
-
-static snd_kcontrol_new_t vortex_eqtoggle_kcontrol __devinitdata = {
-	.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
-	.name = "EQ Enable",
-	.index = 0,
-	.access = SNDRV_CTL_ELEM_ACCESS_READWRITE,
-	.private_value = 0,
-	.info = snd_vortex_eqtoggle_info,
-	.get = snd_vortex_eqtoggle_get,
-	.put = snd_vortex_eqtoggle_put
-};
-
-static int snd_vortex_eq_info(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t *uinfo) {
-	uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
-	uinfo->count = 2;
-	uinfo->value.integer.min = 0x0000;
-	uinfo->value.integer.max = 0x7fff;
-	return 0;
-}
-
-static int snd_vortex_eq_get(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucontrol) {
-	vortex_t *vortex = snd_kcontrol_chip(kcontrol);
-	int i = kcontrol->private_value;
-	u16 gainL, gainR;
-	
-	vortex_Eqlzr_GetLeftGain(vortex, i, &gainL);
-	vortex_Eqlzr_GetRightGain(vortex, i, &gainR);
-	ucontrol->value.integer.value[0] = gainL;
-	ucontrol->value.integer.value[1] = gainR;
-	return 0;
-}
-
-static int snd_vortex_eq_put(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucontrol) {
-	vortex_t *vortex = snd_kcontrol_chip(kcontrol);
-	int changed = 0, i = kcontrol->private_value;
-	u16 gainL, gainR;
-	
-	vortex_Eqlzr_GetLeftGain(vortex, i, &gainL);
-	vortex_Eqlzr_GetRightGain(vortex, i, &gainR);
-	
-	if (gainL != ucontrol->value.integer.value[0]) {
-		vortex_Eqlzr_SetLeftGain(vortex, i, ucontrol->value.integer.value[0]);
-		changed = 1;
-	}
-	if (gainR != ucontrol->value.integer.value[1]) {
-		vortex_Eqlzr_SetRightGain(vortex, i, ucontrol->value.integer.value[1]);
-		changed = 1;
-	}
-	return changed;
-}
-
-static snd_kcontrol_new_t vortex_eq_kcontrol __devinitdata = {
-	.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
-	.name = "                        .",
-	.index = 0,
-	.access = SNDRV_CTL_ELEM_ACCESS_READWRITE,
-	.private_value = 0,
-	.info = snd_vortex_eq_info,
-	.get = snd_vortex_eq_get,
-	.put = snd_vortex_eq_put
-};
-
-static int snd_vortex_peaks_info(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t *uinfo) {
-	uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
-	uinfo->count = 20;
-	uinfo->value.integer.min = 0x0000;
-	uinfo->value.integer.max = 0xffff;
-	return 0;
-}
-
-static int snd_vortex_peaks_get(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucontrol) {
-	vortex_t *vortex = snd_kcontrol_chip(kcontrol);
-	int i, count;
-	u16 peaks[20];
-	
-	vortex_Eqlzr_GetAllPeaks(vortex, peaks, &count);
-	if (count != 20) {
-		printk("vortex: peak count error 20 != %d \n", count);
-		return -1;
-	}
-	for (i=0; i<20; i++)
-		ucontrol->value.integer.value[i] = peaks[i];
-	
-	return 0;
-}
-
-static snd_kcontrol_new_t vortex_levels_kcontrol __devinitdata = {
-	.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
-	.name = "EQ Peaks",
-	.access = SNDRV_CTL_ELEM_ACCESS_READ | SNDRV_CTL_ELEM_ACCESS_VOLATILE,
-	.info = snd_vortex_peaks_info,
-	.get = snd_vortex_peaks_get,
-};
-
-/* EQ band gain labels. */
-static char *EqBandLabels[10] __devinitdata = {
-	"EQ0 31Hz\0",
-	"EQ1 63Hz\0",
-	"EQ2 125Hz\0",
-	"EQ3 250Hz\0",
-	"EQ4 500Hz\0",
-	"EQ5 1KHz\0",
-	"EQ6 2KHz\0",
-	"EQ7 4KHz\0",
-	"EQ8 8KHz\0",
-	"EQ9 16KHz\0",
-};
-
-/* ALSA driver entry points. Init and exit. */
-int vortex_eq_init(vortex_t *vortex) {
-	snd_kcontrol_t *kcontrol;
-	int err, i;
-	
-	vortex_Eqlzr_init(vortex);
-
-	if ((kcontrol = snd_ctl_new1(&vortex_eqtoggle_kcontrol, vortex)) == NULL)
-		return -ENOMEM;
-	kcontrol->private_value = 0;
-	if ((err = snd_ctl_add(vortex->card, kcontrol)) < 0)
-       	return err;
-
-	/* EQ gain controls */
-	for (i=0; i<10; i++) {
-		if ((kcontrol = snd_ctl_new1(&vortex_eq_kcontrol, vortex)) == NULL)
-			return -ENOMEM;
-		strcpy(kcontrol->id.name, EqBandLabels[i]);
-		kcontrol->private_value = i;
-		if ((err = snd_ctl_add(vortex->card, kcontrol)) < 0)
-        	return err;
-		//vortex->eqctrl[i] = kcontrol;
-	}
-	/* EQ band levels */
-	if ((kcontrol = snd_ctl_new1(&vortex_levels_kcontrol, vortex)) == NULL)
-		return -ENOMEM;
-	if ((err = snd_ctl_add(vortex->card, kcontrol)) < 0)
-       	return err;
-	
-	return 0;
-}
-
-int vortex_eq_free(vortex_t *vortex) {
-	/*
-	//FIXME: segfault because vortex->eqctrl[i] == 4
-	int i;
-	for (i=0; i<10; i++) {
-		if (vortex->eqctrl[i])
-			snd_ctl_remove(vortex->card, vortex->eqctrl[i]);
-	}
-	*/
-	return 0;
-}
-
-/* End */
Index: debian/alsa-driver/pci/au88x0/au88x0_eq.h
diff -u debian/alsa-driver/pci/au88x0/au88x0_eq.h:1.1.1.1 debian/alsa-driver/pci/au88x0/au88x0_eq.h:removed
--- debian/alsa-driver/pci/au88x0/au88x0_eq.h:1.1.1.1	Mon Oct  6 08:01:05 2003
+++ debian/alsa-driver/pci/au88x0/au88x0_eq.h	Tue Apr 13 13:39:27 2004
@@ -1,45 +0,0 @@
-#ifndef AU88X0_EQ_H
-#define AU88X0_EQ_H
-
-/***************************************************************************
- *            au88x0_eq.h
- *
- *  Definitions and constant data for the Aureal Hardware EQ.
- *
- *  Sun Jun  8 18:23:38 2003
- *  Author: Manuel Jander (mjander@users.sourceforge.net)
- ****************************************************************************/
-
-typedef struct {
-	u16 LeftCoefs[50]; //0x4
-	u16 RightCoefs[50]; // 0x68
-	u16	LeftGains[20]; //0xd0
-	u16 RightGains[20]; //0xe4
-} auxxEqCoeffSet_t;
-
-typedef struct {
-	unsigned int *this00; /*CAsp4HwIO*/
-	long this04;  /* How many filters for each side (default = 10) */
-	long this08;  /* inited to cero. Stereo flag? */
-} eqhw_t;
-
-typedef struct {
-	unsigned int *this00; /*CAsp4Core*/
-	eqhw_t this04; /* CHwEq */
-	short this08; /* Bad codec flag ? SetBypassGain: bypass gain */
-	short this0a;
-	short this0c; /* SetBypassGain: bypass gain when this28 is not set. */
-	short this0e;
-	
-	long this10; /* How many gains are used for each side (right or left). */
-	u16 this14[32]; /* SetLeftGainsTarget: Left (and right?) EQ gains  */
-	long this24;
-	long this28; /* flag related to EQ enabled or not. Gang flag ? */
-	long this54; /* SetBypass */
-	long this58;
-	long this5c;
-	/*0x60*/ auxxEqCoeffSet_t coefset; /* 50 u16 word each channel. */
-	u16 this130[20]; /* Left and Right gains */
-} eqlzr_t;
-
-#endif
Index: debian/alsa-driver/pci/au88x0/au88x0_eqdata.c
diff -u debian/alsa-driver/pci/au88x0/au88x0_eqdata.c:1.1.1.1 debian/alsa-driver/pci/au88x0/au88x0_eqdata.c:removed
--- debian/alsa-driver/pci/au88x0/au88x0_eqdata.c:1.1.1.1	Mon Oct  6 08:01:05 2003
+++ debian/alsa-driver/pci/au88x0/au88x0_eqdata.c	Tue Apr 13 13:39:27 2004
@@ -1,111 +0,0 @@
-/* Data structs */
-
-static u16 asEqCoefsZeros[50] = {
-	0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-	0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-	0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-	0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-	0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-	0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
-	0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-	0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-	0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-	0x0000, 0x0000, 0x0000,	0x0000, 0x0000,	
-};
-
-static u16 asEqCoefsPipes[64] = {
-	0x0000, 0x0000, 
-	0x0000, 0x0666, 0x0000, 0x0000, 0x0666, 
-	0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
-	0x0000, 0x0666, 0x0000, 0x0000, 0x0666, 
-	0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
-	0x0000, 0x0666, 0x0000, 0x0000, 0x0666, 
-	0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
-	0x0000, 0x0666, 0x0000, 0x0000, 0x0666, 
-	0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
-	0x0000, 0x0666, 0x0000, 0x0000, 0x066a, 
-	0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
-	
-	0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
-	0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
-	0x0000, 0x0000
-};
-
-/* More coef sets can be found in the win2k "inf" file. */
-static auxxEqCoeffSet_t asEqCoefsNormal = {
-	.LeftCoefs = {
-	0x7e60, 0xc19e, 0x0001, 0x0002, 0x0001,
-	0x7fa0, 0xc05f, 0x004f, 0x0000, 0xffb1,
-	0x7f3f, 0xc0bc, 0x00c2, 0x0000, 0xff3e,
-	0x7e78, 0xc177, 0x011f, 0x0000, 0xfee1,
-	0x7cd6, 0xc2e5, 0x025c, 0x0000, 0xfda4,
-	0x7949, 0xc5aa, 0x0467, 0x0000, 0xfb99,
-	0x7120, 0xcadf, 0x0864, 0x0000, 0xf79c,
-	0x5d33, 0xd430, 0x0f7e, 0x0000, 0xf082,
-	0x2beb, 0xe3ca, 0x1bd3, 0x0000, 0xe42d,
-	0xd740, 0xf01d, 0x2ac5, 0x0000, 0xd53b },
- 
-	.RightCoefs = {
-	0x7e60, 0xc19e, 0x0001, 0x0002, 0x0001,
-	0x7fa0, 0xc05f, 0x004f, 0x0000, 0xffb1,
-	0x7f3f, 0xc0bc, 0x00c2, 0x0000, 0xff3e,
-	0x7e78, 0xc177, 0x011f, 0x0000, 0xfee1,
-	0x7cd6, 0xc2e5, 0x025c, 0x0000, 0xfda4,
-	0x7949, 0xc5aa, 0x0467, 0x0000, 0xfb99,
-	0x7120, 0xcadf, 0x0864, 0x0000, 0xf79c,
-	0x5d33, 0xd430, 0x0f7e, 0x0000, 0xf082,
-	0x2beb, 0xe3ca, 0x1bd3, 0x0000, 0xe42d,
-	0xd740, 0xf01d, 0x2ac5, 0x0000, 0xd53b },
-
-	.LeftGains = {
-	0x3e96, 0x3e96, 0x3e96, 0x3e96, 0x3e96, 
-	0x3e96, 0x3e96, 0x3e96, 0x3e96,	0x3e96 },
-	.RightGains = {
-	0x3e96, 0x3e96, 0x3e96, 0x3e96, 0x3e96, 
-	0x3e96, 0x3e96, 0x3e96,	0x3e96, 0x3e96 }
-};
-
-static u16 eq_gains_normal[20] = {	
-	0x3e96, 0x3e96, 0x3e96, 0x3e96, 0x3e96, 
-	0x3e96, 0x3e96, 0x3e96, 0x3e96,	0x3e96,
-	0x3e96, 0x3e96, 0x3e96, 0x3e96, 0x3e96, 
-	0x3e96, 0x3e96, 0x3e96,	0x3e96, 0x3e96
-};
-
-/* _rodatab60 */
-static u16 eq_gains_zero[10] = { 
-	0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-	0x0000, 0x0000, 0x0000, 0x0000, 0x0000
-};
-
-/* _rodatab7c:  ProgramPipe */
-static u16 eq_gains_current[12] = { 
-	0x7fff, 0x7fff, 0x7fff, 0x7fff, 0x7fff, 0x7fff, 0x7fff, 0x7fff,	0x7fff, 
-	0x7fff, 0x7fff, 0x7fff
-};
-
-/* _rodatab78 */
-static u16 eq_states_zero[2] = {0x0000, 0x0000};
-
-static u16 asEqOutStateZeros[48] = {
-	0x0000, 0x0000, 0x0000, 0x0000, 
-	0x0000, 0x0000, 0x0000, 0x0000, 
-	0x0000, 0x0000, 0x0000, 0x0000, 
-	0x0000, 0x0000, 0x0000, 0x0000, 
-	0x0000, 0x0000, 0x0000, 0x0000, 
-	0x0000, 0x0000, 0x0000, 0x0000, 
-	0x0000, 0x0000, 0x0000, 0x0000,
-	0x0000, 0x0000, 0x0000, 0x0000, 
-	0x0000, 0x0000, 0x0000, 0x0000, 
-	0x0000, 0x0000, 0x0000, 0x0000, 
-	0x0000, 0x0000, 0x0000, 0x0000,
-	0x0000, 0x0000, 0x0000, 0x0000 
-};
-
-/*_rodataba0:*/
-static long eq_levels[32] = {
-	0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 
-	0x0000, 0x0000,	0x0000, 0x0000, 0x0000, 0x0000,	0x0000, 0x0000, 
-	0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
-	0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000
-};
Index: debian/alsa-driver/pci/au88x0/au88x0_game.c
diff -u debian/alsa-driver/pci/au88x0/au88x0_game.c:1.1.1.2 debian/alsa-driver/pci/au88x0/au88x0_game.c:removed
--- debian/alsa-driver/pci/au88x0/au88x0_game.c:1.1.1.2	Thu Oct 16 05:51:22 2003
+++ debian/alsa-driver/pci/au88x0/au88x0_game.c	Tue Apr 13 13:39:27 2004
@@ -1,131 +0,0 @@
-/*
- * au88x0_game.c,v 1.2 2003/10/16 11:51:22 tiwai Exp
- *
- *  Manuel Jander.
- *
- *  Based on the work of:
- *  Vojtech Pavlik
- *  Raymond Ingles
- *
- * 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.
- *
- * 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- * Should you need to contact me, the author, you can do so either by
- * e-mail - mail your message to <vojtech@suse.cz>, or by paper mail:
- * Vojtech Pavlik, Ucitelska 1576, Prague 8, 182 00 Czech Republic
- *
- * Based 90% on Vojtech Pavlik pcigame driver.
- * Merged and modified by Manuel Jander, for the OpenVortex
- * driver. (email: mjander@embedded.cl).
- */
-
-#include <sound/driver.h>
-#include <linux/time.h>
-#include <linux/init.h>
-#include <sound/core.h>
-#include "au88x0.h"
-#include <linux/gameport.h>
-
-#if defined(CONFIG_GAMEPORT) || (defined(MODULE) && defined(CONFIG_GAMEPORT_MODULE))
-
-#define VORTEX_GAME_DWAIT	20	/* 20 ms */
-
-struct au88x0_gameport {
-	struct gameport info;
-	vortex_t *chip;
-};
-
-static unsigned char vortex_game_read(struct gameport *gameport) {
-	struct au88x0_gameport *gp = (struct au88x0_gameport *)gameport;
-	vortex_t *vortex = gp->chip;
-	return hwread(vortex->mmio, VORTEX_GAME_LEGACY);
-}
-
-static void vortex_game_trigger(struct gameport *gameport) {
-	struct au88x0_gameport *gp = (struct au88x0_gameport *)gameport;
-	vortex_t *vortex = gp->chip;
-	hwwrite(vortex->mmio, VORTEX_GAME_LEGACY, 0xff);
-}
-
-static int vortex_game_cooked_read(struct gameport *gameport, int *axes, int *buttons) {
-	struct au88x0_gameport *gp = (struct au88x0_gameport *)gameport;
-	vortex_t *vortex = gp->chip;
-	int i;
-
-	*buttons = (~hwread(vortex->mmio, VORTEX_GAME_LEGACY) >> 4) & 0xf;
-
-	for (i = 0; i < 4; i++) {
-		axes[i] = hwread(vortex->mmio, VORTEX_GAME_AXIS + (i * AXIS_SIZE));
-		if (axes[i] == AXIS_RANGE) axes[i] = -1;
-	}
-	return 0;
-}
-
-static int vortex_game_open(struct gameport *gameport, int mode) {
-	struct au88x0_gameport *gp = (struct au88x0_gameport *)gameport;
-	vortex_t *vortex = gp->chip;
-
-	switch (mode) {
-		case GAMEPORT_MODE_COOKED:
-			hwwrite(vortex->mmio, VORTEX_CTRL2, hwread(vortex->mmio, VORTEX_CTRL2) | CTRL2_GAME_ADCMODE);
-			wait_ms(VORTEX_GAME_DWAIT);
-			return 0;
-		case GAMEPORT_MODE_RAW:
-			hwwrite(vortex->mmio, VORTEX_CTRL2, hwread(vortex->mmio, VORTEX_CTRL2) & ~CTRL2_GAME_ADCMODE);
-			return 0;
-		default:
-			return -1;
-	}
-
-	return 0;
-}
-
-int vortex_gameport_register(vortex_t *vortex) {
-
-	struct au88x0_gameport *gp;
-	gp = kmalloc(sizeof(*gp), GFP_KERNEL);
-	if (! gp)
-		return -ENOMEM;
-	memset(gp, 0, sizeof(*gp));
-	gp->chip = vortex;
-
-	vortex->gameport = &gp->info;
-	vortex->gameport->fuzz = 64;
-
-	vortex->gameport->read = vortex_game_read;
-	vortex->gameport->trigger = vortex_game_trigger;
-	vortex->gameport->cooked_read = vortex_game_cooked_read;
-	vortex->gameport->open = vortex_game_open;
-
-	gameport_register_port(vortex->gameport);
-
-/*	printk(KERN_INFO "gameport%d: %s at speed %d kHz\n",
-		vortex->gameport->number, vortex->pci_dev->name, vortex->gameport->speed);
-*/
-	return 0;
-}
-
-int vortex_gameport_unregister(vortex_t *vortex) {
-	if (vortex->gameport != NULL) {
-		gameport_unregister_port(vortex->gameport);
-		kfree(vortex->gameport);
-		vortex->gameport = NULL;
-	}
-	return 0;
-}
-
-#else /* GAMEPORT */
-int vortex_gameport_register(vortex_t *vortex) { return 0; }
-int vortex_gameport_unregister(vortex_t *vortex) { return 0; }
-#endif /* GAMEPORT */
Index: debian/alsa-driver/pci/au88x0/au88x0_mixer.c
diff -u debian/alsa-driver/pci/au88x0/au88x0_mixer.c:1.1.1.2 debian/alsa-driver/pci/au88x0/au88x0_mixer.c:removed
--- debian/alsa-driver/pci/au88x0/au88x0_mixer.c:1.1.1.2	Thu Oct 23 08:34:51 2003
+++ debian/alsa-driver/pci/au88x0/au88x0_mixer.c	Tue Apr 13 13:39:27 2004
@@ -1,28 +0,0 @@
-/*
- * Vortex Mixer support.
- *
- * There is much more than just the AC97 mixer...
- *
- */
-
-#include <sound/driver.h>
-#include <linux/time.h>
-#include <linux/init.h>
-#include <sound/core.h>
-#include "au88x0.h"
-
-int __devinit snd_vortex_mixer(vortex_t *vortex) {
-    ac97_bus_t bus, *pbus;
-    ac97_t ac97;
-    int err;
-	
-    memset(&bus, 0, sizeof(bus));
-    bus.write = vortex_codec_write;
-    bus.read = vortex_codec_read;
-    if ((err = snd_ac97_bus(vortex->card, &bus, &pbus)) < 0)
-        return err;
-    memset(&ac97, 0, sizeof(ac97));
-    // Intialize AC97 codec stuff.
-    ac97.private_data = vortex;
-    return snd_ac97_mixer(pbus, &ac97, &vortex->codec);
-}
Index: debian/alsa-driver/pci/au88x0/au88x0_mpu401.c
diff -u debian/alsa-driver/pci/au88x0/au88x0_mpu401.c:1.1.1.1 debian/alsa-driver/pci/au88x0/au88x0_mpu401.c:removed
--- debian/alsa-driver/pci/au88x0/au88x0_mpu401.c:1.1.1.1	Mon Oct  6 08:01:05 2003
+++ debian/alsa-driver/pci/au88x0/au88x0_mpu401.c	Tue Apr 13 13:39:27 2004
@@ -1,98 +0,0 @@
-/*
- *  Copyright (c) by Jaroslav Kysela <perex@suse.cz>
- *  Routines for control of MPU-401 in UART mode
- *
- *   Modified for the Aureal Vortex based Soundcards
- *   by Manuel Jander (mjande@embedded.cl).
- *
- *   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.
- *
- *   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 General Public License for more details.
- *
- *   You should have received a copy of the GNU General Public License
- *   along with this program; if not, write to the Free Software
- *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
- *
- */
-
-#include <sound/driver.h>
-#include <linux/time.h>
-#include <linux/init.h>
-#include <sound/core.h>
-#include <sound/mpu401.h>
-#include "au88x0.h"
-
-/* Check for mpu401 mmio support. */
-/* MPU401 legacy support is only provided as a emergency fallback *
- * for older versions of ALSA. Its usage is strongly discouraged. */
-#ifndef MPU401_HW_AUREAL
-#define VORTEX_MPU401_LEGACY
-#endif
-
-/* Vortex MPU401 defines. */
-#define MIDI_CLOCK_DIV      0x61
-/* Standart MPU401 defines. */
-#define MPU401_RESET		0xff
-#define MPU401_ENTER_UART	0x3f
-#define MPU401_ACK		    0xfe
-
-int __devinit snd_vortex_midi(vortex_t *vortex) {
-	snd_rawmidi_t *rmidi;
-	int temp, mode;
-    mpu401_t *mpu;
-    int port;
-
-#ifdef VORTEX_MPU401_LEGACY
-    /* EnableHardCodedMPU401Port() */
-    /* Enable Legacy MIDI Interface port. */
-    port  = (0x03 << 5); /* FIXME: static address. 0x330 */
-	temp = (hwread(vortex->mmio, VORTEX_CTRL) & ~CTRL_MIDI_PORT) | CTRL_MIDI_EN | port;
-	hwwrite(vortex->mmio, VORTEX_CTRL, temp);
-#else
-	/* Disable Legacy MIDI Interface port. */
-	temp = (hwread(vortex->mmio, VORTEX_CTRL) & ~CTRL_MIDI_PORT) & ~CTRL_MIDI_EN;
-	hwwrite(vortex->mmio, VORTEX_CTRL, temp);	
-#endif
-	/* Mpu401UartInit() */
-    mode = 1;
-	temp = hwread(vortex->mmio, VORTEX_CTRL2) & 0xffff00cf;
-	temp |= (MIDI_CLOCK_DIV << 8) | ((mode >> 24) & 0xff) << 4;
-	hwwrite(vortex->mmio, VORTEX_CTRL2, temp);
-	hwwrite(vortex->mmio, VORTEX_MIDI_CMD, MPU401_RESET);
-	/* Set some kind of mode */
-	if (mode)
-		hwwrite(vortex->mmio, VORTEX_MIDI_CMD, MPU401_ENTER_UART);
-
-	/* Check if anything is OK. */
-	temp = hwread(vortex->mmio, VORTEX_MIDI_DATA);
-	if (temp != MPU401_ACK /*0xfe*/) {
-		printk(KERN_ERR "midi port doesn't acknowledge!\n");
-		return -ENODEV;
-	}
-	/* Enable MPU401 interrupts. */
-	hwwrite(vortex->mmio, VORTEX_IRQ_CTRL, hwread(vortex->mmio, VORTEX_IRQ_CTRL) | IRQ_MIDI);
-
-    /* Create MPU401 instance. */
-#ifdef VORTEX_MPU401_LEGACY
-    if ((temp = snd_mpu401_uart_new(vortex->card, 0, MPU401_HW_MPU401, 0x330, 0, 0, 0, &rmidi)) != 0) {
-	    hwwrite(vortex->mmio, VORTEX_CTRL, (hwread(vortex->mmio, VORTEX_CTRL) & ~CTRL_MIDI_PORT) & ~CTRL_MIDI_EN);
-        return temp;
-    }
-#else
-    port = (unsigned long)(vortex->mmio + (VORTEX_MIDI_DATA >> 2));
-    if ((temp = snd_mpu401_uart_new(vortex->card, 0, MPU401_HW_AUREAL, port, 1, 0, 0, &rmidi)) != 0) {
-	    hwwrite(vortex->mmio, VORTEX_CTRL, (hwread(vortex->mmio, VORTEX_CTRL) & ~CTRL_MIDI_PORT) & ~CTRL_MIDI_EN);
-        return temp;
-    }
-    mpu = snd_magic_cast(mpu401_t, rmidi->private_data, return -ENOMEM);
-    mpu->cport = (unsigned long)(vortex->mmio + (VORTEX_MIDI_CMD >> 2));
-#endif
-    vortex->rmidi = rmidi;
-	return 0;
-}
Index: debian/alsa-driver/pci/au88x0/au88x0_pcm.c
diff -u debian/alsa-driver/pci/au88x0/au88x0_pcm.c:1.1.1.1 debian/alsa-driver/pci/au88x0/au88x0_pcm.c:removed
--- debian/alsa-driver/pci/au88x0/au88x0_pcm.c:1.1.1.1	Mon Oct  6 08:01:05 2003
+++ debian/alsa-driver/pci/au88x0/au88x0_pcm.c	Tue Apr 13 13:39:27 2004
@@ -1,417 +0,0 @@
-/*
- * Vortex PCM ALSA driver.
- *
- * Supports ADB and WT DMA. Unfortunately, WT routing is still a
- * mistery. To discover that, we need to disassemble the windoze
- * driver too.
- *
- *
- */
-
-#include <sound/driver.h>
-#include <linux/time.h>
-#include <sound/core.h>
-#include <sound/pcm.h>
-#include <sound/pcm_params.h>
-#include "au88x0.h"
-
-#define chip_t vortex_t
-#define VORTEX_PCM_TYPE(x) (x->name[40])
-
-/* hardware definition */
-static snd_pcm_hardware_t snd_vortex_playback_hw_adb = {
-    .info = (SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_RESUME| SNDRV_PCM_INFO_PAUSE |
-             SNDRV_PCM_INFO_INTERLEAVED | SNDRV_PCM_INFO_MMAP_VALID),
-    .formats = SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_U8 |
-             SNDRV_PCM_FMTBIT_MU_LAW | SNDRV_PCM_FMTBIT_A_LAW,
-    .rates = SNDRV_PCM_RATE_CONTINUOUS,
-    .rate_min = 5000,
-    .rate_max = 48000,
-    .channels_min = 1,
-#ifdef CHIP_AU8830
-    .channels_max = 4,
-#else
-	.channels_max = 2,
-#endif
-    .buffer_bytes_max = 0x10000,
-    .period_bytes_min = 0x100,
-    .period_bytes_max = 0x1000,
-    .periods_min = 1,
-    .periods_max = 64,
-};
-static snd_pcm_hardware_t snd_vortex_playback_hw_spdif = {
-    .info = (SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_RESUME| SNDRV_PCM_INFO_PAUSE |
-             SNDRV_PCM_INFO_INTERLEAVED | SNDRV_PCM_INFO_MMAP_VALID),
-    .formats = SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_U8 |
-             SNDRV_PCM_FMTBIT_IEC958_SUBFRAME_LE | SNDRV_PCM_FMTBIT_MU_LAW | 
-             SNDRV_PCM_FMTBIT_A_LAW,
-    .rates = SNDRV_PCM_RATE_32000 | SNDRV_PCM_RATE_44100 | SNDRV_PCM_RATE_48000,
-    .rate_min = 32000,
-    .rate_max = 48000,
-    .channels_min = 1,
-	.channels_max = 2,
-    .buffer_bytes_max = 0x10000,
-    .period_bytes_min = 0x100,
-    .period_bytes_max = 0x1000,
-    .periods_min = 1,
-    .periods_max = 64,
-};
-
-#ifndef CHIP_AU8810
-static snd_pcm_hardware_t snd_vortex_playback_hw_wt = {
-    .info = (SNDRV_PCM_INFO_MMAP |
-             SNDRV_PCM_INFO_INTERLEAVED |
-             SNDRV_PCM_INFO_BLOCK_TRANSFER | SNDRV_PCM_INFO_MMAP_VALID),
-    .formats = SNDRV_PCM_FMTBIT_S16_LE,
-    .rates = SNDRV_PCM_RATE_8000_48000 | SNDRV_PCM_RATE_CONTINUOUS, // SNDRV_PCM_RATE_48000,
-    .rate_min = 8000,
-    .rate_max = 48000,
-    .channels_min = 1,
-    .channels_max = 2,
-    .buffer_bytes_max = 0x10000,
-    .period_bytes_min = 0x0400,
-    .period_bytes_max = 0x1000,
-    .periods_min = 1,
-    .periods_max = 64,
-};
-#endif
-/* open callback */
-static int snd_vortex_pcm_open(snd_pcm_substream_t *substream) {
-	vortex_t *vortex = snd_pcm_substream_chip(substream);
-    snd_pcm_runtime_t *runtime = substream->runtime;
-	int err;
-	
-	/* Force equal size periods */
-	if ((err = snd_pcm_hw_constraint_integer(runtime, SNDRV_PCM_HW_PARAM_PERIODS)) < 0)
-    	return err;
-	/* Force DMA 32 bit alignment */
-	if ((err = snd_pcm_hw_constraint_step(runtime, 0, SNDRV_PCM_HW_PARAM_PERIOD_BYTES, 4)) < 0)
-    	return err;
-	
-    if (VORTEX_PCM_TYPE(substream->pcm) != VORTEX_PCM_WT) {
-		if (VORTEX_PCM_TYPE(substream->pcm) == VORTEX_PCM_SPDIF) {
-			runtime->hw = snd_vortex_playback_hw_spdif;
-			switch (vortex->spdif_sr) {
-				case 32000:
-					runtime->hw.rates = SNDRV_PCM_RATE_32000;
-					break;
-				case 44100:
-					runtime->hw.rates = SNDRV_PCM_RATE_44100;
-					break;
-				case 48000:
-					runtime->hw.rates = SNDRV_PCM_RATE_48000;
-					break;
-			}
- 		} else
-			runtime->hw = snd_vortex_playback_hw_adb;
-		substream->runtime->private_data = NULL;
-    } 
-#ifndef CHIP_AU8810
-	else {
-		runtime->hw = snd_vortex_playback_hw_wt;
-		substream->runtime->private_data = NULL;
-    }
-#endif	
-    return 0;
-}
-
-/* close callback */
-static int snd_vortex_pcm_close(snd_pcm_substream_t *substream) {
-    //vortex_t *chip = snd_pcm_substream_chip(substream);
-	stream_t *stream = (stream_t*)substream->runtime->private_data;
-	
-    // the hardware-specific codes will be here
-	if (stream != NULL) {
-    	stream->substream = NULL;
-		stream->nr_ch = 0;
-	}
-    substream->runtime->private_data = NULL;
-    return 0;
-}
-
-/* hw_params callback */
-static int snd_vortex_pcm_hw_params(snd_pcm_substream_t *substream, snd_pcm_hw_params_t *hw_params) {
-	chip_t *chip = snd_pcm_substream_chip(substream);
-	snd_pcm_runtime_t *runtime = substream->runtime;
-	stream_t *stream = (stream_t*)(substream->runtime->private_data);
-	int err;
-
-	// Alloc buffer memory.
-	err = snd_pcm_lib_malloc_pages(substream, params_buffer_bytes(hw_params));
-	if (err < 0) {
-		printk(KERN_ERR "Vortex: pcm page alloc failed!\n");
-		return err;
-	}
-	/*
-	printk(KERN_INFO "Vortex: periods %d, period_bytes %d, channels = %d\n", params_periods(hw_params),
-        	params_period_bytes(hw_params), params_channels(hw_params));
-	*/
-	// Make audio routes and config buffer DMA.
-	if (VORTEX_PCM_TYPE(substream->pcm) != VORTEX_PCM_WT) {
-		int dma, type = VORTEX_PCM_TYPE(substream->pcm);
-		/* Dealloc any routes. */
-		if (stream != NULL)
-			vortex_adb_allocroute(chip, stream->dma, stream->nr_ch, stream->dir, stream->type);
-		/* Alloc routes. */
-		dma = vortex_adb_allocroute(chip, -1, params_channels(hw_params), substream->stream, type);
-		if (dma < 0)
-			return dma;
-		stream = substream->runtime->private_data = &chip->dma_adb[dma];
-		stream->substream = substream;
-		/* Setup Buffers. */
-		vortex_adbdma_setbuffers(chip, dma, (u32)(runtime->dma_addr), params_period_bytes(hw_params), params_periods(hw_params));
-	}
-#ifndef CHIP_AU8810
-	else {
-		if (stream != NULL)
-			vortex_wt_allocroute(chip, substream->number, 0);
-		vortex_wt_allocroute(chip, substream->number, params_channels(hw_params));
-		stream = substream->runtime->private_data = &chip->dma_wt[substream->number];
-		stream->substream = substream;
-		vortex_wtdma_setbuffers(chip, substream->number, (u32)(runtime->dma_addr), params_period_bytes(hw_params), params_periods(hw_params));
-	}
-#endif
-	return 0;
-}
-
-/* hw_free callback */
-static int snd_vortex_pcm_hw_free(snd_pcm_substream_t *substream) {
-    chip_t *chip = snd_pcm_substream_chip(substream);
-	stream_t *stream = (stream_t*)(substream->runtime->private_data);
-	
-    // Delete audio routes.
-	if (VORTEX_PCM_TYPE(substream->pcm) != VORTEX_PCM_WT) {
-		if (stream != NULL)
-        	vortex_adb_allocroute(chip, stream->dma, stream->nr_ch, stream->dir, stream->type);
-	}
-#ifndef CHIP_AU8810
-	else {
-		if (stream != NULL)
-        	vortex_wt_allocroute(chip, stream->dma, 0);	
-	}
-#endif
-	substream->runtime->private_data = NULL;
-
-    return snd_pcm_lib_free_pages(substream);
-}
-
-/* prepare callback */
-static int snd_vortex_pcm_prepare(snd_pcm_substream_t *substream) {
-    vortex_t *chip = snd_pcm_substream_chip(substream);
-    snd_pcm_runtime_t *runtime = substream->runtime;
-    stream_t *stream = (stream_t*)substream->runtime->private_data;
-	int dma = stream->dma, fmt, dir;
-
-    // set up the hardware with the current configuration.
-	if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
-		dir = 1;
-	else
-		dir = 0;
-    fmt = vortex_alsafmt_aspfmt(runtime->format);
-	if (VORTEX_PCM_TYPE(substream->pcm) != VORTEX_PCM_WT) {
-        vortex_adbdma_setmode(chip, dma, 1, dir, fmt, 0/*?*/, 0);
-        vortex_adbdma_setstartbuffer(chip, dma, 0);
-		if (VORTEX_PCM_TYPE(substream->pcm) != VORTEX_PCM_SPDIF)
-        	vortex_adb_setsrc(chip, dma, runtime->rate, dir);
-	}
-#ifndef CHIP_AU8810
-	else {
-        vortex_wtdma_setmode(chip, dma, 1, dir, fmt, 0, 0);
-        // FIXME: Set rate (i guess using vortex_wt_writereg() somehow).
-        vortex_wtdma_setstartbuffer(chip, dma, 0);
-    }
-#endif
-    return 0;
-}
-
-/* trigger callback */
-static int snd_vortex_pcm_trigger(snd_pcm_substream_t *substream, int cmd) {
-    chip_t *chip = snd_pcm_substream_chip(substream);
-    stream_t *stream = (stream_t*)substream->runtime->private_data;
-	int dma = stream->dma;
-	
-    switch (cmd) {
-    case SNDRV_PCM_TRIGGER_START:
-        // do something to start the PCM engine
-        //printk(KERN_INFO "vortex: start %d\n", dma);
-		if (VORTEX_PCM_TYPE(substream->pcm) != VORTEX_PCM_WT) {
-            stream->fifo_enabled = 1;
-            vortex_adbdma_startfifo(chip, dma);
-        } 
-#ifndef CHIP_AU8810		
-		else {
-            stream->fifo_enabled = 1;
-            vortex_wtdma_startfifo(chip, dma);
-        }
-#endif
-    	break;
-    case SNDRV_PCM_TRIGGER_STOP:
-        // do something to stop the PCM engine
-        //printk(KERN_INFO "vortex: stop %d\n", dma)
-		if (VORTEX_PCM_TYPE(substream->pcm) != VORTEX_PCM_WT) {
-            stream->fifo_enabled = 0;
-            vortex_adbdma_stopfifo(chip, dma);
-        }
-#ifndef CHIP_AU8810
-        else {
-            stream->fifo_enabled = 0;
-            vortex_wtdma_stopfifo(chip, dma);
-        }
-#endif
-        break;
-    case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
-        //printk(KERN_INFO "vortex: pause %d\n", dma);
-		if (VORTEX_PCM_TYPE(substream->pcm) != VORTEX_PCM_WT)
-            vortex_adbdma_pausefifo(chip, dma);
-#ifndef CHIP_AU8810
-        else
-            vortex_wtdma_pausefifo(chip, dma);
-#endif
-        break;
-    case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
-        //printk(KERN_INFO "vortex: resume %d\n", dma);
-		if (VORTEX_PCM_TYPE(substream->pcm) != VORTEX_PCM_WT)
-            vortex_adbdma_resumefifo(chip, dma);
-#ifndef CHIP_AU8810
-        else
-            vortex_wtdma_resumefifo(chip, dma);
-#endif
-        break;
-    default:
-        return -EINVAL;
-    }
-    return 0;
-}
-
-/* pointer callback */
-static snd_pcm_uframes_t snd_vortex_pcm_pointer(snd_pcm_substream_t *substream) {
-    vortex_t *chip = snd_pcm_substream_chip(substream);
-    stream_t *stream = (stream_t*)substream->runtime->private_data;
-	int dma = stream->dma;
-    snd_pcm_uframes_t current_ptr = 0;
-
-	spin_lock(&chip->lock);
-	if (VORTEX_PCM_TYPE(substream->pcm) != VORTEX_PCM_WT)
-        current_ptr = vortex_adbdma_getlinearpos(chip, dma);
-#ifndef CHIP_AU8810
-    else
-        current_ptr = vortex_wtdma_getlinearpos(chip, dma);
-#endif
-    //printk(KERN_INFO "vortex: pointer = 0x%x\n", current_ptr);
-	spin_unlock(&chip->lock);
-    return (bytes_to_frames(substream->runtime, current_ptr));
-}
-
-/* operators */
-static snd_pcm_ops_t snd_vortex_playback_ops = {
-    .open = snd_vortex_pcm_open,
-    .close = snd_vortex_pcm_close,
-    .ioctl = snd_pcm_lib_ioctl,
-    .hw_params = snd_vortex_pcm_hw_params,
-    .hw_free = snd_vortex_pcm_hw_free,
-    .prepare = snd_vortex_pcm_prepare,
-    .trigger = snd_vortex_pcm_trigger,
-    .pointer = snd_vortex_pcm_pointer,
-    //.page = snd_pcm_sgbuf_ops_page,
-};
-
-/*
-*  definitions of capture are omitted here...
-*/
-
-static char *vortex_pcm_prettyname[VORTEX_PCM_LAST] = {
-	"AU88x0 ADB",
-	"AU88x0 SPDIF",
-	"AU88x0 I2S",
-	"AU88x0 A3D",
-	"AU88x0 WT",
-};
-static char *vortex_pcm_name[VORTEX_PCM_LAST] = {
-	"adb",
-	"spdif",
-	"i2s",
-	"a3d",
-	"wt",
-};
-
-/* SPDIF kcontrol */
-static int snd_vortex_spdif_info(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t *uinfo) {
-	static char *texts[] = { "32000", "44100", "48000"};
-
-	uinfo->type = SNDRV_CTL_ELEM_TYPE_ENUMERATED;
-	uinfo->count = 1;
-	uinfo->value.enumerated.items = 3;
-	if (uinfo->value.enumerated.item >= uinfo->value.enumerated.items)
-		uinfo->value.enumerated.item = uinfo->value.enumerated.items - 1;
-	strcpy(uinfo->value.enumerated.name, texts[uinfo->value.enumerated.item]);
-	return 0;
-}
-static int snd_vortex_spdif_get(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol) {
-	vortex_t *vortex = snd_kcontrol_chip(kcontrol);
-	
-	if (vortex->spdif_sr == 32000)
-		ucontrol->value.enumerated.item[0]=0;
-	if (vortex->spdif_sr == 44100)
-		ucontrol->value.enumerated.item[0]=1;
-	if (vortex->spdif_sr == 48000)
-		ucontrol->value.enumerated.item[0]=2;
-	return 0;
-}
-static int snd_vortex_spdif_put(snd_kcontrol_t * kcontrol, snd_ctl_elem_value_t * ucontrol) {
-	vortex_t * vortex = snd_kcontrol_chip(kcontrol);
-	static unsigned int sr[3] = {32000, 44100, 48000};
-	
-	//printk("vortex: spdif sr = %d\n", ucontrol->value.enumerated.item[0]);
-	vortex->spdif_sr = sr[ucontrol->value.enumerated.item[0] % 3];
-	vortex_spdif_init(vortex, sr[ucontrol->value.enumerated.item[0] % 3], 1);
-	return 1;
-}
-static snd_kcontrol_new_t vortex_spdif_kcontrol __devinitdata = {
-	.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
-	.name = "SPDIF SR",
-	.index = 0,
-	.access = SNDRV_CTL_ELEM_ACCESS_READWRITE,
-	.private_value = 0,
-	.info = snd_vortex_spdif_info,
-	.get = snd_vortex_spdif_get,
-	.put = snd_vortex_spdif_put
-};
-
-/* create a pcm device */
-int __devinit snd_vortex_new_pcm(vortex_t *chip, int idx, int nr) {
-    snd_pcm_t *pcm;
-    int err, nr_capt;
-	//static int __devinit pcm_idx=0;
-    if ((chip == 0)||(idx < 0)||(idx>VORTEX_PCM_LAST))
-        return -ENODEV;
-
-	/* idx indicates which kind of PCM device. ADB, SPDIF, I2S and A3D share the 
-	 * same dma engine. WT uses it own separate dma engine whcih cant capture. */
-	if (idx == VORTEX_PCM_WT)
-		nr_capt = 0;
-	else
-		nr_capt = nr;
-	if ((err = snd_pcm_new(chip->card, vortex_pcm_prettyname[idx], idx, nr, nr_capt, &pcm)) < 0)
-    	return err;
-	strcpy(pcm->name, vortex_pcm_name[idx]);
-	chip->pcm[idx] = pcm;
-	// This is an evil hack, but it saves a lot of duplicated code.
-	VORTEX_PCM_TYPE(pcm) = idx;
-    pcm->private_data = chip;
-    /* set operators */
-    snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_PLAYBACK, &snd_vortex_playback_ops);
-    if (idx == VORTEX_PCM_ADB)
-    	snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_CAPTURE, &snd_vortex_playback_ops);
-    /* pre-allocation of buffers */
-    snd_pcm_lib_preallocate_pci_pages_for_all(chip->pci_dev, pcm, 0x10000, 0x10000);
-
-	if (VORTEX_PCM_TYPE(pcm) == VORTEX_PCM_SPDIF) {
-		snd_kcontrol_t *kcontrol;
-		
-		if ((kcontrol = snd_ctl_new1(&vortex_spdif_kcontrol, chip)) == NULL)
-			return -ENOMEM;
-		if ((err = snd_ctl_add(chip->card, kcontrol)) < 0)
-			return err;
-	}
-    return 0;
-}
Index: debian/alsa-driver/pci/au88x0/au88x0_synth.c
diff -u debian/alsa-driver/pci/au88x0/au88x0_synth.c:1.1.1.1 debian/alsa-driver/pci/au88x0/au88x0_synth.c:removed
--- debian/alsa-driver/pci/au88x0/au88x0_synth.c:1.1.1.1	Mon Oct  6 08:01:05 2003
+++ debian/alsa-driver/pci/au88x0/au88x0_synth.c	Tue Apr 13 13:39:27 2004
@@ -1,2256 +0,0 @@
-/*
- * Someday its supposed to make use of the WT DMA engine
- * for a Wavetable synthesizer.
- */
-#include "au88x0.h"
-
-void vortex_fifo_setwtvalid(vortex_t *vortex, int fifo, int en);
-void vortex_connection_adb_mixin(vortex_t *vortex, int en, unsigned char channel,
-    unsigned char source, unsigned char mixin);
-void vortex_connection_mixin_mix(vortex_t *vortex, int en, unsigned char mixin, unsigned char mix, int a);
-void vortex_fifo_wtinitialize(vortex_t *vortex, int fifo, int j);
-
-/* WT */
-
-void vortex_wt_setstereo(vortex_t *vortex, u32 wt, u32 stereo) {
-	int temp;
-	
-	temp = hwread(vortex->mmio, 0x80 + ((wt >> 0x5)<< 0xf) + (((wt & 0x1f) >> 1) << 2));
-	temp = (temp & 0xfe) | (stereo & 1);
-	hwwrite(vortex->mmio, 0x80 + ((wt >> 0x5)<< 0xf) + (((wt & 0x1f) >> 1) << 2), temp);
-}
-
-void vortex_wt_setdsout(vortex_t *vortex, u32 wt, int en) {
-#ifndef CHIP_AU8820
-	int temp;
-
-	temp = hwread(vortex->mmio, ((wt >> 0x5)<< 0xf) + 0x8);
-	if (en)
-		temp |= (1 << (wt & 0x1f));
-	else
-		temp &= (1 << ~(wt & 0x1f));
-	hwwrite(vortex->mmio, ((wt >> 0x5)<< 0xf) + 0x8, temp);
-#endif
-}
-
-// WT routing is still a mistery.
-int  vortex_wt_allocroute(vortex_t *vortex, int dma, int nr_ch) {
-    //FIXME: WT audio routing.
-	if (nr_ch) {
-		vortex_fifo_wtinitialize(vortex, dma, 1);
-		vortex_wt_setstereo(vortex, dma, nr_ch-1);
-	} else
-		vortex_fifo_setwtvalid(vortex, dma, 0);
-	vortex_wt_setdsout(vortex, dma, 1);
-    return 0;
-}
-void vortex_wt_connect(vortex_t *vortex, int en, unsigned char mixers[]) {
-	
-	vortex->mixwt[0] = vortex_adb_checkinout(vortex, vortex->fixed_res, en, VORTEX_RESOURCE_MIXIN);
-	vortex->mixwt[1] = vortex_adb_checkinout(vortex, vortex->fixed_res, en, VORTEX_RESOURCE_MIXIN);
-	
-	vortex_connection_adb_mixin(vortex, en, 0x11, ADB_WTOUT(0), vortex->mixwt[0]);
-	vortex_connection_adb_mixin(vortex, en, 0x11, ADB_WTOUT(1), vortex->mixwt[1]);
-	vortex_connection_mixin_mix(vortex, en, vortex->mixwt[0], mixers[0], 0);
-	vortex_connection_mixin_mix(vortex, en, vortex->mixwt[1], mixers[1], 0);
-	if (VORTEX_IS_QUAD(vortex)) {
-		vortex_connection_mixin_mix(vortex, en, vortex->mixwt[0], mixers[2], 0);
-		vortex_connection_mixin_mix(vortex, en, vortex->mixwt[1], mixers[3], 0);		
-	}
-}
-
-/* Read WT Register */
-int  vortex_wt_GetReg(vortex_t *vortex, char a, int *b) {
-	int eax, esi;
-	
-	if (a != 4) {
-		if (a == 7)
-			return 0;
-		return hwread(vortex->mmio, (*b << 0xf) + 0x10);
-	}
-	esi = b[1];
-	eax = ((((a & 0x1f) + b[1]) / 32) & 0xff) << 0xb;
-	if (esi < 0)
-		esi = ((esi-1)|0x0FFFFFFE0)+1;
-	esi &= 0xff;
-	hwread(vortex->mmio, ((eax + esi) << 4) + 0x20c);
-		
-	return 8;
-}
-
-/*
- WT hardware abstraction layer generic register interface.
- a: type of register or register set to be accessed.
- b: Register offset
- c: Register value (or values) to be written.
-*/
-int  vortex_wt_SetReg2(vortex_t *vortex, unsigned char a, int b, unsigned short c) {
-	int eax, edx;
-	
-	if (b >= NR_WT)  // 0x40 -> NR_WT
-		return 0;
-	
-	/* cdq: 64 bit sign extender */
-	eax = b;
-	if (eax<0)
-		edx = 0xffffffff & 0x1f;
-	else
-		edx = 0;
-	eax += edx;
-	edx = b & 0x8000001f;
-	eax = (eax / 32) | ((char)b);
-	if (eax < 0)
-		edx = ((edx-1)|0x0FFFFFFE0)+1;
-	
-	// esp+4 = edx & 0xff
-	
-	if ((eax & 0xff) >= 2)
-		return 0;
-	
-	if ((a & 0xff) - 0x20) {
-		if ((a & 0xff) - 0x21) 
-			return 0;
-		eax = ((((b & 0xff) << 0xb) + (edx & 0xff)) << 4) + 0x208;
-	} else {
-		eax = ((((b & 0xff) << 0xb) + (edx & 0xff)) << 4) + 0x20a;
-	}
-	hwwrite(vortex->mmio, eax, c);
-	return 1;
-}
-
-
-/*public: void __thiscall CWTHal::SetReg(unsigned char,int,unsigned long) */
-int  vortex_wt_SetReg(vortex_t *vortex, unsigned char a, int b, unsigned long c) {
-	// a : type
-	// b : voice
-	// c : data
-	
-	int  ecx, edx, esp4, eax;
-	
-	if (b >= NR_WT)  // 0x40 -> NR_WT
-		return 0;
-
-#if 0 //original_code	
-	eax = ecx = b;
-	/* cdq: 64 bit sign extender */
-	if (eax<0)
-		edx = 0xffffffff;
-	else
-		edx = 0;
-	eax += edx  & 0x1f;
-	edx = ecx & 0x8000001f;
-	eax = (eax / 32) | ((char)b);
-	// This "if" semes to be useless ...
-	if (eax < 0)
-		edx = ((edx-1)|0x0FFFFFFE0)+1;
-	
-	esp4 = (char)edx;
-	
-	// eax is the WT bank. AU8830 has 2 banks: 0 and 1.
-	if ((char)eax >= 2)
-		return 0;
-	
-#else //rewritting_code
-	esp4 = b & 0x1f;
-	b = b >> 5;
-	
-#endif
-	
-	if (a > 0xc)
-		return 0;
-	
-	switch (a) {
-		case 0 :
-			eax = ((b << 0xd) + esp4) << 2;
-			hwwrite(vortex->mmio, 0x180 + eax, c);
-			return 0xc;
-		break;
-		case 1 :
-			edx = ((b & 0xff) << 0xb) + (esp4 & 0xff);
-			hwwrite(vortex->mmio, 0x20 + (edx << 4), c);
-			return 0xc;			
-		break;
-		case 2 :
-			eax = ((b & 0xff) << 0xb) + (esp4 & 0xff);
-			hwwrite(vortex->mmio, 0x204 + (eax << 4), c);
-			return 0xc;
-		break;
-		case 3 :
-			eax = ((b & 0xff) << 0xb) + (esp4 & 0xff);
-			hwwrite(vortex->mmio, 0x208 + (eax << 4), c);
-			return 0xc;
-		break;
-		case 4 :
-			eax = ((b & 0xff) << 0xb) + (esp4 & 0xff);
-			hwwrite(vortex->mmio, 0x20c + (eax << 4), c);
-			return 0xc;
-		break;
-		case 6 :
-			edx = ((b & 0xff) << 0xd) + (esp4 & 0xff);
-			hwwrite(vortex->mmio, 0x100 + (edx << 2), c);
-			return 0xc;			
-		break;
-		case 0xb : 
-			{
-				int ebx, esi;
-				// FIXME: Here is something wrong ... (check admaud30.asm)
-				edx = ((b & 0xff) << 0xb) + (esp4 & 0xff);
-				ebx = b + esp4;
-				esi = ebx << 4;
-				
-				hwwrite(vortex->mmio, 0x40c + esi, c);
-				hwwrite(vortex->mmio, 0x408 + esi, c);
-				hwwrite(vortex->mmio, 0x404 + esi, c);
-				hwwrite(vortex->mmio, 0x400 + esi, c);
-				return 0xc;			
-			}
-		break;
-		case 5 :
-			ecx = (b << 0xf) + 0x4;
-		break;
-		case 8 :
-			ecx = (b << 0xf) + 0x14;
-		break;
-		case 9 :
-			ecx = (b << 0xf) + 0xc;
-		break;
-		case 0xa :
-			ecx = (b << 0xf) + 0x0;
-		break;
-		case 0xc :
-			ecx = (b << 0xf) + 0x8;
-		break;
-		default:
-			return 0;
-		break;
-	}
-	eax = ecx;
-	hwwrite(vortex->mmio, eax, c);
-	return 1;
-}
-
-void vortex_wt_WriteReg(vortex_t *vortex, int wt, char addr, int data) {
-	hwwrite(vortex->mmio, ((wt << 0xf) + wt) + addr, data);
-}
-void vortex_wt_ReadReg(vortex_t *vortex, int wt, char addr, int *data) {
-	*data = hwread(vortex->mmio, ((wt << 0xf) + wt) + addr);
-}
-
-void vortex_wt_InitializeWTRegs(vortex_t * vortex) {
-	int ebx=0, var4, var8, varc, var10=0, edi;
-	
-	var10 &= 0xe3;
-	var10 |= 0x22;
-	var10 &= 0xFFFFFEBF;
-	var10 |= 0x80;
-	var10 |= 0x2;
-	var10 &= 0xfffffffe;
-	var10 &= 0xfffffffb;
-	var10 |= 0x18;
-	var4 = 0x10000000;
-	varc = 0x00830000;
-	var8 = 0x00830000;
-	
-	for (edi=0; edi<2; edi++) {
-		vortex_wt_SetReg(vortex, 0xc, edi, ebx);
-		vortex_wt_SetReg(vortex, 0xa, edi, var10);
-		vortex_wt_SetReg(vortex, 0x9, edi, var4);
-		vortex_wt_SetReg(vortex, 0x8, edi, varc);
-		vortex_wt_SetReg(vortex, 0x5, edi, var8);
-	}
-	
-	for (edi=0; edi<NR_WT; edi++)  {
-		vortex_wt_SetReg(vortex, 0x4, edi, ebx);
-		vortex_wt_SetReg(vortex, 0x3, edi, ebx);
-		vortex_wt_SetReg(vortex, 0x2, edi, ebx);
-		vortex_wt_SetReg(vortex, 0x1, edi, ebx);
-		vortex_wt_SetReg(vortex, 0xb, edi, ebx);
-	}
-	var10 |= 1;
-	for (edi=0; edi<2; edi++)
-		vortex_wt_SetReg(vortex, 0xa, edi, var10);
-}
-/* Extract of CAdbTopology::SetVolume(struct _ASPVOLUME *) */
-void vortex_wt_SetVolume(vortex_t *vortex, int wt, int a, int vol[]) {
-	int x=0, y=0;
-	// CAdbTopology->this_1E4, CAdbTopology->this_1E8
-	vortex_wt_WriteReg(vortex, wt, 0x200 + (a<<4), (x & 0xff) << 0x10);
-	vortex_wt_WriteReg(vortex, wt, 0x204 + (a<<4), ((x & 0xff) << 0x10) | 1);
-	// In this case x semes to a set of 7 bit values.
-	// y = CAdbTopology->this_1F0
-	vortex_wt_WriteReg(vortex, wt, 0x20c + (a<<4), y);	
-}
-
-/* The rest of this file is only for information purpose. */
-#if 0
-void Asp4SynthTopology::Asp4SynthTopology(class	CResource * res, class Asp4Topology * asp) {
-	this00 = res;
-	this04 = asp;
-	
-	this08 = 0xff; // MixIn 0x65
-	this0c = 0xff; // MixIn 0x66
-	this10 = 0xff; // MixIn 0x67
-	this14 = 0xff; // MixIn 0x68
-	this18 = 0xff; // MixIn 0x6b
-	this1c = 0xff; // MixIn 0x6c
-	this20 = 0xff; // MixIn 0x6d
-	this24 = 0xff; // MixIn 0x6e
-	this28 = 0xff; // MixIn 0x6f
-	this2c = 0xff; // MixIn 0x70
-	this30 = 0; // MixOut 0x8b
-	this34 = 0; // MixOut 0x8c
-	this38 = 0; // MixOut 0x81
-	this3c = 0; // MixOut 0x82
-	this40 = 0; // MixOut 0x8f
-	this44 = 0; // MixOut 0x90
-	this48 = 0;
-	this4c = 0;
-	this50 = 0; // ADB DMA
-	this54 = 0; // ADB DMA
-	this58 = 0;
-	this5c = 0;
-	this60 = 0;
-	this64 = 0;
-	thisa0 = 0;
-	
-	//GetMixObject@CResource@@QAEJW4_eReservedFor@@PAPAVCAsp4Mix@@K@
-}
-
-void Asp4SynthTopology::Create(int a, int b, int c, int d) {
-	
-	eax = Asp4SynthTopology::GetMixerResources(a, b)
-	if (eax == 0)
-		return eax;
-	if ((a==0)||(b==0))
-		return eax;
-	/* Here goes a condition thats allways true ... */
-	if (eax) {
-		eax = _OsLibAllocate@12(0x4000, 0, 0x46425846, 8);
-		*esi = eax;
-		eax = __imp__IoAllocateMdl@20(eax, 0x4000, 0,0,0);
-		*(esi + 4) = eax;
-		__imp__MmBuildMdlForNonPagedPool@4(eax);
-	} else
-		esi = 0;
-	this_60 = esi;
-	if (esi == 0)
-		return eax;
-	CResource = this_00;
-	eax = CResource::GetAdbDmaObject(&this_50, 2);
-	if (eax == 0)
-		return 0;
-	esi = operator new(8);
-	if (esi) {
-		eax = _OsLibAllocate@12(0x4000, 0, 0x46425846, 8);
-		*esi = eax;
-		eax = __imp__IoAllocateMdl@20(eax, 0x4000, 0,0,0);
-		*(esi + 4) = eax;
-		__imp__MmBuildMdlForNonPagedPool@4(eax);
-	} else
-		esi = 0;
-	this_64 = esi;
-	if (esi == 0)
-		return eax;
-	CResource = this_00;
-	eax = CResource::GetAdbDmaObject(&this_54, 2);
-	if (eax == 0)
-		return 0;
-	return 1;
-}
-
-void ~Asp4SynthTopology(void) {
-	
-	asp = this04;
-	edi = asp->this74; /* CAsp4HwIO */
-	asp->this9c = 0x3e8;
-	
-	if (this38  && (this08 != 0xff))
-		asp->this64 = ReadDWORD(VORTEX_WT_BASE + ((this38->this08 << 5)+this08)<<2) & 0xff;
-	 (0x420 << 7)
-	if (this3c  && (this0c != 0xff))
-		asp->this68 = ReadDWORD(VORTEX_WT_BASE + ((this3c->this08 << 5)+this0c)<<2) & 0xff;
-	
-	if (this08 != 0xff) {
-#ifdef CHIP_AU8830
-		Route(0, 0x11, 0x62, this08 + 0x50);
-#elifdef CHIP_AU8820
-		Route(0, 0x11, 0x00, this08);
-#endif
-		if (this38)
-			DisableInput(this38, this08, 0);
-		if (this40)
-			DisableInput(this40, this08, 0);
-	}
-	if (this0c != 0xff) {
-#ifdef CHIP_AU8830
-		Route(0, 0x11, 0x62, this0c + 0x50);
-#elifdef CHIP_AU8820
-		Route(0, 0x11, 0x00, this0c);
-#endif
-		if (this3c)
-			DisableInput(this3c, this0c, 0);
-		if (this44)
-			DisableInput(this44, this0c, 0);
-	}
-#ifdef CHIP_AU8830
-	if (this18 != 0xff) {
-		Route(0, 0x11, 0xA2, this18 + 0x50);
-		if (this38)
-			DisableInput(this38, this18, 0);
-		if (this40)
-			DisableInput(this40, this18, 0);
-	}
-	if (this1c != 0xff) {
-		Route(0, 0x11, 0xA2, this1c + 0x50);
-		if (this38)
-			DisableInput(this38, this1c, 0);
-		if (this40)
-			DisableInput(this40, this1c, 0);
-	}
-#endif
-	if (this10 != 0xff) {
-		if (this38)
-			DisableInput(this38, this10, 0);
-		if (this40)
-			DisableInput(this40, this10, 0);
-	}
-	if (this14 != 0xff) {
-		if (this38)
-			DisableInput(this38, this14, 0);
-		if (this40)
-			DisableInput(this40, this14, 0);
-	}
-	if (this28 != 0xff) {
-		if (GetInputChannelRefCount(this28) == 1) {
-			Route(0, 0x11, 0x64, this28 + 0x50);
-			if (this34)
-				DisableInput(this34, this28, 0);
-		}
-	}
-	if (this2c != 0xff) {
-		if (GetInputChannelRefCount(this2c) == 1) {
-			Route(0, 0x11, 0xa4, this2c + 0x50);
-			if (this34)
-				DisableInput(this34, this2c, 0);
-		}
-	}
-	if (this20 != 0xff) {
-		if (GetInputChannelRefCount(this20) == 1) {
-			Route(0, 0x11, 0x65, this20 + 0x50);
-			if (this30)
-				DisableInput(this30, this20, 0);
-		}
-	}
-	if (this24 != 0xff) {
-		if (GetInputChannelRefCount(this24) == 1) {
-			Route(0, 0x11, 0xa5, this24 + 0x50);
-			if (this30)
-				DisableInput(this30, this24, 0);
-		}
-	}
-	
-	if (this50) {
-		SetADBValid(asp->thiscc, this50->this04, 0);
-		if (this30 && this34)
-			Asp4Topology::Connection(this04, 0, 0x11, (CAsp4Mix *) this34, (int) this30, (CAsp4AdbDma *)this50)
-	}
-	if (this54) {
-		SetADBValid(asp->thiscc, this54->this04, 0);
-		if (this10 && this14)
-			Asp4Topology::Connection(this04, 0, 0x11, (CAsp4Mix *) this14, (int) this10, (CAsp4AdbDma *)this54)
-	}
-	Asp4SynthTopology::ReleaseMixerResources(void);
-	if (this50)
-		CAsp4DmaChannel::CheckIn(this50);
-	if (this54)
-		CAsp4DmaChannel::CheckIn(this54);
-	free(thsis60);
-	free(tthis64);
-}
-
-// admaud30.asm: line 67609
-void Asp4Topology::ConfigureWT(int arg_0 ,int arg_4 ,int arg_8) {
-	// ...
-	ebx = arg_0;
-	// ...
-	
-	arg_0 = some_weird_operations(ebx) + 0xA4;
-	Asp4Topology::Route((int)ebp ,(uchar) 0x11, (uchar) arg_0, (uchar) (*edi + 0x50));
-	arg_0 = some_weird_operations(ebx) + 0xA5;
-	Asp4Topology::Route((int)ebp ,(uchar) 0x11, (uchar) arg_0, (uchar) (*(esi+ebx*4+0x16C) + 0x50));
-
-}
-
-int CResource::GetMixObject(enum	_eReservedFor, class CAsp4Mix **CAsp4Mix,unsigned long) {
-	
-	if (thisc4 == 0)
-		return 0x92EB0014;
-	if (CAsp4Mix == 0)
-		return 0x80070057;
-	
-	*CAsp4Mix = CAsp4Mixer::GetMixObject(_eReservedFor, ulong 0xFFFFFFFF)
-	
-	eax = ~CAsp4Mix;
-	
-	neg	eax
-	sbb	eax, eax
-	and	eax, 6D14FFF6h
-	add	eax, 92EB000Ah
-	
-	return eax;
-}
-
-CAsp4Mix * CAsp4Mixer::GetMixObject(_eReservedFor, ulong a) {
-	//CAsp4Mixer->this188 CMixArray.
-	
-	var04 = CMixArray::GetOutput(_eReservedFor, ulong a);
-	if (var04 == 0xff)
-		return 0;
-	var_A40 = *(this_188 + var04*0xc + 0x188);
-	if (var_a40 == 1) {	
-		CMixArray::GetPropertyIndexes(_eReservedFor, (_mixIndex *)&var_A1C);
-		
-		for (var08=0; var08<var_A1C; var08++) {
-			
-			eax = CMixArray::GetPendingProperty((ulong)var08*4+var_A18, (_mixProperty *)&var_A34);
-			if (eax == 0)
-				return 0;
-			var_A38 == 0;
-			var_A48 = var_A34;
-			if (var_A48 == 1) {
-				CAsp4Mix = var04*0x18 + this_08;
-				CAsp4Mix::SetVolume((ulong) var_A28);
-				var_A38 = 1;
-			}
-			if (var_A48 == 0) {
-				var_A3C = CMixArray::SearchInput(_eReservedFor,(ulong) 0x0FFFFFFFF);
-				if (var_a3c != 0xff) {
-					CAsp4Mix = var04*0x18 + this_08;
-					CAsp4Mix::SetInputVolume(var_A3C, var_A28, var_A24, 0);
-					var_A38 = 1;
-					
-				}
-			}
-			if (var_A38 == 0) {
-				CMixArray = this_188;
-				CMixArray::DeletePendingProperty((_mixProperty *)&var_A34);
-			}
-		}
-	}
-	return (var04*0x18 + &this_08);
-}
-
-void CMixArray::GetOutput(enum  _eReservedFor,unsigned long a) {
-	
-	eax = CMixArray::GiveIndex(_eReservedFor, ulong a);
-	if (eax != 0FFFFFFFF) {
-		*(eax*3*4 + CMixArray->this_188)++;
-		return;
-	}
-	eax = 0;
-	ecx = &this_180;
-	{
-		if (*ecx != 0xff) {
-			ecx = &this_00 + eax*3*4;
-			*(ecx + 0x184) = a;
-			*((eax*3 + 0x60)*4 + this_00) = _eReservedFor;
-			*(ecx + 0x188)++;
-			return;
-		}	
-		eax++;
-		ecx += 0xc;
-	} while (eax < 0x10);
-	return 0xff;
-}
-
-int CMixArray::GiveIndex(enum  _eReservedFor, unsigned long a) {
-	eax = 0;
-	if (_eReservedFor < 0x80) {
-		ecx = &this00;
-		{
-			if ((_eReservedFor == *ecx) && (a == *(ecx+4)))
-				return eax;
-			ecx += 0xc;
-			eax++;
-		} while(eax < 0x20);
-	} else {
-		ecx = &this184;
-		{
-			if ((_eReservedFor == *(ecx-4)) && (a == *ecx))
-				return eax;
-			ecx += 0xc;
-			eax++;
-		} while(eax < 0x10);	
-	}
-	eax |= 0xFFFFFFFF;
-}
-
-
-
-
-// Voice related stuff.
-void vortex_AspSynth_VoiceInit(void) {
-	int i;
-	struct voice_t *voice; 
-	//Asp4Synth::ResetPerformanceStats(void);
-	//Asp4Synth::ProfileSynth(void);
-	
-	// Hardware Voices.
-	for (i=0; i<NR_WT; i++) {
-		voice = (this_bc + i*0x198);
-		voice->this_b8 = 0xffff;
-		voice->this_114 = 0xffff;
-		
-		voice->this_174 = 0;
-		voice->this_5d = 0;
-		voice->this_60 = 0;
-		voice->this_190 = 0;
-		voice->this_58 = i;
-		voice->this_62 = 0;
-		voice->this_4c = 0;
-		voice->this_50 = 0;
-		
-		if (voice->this_180) {
-			vortex_SetReg(vortex, 1, i, 0);
-			vortex_SetReg(vortex, 2, i, 0);
-			//CSynth::Stop(void);
-			//CSynth::Release(void);
-			voice->this_180 = 0;
-			vortex_SetReg(vortex, 0, i, 1);
-		}
-	}
-	// Software voices ...
-	
-	//CDmDlsDownloadManager::DownloadInstrument(void * *,void	* *,_DMUS_DOWNLOADINFO *,void *	* const,void *);
-}
-
-void Asp4Synth::MuteVoices(uchar a,ulong b) {
-	int ebx=0;
-	if (ebx != this_180) {
-		vortex_SetReg(vortex, 6, i, 1);
-		vortex_SetReg(vortex, 1, i, ebx);
-		vortex_SetReg(vortex, 2, i, ebx);
-		CSynth::Stop(void);
-		CSynth::Release(void);
-		this_180 = ebx;
-	}
-	
-}
-void Asp4Synth::ResetControllers(unsigned char) {
-	
-}
-
-int CAdmHilObject::wtMidiDeviceOpen(void) {
-	if (this_2c == 0)
-		return 0;
-	this_2c->this52794 = 0;
-	if (this_2c->this52790)
-		return 0;
-	this_2c->this52790 = 1;
-	this_2c->Asp4Synth::VoiceInit(void);
-	this_2c->Asp4Synth::BankChange((CAbeSndFont *)this_2c->this_08, (int) 0);
-	if (this_2c) {
-		var_c = __imp__RtlConvertLongToLargeInteger@4(0x0FFFFB1E0);
-		__imp__KeDelayExecutionThread@12(0, 0, *var_c);
-		this_2c->Asp4Synth::Close((int) 0);
-		eax = this_2c->Asp4Synth::Open(void);
-		if (eax == 0)
-			return 0C0000001;
-		this_2c->this_53888 = 1;
-	}
-	// Some "repe" things i dont understand. Basically semes to be initializers.
-	
-}
-void Asp4MidiEvent::handler(void *) {
-	switch (a) {
-		
-		case x:
-			if (this_60)
-				CWTHal::SetReg((uchar) 6, (int) this_58, (ulong) 1);
-		break;
-		
-	}
-	
-}
-
-void CAsp4Core::CreateSynthBuffer(_ASPWAVEFORMAT *,CSynth * *) {
-	
-	
-}
-
-void fragment_of_wtcallback(void) { 
-	vortex_SetReg(vortex, 0xb, i, 0);
-	vortex_SetReg2(vortex, 0x21, i, 0);
-	CSynth::Start(void);
-	// ..
-	vortex_SetReg(vortex, 1, i, 0x50000000);
-	vortex_SetReg(vortex, 2, i, 0x50000000);
-	// ..
-	vortex_SetReg(vortex, 5, 0, 0x8800);
-	vortex_SetReg(vortex, 5, 1, 0x8800);
-	
-}
-#endif
-
-/*
-CSynth constructor
-
-; public: class	Asp4SynthTopology * __thiscall Asp4Topology::AllocSynth(class CResource	*)
-
-?AllocSynth@Asp4Topology@@QAEPAVAsp4SynthTopology@@PAVCResource@@@Z proc near
-					; CODE XREF: CAsp4Core::SetWavetableTopology(int)+3Fp
-					; .text:0002565Dp
-
-var_14		= dword	ptr -14h
-var_10		= dword	ptr -10h
-var_C		= dword	ptr -0Ch
-var_8		= dword	ptr -8
-var_4		= dword	ptr -4
-arg_0		= dword	ptr  4
-
-		sub	esp, 14h
-		push	ebx
-		push	ebp
-		push	esi
-		push	edi
-		mov	edi, ecx
-		push	70h
-		call	??2@YAPAXI@Z	; operator new(uint)
-
-		add	esp, 4
-		test	eax, eax
-		jz	short loc_2F3BA
-
-		mov	ebp, [esp+24h+arg_0]
-		push	edi
-		push	ebp
-		mov	ecx, eax
-		call	??0Asp4SynthTopology@@QAE@PAVCResource@@PAVAsp4Topology@@@Z ; Asp4SynthTopology::Asp4SynthTopology(CResource *,Asp4Topology *)
-
-		mov	esi, eax
-		test	esi, esi
-		jnz	short loc_2F3C6
-
-
-loc_2F3BA:				; CODE XREF: Asp4Topology::AllocSynth(CResource	*)+15j
-		pop	edi
-		pop	esi
-		pop	ebp
-		xor	eax, eax
-		pop	ebx
-		add	esp, 14h
-		retn	4
-
-; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-
-loc_2F3C6:				; CODE XREF: Asp4Topology::AllocSynth(CResource	*)+28j
-		mov	eax, [ebp+3A4h]
-		mov	ecx, [ebp+3ACh]
-		mov	ebx, [ebp+3A8h]
-		lea	edx, [esp+24h+var_14]
-		push	edx
-		push	offset aA_0	; "A"
-		push	offset asc_814A0 ; "s"
-		push	80000002h
-		mov	[esp+34h+var_4], eax
-		mov	[esp+34h+arg_0], ecx
-		call	_AspReadRegDwordValue@16
-
-		test	eax, eax
-		jz	short loc_2F403
-
-		mov	eax, [esp+24h+var_14]
-		jmp	short loc_2F41C
-
-; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-
-loc_2F403:				; CODE XREF: Asp4Topology::AllocSynth(CResource	*)+6Bj
-		cmp	ebx, 0C8h
-		jb	short loc_2F41A
-
-		mov	eax, [esp+24h+arg_0]
-		test	eax, eax
-		jz	short loc_2F41A
-
-		mov	eax, 1
-		jmp	short loc_2F41C
-
-; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-
-loc_2F41A:				; CODE XREF: Asp4Topology::AllocSynth(CResource	*)+79j
-					; Asp4Topology::AllocSynth(CResource *)+81j
-		xor	eax, eax
-
-loc_2F41C:				; CODE XREF: Asp4Topology::AllocSynth(CResource	*)+71j
-					; Asp4Topology::AllocSynth(CResource *)+88j
-		lea	ecx, [esp+24h+var_14]
-		mov	[edi+88h], eax
-		push	ecx
-		push	offset asc_81514 ; "S"
-		push	offset asc_81528 ; "s"
-		push	80000002h
-		call	_AspReadRegDwordValue@16
-
-		test	eax, eax
-		jz	short loc_2F44B
-
-		mov	edx, [esp+24h+var_14]
-		mov	[edi+8Ch], edx
-		jmp	short loc_2F46A
-
-; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-
-loc_2F44B:				; CODE XREF: Asp4Topology::AllocSynth(CResource	*)+ADj
-		cmp	ebx, 0C8h
-		jb	short loc_2F462
-
-		mov	eax, [esp+24h+arg_0]
-		test	eax, eax
-		jz	short loc_2F462
-
-		mov	eax, 1
-		jmp	short loc_2F464
-
-; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-
-loc_2F462:				; CODE XREF: Asp4Topology::AllocSynth(CResource	*)+C1j
-					; Asp4Topology::AllocSynth(CResource *)+C9j
-		xor	eax, eax
-
-loc_2F464:				; CODE XREF: Asp4Topology::AllocSynth(CResource	*)+D0j
-		mov	[edi+8Ch], eax
-
-loc_2F46A:				; CODE XREF: Asp4Topology::AllocSynth(CResource	*)+B9j
-		lea	eax, [esp+24h+var_14]
-		push	eax
-		push	offset asc_8159C ; "H"
-		push	offset asc_815B8 ; "s"
-		push	80000002h
-		call	_AspReadRegDwordValue@16
-
-		test	eax, eax
-		jz	short loc_2F493
-
-		mov	ecx, [esp+24h+var_14]
-		mov	[edi+90h], ecx
-		jmp	short loc_2F49D
-
-; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-
-loc_2F493:				; CODE XREF: Asp4Topology::AllocSynth(CResource	*)+F5j
-		mov	dword ptr [edi+90h], 1
-
-loc_2F49D:				; CODE XREF: Asp4Topology::AllocSynth(CResource	*)+101j
-		lea	edx, [esp+24h+var_14]
-		push	edx
-		push	offset aG_15	; "G"
-		push	offset asc_81640 ; "s"
-		push	80000002h
-		call	_AspReadRegDwordValue@16
-
-		test	eax, eax
-		jz	short loc_2F4C8
-
-		mov	eax, [esp+24h+var_14]
-		lea	ebx, [edi+94h]
-		mov	[ebx], eax
-		jmp	short loc_2F4F9
-
-; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-
-loc_2F4C8:				; CODE XREF: Asp4Topology::AllocSynth(CResource	*)+128j
-		cmp	[esp+24h+var_4], 6
-		jnb	short loc_2F4ED
-
-		cmp	ebx, 0C8h
-		jb	short loc_2F4ED
-
-		mov	eax, [esp+24h+arg_0]
-		test	eax, eax
-		jz	short loc_2F4ED
-
-		lea	ebx, [edi+94h]
-		mov	dword ptr [ebx], 1
-		jmp	short loc_2F4F9
-
-; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-
-loc_2F4ED:				; CODE XREF: Asp4Topology::AllocSynth(CResource	*)+13Dj
-					; Asp4Topology::AllocSynth(CResource *)+145j ...
-		lea	ebx, [edi+94h]
-		mov	dword ptr [ebx], 0
-
-loc_2F4F9:				; CODE XREF: Asp4Topology::AllocSynth(CResource	*)+136j
-					; Asp4Topology::AllocSynth(CResource *)+15Bj
-		xor	eax, eax
-		mov	dword ptr [edi+9Ch], 3E8h
-		mov	[esp+24h+var_10], eax
-		mov	[esp+24h+var_C], eax
-		cmp	dword ptr [edi+64h], 0FFFFFFFFh
-		jnz	short loc_2F564
-
-		lea	ecx, [esp+24h+var_10]
-		push	0FFFFFFFFh
-		push	ecx
-		push	81h
-		mov	ecx, ebp
-		call	?SearchMixerOutputChannel@CResource@@QAEJW4_eReservedFor@@PAKK@Z ; CResource::SearchMixerOutputChannel(_eReservedFor,ulong *,ulong)
-
-		test	eax, eax
-		jnz	short loc_2F564
-
-		lea	edx, [esp+24h+var_C]
-		push	0FFFFFFFFh
-		push	edx
-		push	65h
-		mov	ecx, ebp
-		call	?SearchMixerInputChannel@CResource@@QAEJW4_eReservedFor@@PAKK@Z	; CResource::SearchMixerInputChannel(_eReservedFor,ulong *,ulong)
-
-		test	eax, eax
-		jnz	short loc_2F564
-
-		mov	eax, [esp+24h+var_10]
-		mov	edx, [esp+24h+var_C]
-		add	eax, 420h
-		mov	ecx, [edi+74h]
-		shl	eax, 5
-		add	eax, edx
-		shl	eax, 2
-		push	eax
-		call	?ReadDWORD@CAsp4HwIO@@QAEKK@Z ;	CAsp4HwIO::ReadDWORD(ulong)
-
-		and	eax, 0FFh
-		mov	[edi+64h], eax
-
-loc_2F564:				; CODE XREF: Asp4Topology::AllocSynth(CResource	*)+181j
-					; Asp4Topology::AllocSynth(CResource *)+198j ...
-		cmp	dword ptr [edi+68h], 0FFFFFFFFh
-		jnz	short loc_2F5BB
-
-		lea	ecx, [esp+24h+var_10]
-		push	0FFFFFFFFh
-		push	ecx
-		push	82h
-		mov	ecx, ebp
-		call	?SearchMixerOutputChannel@CResource@@QAEJW4_eReservedFor@@PAKK@Z ; CResource::SearchMixerOutputChannel(_eReservedFor,ulong *,ulong)
-
-		test	eax, eax
-		jnz	short loc_2F5BB
-
-		lea	edx, [esp+24h+var_C]
-		push	0FFFFFFFFh
-		push	edx
-		push	66h
-		mov	ecx, ebp
-		call	?SearchMixerInputChannel@CResource@@QAEJW4_eReservedFor@@PAKK@Z	; CResource::SearchMixerInputChannel(_eReservedFor,ulong *,ulong)
-
-		test	eax, eax
-		jnz	short loc_2F5BB
-
-		mov	eax, [esp+24h+var_10]
-		mov	edx, [esp+24h+var_C]
-		add	eax, 420h
-		mov	ecx, [edi+74h]
-		shl	eax, 5
-		add	eax, edx
-		shl	eax, 2
-		push	eax
-		call	?ReadDWORD@CAsp4HwIO@@QAEKK@Z ;	CAsp4HwIO::ReadDWORD(ulong)
-
-		and	eax, 0FFh
-		mov	[edi+68h], eax
-
-loc_2F5BB:				; CODE XREF: Asp4Topology::AllocSynth(CResource	*)+1D8j
-					; Asp4Topology::AllocSynth(CResource *)+1EFj ...
-		mov	ecx, [ebp+0C4h]
-		lea	edx, [esp+24h+var_8]
-		push	edx
-		push	66h
-		push	82h
-		mov	[esp+30h+var_8], 0
-		call	?IsInputVolPending@CAsp4Mixer@@QAEHW4_eReservedFor@@0PAK@Z ; CAsp4Mixer::IsInputVolPending(_eReservedFor,_eReservedFor,ulong *)
-
-		test	eax, eax
-		jz	short loc_2F5F0
-
-		mov	eax, [esp+24h+var_8]
-		push	eax
-		call	?LinearFrac2WtFP@@YGEK@Z ; LinearFrac2WtFP(ulong)
-
-		and	eax, 0FFh
-		mov	[edi+68h], eax
-
-loc_2F5F0:				; CODE XREF: Asp4Topology::AllocSynth(CResource	*)+24Cj
-		mov	ecx, [ebp+0C4h]
-		lea	edx, [esp+24h+var_8]
-		push	edx
-		push	65h
-		push	81h
-		call	?IsInputVolPending@CAsp4Mixer@@QAEHW4_eReservedFor@@0PAK@Z ; CAsp4Mixer::IsInputVolPending(_eReservedFor,_eReservedFor,ulong *)
-
-		test	eax, eax
-		jz	short loc_2F61D
-
-		mov	eax, [esp+24h+var_8]
-		push	eax
-		call	?LinearFrac2WtFP@@YGEK@Z ; LinearFrac2WtFP(ulong)
-
-		and	eax, 0FFh
-		mov	[edi+64h], eax
-
-loc_2F61D:				; CODE XREF: Asp4Topology::AllocSynth(CResource	*)+279j
-		mov	ecx, [ebx]
-		mov	edx, [edi+90h]
-		mov	eax, [edi+8Ch]
-		push	ecx
-		mov	ecx, [edi+88h]
-		push	edx
-		push	eax
-		push	ecx
-		mov	ecx, esi
-		call	?Create@Asp4SynthTopology@@QAEHHHHH@Z ;	Asp4SynthTopology::Create(int,int,int,int)
-
-		test	eax, eax
-		jnz	loc_2F719
-
-		mov	ecx, esi
-		call	??1Asp4SynthTopology@@QAE@XZ ; Asp4SynthTopology::~Asp4SynthTopology(void)
-
-		push	esi
-		call	??3@YAXPAX@Z	; operator delete(void *)
-
-		add	esp, 4
-		lea	eax, [edi+88h]
-		lea	esi, [edi+8Ch]
-		mov	dword ptr [ebx], 0
-		push	eax
-		push	offset asc_816B4 ; "A"
-		push	offset asc_816E0 ; "s"
-		push	80000002h
-		mov	dword ptr [eax], 0
-		mov	dword ptr [esi], 0
-		call	_AspSetRegDwordValue@16
-
-		push	esi
-		push	offset asc_81754 ; "S"
-		push	offset asc_81768 ; "s"
-		push	80000002h
-		call	_AspSetRegDwordValue@16
-
-		push	ebx
-		push	offset aG_16	; "G"
-		push	offset asc_817F0 ; "s"
-		push	80000002h
-		call	_AspSetRegDwordValue@16
-
-		push	70h
-		call	??2@YAPAXI@Z	; operator new(uint)
-
-		add	esp, 4
-		test	eax, eax
-		jz	short loc_2F6CE
-
-		push	edi
-		push	ebp
-		mov	ecx, eax
-		call	??0Asp4SynthTopology@@QAE@PAVCResource@@PAVAsp4Topology@@@Z ; Asp4SynthTopology::Asp4SynthTopology(CResource *,Asp4Topology *)
-
-		mov	esi, eax
-		test	esi, esi
-		jnz	short loc_2F6DA
-
-
-loc_2F6CE:				; CODE XREF: Asp4Topology::AllocSynth(CResource	*)+32Dj
-		pop	edi
-		pop	esi
-		pop	ebp
-		xor	eax, eax
-		pop	ebx
-		add	esp, 14h
-		retn	4
-
-; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-
-loc_2F6DA:				; CODE XREF: Asp4Topology::AllocSynth(CResource	*)+33Cj
-		mov	edx, [ebx]
-		mov	eax, [edi+90h]
-		mov	ecx, [edi+8Ch]
-		push	edx
-		mov	edx, [edi+88h]
-		push	eax
-		push	ecx
-		push	edx
-		mov	ecx, esi
-		call	?Create@Asp4SynthTopology@@QAEHHHHH@Z ;	Asp4SynthTopology::Create(int,int,int,int)
-
-		test	eax, eax
-		jnz	short loc_2F719
-
-		mov	ecx, esi
-		call	??1Asp4SynthTopology@@QAE@XZ ; Asp4SynthTopology::~Asp4SynthTopology(void)
-
-		push	esi
-		call	??3@YAXPAX@Z	; operator delete(void *)
-
-		add	esp, 4
-		xor	eax, eax
-		pop	edi
-		pop	esi
-		pop	ebp
-		pop	ebx
-		add	esp, 14h
-		retn	4
-
-; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-
-loc_2F719:				; CODE XREF: Asp4Topology::AllocSynth(CResource	*)+2AEj
-					; Asp4Topology::AllocSynth(CResource *)+36Bj
-		mov	eax, [edi+90h]
-		test	eax, eax
-		jz	loc_2F823
-
-		mov	eax, [esi+8]
-		mov	ecx, edi
-		add	al, 50h
-		push	eax
-		push	62h
-		push	11h
-		push	1
-		call	?Route@Asp4Topology@@QAEXHEEE@Z	; Asp4Topology::Route(int,uchar,uchar,uchar)
-
-		mov	ecx, [esi+0Ch]
-		add	cl, 50h
-		push	ecx
-		push	63h
-		push	11h
-		push	1
-		mov	ecx, edi
-		call	?Route@Asp4Topology@@QAEXHEEE@Z	; Asp4Topology::Route(int,uchar,uchar,uchar)
-
-		mov	edx, [esi+18h]
-		mov	ecx, edi
-		add	dl, 50h
-		push	edx
-		push	0A2h
-		push	11h
-		push	1
-		call	?Route@Asp4Topology@@QAEXHEEE@Z	; Asp4Topology::Route(int,uchar,uchar,uchar)
-
-		mov	eax, [esi+1Ch]
-		mov	ecx, edi
-		add	al, 50h
-		push	eax
-		push	0A3h
-		push	11h
-		push	1
-		call	?Route@Asp4Topology@@QAEXHEEE@Z	; Asp4Topology::Route(int,uchar,uchar,uchar)
-
-		push	2
-		push	1
-		mov	ecx, ebp
-		call	?GetWTRefCount@CResource@@QAEKHW4WTSOURCE@@@Z ;	CResource::GetWTRefCount(int,WTSOURCE)
-
-		test	eax, eax
-		jnz	short loc_2F7CF
-
-		mov	eax, [edi+194h]
-		test	eax, eax
-		jnz	short loc_2F7CF
-
-		mov	ecx, [esi+18h]
-		push	ecx
-		mov	ecx, [esi+38h]
-		call	?EnableInput@CAsp4Mix@@QAEXH@Z ; CAsp4Mix::EnableInput(int)
-
-		mov	edx, [esi+1Ch]
-		mov	ecx, [esi+3Ch]
-		push	edx
-		call	?EnableInput@CAsp4Mix@@QAEXH@Z ; CAsp4Mix::EnableInput(int)
-
-		mov	ecx, [esi+40h]
-		test	ecx, ecx
-		jz	short loc_2F7CF
-
-		mov	eax, [esi+44h]
-		test	eax, eax
-		jz	short loc_2F7CF
-
-		mov	eax, [esi+18h]
-		push	eax
-		call	?EnableInput@CAsp4Mix@@QAEXH@Z ; CAsp4Mix::EnableInput(int)
-
-		mov	ecx, [esi+1Ch]
-		push	ecx
-		mov	ecx, [esi+44h]
-		call	?EnableInput@CAsp4Mix@@QAEXH@Z ; CAsp4Mix::EnableInput(int)
-
-
-loc_2F7CF:				; CODE XREF: Asp4Topology::AllocSynth(CResource	*)+3F8j
-					; Asp4Topology::AllocSynth(CResource *)+402j ...
-		push	2
-		push	0
-		mov	ecx, ebp
-		call	?GetWTRefCount@CResource@@QAEKHW4WTSOURCE@@@Z ;	CResource::GetWTRefCount(int,WTSOURCE)
-
-		test	eax, eax
-		jnz	short loc_2F823
-
-		mov	eax, [edi+190h]
-		test	eax, eax
-		jnz	short loc_2F823
-
-		mov	edx, [esi+8]
-		mov	ecx, [esi+38h]
-		push	edx
-		call	?EnableInput@CAsp4Mix@@QAEXH@Z ; CAsp4Mix::EnableInput(int)
-
-		mov	eax, [esi+0Ch]
-		mov	ecx, [esi+3Ch]
-		push	eax
-		call	?EnableInput@CAsp4Mix@@QAEXH@Z ; CAsp4Mix::EnableInput(int)
-
-		mov	ecx, [esi+40h]
-		test	ecx, ecx
-		jz	short loc_2F823
-
-		mov	eax, [esi+44h]
-		test	eax, eax
-		jz	short loc_2F823
-
-		mov	edx, [esi+8]
-		push	edx
-		call	?EnableInput@CAsp4Mix@@QAEXH@Z ; CAsp4Mix::EnableInput(int)
-
-		mov	eax, [esi+0Ch]
-		mov	ecx, [esi+44h]
-		push	eax
-		call	?EnableInput@CAsp4Mix@@QAEXH@Z ; CAsp4Mix::EnableInput(int)
-
-
-loc_2F823:				; CODE XREF: Asp4Topology::AllocSynth(CResource	*)+391j
-					; Asp4Topology::AllocSynth(CResource *)+44Cj ...
-		mov	eax, [edi+8Ch]
-		test	eax, eax
-		jnz	short loc_2F83B
-
-		mov	eax, [edi+88h]
-		test	eax, eax
-		jz	loc_2FB41
-
-
-loc_2F83B:				; CODE XREF: Asp4Topology::AllocSynth(CResource	*)+49Bj
-		mov	ecx, [esi+10h]
-		push	ecx
-		mov	ecx, [esi+38h]
-		call	?EnableInput@CAsp4Mix@@QAEXH@Z ; CAsp4Mix::EnableInput(int)
-
-		mov	edx, [esi+14h]
-		mov	ecx, [esi+3Ch]
-		push	edx
-		call	?EnableInput@CAsp4Mix@@QAEXH@Z ; CAsp4Mix::EnableInput(int)
-
-		mov	ecx, [esi+40h]
-		test	ecx, ecx
-		jz	short loc_2F876
-
-		mov	eax, [esi+44h]
-		test	eax, eax
-		jz	short loc_2F876
-
-		mov	eax, [esi+10h]
-		push	eax
-		call	?EnableInput@CAsp4Mix@@QAEXH@Z ; CAsp4Mix::EnableInput(int)
-
-		mov	ecx, [esi+14h]
-		push	ecx
-		mov	ecx, [esi+44h]
-		call	?EnableInput@CAsp4Mix@@QAEXH@Z ; CAsp4Mix::EnableInput(int)
-
-
-loc_2F876:				; CODE XREF: Asp4Topology::AllocSynth(CResource	*)+4C8j
-					; Asp4Topology::AllocSynth(CResource *)+4CFj
-		mov	eax, [esi+28h]
-		mov	ecx, ebp
-		push	eax
-		call	?GetInputChannelRefCount@CResource@@QAEKK@Z ; CResource::GetInputChannelRefCount(ulong)
-
-		cmp	eax, 1
-		jnz	short loc_2F8C4
-
-		mov	edx, [esi+28h]
-		mov	ecx, edi
-		add	dl, 50h
-		push	edx
-		push	64h
-		push	11h
-		push	eax
-		call	?Route@Asp4Topology@@QAEXHEEE@Z	; Asp4Topology::Route(int,uchar,uchar,uchar)
-
-		mov	eax, [esi+20h]
-		mov	ecx, edi
-		add	al, 50h
-		push	eax
-		push	65h
-		push	11h
-		push	1
-		call	?Route@Asp4Topology@@QAEXHEEE@Z	; Asp4Topology::Route(int,uchar,uchar,uchar)
-
-		mov	ecx, [esi+28h]
-		push	ecx
-		mov	ecx, [esi+34h]
-		call	?EnableInput@CAsp4Mix@@QAEXH@Z ; CAsp4Mix::EnableInput(int)
-
-		mov	edx, [esi+20h]
-		mov	ecx, [esi+30h]
-		push	edx
-		call	?EnableInput@CAsp4Mix@@QAEXH@Z ; CAsp4Mix::EnableInput(int)
-
-
-loc_2F8C4:				; CODE XREF: Asp4Topology::AllocSynth(CResource	*)+4F4j
-		mov	eax, [esi+2Ch]
-		mov	ecx, ebp
-		push	eax
-		call	?GetInputChannelRefCount@CResource@@QAEKK@Z ; CResource::GetInputChannelRefCount(ulong)
-
-		cmp	eax, 1
-		jnz	short loc_2F919
-
-		mov	eax, [esi+2Ch]
-		mov	ecx, edi
-		add	al, 50h
-		push	eax
-		push	0A4h
-		push	11h
-		push	1
-		call	?Route@Asp4Topology@@QAEXHEEE@Z	; Asp4Topology::Route(int,uchar,uchar,uchar)
-
-		mov	ecx, [esi+24h]
-		add	cl, 50h
-		push	ecx
-		push	0A5h
-		push	11h
-		push	1
-		mov	ecx, edi
-		call	?Route@Asp4Topology@@QAEXHEEE@Z	; Asp4Topology::Route(int,uchar,uchar,uchar)
-
-		mov	edx, [esi+2Ch]
-		mov	ecx, [esi+34h]
-		push	edx
-		call	?EnableInput@CAsp4Mix@@QAEXH@Z ; CAsp4Mix::EnableInput(int)
-
-		mov	eax, [esi+24h]
-		mov	ecx, [esi+30h]
-		push	eax
-		call	?EnableInput@CAsp4Mix@@QAEXH@Z ; CAsp4Mix::EnableInput(int)
-
-
-loc_2F919:				; CODE XREF: Asp4Topology::AllocSynth(CResource	*)+542j
-		mov	ecx, [esi+50h]
-		mov	edx, [esi+30h]
-		mov	eax, [esi+34h]
-		push	ecx
-		push	edx
-		push	eax
-		push	11h
-		push	1
-		mov	ecx, edi
-		call	?Connection@Asp4Topology@@QAEXHEPAVCAsp4Mix@@0PAVCAsp4AdbDma@@@Z ; Asp4Topology::Connection(int,uchar,CAsp4Mix *,int,CAsp4AdbDma *)
-
-		mov	ecx, [esi+50h]
-		test	ecx, ecx
-		jz	loc_2FA2D
-
-		mov	edx, [ecx]
-		push	0
-		push	0
-		push	1
-		push	8
-		push	0
-		push	0
-		call	dword ptr [edx+4]
-
-		mov	eax, [esi+50h]
-		push	56FFFFFFh
-		mov	ecx, [eax+4]
-		lea	edx, ds:27800h[ecx*8]
-		mov	ecx, [edi+74h]
-		push	edx
-		call	?Write@CAsp4HwIO@@QAEXKK@Z ; CAsp4HwIO::Write(ulong,ulong)
-
-		mov	eax, [esi+50h]
-		push	74FFFFFFh
-		mov	ecx, [eax+4]
-		lea	edx, ds:27804h[ecx*8]
-		mov	ecx, [edi+74h]
-		push	edx
-		call	?Write@CAsp4HwIO@@QAEXKK@Z ; CAsp4HwIO::Write(ulong,ulong)
-
-		mov	eax, [esi+60h]
-		mov	ecx, [eax+4]
-		mov	eax, [esi+50h]
-		mov	edx, [ecx+1Ch]
-		mov	ecx, [eax+4]
-		add	ecx, 2740h
-		shl	edx, 0Ch
-		shl	ecx, 4
-		push	edx
-		push	ecx
-		mov	ecx, [edi+74h]
-		call	?Write@CAsp4HwIO@@QAEXKK@Z ; CAsp4HwIO::Write(ulong,ulong)
-
-		mov	edx, [esi+60h]
-		mov	eax, [edx+4]
-		mov	edx, [esi+50h]
-		mov	ecx, [eax+20h]
-		mov	eax, [edx+4]
-		shl	eax, 4
-		shl	ecx, 0Ch
-		add	eax, (offset loc_27402+2)
-		push	ecx
-		mov	ecx, [edi+74h]
-		push	eax
-		call	?Write@CAsp4HwIO@@QAEXKK@Z ; CAsp4HwIO::Write(ulong,ulong)
-
-		mov	ecx, [esi+60h]
-		mov	edx, [ecx+4]
-		mov	ecx, [esi+50h]
-		mov	eax, [edx+24h]
-		mov	edx, [ecx+4]
-		mov	ecx, [edi+74h]
-		shl	edx, 4
-		shl	eax, 0Ch
-		add	edx, offset nullsub_2
-		push	eax
-		push	edx
-		call	?Write@CAsp4HwIO@@QAEXKK@Z ; CAsp4HwIO::Write(ulong,ulong)
-
-		mov	eax, [esi+60h]
-		mov	ecx, [eax+4]
-		mov	eax, [esi+50h]
-		mov	edx, [ecx+28h]
-		mov	ecx, [eax+4]
-		shl	ecx, 4
-		shl	edx, 0Ch
-		add	ecx, offset dword_2740C
-		push	edx
-		push	ecx
-		mov	ecx, [edi+74h]
-		call	?Write@CAsp4HwIO@@QAEXKK@Z ; CAsp4HwIO::Write(ulong,ulong)
-
-		mov	edx, [esi+50h]
-		push	0
-		mov	eax, [edx+4]
-		lea	ecx, ds:27C00h[eax*4]
-		push	ecx
-		mov	ecx, [edi+74h]
-		call	?Write@CAsp4HwIO@@QAEXKK@Z ; CAsp4HwIO::Write(ulong,ulong)
-
-
-loc_2FA2D:				; CODE XREF: Asp4Topology::AllocSynth(CResource	*)+5A5j
-		mov	edx, [esi+14h]
-		mov	eax, [esi+10h]
-		mov	ecx, [esi+54h]
-		add	dl, 50h
-		push	edx
-		add	al, 50h
-		mov	edx, [ecx+4]
-		push	eax
-		push	edx
-		push	11h
-		push	1
-		mov	ecx, edi
-		call	?Route@Asp4Topology@@QAEXHEEEE@Z ; Asp4Topology::Route(int,uchar,uchar,uchar,uchar)
-
-		mov	ecx, [esi+54h]
-		push	0
-		push	0
-		push	1
-		mov	eax, [ecx]
-		push	8
-		push	1
-		push	0
-		call	dword ptr [eax+4]
-
-		mov	ecx, [esi+54h]
-		push	56FFFFFFh
-		mov	edx, [ecx+4]
-		mov	ecx, [edi+74h]
-		lea	eax, ds:27800h[edx*8]
-		push	eax
-		call	?Write@CAsp4HwIO@@QAEXKK@Z ; CAsp4HwIO::Write(ulong,ulong)
-
-		mov	ecx, [esi+54h]
-		push	74FFFFFFh
-		mov	edx, [ecx+4]
-		mov	ecx, [edi+74h]
-		lea	eax, ds:27804h[edx*8]
-		push	eax
-		call	?Write@CAsp4HwIO@@QAEXKK@Z ; CAsp4HwIO::Write(ulong,ulong)
-
-		mov	ecx, [esi+64h]
-		mov	edx, [ecx+4]
-		mov	ecx, [esi+54h]
-		mov	eax, [edx+1Ch]
-		mov	edx, [ecx+4]
-		mov	ecx, [edi+74h]
-		add	edx, 2740h
-		shl	eax, 0Ch
-		shl	edx, 4
-		push	eax
-		push	edx
-		call	?Write@CAsp4HwIO@@QAEXKK@Z ; CAsp4HwIO::Write(ulong,ulong)
-
-		mov	eax, [esi+64h]
-		mov	ecx, [eax+4]
-		mov	eax, [esi+54h]
-		mov	edx, [ecx+20h]
-		mov	ecx, [eax+4]
-		shl	ecx, 4
-		shl	edx, 0Ch
-		add	ecx, (offset loc_27402+2)
-		push	edx
-		push	ecx
-		mov	ecx, [edi+74h]
-		call	?Write@CAsp4HwIO@@QAEXKK@Z ; CAsp4HwIO::Write(ulong,ulong)
-
-		mov	edx, [esi+64h]
-		mov	eax, [edx+4]
-		mov	edx, [esi+54h]
-		mov	ecx, [eax+24h]
-		mov	eax, [edx+4]
-		shl	eax, 4
-		shl	ecx, 0Ch
-		add	eax, offset nullsub_2
-		push	ecx
-		mov	ecx, [edi+74h]
-		push	eax
-		call	?Write@CAsp4HwIO@@QAEXKK@Z ; CAsp4HwIO::Write(ulong,ulong)
-
-		mov	ecx, [esi+64h]
-		mov	edx, [ecx+4]
-		mov	ecx, [esi+54h]
-		mov	eax, [edx+28h]
-		mov	edx, [ecx+4]
-		shl	eax, 0Ch
-		shl	edx, 4
-		push	eax
-		add	edx, offset dword_2740C
-		mov	ecx, [edi+74h]
-		push	edx
-		call	?Write@CAsp4HwIO@@QAEXKK@Z ; CAsp4HwIO::Write(ulong,ulong)
-
-		mov	eax, [esi+54h]
-		push	0
-		mov	ecx, [eax+4]
-		lea	edx, ds:27C00h[ecx*4]
-		mov	ecx, [edi+74h]
-		push	edx
-		call	?Write@CAsp4HwIO@@QAEXKK@Z ; CAsp4HwIO::Write(ulong,ulong)
-
-
-loc_2FB41:				; CODE XREF: Asp4Topology::AllocSynth(CResource	*)+4A5j
-		mov	ecx, [esi+38h]
-		mov	ebx, [esi+10h]
-		mov	eax, [edi+64h]
-		mov	edx, [ecx+8]
-		mov	ecx, [edi+74h]
-		add	edx, 420h
-		push	eax
-		shl	edx, 5
-		add	edx, ebx
-		shl	edx, 2
-		push	edx
-		call	?Write@CAsp4HwIO@@QAEXKK@Z ; CAsp4HwIO::Write(ulong,ulong)
-
-		mov	ecx, [esi+3Ch]
-		mov	eax, [edi+68h]
-		push	eax
-		mov	eax, [esi+14h]
-		mov	edx, [ecx+8]
-		mov	ecx, [edi+74h]
-		add	edx, 420h
-		shl	edx, 5
-		add	edx, eax
-		shl	edx, 2
-		push	edx
-		call	?Write@CAsp4HwIO@@QAEXKK@Z ; CAsp4HwIO::Write(ulong,ulong)
-
-		mov	eax, [esi+40h]
-		test	eax, eax
-		jz	short loc_2FBDC
-
-		mov	ecx, [esi+44h]
-		test	ecx, ecx
-		jz	short loc_2FBDC
-
-		mov	edx, [eax+8]
-		mov	eax, [esi+10h]
-		mov	ecx, [edi+64h]
-		add	edx, 420h
-		shl	edx, 5
-		add	edx, eax
-		push	ecx
-		mov	ecx, [edi+74h]
-		shl	edx, 2
-		push	edx
-		call	?Write@CAsp4HwIO@@QAEXKK@Z ; CAsp4HwIO::Write(ulong,ulong)
-
-		mov	ecx, [esi+44h]
-		mov	ebx, [esi+14h]
-		mov	eax, [edi+68h]
-		mov	edx, [ecx+8]
-		mov	ecx, [edi+74h]
-		add	edx, 420h
-		push	eax
-		shl	edx, 5
-		add	edx, ebx
-		shl	edx, 2
-		push	edx
-		call	?Write@CAsp4HwIO@@QAEXKK@Z ; CAsp4HwIO::Write(ulong,ulong)
-
-
-loc_2FBDC:				; CODE XREF: Asp4Topology::AllocSynth(CResource	*)+7FEj
-					; Asp4Topology::AllocSynth(CResource *)+805j
-		mov	ecx, [esi+38h]
-		mov	ebx, [esi+8]
-		mov	eax, [edi+64h]
-		mov	edx, [ecx+8]
-		mov	ecx, [edi+74h]
-		add	edx, 420h
-		push	eax
-		shl	edx, 5
-		add	edx, ebx
-		shl	edx, 2
-		push	edx
-		call	?Write@CAsp4HwIO@@QAEXKK@Z ; CAsp4HwIO::Write(ulong,ulong)
-
-		mov	ecx, [esi+3Ch]
-		mov	eax, [edi+68h]
-		push	eax
-		mov	eax, [esi+0Ch]
-		mov	edx, [ecx+8]
-		mov	ecx, [edi+74h]
-		add	edx, 420h
-		shl	edx, 5
-		add	edx, eax
-		shl	edx, 2
-		push	edx
-		call	?Write@CAsp4HwIO@@QAEXKK@Z ; CAsp4HwIO::Write(ulong,ulong)
-
-		mov	eax, [esi+40h]
-		test	eax, eax
-		jz	short loc_2FC77
-
-		mov	ecx, [esi+44h]
-		test	ecx, ecx
-		jz	short loc_2FC77
-
-		mov	edx, [eax+8]
-		mov	eax, [esi+8]
-		mov	ecx, [edi+64h]
-		add	edx, 420h
-		shl	edx, 5
-		add	edx, eax
-		push	ecx
-		mov	ecx, [edi+74h]
-		shl	edx, 2
-		push	edx
-		call	?Write@CAsp4HwIO@@QAEXKK@Z ; CAsp4HwIO::Write(ulong,ulong)
-
-		mov	ecx, [esi+44h]
-		mov	ebx, [esi+0Ch]
-		mov	eax, [edi+68h]
-		mov	edx, [ecx+8]
-		mov	ecx, [edi+74h]
-		add	edx, 420h
-		push	eax
-		shl	edx, 5
-		add	edx, ebx
-		shl	edx, 2
-		push	edx
-		call	?Write@CAsp4HwIO@@QAEXKK@Z ; CAsp4HwIO::Write(ulong,ulong)
-
-
-loc_2FC77:				; CODE XREF: Asp4Topology::AllocSynth(CResource	*)+899j
-					; Asp4Topology::AllocSynth(CResource *)+8A0j
-		mov	ecx, [esi+38h]
-		mov	ebx, [esi+18h]
-		mov	eax, [edi+64h]
-		mov	edx, [ecx+8]
-		mov	ecx, [edi+74h]
-		add	edx, 420h
-		push	eax
-		shl	edx, 5
-		add	edx, ebx
-		shl	edx, 2
-		push	edx
-		call	?Write@CAsp4HwIO@@QAEXKK@Z ; CAsp4HwIO::Write(ulong,ulong)
-
-		mov	ecx, [esi+3Ch]
-		mov	eax, [edi+68h]
-		push	eax
-		mov	eax, [esi+1Ch]
-		mov	edx, [ecx+8]
-		mov	ecx, [edi+74h]
-		add	edx, 420h
-		shl	edx, 5
-		add	edx, eax
-		shl	edx, 2
-		push	edx
-		call	?Write@CAsp4HwIO@@QAEXKK@Z ; CAsp4HwIO::Write(ulong,ulong)
-
-		mov	eax, [esi+40h]
-		test	eax, eax
-		jz	short loc_2FD12
-
-		mov	ecx, [esi+44h]
-		test	ecx, ecx
-		jz	short loc_2FD12
-
-		mov	edx, [eax+8]
-		mov	eax, [esi+18h]
-		mov	ecx, [edi+64h]
-		add	edx, 420h
-		shl	edx, 5
-		add	edx, eax
-		push	ecx
-		mov	ecx, [edi+74h]
-		shl	edx, 2
-		push	edx
-		call	?Write@CAsp4HwIO@@QAEXKK@Z ; CAsp4HwIO::Write(ulong,ulong)
-
-		mov	ecx, [esi+44h]
-		mov	ebx, [esi+1Ch]
-		mov	eax, [edi+68h]
-		mov	edx, [ecx+8]
-		mov	ecx, [edi+74h]
-		add	edx, 420h
-		push	eax
-		shl	edx, 5
-		add	edx, ebx
-		shl	edx, 2
-		push	edx
-		call	?Write@CAsp4HwIO@@QAEXKK@Z ; CAsp4HwIO::Write(ulong,ulong)
-
-
-loc_2FD12:				; CODE XREF: Asp4Topology::AllocSynth(CResource	*)+934j
-					; Asp4Topology::AllocSynth(CResource *)+93Bj
-		mov	eax, [edi+8Ch]
-		test	eax, eax
-		jnz	short loc_2FD26
-
-		mov	eax, [edi+88h]
-		test	eax, eax
-		jz	short loc_2FD72
-
-
-loc_2FD26:				; CODE XREF: Asp4Topology::AllocSynth(CResource	*)+98Aj
-		mov	eax, [esi+28h]
-		mov	ecx, [esi+34h]
-		push	8
-		push	eax
-		call	?SetInputVolumeByte@CAsp4Mix@@QAEXHE@Z ; CAsp4Mix::SetInputVolumeByte(int,uchar)
-
-		mov	ecx, [esi+2Ch]
-		push	8
-		push	ecx
-		mov	ecx, [esi+34h]
-		call	?SetInputVolumeByte@CAsp4Mix@@QAEXHE@Z ; CAsp4Mix::SetInputVolumeByte(int,uchar)
-
-		mov	edx, [esi+20h]
-		mov	ecx, [esi+30h]
-		push	8
-		push	edx
-		call	?SetInputVolumeByte@CAsp4Mix@@QAEXHE@Z ; CAsp4Mix::SetInputVolumeByte(int,uchar)
-
-		mov	eax, [esi+24h]
-		mov	ecx, [esi+30h]
-		push	8
-		push	eax
-		call	?SetInputVolumeByte@CAsp4Mix@@QAEXHE@Z ; CAsp4Mix::SetInputVolumeByte(int,uchar)
-
-		mov	ecx, [esi+30h]
-		push	8
-		call	?SetVolumeByte@CAsp4Mix@@QAEXE@Z ; CAsp4Mix::SetVolumeByte(uchar)
-
-		mov	ecx, [esi+34h]
-		push	8
-		call	?SetVolumeByte@CAsp4Mix@@QAEXE@Z ; CAsp4Mix::SetVolumeByte(uchar)
-
-
-loc_2FD72:				; CODE XREF: Asp4Topology::AllocSynth(CResource	*)+994j
-		mov	[edi+7Ch], esi
-		mov	eax, esi
-		pop	edi
-		pop	esi
-		pop	ebp
-		pop	ebx
-		add	esp, 14h
-		retn	4
-
-?AllocSynth@Asp4Topology@@QAEPAVAsp4SynthTopology@@PAVCResource@@@Z endp ; sp =	-30h
-
-; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-		align 10h
-
-; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
-
-
-; public: void __thiscall Asp4Topology::DeleteSynth(void)
-
-?DeleteSynth@Asp4Topology@@QAEXXZ proc near
-					; CODE XREF: CAsp4Core::SetWavetableTopology(int)+25p
-					; .text:0002564Bp
-		push	esi
-		push	edi
-		mov	edi, ecx
-		mov	esi, [edi+7Ch]
-		test	esi, esi
-		jz	short loc_2FDAB
-
-		mov	ecx, esi
-		call	??1Asp4SynthTopology@@QAE@XZ ; Asp4SynthTopology::~Asp4SynthTopology(void)
-
-		push	esi
-		call	??3@YAXPAX@Z	; operator delete(void *)
-
-		add	esp, 4
-
-loc_2FDAB:				; CODE XREF: Asp4Topology::DeleteSynth(void)+9j
-		mov	dword ptr [edi+7Ch], 0
-		pop	edi
-		pop	esi
-		retn
-
-?DeleteSynth@Asp4Topology@@QAEXXZ endp
-
-; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-		align 10h
-
-; public: static void __cdecl Asp4Topology::Appy_Handler(void *,unsigned long)
-?Appy_Handler@Asp4Topology@@SAXPAXK@Z:
-		retn
-
-; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-		align 10h
-
-; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
-
-
-; public: void __thiscall Asp4Topology::Route(int,unsigned char,unsigned char,unsigned char)
-
-?Route@Asp4Topology@@QAEXHEEE@Z	proc near
-					; CODE XREF: Asp4Topology::MakeDefaultConnections(void)+2Ap
-					; Asp4Topology::MakeDefaultConnections(void)+75p ...
-
-arg_0		= dword	ptr  8
-arg_4		= dword	ptr  0Ch
-arg_8		= dword	ptr  10h
-arg_C		= dword	ptr  14h
-
-		push	ebx
-		mov	ebx, [esp+arg_8]
-		push	ebp
-		push	esi
-		push	edi
-		mov	edi, ebx
-		mov	esi, ecx
-		and	edi, 0FFh
-		mov	eax, [esp+0Ch+arg_8]
-		mov	ecx, edi
-		and	ah, 0
-		shl	ecx, 8
-		or	eax, ecx
-		mov	[esp+0Ch+arg_8], eax
-		mov	edx, [esp+0Ch+arg_8]
-		mov	eax, [esp+0Ch+arg_C]
-		and	dl, 0
-		and	eax, 0FFh
-		or	edx, eax
-		mov	[esp+0Ch+arg_8], edx
-		mov	eax, [esp+0Ch+arg_0]
-		test	eax, eax
-		jz	short loc_2FE74
-
-		mov	ebp, [esp+0Ch+arg_4]
-		lea	ecx, [esp+0Ch+arg_8]
-		push	1
-		push	ecx
-		mov	ecx, [esi+6Ch]
-		push	ebp
-		call	?AddRoutes@CAsp4Adb@@QAEXEPATADBRamLink@@H@Z ; CAsp4Adb::AddRoutes(uchar,ADBRamLink *,int)
-
-		cmp	bl, 20h
-		jb	short loc_2FE4D
-
-		lea	edx, [edi-20h]
-		cmp	edx, 10h
-		jge	short loc_2FE4D
-
-		mov	eax, [esi+70h]
-		sub	bl, 20h
-		push	ebp
-		push	ebx
-		mov	ecx, [eax+0C8h]
-		call	?AddWTD@CAsp4SrcBlock@@QAEHEE@Z	; CAsp4SrcBlock::AddWTD(uchar,uchar)
-
-		pop	edi
-		pop	esi
-		pop	ebp
-		pop	ebx
-		retn	10h
-
-; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-
-loc_2FE4D:				; CODE XREF: Asp4Topology::Route(int,uchar,uchar,uchar)+59j
-					; Asp4Topology::Route(int,uchar,uchar,uchar)+61j
-		cmp	bl, 30h
-		jb	short loc_2FECE
-
-		add	edi, 0FFFFFFD0h
-		cmp	edi, 10h
-		jge	short loc_2FECE
-
-		mov	ecx, [esi+70h]
-		sub	bl, 30h
-		push	ebp
-		push	ebx
-		mov	ecx, [ecx+0C4h]
-		call	?AddWTD@CAsp4Mixer@@QAEHEE@Z ; CAsp4Mixer::AddWTD(uchar,uchar)
-
-		pop	edi
-		pop	esi
-		pop	ebp
-		pop	ebx
-		retn	10h
-
-; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-
-loc_2FE74:				; CODE XREF: Asp4Topology::Route(int,uchar,uchar,uchar)+40j
-		mov	eax, [esp+0Ch+arg_8]
-		mov	ebp, [esp+0Ch+arg_4]
-		mov	ecx, [esi+6Ch]
-		push	eax
-		push	eax
-		push	ebp
-		call	?DeleteRoutes@CAsp4Adb@@QAEXETADBRamLink@@0@Z ;	CAsp4Adb::DeleteRoutes(uchar,ADBRamLink,uchar)
-
-		cmp	bl, 20h
-		jb	short loc_2FEAE
-
-		lea	edx, [edi-20h]
-		cmp	edx, 10h
-		jge	short loc_2FEAE
-
-		mov	eax, [esi+70h]
-		sub	bl, 20h
-		push	ebp
-		push	ebx
-		mov	ecx, [eax+0C8h]
-		call	?DeleteWTD@CAsp4SrcBlock@@QAEHEE@Z ; CAsp4SrcBlock::DeleteWTD(uchar,uchar)
-
-		pop	edi
-		pop	esi
-		pop	ebp
-		pop	ebx
-		retn	10h
-
-; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-
-loc_2FEAE:				; CODE XREF: Asp4Topology::Route(int,uchar,uchar,uchar)+BAj
-					; Asp4Topology::Route(int,uchar,uchar,uchar)+C2j
-		cmp	bl, 30h
-		jb	short loc_2FECE
-
-		add	edi, 0FFFFFFD0h
-		cmp	edi, 10h
-		jge	short loc_2FECE
-
-		mov	ecx, [esi+70h]
-		sub	bl, 30h
-		push	ebp
-		push	ebx
-		mov	ecx, [ecx+0C4h]
-		call	?DeleteWTD@CAsp4Mixer@@QAEHEE@Z	; CAsp4Mixer::DeleteWTD(uchar,uchar)
-
-
-loc_2FECE:				; CODE XREF: Asp4Topology::Route(int,uchar,uchar,uchar)+80j
-					; Asp4Topology::Route(int,uchar,uchar,uchar)+88j ...
-		pop	edi
-		pop	esi
-		pop	ebp
-		pop	ebx
-		retn	10h
-
-?Route@Asp4Topology@@QAEXHEEE@Z	endp
-
-; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-		align 10h
-
-
-
-
-*/
-
-/*
-
-
-
-; public: void __thiscall CWTHal::SetReg(unsigned char,int,unsigned short)
-
-?SetReg@CWTHal@@QAEXEHG@Z proc near	; CODE XREF: Asp4Synth::WTTimerCallback(ulong)+E45p
-					; Asp4Synth::WTTimerCallback(ulong)+1294p
-
-arg_0		= dword	ptr  0Ch
-arg_4		= dword	ptr  10h
-arg_8		= dword	ptr  14h
-
-		push	ecx
-		push	esi
-		mov	esi, [esp+arg_4]
-		cmp	esi, 40h
-		jge	loc_54507
-
-		mov	eax, esi
-		cdq
-		and	edx, 1Fh
-		add	eax, edx
-		mov	edx, esi
-		sar	eax, 5
-		and	edx, 8000001Fh
-		mov	byte ptr [esp+arg_4], al
-		jns	short loc_5448D
-
-		dec	edx
-		or	edx, 0FFFFFFE0h
-		inc	edx
-
-loc_5448D:				; CODE XREF: CWTHal::SetReg(uchar,int,ushort)+26j
-		cmp	al, 2
-		mov	[esp+4], dl
-		jnb	short loc_54507
-
-		mov	eax, [esp+arg_0]
-		and	eax, 0FFh
-		sub	eax, 20h
-		jz	short loc_544D9
-
-		dec	eax
-		jnz	short loc_54507
-
-		mov	eax, [esp+arg_4]
-		mov	edx, [esp+4]
-		and	eax, 0FFh
-		and	edx, 0FFh
-		shl	eax, 0Bh
-		add	eax, edx
-		mov	edx, [esp+arg_8]
-		shl	eax, 4
-		add	eax, 208h
-		push	edx
-		push	eax
-		mov	eax, [ecx]
-		push	eax
-		call	?WriteWORD@CAsp4HIO@@QAGXKG@Z ;	CAsp4HIO::WriteWORD(ulong,ushort)
-
-		pop	esi
-		pop	ecx
-		retn	0Ch
-
-; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-
-loc_544D9:				; CODE XREF: CWTHal::SetReg(uchar,int,ushort)+41j
-		mov	eax, [esp+arg_4]
-		mov	edx, [esp+4]
-		and	eax, 0FFh
-		and	edx, 0FFh
-		shl	eax, 0Bh
-		add	eax, edx
-		mov	edx, [esp+arg_8]
-		shl	eax, 4
-		add	eax, 20Ah
-		push	edx
-		push	eax
-		mov	eax, [ecx]
-		push	eax
-		call	?WriteWORD@CAsp4HIO@@QAGXKG@Z ;	CAsp4HIO::WriteWORD(ulong,ushort)
-
-
-loc_54507:				; CODE XREF: CWTHal::SetReg(uchar,int,ushort)+9j
-					; CWTHal::SetReg(uchar,int,ushort)+33j	...
-		pop	esi
-		pop	ecx
-		retn	0Ch
-
-?SetReg@CWTHal@@QAEXEHG@Z endp
-
-; ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
-		align 8
-
-; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ S U B	R O U T	I N E ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
-
-
-; public: void __thiscall CWTHal::InitializeWTRegs(void)
-
-?InitializeWTRegs@CWTHal@@QAEXXZ proc near ; CODE XREF:	Asp4Synth::init(void)+242p
-
-var_10		= dword	ptr -10h
-var_C		= dword	ptr -0Ch
-var_8		= dword	ptr -8
-var_4		= dword	ptr -4
-
-		sub	esp, 10h
-		push	ebx
-		push	ebp
-		push	esi
-		xor	ebx, ebx
-		push	edi
-		mov	esi, ecx
-		mov	[esp+20h+var_10], ebx
-		mov	eax, [esp+20h+var_10]
-		and	al, 0E3h
-		or	al, 22h
-		mov	[esp+20h+var_10], eax
-		mov	ecx, [esp+20h+var_10]
-		and	ecx, 0FFFFFEBFh
-		or	cl, 80h
-		mov	[esp+20h+var_10], ecx
-		mov	edx, [esp+20h+var_10]
-		or	dh, 2
-		mov	[esp+20h+var_10], edx
-		mov	eax, [esp+20h+var_10]
-		and	al, 0FEh
-		mov	[esp+20h+var_10], eax
-		mov	ecx, [esp+20h+var_10]
-		and	ch, 0FBh
-		or	ch, 18h
-		mov	[esp+20h+var_10], ecx
-		mov	[esp+20h+var_8], ebx
-		mov	edx, [esp+20h+var_8]
-		mov	[esp+20h+var_C], edx
-		mov	eax, [esp+20h+var_C]
-		mov	[esp+20h+var_4], eax
-		mov	word ptr [esp+20h+var_4+2], 1000h
-		mov	eax, 83h
-		mov	word ptr [esp+20h+var_C+2], ax
-		mov	word ptr [esp+20h+var_8+2], ax
-		xor	edi, edi
-		mov	ebp, 2
-
-loc_54590:				; CODE XREF: CWTHal::InitializeWTRegs(void)+C9j
-		push	ebx
-		push	edi
-		push	0Ch
-		mov	ecx, esi
-		call	?SetReg@CWTHal@@QAEXEHK@Z ; CWTHal::SetReg(uchar,int,ulong)
-
-		mov	ecx, [esp+20h+var_10]
-		push	ecx
-		push	edi
-		push	0Ah
-		mov	ecx, esi
-		call	?SetReg@CWTHal@@QAEXEHK@Z ; CWTHal::SetReg(uchar,int,ulong)
-
-		mov	edx, [esp+20h+var_4]
-		push	edx
-		push	edi
-		push	9
-		mov	ecx, esi
-		call	?SetReg@CWTHal@@QAEXEHK@Z ; CWTHal::SetReg(uchar,int,ulong)
-
-		mov	eax, [esp+20h+var_C]
-		push	eax
-		push	edi
-		push	8
-		mov	ecx, esi
-		call	?SetReg@CWTHal@@QAEXEHK@Z ; CWTHal::SetReg(uchar,int,ulong)
-
-		mov	ecx, [esp+20h+var_8]
-		push	ecx
-		push	edi
-		push	5
-		mov	ecx, esi
-		call	?SetReg@CWTHal@@QAEXEHK@Z ; CWTHal::SetReg(uchar,int,ulong)
-
-		inc	edi
-		dec	ebp
-		jnz	short loc_54590
-
-		mov	eax, ?g_num_hw_voices@@3HA ; int g_num_hw_voices
-		xor	bl, bl
-		test	eax, eax
-		jle	short loc_5463D
-
-		xor	edi, edi
-
-loc_545E8:				; CODE XREF: CWTHal::InitializeWTRegs(void)+12Bj
-		push	0
-		push	edi
-		push	4
-		mov	ecx, esi
-		call	?SetReg@CWTHal@@QAEXEHK@Z ; CWTHal::SetReg(uchar,int,ulong)
-
-		push	0
-		push	edi
-		push	3
-		mov	ecx, esi
-		call	?SetReg@CWTHal@@QAEXEHK@Z ; CWTHal::SetReg(uchar,int,ulong)
-
-		push	0
-		push	edi
-		push	2
-		mov	ecx, esi
-		call	?SetReg@CWTHal@@QAEXEHK@Z ; CWTHal::SetReg(uchar,int,ulong)
-
-		push	0
-		push	edi
-		push	1
-		mov	ecx, esi
-		call	?SetReg@CWTHal@@QAEXEHK@Z ; CWTHal::SetReg(uchar,int,ulong)
-
-		push	0
-		push	edi
-		push	0Bh
-		mov	ecx, esi
-		call	?SetReg@CWTHal@@QAEXEHK@Z ; CWTHal::SetReg(uchar,int,ulong)
-
-		mov	eax, ?g_num_hw_voices@@3HA ; int g_num_hw_voices
-		inc	bl
-		mov	byte ptr [esp+20h+var_4], bl
-		mov	edi, [esp+20h+var_4]
-		and	edi, 0FFh
-		cmp	edi, eax
-		jl	short loc_545E8
-
-
-loc_5463D:				; CODE XREF: CWTHal::InitializeWTRegs(void)+D4j
-		mov	edx, [esp+20h+var_10]
-		or	edx, 1
-		mov	[esp+20h+var_10], edx
-		xor	edi, edi
-		mov	ebx, 2
-
-loc_5464F:				; CODE XREF: CWTHal::InitializeWTRegs(void)+150j
-		mov	eax, [esp+20h+var_10]
-		push	eax
-		push	edi
-		push	0Ah
-		mov	ecx, esi
-		call	?SetReg@CWTHal@@QAEXEHK@Z ; CWTHal::SetReg(uchar,int,ulong)
-
-		inc	edi
-		dec	ebx
-		jnz	short loc_5464F
-
-		pop	edi
-		pop	esi
-		pop	ebp
-		pop	ebx
-		add	esp, 10h
-		retn
-
-?InitializeWTRegs@CWTHal@@QAEXXZ endp
-
-
-
-*/
Index: debian/alsa-driver/pci/au88x0/migrate
diff -u debian/alsa-driver/pci/au88x0/migrate:1.1.1.1 debian/alsa-driver/pci/au88x0/migrate:removed
--- debian/alsa-driver/pci/au88x0/migrate:1.1.1.1	Mon Oct  6 08:01:05 2003
+++ debian/alsa-driver/pci/au88x0/migrate	Tue Apr 13 13:39:27 2004
@@ -1,20 +0,0 @@
-#!/bin/sh
-
-# This script is intended to be used AFTER moving this
-# source code files into the alsa-kernel/ directory
-# to create the .c and .h stub files for THIS directory.
-# It was written for the alsa-driver tarball. If aplied
-# to the CVS tree, you may need add another "../"
-# on the include path.
-
-FILES=$(ls -1 -A $1/*.c $1/*.h)
-
-for file in $FILES
-do
-  fil=$(basename $file)
-  echo $file -- $fil
-  echo "#define __NO_VERSION__" > $fil
-  echo "#include \"../../alsa-kernel/pci/au88x0/$fil\"" >> $fil
-  echo >> $fil
-done
-
Index: debian/alsa-driver/usb/usx2y/Kconfig
diff -u debian/alsa-driver/usb/usx2y/Kconfig:1.1.1.1 debian/alsa-driver/usb/usx2y/Kconfig:removed
--- debian/alsa-driver/usb/usx2y/Kconfig:1.1.1.1	Tue Nov 25 04:21:49 2003
+++ debian/alsa-driver/usb/usx2y/Kconfig	Tue Apr 13 13:39:27 2004
@@ -1,6 +0,0 @@
-config SND_USB_USX2Y
-	tristate "Tascam USB US-122 and US-428 driver"
-	depends on SND && USB
-	help
-	  Say 'Y' or 'M' to include support for Tascam USB US-122 and US-428.
-
Index: debian/alsa-driver/utils/Modules.dep
diff -u debian/alsa-driver/utils/Modules.dep:1.1.1.11 debian/alsa-driver/utils/Modules.dep:removed
--- debian/alsa-driver/utils/Modules.dep:1.1.1.11	Tue Feb 24 08:23:10 2004
+++ debian/alsa-driver/utils/Modules.dep	Tue Apr 13 13:39:27 2004
@@ -1,28 +0,0 @@
-#
-# Extra dependencies
-#
-
-%dir linux/sound/drivers
-|snd-serialmidi snd-seq-midi
-
-%dir linux/sound/pci
-|snd-intel8x0m snd-pcm
-|snd-hdspm snd-pcm snd-seq-midi snd-hwdep
-|snd-atiixp snd-pcm
-
-%dir linux/sound/pci/pdplus
-|snd-pdplus snd-pcm
-
-%dir linux/sound/isa/msnd
-|snd-msnd-pinnacle snd-pcm snd-seq-midi
-
-%dir linux/sound/pcmcia/pdaudiocf
-|snd-pdaudiocf snd-pcm
-
-%dir linux/sound/usb/usx2y
-|snd-usb-usx2y snd-usb-audio snd-hwdep
-
-%dir linux/sound/pci/au88x0
-|snd-au8810 snd-pcm snd-ac97-codec snd-mpu401-uart
-|snd-au8820 snd-pcm snd-ac97-codec snd-mpu401-uart
-|snd-au8830 snd-pcm snd-ac97-codec snd-mpu401-uart