diff --git a/include/sound/ac97_codec.h b/include/sound/ac97_codec.h
index 5701028..70dc293 100644
--- a/include/sound/ac97_codec.h
+++ b/include/sound/ac97_codec.h
@@ -135,6 +135,7 @@
 struct _snd_ac97 {
 	void (*write) (ac97_t *ac97, unsigned short reg, unsigned short val);
 	unsigned short (*read) (ac97_t *ac97, unsigned short reg);
+	void (*wait) (ac97_t *ac97);
 	void (*init) (ac97_t *ac97);
 	snd_info_entry_t *proc_entry;
 	snd_info_entry_t *proc_regs_entry;
diff --git a/include/sound/asound.h b/include/sound/asound.h
index 013e59f..3c7df6d 100644
--- a/include/sound/asound.h
+++ b/include/sound/asound.h
@@ -127,7 +127,7 @@
  *                                                                           *
  *****************************************************************************/
 
-#define SNDRV_PCM_VERSION			SNDRV_PROTOCOL_VERSION(2, 0, 0)
+#define SNDRV_PCM_VERSION		SNDRV_PROTOCOL_VERSION(2, 0, 1)
 
 typedef unsigned long sndrv_pcm_uframes_t;
 typedef long sndrv_pcm_sframes_t;
@@ -411,6 +411,7 @@
 	SNDRV_PCM_IOCTL_PAUSE = _IOW('A', 0x45, int),
 	SNDRV_PCM_IOCTL_REWIND = _IOW('A', 0x46, sndrv_pcm_uframes_t),
 	SNDRV_PCM_IOCTL_RESUME = _IO('A', 0x47),
+	SNDRV_PCM_IOCTL_XRUN = _IO('A', 0x48),
 	SNDRV_PCM_IOCTL_WRITEI_FRAMES = _IOW('A', 0x50, struct sndrv_xferi),
 	SNDRV_PCM_IOCTL_READI_FRAMES = _IOR('A', 0x51, struct sndrv_xferi),
 	SNDRV_PCM_IOCTL_WRITEN_FRAMES = _IOW('A', 0x52, struct sndrv_xfern),
@@ -578,7 +579,7 @@
  *                                                                          *
  ****************************************************************************/
 
-#define SNDRV_CTL_VERSION			SNDRV_PROTOCOL_VERSION(2, 0, 0)
+#define SNDRV_CTL_VERSION		SNDRV_PROTOCOL_VERSION(2, 0, 0)
 
 struct sndrv_ctl_card_info {
 	int card;			/* card number */
diff --git a/include/sound/core.h b/include/sound/core.h
index ebd845c..5744cdd 100644
--- a/include/sound/core.h
+++ b/include/sound/core.h
@@ -292,13 +292,21 @@
 /* misc.c */
 
 int snd_task_name(struct task_struct *task, char *name, size_t size);
+#ifdef CONFIG_SND_VERBOSE_PRINTK
+int snd_verbose_printk(const char *file, int line, const char *format);
+#endif
 
 /* --- */
 
+#ifdef CONFIG_SND_VERBOSE_PRINTK
 #define snd_printk(format, args...) do { \
-	printk("ALSA %s:%d: ", __FILE__, __LINE__); \
+	printk(snd_verbose_printk(__FILE__, __LINE__, format) ? format + 3 : format, ##args); \
+} while (0)
+#else
+#define snd_printk(format, args...) do { \
 	printk(format, ##args); \
 } while (0)
+#endif
 
 #ifdef CONFIG_SND_DEBUG
 
diff --git a/include/sound/emu10k1.h b/include/sound/emu10k1.h
index 4705a92..3f03bec 100644
--- a/include/sound/emu10k1.h
+++ b/include/sound/emu10k1.h
@@ -588,7 +588,7 @@
 #define REG53			0x53		/* DO NOT PROGRAM THIS REGISTER!!! MAY DESTROY CHIP */
 
 #define A_DBG			 0x53
-#define A_DBG_SINGLE_STEP_ADDR	 0x00020000	/* Set to zero to start dsp */
+#define A_DBG_SINGLE_STEP	 0x00020000	/* Set to zero to start dsp */
 #define A_DBG_ZC		 0x40000000	/* zero tram counter */
 #define A_DBG_STEP_ADDR		 0x000003ff
 #define A_DBG_SATURATION_OCCURED 0x20000000
@@ -657,6 +657,11 @@
 #define SRCS_RATELOCKED		0x01000000	/* Sample rate locked				*/
 #define SRCS_ESTSAMPLERATE	0x0007ffff	/* Do not modify this field.			*/
 
+/* Note that these values can vary +/- by a small amount                                        */
+#define SRCS_SPDIFRATE_44	0x0003acd9
+#define SRCS_SPDIFRATE_48	0x00040000
+#define SRCS_SPDIFRATE_96	0x00080000
+
 #define MICIDX                  0x63            /* Microphone recording buffer index register   */
 #define MICIDX_MASK             0x0000ffff      /* 16-bit value                                 */
 #define MICIDX_IDX		0x10000063
@@ -683,15 +688,15 @@
 #define A_MUSTAT2		A_MUCMD2	
 
 #define A_SPDIF_SAMPLERATE	0x76		/* Set the sample rate of SPDIF output		*/
-#define A_SPDIF_48000		0x00000000
-#define A_SPDIF_44100		0x00000040
-#define A_SPDIF_96000		0x00000080
+#define A_SPDIF_48000		0x00000080
+#define A_SPDIF_44100		0x00000000
+#define A_SPDIF_96000		0x00000040
 
 #define A_FXRT2			0x7c
-#define A_FXRT_CHANNELE		0x0000003f	/* Effects send bus number for channel's effects send A	*/
-#define A_FXRT_CHANNELF		0x00003f00	/* Effects send bus number for channel's effects send B	*/
-#define A_FXRT_CHANNELG		0x003f0000	/* Effects send bus number for channel's effects send C	*/
-#define A_FXRT_CHANNELH		0x3f000000	/* Effects send bus number for channel's effects send D	*/
+#define A_FXRT_CHANNELE		0x0000003f	/* Effects send bus number for channel's effects send E	*/
+#define A_FXRT_CHANNELF		0x00003f00	/* Effects send bus number for channel's effects send F	*/
+#define A_FXRT_CHANNELG		0x003f0000	/* Effects send bus number for channel's effects send G	*/
+#define A_FXRT_CHANNELH		0x3f000000	/* Effects send bus number for channel's effects send H	*/
 
 #define A_SENDAMOUNTS		0x7d
 #define A_FXSENDAMOUNT_E_MASK	0xFF000000
@@ -797,8 +802,8 @@
 };
 
 typedef struct {
-	unsigned long send_routing[3];
-	unsigned char send_volume[3][4];
+	unsigned char send_routing[3][8];
+	unsigned char send_volume[3][8];
 	unsigned short attn[3];
 	snd_kcontrol_t *ctl_send_routing;
 	snd_kcontrol_t *ctl_send_volume;
@@ -806,6 +811,15 @@
 	emu10k1_pcm_t *epcm;
 } emu10k1_pcm_mixer_t;
 
+#define snd_emu10k1_compose_send_routing(route) \
+((route[0] | (route[1] << 4) | (route[2] << 8) | (route[3] << 12)) << 16)
+
+#define snd_emu10k1_compose_audigy_fxrt1(route) \
+(((unsigned int)route[0] | ((unsigned int)route[1] << 8) | ((unsigned int)route[2] << 16) | ((unsigned int)route[3] << 12)) << 24)
+
+#define snd_emu10k1_compose_audigy_fxrt2(route) \
+(((unsigned int)route[4] | ((unsigned int)route[5] << 8) | ((unsigned int)route[6] << 16) | ((unsigned int)route[7] << 12)) << 24)
+
 typedef struct snd_emu10k1_memblk {
 	snd_util_memblk_t mem;
 	/* private part */
@@ -1102,11 +1116,11 @@
 #define GPR_NOISE1	0x59		/* noise source */
 #define GPR_IRQ		0x5a		/* IRQ register */
 #define GPR_DBAC	0x5b		/* TRAM Delay Base Address Counter */
-#define GPR(x)		(FXGPREGBASE + (x))	/* free GPRs: x = 0x00 - 0xff */
-#define ITRAM_DATA(x)	(TANKMEMDATAREGBASE + (x))	/* x = 0x00 - 0x7f */
-#define ETRAM_DATA(x)	(TANKMEMDATAREGBASE + 80 + (x))	/* x = 0x00 - 0x1f */
-#define ITRAM_ADDR(x)	(TANKMEMADDRREGBASE + (x))	/* x = 0x00 - 0x7f */
-#define ETRAM_ADDR(x)	(TANKMEMADDRREGBASE + 80 + (x))	/* x = 0x00 - 0x1f */
+#define GPR(x)		(FXGPREGBASE + (x)) /* free GPRs: x = 0x00 - 0xff */
+#define ITRAM_DATA(x)	(TANKMEMDATAREGBASE + 0x00 + (x)) /* x = 0x00 - 0x7f */
+#define ETRAM_DATA(x)	(TANKMEMDATAREGBASE + 0x80 + (x)) /* x = 0x00 - 0x1f */
+#define ITRAM_ADDR(x)	(TANKMEMADDRREGBASE + 0x00 + (x)) /* x = 0x00 - 0x7f */
+#define ETRAM_ADDR(x)	(TANKMEMADDRREGBASE + 0x80 + (x)) /* x = 0x00 - 0x1f */
 
 #define A_FXBUS(x)	(0x00 + (x))	/* x = 0x00 - 0x3f? */
 #define A_EXTIN(x)	(0x40 + (x))	/* x = 0x00 - 0x1f? */
@@ -1171,6 +1185,10 @@
 #define A_EXTIN_AC97_R		0x01	/* AC'97 capture channel - right */
 #define A_EXTIN_SPDIF_CD_L	0x02	/* digital CD left */
 #define A_EXTIN_SPDIF_CD_R	0x03	/* digital CD left */
+#define A_EXTIN_LINE2_L		0x08	/* audigy drive line2/mic2 - left */
+#define A_EXTIN_LINE2_R		0x09	/*                           right */
+#define A_EXTIN_AUX2_L		0x0c	/* audigy drive aux2 - left */
+#define A_EXTIN_AUX2_R		0x0d	/*                   - right */
 
 /* Audigiy Outputs */
 #define A_EXTOUT_FRONT_L	0x00	/* digital front left */
@@ -1189,9 +1207,38 @@
 /* 0x0d ?? */
 #define A_EXTOUT_AREAR_L	0x0e	/* analog rear left */
 #define A_EXTOUT_AREAR_R	0x0f	/*             right */
-/* 0x10-0x15 ?? */
-#define A_EXTOUT_ADC_CAP_L	0x16	/* ADC capture buffer left */
-#define A_EXTOUT_ADC_CAP_R	0x17	/*                    right */
+#define A_EXTOUT_AC97_L		0x10	/* AC97 left (front) */
+#define A_EXTOUT_AC97_R		0x11	/*      right */
+#define A_EXTOUT_ADC_CAP_L	0x12	/* ADC capture buffer left */
+#define A_EXTOUT_ADC_CAP_R	0x13	/*                    right */
+
+/* Audigy constants */
+#define A_C_00000000	0xc0
+#define A_C_00000001	0xc1
+#define A_C_00000002	0xc2
+#define A_C_00000003	0xc3
+#define A_C_00000004	0xc4
+#define A_C_00000008	0xc5
+#define A_C_00000010	0xc6
+#define A_C_00000020	0xc7
+#define A_C_00000100	0xc8
+#define A_C_00010000	0xc9
+#define A_C_00000800	0xca
+#define A_C_10000000	0xcb
+#define A_C_20000000	0xcc
+#define A_C_40000000	0xcd
+#define A_C_80000000	0xce
+#define A_C_7fffffff	0xcf
+#define A_C_ffffffff	0xd0
+#define A_C_fffffffe	0xd1
+#define A_C_c0000000	0xd2
+#define A_C_4f1bbcdc	0xd3
+#define A_C_5a7ef9db	0xd4
+#define A_C_00100000	0xd5
+/* 0xd6 = 0x7fffffff  (?) ACCUM? */
+/* 0xd7 = 0x0000000   CCR */
+/* 0xd8 = noise1 */
+/* 0xd9 = noise2 */
 
 /* definitions for debug register */
 #define EMU10K1_DBG_ZC			0x80000000	/* zero tram counter */
diff --git a/include/sound/version.h b/include/sound/version.h
index eac7e72..50a7e6f 100644
--- a/include/sound/version.h
+++ b/include/sound/version.h
@@ -1,3 +1,3 @@
 /* include/version.h.  Generated automatically by configure.  */
-#define CONFIG_SND_VERSION "0.9.0beta11"
-#define CONFIG_SND_DATE " (Tue Feb 19 08:14:59 2002 UTC)"
+#define CONFIG_SND_VERSION "0.9.0beta12"
+#define CONFIG_SND_DATE " (Tue Feb 26 09:34:24 2002 UTC)"
diff --git a/sound/Makefile b/sound/Makefile
index 5f8ab02..2d056ab 100644
--- a/sound/Makefile
+++ b/sound/Makefile
@@ -10,6 +10,7 @@
 subdir-$(CONFIG_SOUND_PRIME) += oss
 
 ifeq ($(CONFIG_SOUND_PRIME),y)
+  subdir-m += oss
   obj-y += oss/sounddrivers.o
 endif
 
diff --git a/sound/core/Config.in b/sound/core/Config.in
index bd5bf6c..5e9b5a1 100644
--- a/sound/core/Config.in
+++ b/sound/core/Config.in
@@ -1,6 +1,5 @@
 # ALSA soundcard-configuration
 
-dep_tristate '  RTC Timer support' CONFIG_SND_RTCTIMER $CONFIG_SND
 dep_tristate '  Sequencer support' CONFIG_SND_SEQUENCER $CONFIG_SND
 if [ "$CONFIG_SND_SEQUENCER" != "n" ]; then
   dep_tristate '  Sequencer dummy client' CONFIG_SND_SEQ_DUMMY $CONFIG_SND_SEQUENCER
@@ -13,9 +12,10 @@
     dep_tristate '    OSS Sequencer API' CONFIG_SND_SEQUENCER_OSS $CONFIG_SND_SEQUENCER
   fi
 fi
+dep_tristate '  RTC Timer support' CONFIG_SND_RTCTIMER $CONFIG_SND
+bool '  Verbose printk' CONFIG_SND_VERBOSE_PRINTK
 bool '  Debug' CONFIG_SND_DEBUG
 if [ "$CONFIG_SND_DEBUG" = "y" ]; then
   bool '    Debug memory' CONFIG_SND_DEBUG_MEMORY
-  bool '    Debug full' CONFIG_SND_DEBUG_FULL
   bool '    Debug detection' CONFIG_SND_DEBUG_DETECT
 fi
diff --git a/sound/core/Makefile b/sound/core/Makefile
index 3168272a3..50dd397 100644
--- a/sound/core/Makefile
+++ b/sound/core/Makefile
@@ -33,16 +33,18 @@
 subdir-$(CONFIG_SND_MIXER_OSS) += oss
 subdir-$(CONFIG_SND_PCM_OSS) += oss
 ifeq ($(filter $(subdir-y),oss),oss)
+  subdir-m += oss
   obj-y += oss/oss.o
 endif
 
 subdir-$(CONFIG_SND_SEQUENCER) += seq
 ifeq ($(CONFIG_SND_SEQUENCER),y)
-  ifeq ($(CONFIG_SND),y)
-     obj-y += seq/sq.o
-  endif
+  subdir-m += seq
+  obj-y += seq/sq.o
 endif
 
+obj-$(CONFIG_SND_SEQUENCER) += snd-timer.o
+
 # Toplevel Module Dependency
 obj-$(CONFIG_SND_DUMMY) += snd-pcm.o snd-timer.o snd.o
 obj-$(CONFIG_SND_VIRMIDI) += snd-rawmidi.o snd.o snd-timer.o
@@ -69,7 +71,7 @@
 obj-$(CONFIG_SND_OPTI92X_AD1848) += snd-pcm.o snd-timer.o snd.o snd-rawmidi.o snd-hwdep.o
 obj-$(CONFIG_SND_OPTI92X_CS4231) += snd-pcm.o snd-timer.o snd.o snd-rawmidi.o snd-hwdep.o
 obj-$(CONFIG_SND_OPTI93X) += snd-pcm.o snd-timer.o snd.o snd-rawmidi.o snd-hwdep.o
-obj-$(CONFIG_SND_SB) += snd-pcm.o snd-timer.o snd.o snd-rawmidi.o snd-hwdep.o
+obj-$(CONFIG_SND_SB8) += snd-pcm.o snd-timer.o snd.o snd-rawmidi.o snd-hwdep.o
 obj-$(CONFIG_SND_SB16) += snd-pcm.o snd-timer.o snd.o snd-hwdep.o snd-rawmidi.o
 obj-$(CONFIG_SND_SBAWE) += snd-pcm.o snd-timer.o snd.o snd-hwdep.o snd-rawmidi.o
 obj-$(CONFIG_SND_ES968) += snd-pcm.o snd-timer.o snd.o snd-rawmidi.o
@@ -79,7 +81,7 @@
 obj-$(CONFIG_SND_CS4281) += snd-pcm.o snd-timer.o snd.o snd-rawmidi.o snd-hwdep.o
 obj-$(CONFIG_SND_ENS1370) += snd-pcm.o snd-timer.o snd.o snd-rawmidi.o
 obj-$(CONFIG_SND_ENS1371) += snd-pcm.o snd-timer.o snd.o snd-rawmidi.o
-obj-$(CONFIG_SND_ES1938) += snd-pcm.o snd-timer.o snd.o snd-rawmidi.o snd-hwdep.o
+obj-$(CONFIG_SND_ES1938) += snd-pcm.o snd-timer.o snd.o snd-hwdep.o snd-rawmidi.o
 obj-$(CONFIG_SND_ES1968) += snd-pcm.o snd-timer.o snd.o snd-rawmidi.o
 obj-$(CONFIG_SND_FM801) += snd-pcm.o snd-timer.o snd.o snd-rawmidi.o snd-hwdep.o
 obj-$(CONFIG_SND_ICE1712) += snd-pcm.o snd-timer.o snd.o snd-rawmidi.o
diff --git a/sound/core/control.c b/sound/core/control.c
index 840b563..b809c17 100644
--- a/sound/core/control.c
+++ b/sound/core/control.c
@@ -166,7 +166,7 @@
 			ev->mask = mask;
 			list_add_tail(&ev->list, &ctl->events);
 		} else {
-			snd_printk("No memory available to allocate event\n");
+			snd_printk(KERN_ERR "No memory available to allocate event\n");
 		}
 	_found:
 		wake_up(&ctl->change_sleep);
diff --git a/sound/core/device.c b/sound/core/device.c
index a5d8efa..39ee157 100644
--- a/sound/core/device.c
+++ b/sound/core/device.c
@@ -58,11 +58,11 @@
 		list_del(&dev->list);
 		if (dev->state == SNDRV_DEV_REGISTERED && dev->ops->dev_unregister) {
 			if (dev->ops->dev_unregister(dev))
-				snd_printk("device unregister failure\n");
+				snd_printk(KERN_ERR "device unregister failure\n");
 		} else {
 			if (dev->ops->dev_free) {
 				if (dev->ops->dev_free(dev))
-					snd_printk("device free failure\n");
+					snd_printk(KERN_ERR "device free failure\n");
 			}
 		}
 		snd_magic_kfree(dev);
diff --git a/sound/core/hwdep.c b/sound/core/hwdep.c
index 5a860ea..1714df1 100644
--- a/sound/core/hwdep.c
+++ b/sound/core/hwdep.c
@@ -321,7 +321,7 @@
 	if ((err = snd_register_device(SNDRV_DEVICE_TYPE_HWDEP,
 				       hwdep->card, hwdep->device,
 				       &snd_hwdep_reg, name)) < 0) {
-		snd_printk("unable to register hardware dependant device %i:%i\n",
+		snd_printk(KERN_ERR "unable to register hardware dependant device %i:%i\n",
 			   hwdep->card->number, hwdep->device);
 		snd_hwdep_devices[idx] = NULL;
 		up(&register_mutex);
@@ -331,12 +331,12 @@
 	hwdep->ossreg = 0;
 	if (hwdep->oss_type >= 0) {
 		if ((hwdep->oss_type == SNDRV_OSS_DEVICE_TYPE_DMFM) && (hwdep->device != 0)) {
-			snd_printk ("only hwdep device 0 can be registered as OSS direct FM device!\n");
+			snd_printk (KERN_WARNING "only hwdep device 0 can be registered as OSS direct FM device!\n");
 		} else {
 			if (snd_register_oss_device(hwdep->oss_type,
 						    hwdep->card, hwdep->device,
 						    &snd_hwdep_reg, hwdep->oss_dev) < 0) {
-				snd_printk("unable to register OSS compatibility device %i:%i\n",
+				snd_printk(KERN_ERR "unable to register OSS compatibility device %i:%i\n",
 					   hwdep->card->number, hwdep->device);
 			} else {
 				snd_oss_info_register(SNDRV_OSS_INFO_DEV_SYNTH, hwdep->card->number, hwdep->name);
diff --git a/sound/core/info.c b/sound/core/info.c
index 3faa42e04..5e6eb49 100644
--- a/sound/core/info.c
+++ b/sound/core/info.c
@@ -430,7 +430,7 @@
 			if (entry->c.text.write) {
 				entry->c.text.write(entry, data->wbuffer);
 				if (data->wbuffer->error) {
-					snd_printk("data write error to %s (%i)\n",
+					snd_printk(KERN_WARNING "data write error to %s (%i)\n",
 						entry->name,
 						data->wbuffer->error);
 				}
diff --git a/sound/core/init.c b/sound/core/init.c
index 6d35d52..80286c7 100644
--- a/sound/core/init.c
+++ b/sound/core/init.c
@@ -74,7 +74,7 @@
 	if (idx < 0 || idx >= snd_ecards_limit) {
 		write_unlock(&snd_card_rwlock);
 		if (idx >= snd_ecards_limit)
-			snd_printk("card %i is out of range (0-%i)\n", idx, snd_ecards_limit-1);
+			snd_printk(KERN_ERR "card %i is out of range (0-%i)\n", idx, snd_ecards_limit-1);
 		goto __error;
 	}
 	snd_cards_lock |= 1 << idx;		/* lock it */
@@ -140,26 +140,26 @@
 		snd_mixer_oss_notify_callback(card, 1);
 #endif
 	if (snd_device_free_all(card, SNDRV_DEV_CMD_PRE) < 0) {
-		snd_printk("unable to free all devices (pre)\n");
+		snd_printk(KERN_ERR "unable to free all devices (pre)\n");
 		/* Fatal, but this situation should never occur */
 	}
 	if (snd_device_free_all(card, SNDRV_DEV_CMD_NORMAL) < 0) {
-		snd_printk("unable to free all devices (normal)\n");
+		snd_printk(KERN_ERR "unable to free all devices (normal)\n");
 		/* Fatal, but this situation should never occur */
 	}
 	if (snd_ctl_unregister(card) < 0) {
-		snd_printk("unable to unregister control minors\n");
+		snd_printk(KERN_ERR "unable to unregister control minors\n");
 		/* Not fatal error */
 	}
 	if (snd_device_free_all(card, SNDRV_DEV_CMD_POST) < 0) {
-		snd_printk("unable to free all devices (post)\n");
+		snd_printk(KERN_ERR "unable to free all devices (post)\n");
 		/* Fatal, but this situation should never occur */
 	}
 	if (card->private_free)
 		card->private_free(card);
 	snd_info_free_entry(card->proc_id);
 	if (snd_info_card_unregister(card) < 0) {
-		snd_printk("unable to unregister card info\n");
+		snd_printk(KERN_WARNING "unable to unregister card info\n");
 		/* Not fatal error */
 	}
 	write_lock(&snd_card_rwlock);
diff --git a/sound/core/memory.c b/sound/core/memory.c
index 0f051ef..25664f8 100644
--- a/sound/core/memory.c
+++ b/sound/core/memory.c
@@ -68,28 +68,28 @@
 	struct list_head *head;
 	struct snd_alloc_track *t;
 	if (snd_alloc_pages > 0)
-		snd_printk("Not freed snd_alloc_pages = %li\n", snd_alloc_pages);
+		snd_printk(KERN_ERR "Not freed snd_alloc_pages = %li\n", snd_alloc_pages);
 	if (snd_alloc_kmalloc > 0)
-		snd_printk("Not freed snd_alloc_kmalloc = %li\n", snd_alloc_kmalloc);
+		snd_printk(KERN_ERR "Not freed snd_alloc_kmalloc = %li\n", snd_alloc_kmalloc);
 	if (snd_alloc_vmalloc > 0)
-		snd_printk("Not freed snd_alloc_vmalloc = %li\n", snd_alloc_vmalloc);
+		snd_printk(KERN_ERR "Not freed snd_alloc_vmalloc = %li\n", snd_alloc_vmalloc);
 	for (head = snd_alloc_kmalloc_list.prev;
 	     head != &snd_alloc_kmalloc_list; head = head->prev) {
 		t = list_entry(head, struct snd_alloc_track, list);
 		if (t->magic != KMALLOC_MAGIC) {
-			snd_printk("Corrupted kmalloc\n");
+			snd_printk(KERN_ERR "Corrupted kmalloc\n");
 			break;
 		}
-		snd_printk("kmalloc(%ld) from %p not freed\n", (long) t->size, t->caller);
+		snd_printk(KERN_ERR "kmalloc(%ld) from %p not freed\n", (long) t->size, t->caller);
 	}
 	for (head = snd_alloc_vmalloc_list.prev;
 	     head != &snd_alloc_vmalloc_list; head = head->prev) {
 		t = list_entry(head, struct snd_alloc_track, list);
 		if (t->magic != VMALLOC_MAGIC) {
-			snd_printk("Corrupted vmalloc\n");
+			snd_printk(KERN_ERR "Corrupted vmalloc\n");
 			break;
 		}
-		snd_printk("vmalloc(%ld) from %p not freed\n", (long) t->size, t->caller);
+		snd_printk(KERN_ERR "vmalloc(%ld) from %p not freed\n", (long) t->size, t->caller);
 	}
 }
 
@@ -125,12 +125,12 @@
 	unsigned long flags;
 	struct snd_alloc_track *t;
 	if (obj == NULL) {
-		snd_printk("null kfree (called from %p)\n", __builtin_return_address(0));
+		snd_printk(KERN_WARNING "null kfree (called from %p)\n", __builtin_return_address(0));
 		return;
 	}
 	t = snd_alloc_track_entry(obj);
 	if (t->magic != KMALLOC_MAGIC) {
-		snd_printk("bad kfree (called from %p)\n", __builtin_return_address(0));
+		snd_printk(KERN_WARNING "bad kfree (called from %p)\n", __builtin_return_address(0));
 		return;
 	}
 	spin_lock_irqsave(&snd_alloc_kmalloc_lock, flags);
@@ -166,7 +166,7 @@
 {
 	unsigned long *ptr = _ptr;
 	if (ptr == NULL) {
-		snd_printk("null snd_magic_kfree (called from %p)\n", __builtin_return_address(0));
+		snd_printk(KERN_WARNING "null snd_magic_kfree (called from %p)\n", __builtin_return_address(0));
 		return;
 	}
 	*--ptr = 0;
@@ -174,7 +174,7 @@
 		struct snd_alloc_track *t;
 		t = snd_alloc_track_entry(ptr);
 		if (t->magic != KMALLOC_MAGIC) {
-			snd_printk("bad snd_magic_kfree (called from %p)\n", __builtin_return_address(0));
+			snd_printk(KERN_ERR "bad snd_magic_kfree (called from %p)\n", __builtin_return_address(0));
 			return;
 		}
 	}
@@ -204,12 +204,12 @@
 {
 	struct snd_alloc_track *t;
 	if (obj == NULL) {
-		snd_printk("null vfree (called from %p)\n", __builtin_return_address(0));
+		snd_printk(KERN_WARNING "null vfree (called from %p)\n", __builtin_return_address(0));
 		return;
 	}
 	t = snd_alloc_track_entry(obj);
 	if (t->magic != VMALLOC_MAGIC) {
-		snd_printk("bad vfree (called from %p)\n", __builtin_return_address(0));
+		snd_printk(KERN_ERR "bad vfree (called from %p)\n", __builtin_return_address(0));
 		return;
 	}
 	spin_lock(&snd_alloc_vmalloc_lock);
@@ -516,29 +516,36 @@
 /*
  * A dirty hack... when the kernel code is fixed this should be removed.
  *
- * since pci_alloc_consistent always tries GFP_ATOMIC when the requested
+ * since pci_alloc_consistent always tries GFP_DMA when the requested
  * pci memory region is below 32bit, it happens quite often that even
  * 2 order or pages cannot be allocated.
  *
- * so in the following, GFP_ATOMIC is used only when the first allocation
+ * so in the following, GFP_DMA is used only when the first allocation
  * doesn't match the requested region.
  */
+#ifdef __i386__
+#define get_phys_addr(x) virt_to_phys(x)
+#else /* ppc */
+#define get_phys_addr(x) virt_to_bus(x)
+#endif
 void *snd_pci_hack_alloc_consistent(struct pci_dev *hwdev, size_t size,
 				    dma_addr_t *dma_handle)
 {
 	void *ret;
 	int gfp = GFP_ATOMIC;
 
+	if (hwdev == NULL)
+		gfp |= GFP_DMA;
 	ret = (void *)__get_free_pages(gfp, get_order(size));
 	if (ret) {
-		if (hwdev && ((virt_to_phys(ret) + size - 1) & ~hwdev->dma_mask)) {
+		if (hwdev && ((get_phys_addr(ret) + size - 1) & ~hwdev->dma_mask)) {
 			free_pages((unsigned long)ret, get_order(size));
 			ret = (void *)__get_free_pages(gfp | GFP_DMA, get_order(size));
 		}
 	}
 	if (ret) {
 		memset(ret, 0, size);
-		*dma_handle = virt_to_phys(ret);
+		*dma_handle = get_phys_addr(ret);
 	}
 	return ret;
 }
diff --git a/sound/core/misc.c b/sound/core/misc.c
index 195552a..2e39398 100644
--- a/sound/core/misc.c
+++ b/sound/core/misc.c
@@ -36,3 +36,18 @@
 	name[idx] = '\0';
 	return 0;
 }
+
+#ifdef CONFIG_SND_VERBOSE_PRINTK
+int snd_verbose_printk(const char *file, int line, const char *format)
+{
+	if (format[0] == '<' && format[1] >= '0' && format[1] <= '9' && format[2] == '>') {
+		char tmp[] = "<0>ALSA %s:%d: ";
+		tmp[1] = format[1];
+		printk("%sALSA %s:%d: ", tmp, file, line);
+		return 1;
+	} else {
+		printk("ALSA %s:%d: ", file, line);
+		return 0;
+	}
+}
+#endif
diff --git a/sound/core/pcm_lib.c b/sound/core/pcm_lib.c
index 3bedabf..0519851 100644
--- a/sound/core/pcm_lib.c
+++ b/sound/core/pcm_lib.c
@@ -104,7 +104,7 @@
 		snd_timestamp_now((snd_timestamp_t*)&runtime->status->tstamp);
 #ifdef CONFIG_SND_DEBUG
 	if (pos > runtime->buffer_size) {
-		snd_printk("BUG: stream = %i, pos = 0x%lx, buffer size = 0x%lx, period size = 0x%lx\n", substream->stream, pos, runtime->buffer_size, runtime->period_size);
+		snd_printk(KERN_ERR  "BUG: stream = %i, pos = 0x%lx, buffer size = 0x%lx, period size = 0x%lx\n", substream->stream, pos, runtime->buffer_size, runtime->period_size);
 	} else
 #endif
 	snd_runtime_check(pos <= runtime->buffer_size, return 0);
@@ -170,7 +170,7 @@
 		snd_timestamp_now((snd_timestamp_t*)&runtime->status->tstamp);
 #ifdef CONFIG_SND_DEBUG
 	if (pos > runtime->buffer_size) {
-		snd_printk("BUG: stream = %i, pos = 0x%lx, buffer size = 0x%lx, period size = 0x%lx\n", substream->stream, pos, runtime->buffer_size, runtime->period_size);
+		snd_printk(KERN_ERR "BUG: stream = %i, pos = 0x%lx, buffer size = 0x%lx, period size = 0x%lx\n", substream->stream, pos, runtime->buffer_size, runtime->period_size);
 	} else
 #endif
 	snd_runtime_check(pos <= runtime->buffer_size, return 0);
diff --git a/sound/core/pcm_native.c b/sound/core/pcm_native.c
index 3cacd998..88381f81 100644
--- a/sound/core/pcm_native.c
+++ b/sound/core/pcm_native.c
@@ -837,6 +837,42 @@
 
 #endif /* CONFIG_PM */
 
+static int snd_pcm_xrun(snd_pcm_substream_t *substream)
+{
+	snd_card_t *card = substream->pcm->card;
+	snd_pcm_runtime_t *runtime = substream->runtime;
+	int result;
+
+	snd_power_lock(card);
+	spin_lock_irq(&runtime->lock);
+       _xrun_recovery:
+	switch (runtime->status->state) {
+	case SNDRV_PCM_STATE_XRUN:
+		result = 0;	/* already there */
+		break;
+	case SNDRV_PCM_STATE_RUNNING:
+		result = snd_pcm_stop(substream, SNDRV_PCM_STATE_XRUN);
+		break;
+	case SNDRV_PCM_STATE_SUSPENDED:
+		while (snd_power_get_state(card) != SNDRV_CTL_POWER_D0) {
+			if (substream->ffile->f_flags & O_NONBLOCK) {
+				result = -EAGAIN;
+				goto _end;
+			}
+			spin_unlock_irq(&runtime->lock);
+			snd_power_wait(card);
+			spin_lock_irq(&runtime->lock);
+		}
+		goto _xrun_recovery;
+	default:
+		result = -EBADFD;
+	}
+       _end:
+	spin_unlock_irq(&runtime->lock);
+	snd_power_unlock(card);
+	return result;
+}
+
 static inline int snd_pcm_pre_reset(snd_pcm_substream_t * substream, int state)
 {
 	snd_pcm_runtime_t *runtime = substream->runtime;
@@ -1999,6 +2035,10 @@
 		return snd_pcm_link(substream, (long) arg);
 	case SNDRV_PCM_IOCTL_UNLINK:
 		return snd_pcm_unlink(substream);
+	case SNDRV_PCM_IOCTL_RESUME:
+		return snd_pcm_resume(substream);
+	case SNDRV_PCM_IOCTL_XRUN:
+		return snd_pcm_xrun(substream);
 	}
 	snd_printd("unknown ioctl = 0x%x\n", cmd);
 	return -ENOTTY;
@@ -2071,8 +2111,6 @@
 		return snd_pcm_playback_drop(substream);
 	case SNDRV_PCM_IOCTL_DELAY:
 		return snd_pcm_playback_delay(substream, (snd_pcm_sframes_t*) arg);
-	case SNDRV_PCM_IOCTL_RESUME:
-		return snd_pcm_resume(substream);
 	}
 	return snd_pcm_common_ioctl1(substream, cmd, arg);
 }
@@ -2136,8 +2174,6 @@
 		return snd_pcm_capture_drop(substream);
 	case SNDRV_PCM_IOCTL_DELAY:
 		return snd_pcm_capture_delay(substream, (snd_pcm_sframes_t*) arg);
-	case SNDRV_PCM_IOCTL_RESUME:
-		return snd_pcm_resume(substream);
 	}
 	return snd_pcm_common_ioctl1(substream, cmd, arg);
 }
diff --git a/sound/core/rawmidi.c b/sound/core/rawmidi.c
index 18f6815..9c6a7c0 100644
--- a/sound/core/rawmidi.c
+++ b/sound/core/rawmidi.c
@@ -769,7 +769,7 @@
 	}
 #ifdef CONFIG_SND_DEBUG
 	default:
-		snd_printk("rawmidi: unknown command = 0x%x\n", cmd);
+		snd_printk(KERN_WARNING "rawmidi: unknown command = 0x%x\n", cmd);
 #endif
 	}
 	return -ENOTTY;
@@ -1408,7 +1408,7 @@
 	if ((err = snd_register_device(SNDRV_DEVICE_TYPE_RAWMIDI,
 				       rmidi->card, rmidi->device,
 				       &snd_rawmidi_reg, name)) < 0) {
-		snd_printk("unable to register rawmidi device %i:%i\n", rmidi->card->number, rmidi->device);
+		snd_printk(KERN_ERR "unable to register rawmidi device %i:%i\n", rmidi->card->number, rmidi->device);
 		snd_rawmidi_devices[idx] = NULL;
 		up(&register_mutex);
 		return err;
@@ -1425,7 +1425,7 @@
 	if (rmidi->device == snd_midi_map[rmidi->card->number]) {
 		if (snd_register_oss_device(SNDRV_OSS_DEVICE_TYPE_MIDI,
 					    rmidi->card, 0, &snd_rawmidi_reg, name) < 0) {
-			snd_printk("unable to register OSS rawmidi device %i:%i\n", rmidi->card->number, 0);
+			snd_printk(KERN_ERR "unable to register OSS rawmidi device %i:%i\n", rmidi->card->number, 0);
 		} else {
 			rmidi->ossreg++;
 			snd_oss_info_register(SNDRV_OSS_INFO_DEV_MIDI, rmidi->card->number, rmidi->name);
@@ -1434,7 +1434,7 @@
 	if (rmidi->device == snd_amidi_map[rmidi->card->number]) {
 		if (snd_register_oss_device(SNDRV_OSS_DEVICE_TYPE_MIDI,
 					    rmidi->card, 1, &snd_rawmidi_reg, name) < 0) {
-			snd_printk("unable to register OSS rawmidi device %i:%i\n", rmidi->card->number, 1);
+			snd_printk(KERN_ERR "unable to register OSS rawmidi device %i:%i\n", rmidi->card->number, 1);
 		} else {
 			rmidi->ossreg++;
 		}
@@ -1532,11 +1532,11 @@
 	/* check device map table */
 	for (i = 0; i < SNDRV_CARDS; i++) {
 		if (snd_midi_map[i] < 0 || snd_midi_map[i] >= SNDRV_RAWMIDI_DEVICES) {
-			snd_printk("invalid midi_map[%d] = %d\n", i, snd_midi_map[i]);
+			snd_printk(KERN_ERR "invalid midi_map[%d] = %d\n", i, snd_midi_map[i]);
 			snd_midi_map[i] = 0;
 		}
 		if (snd_amidi_map[i] < 0 || snd_amidi_map[i] >= SNDRV_RAWMIDI_DEVICES) {
-			snd_printk("invalid amidi_map[%d] = %d\n", i, snd_amidi_map[i]);
+			snd_printk(KERN_ERR "invalid amidi_map[%d] = %d\n", i, snd_amidi_map[i]);
 			snd_amidi_map[i] = 1;
 		}
 	}
diff --git a/sound/core/rtctimer.c b/sound/core/rtctimer.c
index db1452c..51005b6 100644
--- a/sound/core/rtctimer.c
+++ b/sound/core/rtctimer.c
@@ -156,13 +156,13 @@
 	snd_timer_t *timer;
 
 	if (rtctimer_freq < 2 || rtctimer_freq > 8192) {
-		snd_printk("rtctimer: invalid frequency %d\n", rtctimer_freq);
+		snd_printk(KERN_ERR "rtctimer: invalid frequency %d\n", rtctimer_freq);
 		return -EINVAL;
 	}
 	for (order = 1; rtctimer_freq > order; order <<= 1)
 		;
 	if (rtctimer_freq != order) {
-		snd_printk("rtctimer: invalid frequency %d\n", rtctimer_freq);
+		snd_printk(KERN_ERR "rtctimer: invalid frequency %d\n", rtctimer_freq);
 		return -EINVAL;
 	}
 
diff --git a/sound/core/seq/Makefile b/sound/core/seq/Makefile
index 6e1c83b..ef7fc7a 100644
--- a/sound/core/seq/Makefile
+++ b/sound/core/seq/Makefile
@@ -32,6 +32,8 @@
 snd-seq-dummy-objs := seq_dummy.o
 snd-seq-virmidi-objs := seq_virmidi.o
 
+obj-$(CONFIG_SND_SEQUENCER) += snd-seq.o snd-seq-device.o
+obj-$(CONFIG_SND_SEQUENCER_OSS) += snd-seq-midi-event.o
 obj-$(CONFIG_SND_SEQ_DUMMY) += snd-seq-dummy.o
 
 # Toplevel Module Dependency
@@ -56,7 +58,7 @@
 obj-$(CONFIG_SND_OPTI92X_AD1848) += snd-seq-midi.o snd-seq.o snd-seq-device.o snd-seq-midi-event.o snd-seq-midi-emul.o snd-seq-instr.o
 obj-$(CONFIG_SND_OPTI92X_CS4231) += snd-seq-midi.o snd-seq.o snd-seq-device.o snd-seq-midi-event.o snd-seq-midi-emul.o snd-seq-instr.o
 obj-$(CONFIG_SND_OPTI93X) += snd-seq-midi.o snd-seq.o snd-seq-device.o snd-seq-midi-event.o snd-seq-midi-emul.o snd-seq-instr.o
-obj-$(CONFIG_SND_SB) += snd-seq-midi.o snd-seq.o snd-seq-device.o snd-seq-midi-event.o snd-seq-midi-emul.o snd-seq-instr.o
+obj-$(CONFIG_SND_SB8) += snd-seq-midi.o snd-seq.o snd-seq-device.o snd-seq-midi-event.o snd-seq-midi-emul.o snd-seq-instr.o
 obj-$(CONFIG_SND_SB16) += snd-seq-midi.o snd-seq.o snd-seq-device.o snd-seq-midi-event.o snd-seq-midi-emul.o snd-seq-instr.o
 obj-$(CONFIG_SND_SBAWE) += snd-seq-midi.o snd-seq.o snd-seq-device.o snd-seq-midi-event.o snd-seq-midi-emul.o snd-seq-instr.o snd-seq-virmidi.o
 obj-$(CONFIG_SND_ES968) += snd-seq-midi.o snd-seq.o snd-seq-device.o snd-seq-midi-event.o
@@ -66,7 +68,7 @@
 obj-$(CONFIG_SND_CS4281) += snd-seq-midi.o snd-seq.o snd-seq-device.o snd-seq-midi-event.o snd-seq-midi-emul.o snd-seq-instr.o
 obj-$(CONFIG_SND_ENS1370) += snd-seq-midi.o snd-seq.o snd-seq-device.o snd-seq-midi-event.o
 obj-$(CONFIG_SND_ENS1371) += snd-seq-midi.o snd-seq.o snd-seq-device.o snd-seq-midi-event.o
-obj-$(CONFIG_SND_ES1938) += snd-seq-device.o snd-seq-midi-emul.o snd-seq.o snd-seq-instr.o
+obj-$(CONFIG_SND_ES1938) += snd-seq-device.o snd-seq-midi-emul.o snd-seq.o snd-seq-instr.o snd-seq-midi.o snd-seq-midi-event.o
 obj-$(CONFIG_SND_ES1968) += snd-seq-midi.o snd-seq.o snd-seq-device.o snd-seq-midi-event.o
 obj-$(CONFIG_SND_FM801) += snd-seq-midi.o snd-seq.o snd-seq-device.o snd-seq-midi-event.o snd-seq-midi-emul.o snd-seq-instr.o
 obj-$(CONFIG_SND_ICE1712) += snd-seq-midi.o snd-seq.o snd-seq-device.o snd-seq-midi-event.o
@@ -76,7 +78,7 @@
 obj-$(CONFIG_SND_CS46XX) += snd-seq-midi.o snd-seq.o snd-seq-device.o snd-seq-midi-event.o
 obj-$(CONFIG_SND_EMU10K1) += snd-seq-midi.o snd-seq.o snd-seq-device.o snd-seq-midi-event.o snd-seq-midi-emul.o snd-seq-virmidi.o
 obj-$(CONFIG_SND_TRIDENT) += snd-seq-midi.o snd-seq.o snd-seq-device.o snd-seq-midi-event.o snd-seq-midi-emul.o snd-seq-instr.o
-obj-$(CONFIG_SND_YMFPCI) += snd-seq-midi.o snd-seq.o snd-seq-device.o snd-seq-midi-event.o
+obj-$(CONFIG_SND_YMFPCI) += snd-seq-midi.o snd-seq.o snd-seq-device.o snd-seq-midi-event.o snd-seq-midi-emul.o snd-seq-instr.o
 
 include $(TOPDIR)/Rules.make
 
diff --git a/sound/core/seq/instr/Makefile b/sound/core/seq/instr/Makefile
index 526f484..936a32e 100644
--- a/sound/core/seq/instr/Makefile
+++ b/sound/core/seq/instr/Makefile
@@ -33,7 +33,7 @@
 obj-$(CONFIG_SND_OPTI92X_AD1848) += snd-ainstr-fm.o
 obj-$(CONFIG_SND_OPTI92X_CS4231) += snd-ainstr-fm.o
 obj-$(CONFIG_SND_OPTI93X) += snd-ainstr-fm.o
-obj-$(CONFIG_SND_SB) += snd-ainstr-fm.o
+obj-$(CONFIG_SND_SB8) += snd-ainstr-fm.o
 obj-$(CONFIG_SND_SB16) += snd-ainstr-fm.o
 obj-$(CONFIG_SND_SBAWE) += snd-ainstr-fm.o
 obj-$(CONFIG_SND_WAVEFRONT) += snd-ainstr-fm.o
@@ -44,6 +44,7 @@
 obj-$(CONFIG_SND_FM801) += snd-ainstr-fm.o
 obj-$(CONFIG_SND_SONICVIBES) += snd-ainstr-fm.o
 obj-$(CONFIG_SND_TRIDENT) += snd-ainstr-simple.o
+obj-$(CONFIG_SND_YMFPCI) += snd-ainstr-fm.o
 
 include $(TOPDIR)/Rules.make
 
diff --git a/sound/core/seq/oss/seq_oss.c b/sound/core/seq/oss/seq_oss.c
index 8980458..da211db 100644
--- a/sound/core/seq/oss/seq_oss.c
+++ b/sound/core/seq/oss/seq_oss.c
@@ -222,7 +222,7 @@
 					  NULL, 0,
 					  &seq_oss_reg,
 					  SNDRV_SEQ_OSS_DEVNAME)) < 0) {
-		snd_printk("can't register device seq\n");
+		snd_printk(KERN_ERR "can't register device seq\n");
 		up(&register_mutex);
 		return rc;
 	}
@@ -230,7 +230,7 @@
 					  NULL, 0,
 					  &seq_oss_reg,
 					  SNDRV_SEQ_OSS_DEVNAME)) < 0) {
-		snd_printk("can't register device music\n");
+		snd_printk(KERN_ERR "can't register device music\n");
 		snd_unregister_oss_device(SNDRV_OSS_DEVICE_TYPE_SEQUENCER, NULL, 0);
 		up(&register_mutex);
 		return rc;
@@ -245,11 +245,10 @@
 {
 	down(&register_mutex);
 	debug_printk(("device unregistered\n"));
-	if (snd_unregister_oss_device(SNDRV_OSS_DEVICE_TYPE_MUSIC, NULL, 0) < 0)
-		
-		snd_printk("error unregister device music\n");
+	if (snd_unregister_oss_device(SNDRV_OSS_DEVICE_TYPE_MUSIC, NULL, 0) < 0)		
+		snd_printk(KERN_ERR "error unregister device music\n");
 	if (snd_unregister_oss_device(SNDRV_OSS_DEVICE_TYPE_SEQUENCER, NULL, 0) < 0)
-		snd_printk("error unregister device seq\n");
+		snd_printk(KERN_ERR "error unregister device seq\n");
 	up(&register_mutex);
 }
 
diff --git a/sound/core/seq/oss/seq_oss_init.c b/sound/core/seq/oss/seq_oss_init.c
index 374d698..0026ff2 100644
--- a/sound/core/seq/oss/seq_oss_init.c
+++ b/sound/core/seq/oss/seq_oss_init.c
@@ -184,7 +184,7 @@
 	seq_oss_devinfo_t *dp;
 
 	if ((dp = snd_kcalloc(sizeof(*dp), GFP_KERNEL)) == NULL) {
-		snd_printk("can't malloc device info\n");
+		snd_printk(KERN_ERR "can't malloc device info\n");
 		return -ENOMEM;
 	}
 
@@ -193,7 +193,7 @@
 			break;
 	}
 	if (i >= SNDRV_SEQ_OSS_MAX_CLIENTS) {
-		snd_printk("too many applications\n");
+		snd_printk(KERN_ERR "too many applications\n");
 		return -ENOMEM;
 	}
 
@@ -209,14 +209,14 @@
 	snd_seq_oss_midi_setup(dp);
 
 	if (dp->synth_opened == 0 && dp->max_mididev == 0) {
-		snd_printk("no device found\n");
+		snd_printk(KERN_ERR "no device found\n");
 		kfree(dp);
 		return -ENODEV;
 	}
 
 	/* create port */
 	if ((rc = create_port(dp)) < 0) {
-		snd_printk("can't create port\n");
+		snd_printk(KERN_ERR "can't create port\n");
 		free_devinfo(dp);
 		return rc;
 	}
@@ -259,7 +259,7 @@
 
 	/* initialize timer */
 	if ((dp->timer = snd_seq_oss_timer_new(dp)) == NULL) {
-		snd_printk("can't alloc timer\n");
+		snd_printk(KERN_ERR "can't alloc timer\n");
 		delete_seq_queue(dp);
 		delete_port(dp);
 		return -ENOMEM;
diff --git a/sound/core/seq/oss/seq_oss_midi.c b/sound/core/seq/oss/seq_oss_midi.c
index 416f1f1..fe3bfff 100644
--- a/sound/core/seq/oss/seq_oss_midi.c
+++ b/sound/core/seq/oss/seq_oss_midi.c
@@ -173,7 +173,7 @@
 	 * allocate midi info record
 	 */
 	if ((mdev = snd_kcalloc(sizeof(*mdev), GFP_KERNEL)) == NULL) {
-		snd_printk("can't malloc midi info\n");
+		snd_printk(KERN_ERR "can't malloc midi info\n");
 		return -ENOMEM;
 	}
 
@@ -190,7 +190,7 @@
 
 	/* create MIDI coder */
 	if (snd_midi_event_new(MAX_MIDI_EVENT_BUF, &mdev->coder) < 0) {
-		snd_printk("can't malloc midi coder\n");
+		snd_printk(KERN_ERR "can't malloc midi coder\n");
 		kfree(mdev);
 		return -ENOMEM;
 	}
diff --git a/sound/core/seq/oss/seq_oss_readq.c b/sound/core/seq/oss/seq_oss_readq.c
index 6005c65..3bb907d 100644
--- a/sound/core/seq/oss/seq_oss_readq.c
+++ b/sound/core/seq/oss/seq_oss_readq.c
@@ -47,12 +47,12 @@
 	seq_oss_readq_t *q;
 
 	if ((q = snd_kcalloc(sizeof(*q), GFP_KERNEL)) == NULL) {
-		snd_printk("can't malloc read queue\n");
+		snd_printk(KERN_ERR "can't malloc read queue\n");
 		return NULL;
 	}
 
 	if ((q->q = snd_kcalloc(sizeof(evrec_t) * maxlen, GFP_KERNEL)) == NULL) {
-		snd_printk("can't malloc read queue buffer\n");
+		snd_printk(KERN_ERR "can't malloc read queue buffer\n");
 		kfree(q);
 		return NULL;
 	}
diff --git a/sound/core/seq/oss/seq_oss_synth.c b/sound/core/seq/oss/seq_oss_synth.c
index e017f2a..26a6924 100644
--- a/sound/core/seq/oss/seq_oss_synth.c
+++ b/sound/core/seq/oss/seq_oss_synth.c
@@ -111,7 +111,7 @@
 	unsigned long flags;
 
 	if ((rec = snd_kcalloc(sizeof(*rec), GFP_KERNEL)) == NULL) {
-		snd_printk("can't malloc synth info\n");
+		snd_printk(KERN_ERR "can't malloc synth info\n");
 		return -ENOMEM;
 	}
 	rec->seq_device = -1;
@@ -136,7 +136,7 @@
 	if (i >= max_synth_devs) {
 		if (max_synth_devs >= SNDRV_SEQ_OSS_MAX_SYNTH_DEVS) {
 			spin_unlock_irqrestore(&register_lock, flags);
-			snd_printk("no more synth slot\n");
+			snd_printk(KERN_ERR "no more synth slot\n");
 			kfree(rec);
 			return -ENOMEM;
 		}
@@ -165,7 +165,7 @@
 	}
 	if (index >= max_synth_devs) {
 		spin_unlock_irqrestore(&register_lock, flags);
-		snd_printk("can't unregister synth\n");
+		snd_printk(KERN_ERR "can't unregister synth\n");
 		return -EINVAL;
 	}
 	synth_devs[index] = NULL;
diff --git a/sound/core/seq/seq_clientmgr.c b/sound/core/seq/seq_clientmgr.c
index 88be3ab..880398d 100644
--- a/sound/core/seq/seq_clientmgr.c
+++ b/sound/core/seq/seq_clientmgr.c
@@ -265,7 +265,7 @@
 	down(&register_mutex);
 	switch (client->type) {
 	case NO_CLIENT:
-		snd_printk("Seq: Trying to free unused client %d\n", client->number);
+		snd_printk(KERN_WARNING "Seq: Trying to free unused client %d\n", client->number);
 		break;
 	case USER_CLIENT:
 	case KERNEL_CLIENT:
@@ -274,7 +274,7 @@
 		break;
 
 	default:
-		snd_printk("Seq: Trying to free client %d with undefined type = %d\n", client->number, client->type);
+		snd_printk(KERN_ERR "Seq: Trying to free client %d with undefined type = %d\n", client->number, client->type);
 	}
 	up(&register_mutex);
 
diff --git a/sound/core/seq/seq_device.c b/sound/core/seq/seq_device.c
index 793bc16..1798f2a 100644
--- a/sound/core/seq/seq_device.c
+++ b/sound/core/seq/seq_device.c
@@ -295,7 +295,7 @@
 	if (ops == NULL)
 		return -ENOMEM;
 	if (ops->driver & DRIVER_LOADED) {
-		snd_printk("driver_register: driver '%s' already exists\n", id);
+		snd_printk(KERN_WARNING "driver_register: driver '%s' already exists\n", id);
 		unlock_driver(ops);
 		return -EBUSY;
 	}
@@ -363,7 +363,7 @@
 		return -ENXIO;
 	if (! (ops->driver & DRIVER_LOADED) ||
 	    (ops->driver & DRIVER_LOCKED)) {
-		snd_printk("driver_unregister: cannot unload driver '%s': status=%x\n", id, ops->driver);
+		snd_printk(KERN_ERR "driver_unregister: cannot unload driver '%s': status=%x\n", id, ops->driver);
 		unlock_driver(ops);
 		return -EBUSY;
 	}
@@ -378,7 +378,7 @@
 
 	ops->driver = 0;
 	if (ops->num_init_devices > 0)
-		snd_printk("free_driver: init_devices > 0!! (%d)\n", ops->num_init_devices);
+		snd_printk(KERN_ERR "free_driver: init_devices > 0!! (%d)\n", ops->num_init_devices);
 	up(&ops->reg_mutex);
 
 	unlock_driver(ops);
@@ -423,15 +423,14 @@
 	if (dev->status != SNDRV_SEQ_DEVICE_FREE)
 		return 0; /* already initialized */
 	if (ops->argsize != dev->argsize) {
-		snd_printk("incompatible device '%s' for plug-in '%s'\n", dev->name, ops->id);
-printk(" %d %d\n", ops->argsize, dev->argsize);
+		snd_printk(KERN_ERR "incompatible device '%s' for plug-in '%s' (%d %d)\n", dev->name, ops->id, ops->argsize, dev->argsize);
 		return -EINVAL;
 	}
 	if (ops->ops.init_device(dev) >= 0) {
 		dev->status = SNDRV_SEQ_DEVICE_REGISTERED;
 		ops->num_init_devices++;
 	} else {
-		snd_printk("init_device failed: %s: %s\n", dev->name, dev->id);
+		snd_printk(KERN_ERR "init_device failed: %s: %s\n", dev->name, dev->id);
 	}
 
 	return 0;
@@ -449,7 +448,7 @@
 	if (dev->status != SNDRV_SEQ_DEVICE_REGISTERED)
 		return 0; /* not registered */
 	if (ops->argsize != dev->argsize) {
-		snd_printk("incompatible device '%s' for plug-in '%s'\n", dev->name, ops->id);
+		snd_printk(KERN_ERR "incompatible device '%s' for plug-in '%s' (%d %d)\n", dev->name, ops->id, ops->argsize, dev->argsize);
 		return -EINVAL;
 	}
 	if ((result = ops->ops.free_device(dev)) >= 0 || result == -ENXIO) {
@@ -457,7 +456,7 @@
 		dev->driver_data = NULL;
 		ops->num_init_devices--;
 	} else {
-		snd_printk("free_device failed: %s: %s\n", dev->name, dev->id);
+		snd_printk(KERN_ERR "free_device failed: %s: %s\n", dev->name, dev->id);
 	}
 
 	return 0;
@@ -517,7 +516,7 @@
 	remove_drivers();
 	snd_info_unregister(info_entry);
 	if (num_ops)
-		snd_printk("drivers not released (%d)\n", num_ops);
+		snd_printk(KERN_ERR "drivers not released (%d)\n", num_ops);
 }
 
 module_init(alsa_seq_device_init)
diff --git a/sound/core/seq/seq_dummy.c b/sound/core/seq/seq_dummy.c
index ccd0296..fe259ff 100644
--- a/sound/core/seq/seq_dummy.c
+++ b/sound/core/seq/seq_dummy.c
@@ -206,7 +206,7 @@
 	int i;
 
 	if (ports < 1) {
-		snd_printk("invalid number of ports %d\n", ports);
+		snd_printk(KERN_ERR "invalid number of ports %d\n", ports);
 		return -EINVAL;
 	}
 
diff --git a/sound/core/seq/seq_instr.c b/sound/core/seq/seq_instr.c
index c7bb683..891aec5 100644
--- a/sound/core/seq/seq_instr.c
+++ b/sound/core/seq/seq_instr.c
@@ -132,7 +132,7 @@
 			}				
 			spin_unlock_irqrestore(&list->lock, flags);
 			if (snd_seq_instr_free(instr, 0)<0)
-				snd_printk("instrument free problem\n");
+				snd_printk(KERN_WARNING "instrument free problem\n");
 		}
 		while ((cluster = list->chash[idx]) != NULL) {
 			list->chash[idx] = cluster->next;
@@ -221,7 +221,7 @@
 				schedule_timeout(1);
 			}				
 			if (snd_seq_instr_free(instr, atomic)<0)
-				snd_printk("instrument free problem\n");
+				snd_printk(KERN_WARNING "instrument free problem\n");
 			instr = next;
 		}
 	}
@@ -324,7 +324,7 @@
 		return;
 	spin_lock_irqsave(&list->lock, flags);
 	if (instr->use <= 0) {
-		snd_printk("free_use: fatal!!! use = %i, name = '%s'\n", instr->use, instr->name);
+		snd_printk(KERN_ERR "free_use: fatal!!! use = %i, name = '%s'\n", instr->use, instr->name);
 	} else {
 		instr->use--;
 	}
diff --git a/sound/core/seq/seq_lock.c b/sound/core/seq/seq_lock.c
index d5802b7..7490bd8 100644
--- a/sound/core/seq/seq_lock.c
+++ b/sound/core/seq/seq_lock.c
@@ -68,12 +68,12 @@
 	int max_count = 5 * HZ;
 
 	if (atomic_read(lockp) < 0) {
-		printk("seq_lock: lock trouble [counter = %d] in %s:%d\n", atomic_read(lockp), file, line);
+		printk(KERN_WARNING "seq_lock: lock trouble [counter = %d] in %s:%d\n", atomic_read(lockp), file, line);
 		return;
 	}
 	while (atomic_read(lockp) > 0) {
 		if (max_count == 0) {
-			snd_printk("seq_lock: timeout [%d left] in %s:%d\n", atomic_read(lockp), file, line);
+			snd_printk(KERN_WARNING "seq_lock: timeout [%d left] in %s:%d\n", atomic_read(lockp), file, line);
 			break;
 		}
 		set_current_state(TASK_UNINTERRUPTIBLE);
diff --git a/sound/core/seq/seq_memory.c b/sound/core/seq/seq_memory.c
index 5a6e21d..5da040e 100644
--- a/sound/core/seq/seq_memory.c
+++ b/sound/core/seq/seq_memory.c
@@ -423,7 +423,7 @@
 
 	while (atomic_read(&pool->counter) > 0) {
 		if (max_count == 0) {
-			snd_printk("snd_seq_pool_done timeout: %d cells remain\n", atomic_read(&pool->counter));
+			snd_printk(KERN_WARNING "snd_seq_pool_done timeout: %d cells remain\n", atomic_read(&pool->counter));
 			break;
 		}
 		set_current_state(TASK_UNINTERRUPTIBLE);
diff --git a/sound/core/seq/seq_ports.c b/sound/core/seq/seq_ports.c
index 9452ae2..223385c 100644
--- a/sound/core/seq/seq_ports.c
+++ b/sound/core/seq/seq_ports.c
@@ -143,7 +143,7 @@
 	snd_assert(client, return NULL);
 
 	if (client->num_ports >= SNDRV_SEQ_MAX_PORTS - 1) {
-		snd_printk("too many ports for client %d\n", client->number);
+		snd_printk(KERN_WARNING "too many ports for client %d\n", client->number);
 		return NULL;
 	}
 
diff --git a/sound/core/seq/seq_timer.c b/sound/core/seq/seq_timer.c
index 8c712d3..f9bae3a 100644
--- a/sound/core/seq/seq_timer.c
+++ b/sound/core/seq/seq_timer.c
@@ -285,7 +285,7 @@
 				t = snd_timer_open(str, &tid, q->queue);
 			}
 			if (t == NULL) {
-				snd_printk("fatal error: cannot create timer\n");
+				snd_printk(KERN_ERR "fatal error: cannot create timer\n");
 				return -ENODEV;
 			}
 		}
diff --git a/sound/core/seq/seq_virmidi.c b/sound/core/seq/seq_virmidi.c
index 55b0068..df7d693 100644
--- a/sound/core/seq/seq_virmidi.c
+++ b/sound/core/seq/seq_virmidi.c
@@ -431,7 +431,7 @@
 		/* should check presence of port more strictly.. */
 		break;
 	default:
-		snd_printk("seq_mode is not set: %d\n", rdev->seq_mode);
+		snd_printk(KERN_ERR "seq_mode is not set: %d\n", rdev->seq_mode);
 		return -EINVAL;
 	}
 	return 0;
diff --git a/sound/core/sound.c b/sound/core/sound.c
index 583266f..ea2c3af 100644
--- a/sound/core/sound.c
+++ b/sound/core/sound.c
@@ -319,7 +319,7 @@
 #else
 	if (register_chrdev(snd_major, "alsa", &snd_fops)) {
 #endif
-		snd_printk("unable to register native major device number %d\n", snd_major);
+		snd_printk(KERN_ERR "unable to register native major device number %d\n", snd_major);
 #ifdef CONFIG_SND_OSSEMUL
 		snd_oss_cleanup_module();
 #endif
@@ -349,7 +349,7 @@
 	}
 #endif
 #ifndef MODULE
-	printk("Advanced Linux Sound Architecture Driver Version " CONFIG_SND_VERSION CONFIG_SND_DATE ".\n");
+	printk(KERN_INFO "Advanced Linux Sound Architecture Driver Version " CONFIG_SND_VERSION CONFIG_SND_DATE ".\n");
 #endif
 #if LINUX_VERSION_CODE < KERNEL_VERSION(2,3,0) && defined(CONFIG_APM)
 	pm_init();
@@ -391,7 +391,7 @@
 #else
 	if (unregister_chrdev(snd_major, "alsa") != 0)
 #endif
-		snd_printk("unable to unregister major device number %d\n", snd_major);
+		snd_printk(KERN_ERR "unable to unregister major device number %d\n", snd_major);
 #ifdef CONFIG_DEVFS_FS
 	devfs_unregister(devfs_handle);
 #endif
@@ -455,7 +455,7 @@
 EXPORT_SYMBOL(snd_device_register);
 EXPORT_SYMBOL(snd_device_free);
 EXPORT_SYMBOL(snd_device_free_all);
-  /* misc.c */
+  /* isadma.c */
 #ifdef CONFIG_ISA
 EXPORT_SYMBOL(snd_dma_program);
 EXPORT_SYMBOL(snd_dma_disable);
@@ -494,38 +494,10 @@
 EXPORT_SYMBOL(snd_ctl_unregister_ioctl);
   /* misc.c */
 EXPORT_SYMBOL(snd_task_name);
-#if LINUX_VERSION_CODE < KERNEL_VERSION(2,3,0)
-EXPORT_SYMBOL(try_inc_mod_count);
-EXPORT_SYMBOL(snd_compat_mem_region);
-EXPORT_SYMBOL(snd_compat_request_region);
-EXPORT_SYMBOL(snd_compat_release_resource);
-#endif
-#if LINUX_VERSION_CODE < KERNEL_VERSION(2,3,0) && defined(CONFIG_PCI)
-EXPORT_SYMBOL(snd_pci_compat_match_device);
-EXPORT_SYMBOL(snd_pci_compat_register_driver);
-EXPORT_SYMBOL(snd_pci_compat_unregister_driver);
-EXPORT_SYMBOL(snd_pci_compat_get_size);
-EXPORT_SYMBOL(snd_pci_compat_get_flags);
-EXPORT_SYMBOL(snd_pci_compat_set_power_state);
-EXPORT_SYMBOL(snd_pci_compat_enable_device);
-EXPORT_SYMBOL(snd_pci_compat_find_capability);
-EXPORT_SYMBOL(snd_pci_compat_alloc_consistent);
-EXPORT_SYMBOL(snd_pci_compat_free_consistent);
-EXPORT_SYMBOL(snd_pci_compat_dma_supported);
-EXPORT_SYMBOL(snd_pci_compat_get_dma_mask);
-EXPORT_SYMBOL(snd_pci_compat_set_dma_mask);
-EXPORT_SYMBOL(snd_pci_compat_get_driver_data);
-EXPORT_SYMBOL(snd_pci_compat_set_driver_data);
-#endif
-#if LINUX_VERSION_CODE < KERNEL_VERSION(2,3,0) && defined(CONFIG_PM)
-EXPORT_SYMBOL(pm_register);
-EXPORT_SYMBOL(pm_unregister);
-EXPORT_SYMBOL(pm_send);
+#ifdef CONFIG_SND_VERBOSE_PRINTK
+EXPORT_SYMBOL(snd_verbose_printk);
 #endif
   /* wrappers */
-#if LINUX_VERSION_CODE < KERNEL_VERSION(2,3,0)
-EXPORT_SYMBOL(snd_wrapper_kill_fasync);
-#endif
 #ifdef CONFIG_SND_DEBUG_MEMORY
 EXPORT_SYMBOL(snd_wrapper_kmalloc);
 EXPORT_SYMBOL(snd_wrapper_kfree);
diff --git a/sound/core/timer.c b/sound/core/timer.c
index 0c63397..61ae676 100644
--- a/sound/core/timer.c
+++ b/sound/core/timer.c
@@ -681,7 +681,7 @@
 	snd_assert(timer != NULL, return -ENXIO);
 	down(&register_mutex);
 	if (! list_empty(&timer->open_list_head)) {
-		snd_printk("timer 0x%lx is busy?\n", (long)timer);
+		snd_printk(KERN_WARNING "timer 0x%lx is busy?\n", (long)timer);
 		list_for_each_safe(p, n, &timer->open_list_head) {
 			list_del_init(p);
 			ti = (snd_timer_instance_t *)list_entry(p, snd_timer_instance_t, open_list);
@@ -1318,10 +1318,10 @@
 	}
 	snd_timer_proc_entry = entry;
 	if ((err = snd_timer_register_system()) < 0)
-		snd_printk("unable to register system timer (%i)\n", err);
+		snd_printk(KERN_ERR "unable to register system timer (%i)\n", err);
 	if ((err = snd_register_device(SNDRV_DEVICE_TYPE_TIMER,
 					NULL, 0, &snd_timer_reg, "timer"))<0)
-		snd_printk("unable to register timer device (%i)\n", err);
+		snd_printk(KERN_ERR "unable to register timer device (%i)\n", err);
 	return 0;
 }
 
diff --git a/sound/drivers/dummy.c b/sound/drivers/dummy.c
index 6a6d8fe..1fb03cf 100644
--- a/sound/drivers/dummy.c
+++ b/sound/drivers/dummy.c
@@ -562,7 +562,7 @@
 	for (dev = cards = 0; dev < SNDRV_CARDS && snd_enable[dev]; dev++) {
 		if (snd_card_dummy_probe(dev) < 0) {
 #ifdef MODULE
-			snd_printk("Dummy soundcard #%i not found or device busy\n", dev + 1);
+			printk(KERN_ERR "Dummy soundcard #%i not found or device busy\n", dev + 1);
 #endif
 			break;
 		}
@@ -570,7 +570,7 @@
 	}
 	if (!cards) {
 #ifdef MODULE
-		snd_printk("Dummy soundcard not found or device busy\n");
+		printk(KERN_ERR "Dummy soundcard not found or device busy\n");
 #endif
 		return -ENODEV;
 	}
diff --git a/sound/drivers/mpu401/mpu401.c b/sound/drivers/mpu401/mpu401.c
index 37deb36..96de16f 100644
--- a/sound/drivers/mpu401/mpu401.c
+++ b/sound/drivers/mpu401/mpu401.c
@@ -81,7 +81,7 @@
 	if (snd_mpu401_uart_new(card, 0, MPU401_HW_MPU401,
 				snd_port[dev], 0,
 				snd_irq[dev], snd_irq[dev] >= 0 ? SA_INTERRUPT : 0, NULL) < 0) {
-		snd_printk("MPU401 not detected at 0x%lx\n", snd_port[dev]);
+		printk(KERN_ERR "MPU401 not detected at 0x%lx\n", snd_port[dev]);
 		snd_card_free(card);
 		return -ENODEV;
 	}
@@ -113,7 +113,7 @@
 	}
 	if (!cards) {
 #ifdef MODULE
-		snd_printk("MPU-401 device not found or device busy\n");
+		printk(KERN_ERR "MPU-401 device not found or device busy\n");
 #endif
 		return -ENODEV;
 	}
diff --git a/sound/drivers/mtpav.c b/sound/drivers/mtpav.c
index 48ceaf1..64913d5 100644
--- a/sound/drivers/mtpav.c
+++ b/sound/drivers/mtpav.c
@@ -761,7 +761,7 @@
 
 	snd_mtpav_portscan(mtp_card);
 
-	snd_printk("Motu MidiTimePiece on parallel port irq: %d ioport: 0x%lx\n", snd_irq, snd_port);
+	printk(KERN_INFO "Motu MidiTimePiece on parallel port irq: %d ioport: 0x%lx\n", snd_irq, snd_port);
 
 	return 0;
 
diff --git a/sound/drivers/serial-u16550.c b/sound/drivers/serial-u16550.c
index 4801f7b..5166811 100644
--- a/sound/drivers/serial-u16550.c
+++ b/sound/drivers/serial-u16550.c
@@ -891,7 +891,7 @@
 
 	if ((err = snd_uart16550_detect(snd_port[dev])) <= 0) {
 		snd_card_free(card);
-		snd_printk("no UART detected at 0x%lx\n", (long)snd_port[dev]);
+		printk(KERN_ERR "no UART detected at 0x%lx\n", (long)snd_port[dev]);
 		return err;
 	}
 
@@ -940,7 +940,7 @@
 
 	if (cards == 0) {
 #ifdef MODULE
-		snd_printk("serial midi soundcard not found or device busy\n");
+		printk(KERN_ERR "serial midi soundcard not found or device busy\n");
 #endif
 		return -ENODEV;
 	}
diff --git a/sound/drivers/virmidi.c b/sound/drivers/virmidi.c
index 06d1f71..fa1fc68 100644
--- a/sound/drivers/virmidi.c
+++ b/sound/drivers/virmidi.c
@@ -136,7 +136,7 @@
 	for (dev = cards = 0; dev < SNDRV_CARDS && snd_enable[dev]; dev++) {
 		if (snd_card_virmidi_probe(dev) < 0) {
 #ifdef MODULE
-			snd_printk("Card-VirMIDI #%i not found or device busy\n", dev + 1);
+			printk(KERN_ERR "Card-VirMIDI #%i not found or device busy\n", dev + 1);
 #endif
 			break;
 		}
@@ -144,7 +144,7 @@
 	}
 	if (!cards) {
 #ifdef MODULE
-		snd_printk("Card-VirMIDI soundcard not found or device busy\n");
+		printk(KERN_ERR "Card-VirMIDI soundcard not found or device busy\n");
 #endif
 		return -ENODEV;
 	}
diff --git a/sound/isa/Config.in b/sound/isa/Config.in
index 9fc46d6..fc7bbc2 100644
--- a/sound/isa/Config.in
+++ b/sound/isa/Config.in
@@ -3,13 +3,13 @@
 mainmenu_option next_comment
 comment 'ISA devices'
 
-dep_tristate 'Analog Devices SoundPort AD1816A' CONFIG_SND_AD1816A $CONFIG_SND
+dep_tristate 'Analog Devices SoundPort AD1816A' CONFIG_SND_AD1816A $CONFIG_SND $CONFIG_ISAPNP
 dep_tristate 'Generic AD1848/CS4248 driver' CONFIG_SND_AD1848 $CONFIG_SND
 dep_tristate 'Generic Cirrus Logic CS4231 driver' CONFIG_SND_CS4231 $CONFIG_SND
 dep_tristate 'Generic Cirrus Logic CS4232 driver' CONFIG_SND_CS4232 $CONFIG_SND
 dep_tristate 'Generic Cirrus Logic CS4236+ driver' CONFIG_SND_CS4236 $CONFIG_SND
-dep_tristate 'Generic ESS ES968 driver' CONFIG_SND_ES968 $CONFIG_SND
-dep_tristate 'Generic ESS ES1688 driver' CONFIG_SND_ES1688 $CONFIG_SND
+dep_tristate 'Generic ESS ES968 driver' CONFIG_SND_ES968 $CONFIG_SND $CONFIG_ISAPNP
+dep_tristate 'Generic ESS ES688/ES1688 driver' CONFIG_SND_ES1688 $CONFIG_SND
 dep_tristate 'Generic ESS ES18xx driver' CONFIG_SND_ES18XX $CONFIG_SND
 dep_tristate 'Gravis UltraSound Classic' CONFIG_SND_GUSCLASSIC $CONFIG_SND
 dep_tristate 'Gravis UltraSound Extreme' CONFIG_SND_GUSEXTREME $CONFIG_SND
@@ -26,10 +26,10 @@
   bool '  Sound Blaster 16/AWE CSP support' CONFIG_SND_SB16_CSP
 fi
 dep_tristate 'Turtle Beach Maui,Tropez,Tropez+ (Wavefront)' CONFIG_SND_WAVEFRONT $CONFIG_SND
-dep_tristate 'Avance Logic ALS100/ALS120' CONFIG_SND_ALS100 $CONFIG_SND
-dep_tristate 'Aztech Systems AZT2320' CONFIG_SND_AZT2320 $CONFIG_SND
+dep_tristate 'Avance Logic ALS100/ALS120' CONFIG_SND_ALS100 $CONFIG_SND $CONFIG_ISAPNP
+dep_tristate 'Aztech Systems AZT2320' CONFIG_SND_AZT2320 $CONFIG_SND $CONFIG_ISAPNP
 dep_tristate 'C-Media CMI8330' CONFIG_SND_CMI8330 $CONFIG_SND
-dep_tristate 'Diamond Technologies DT-0197H' CONFIG_SND_DT0197H $CONFIG_SND
+dep_tristate 'Diamond Technologies DT-0197H' CONFIG_SND_DT0197H $CONFIG_SND $CONFIG_ISAPNP
 dep_tristate 'Yamaha OPL3-SA2/SA3' CONFIG_SND_OPL3SA2 $CONFIG_SND
 dep_tristate 'Aztech Sound Galaxy' CONFIG_SND_SGALAXY $CONFIG_SND
 
diff --git a/sound/isa/ad1816a/ad1816a.c b/sound/isa/ad1816a/ad1816a.c
index d3fb937..29a62ca 100644
--- a/sound/isa/ad1816a/ad1816a.c
+++ b/sound/isa/ad1816a/ad1816a.c
@@ -36,6 +36,8 @@
 
 #define chip_t ad1816a_t
 
+#define PFX "ad1816a: "
+
 EXPORT_NO_SYMBOLS;
 MODULE_AUTHOR("Massimo Piccioni <dafastidio@libero.it>");
 MODULE_DESCRIPTION("AD1816A, AD1815");
@@ -176,7 +178,7 @@
 		isapnp_resource_change(&pdev->irq_resource[0], snd_irq[dev], 1);
 
 	if (pdev->activate(pdev) < 0) {
-		snd_printk("AUDIO isapnp configure failure\n");
+		printk(KERN_ERR PFX "AUDIO isapnp configure failure\n");
 		return -EBUSY;
 	}
 
@@ -202,7 +204,7 @@
 
 	if (pdev->activate(pdev) < 0) {
 		/* not fatal error */
-		snd_printk("MPU-401 isapnp configure failure\n");
+		printk(KERN_ERR PFX "MPU-401 isapnp configure failure\n");
 		snd_mpu_port[dev] = -1;
 		acard->devmpu = NULL;
 	} else {
@@ -257,7 +259,7 @@
 		return error;
 	}
 #else
-	snd_printk("you have to enable ISA PnP support.\n");
+	printk(KERN_ERR PFX "you have to enable ISA PnP support.\n");
 	return -ENOSYS;
 #endif	/* __ISAPNP__ */
 
@@ -284,14 +286,14 @@
 		if (snd_mpu401_uart_new(card, 0, MPU401_HW_MPU401,
 					snd_mpu_port[dev], 0, snd_mpu_irq[dev], SA_INTERRUPT,
 					NULL) < 0)
-			snd_printk("no MPU-401 device at 0x%lx.\n", snd_mpu_port[dev]);
+			printk(KERN_ERR PFX "no MPU-401 device at 0x%lx.\n", snd_mpu_port[dev]);
 	}
 
 	if (snd_fm_port[dev] > 0) {
 		if (snd_opl3_create(card,
 				    snd_fm_port[dev], snd_fm_port[dev] + 2,
 				    OPL3_HW_AUTO, 0, &opl3) < 0) {
-			snd_printk("no OPL device at 0x%lx-0x%lx.\n", snd_fm_port[dev], snd_fm_port[dev] + 2);
+			printk(KERN_ERR PFX "no OPL device at 0x%lx-0x%lx.\n", snd_fm_port[dev], snd_fm_port[dev] + 2);
 		} else {
 			if ((error = snd_opl3_timer_new(opl3, 1, 2)) < 0) {
 				snd_card_free(card);
@@ -346,11 +348,11 @@
 #ifdef __ISAPNP__
 	cards += isapnp_probe_cards(snd_ad1816a_pnpids, snd_ad1816a_isapnp_detect);
 #else
-	snd_printk("you have to enable ISA PnP support.\n");
+	printk(KERN_ERR PFX "you have to enable ISA PnP support.\n");
 #endif
 #ifdef MODULE
 	if (!cards)
-		snd_printk("no AD1816A based soundcards found.\n");
+		printk(KERN_ERR "no AD1816A based soundcards found.\n");
 #endif	/* MODULE */
 	return cards ? 0 : -ENODEV;
 }
diff --git a/sound/isa/ad1848/ad1848.c b/sound/isa/ad1848/ad1848.c
index 6ec594a..730338f 100644
--- a/sound/isa/ad1848/ad1848.c
+++ b/sound/isa/ad1848/ad1848.c
@@ -135,7 +135,7 @@
 
 	if (!cards) {
 #ifdef MODULE
-		snd_printk("AD1848 soundcard not found or device busy\n");
+		printk(KERN_ERR "AD1848 soundcard not found or device busy\n");
 #endif
 		return -ENODEV;
 	}
diff --git a/sound/isa/als100.c b/sound/isa/als100.c
index 920209f..72e5288 100644
--- a/sound/isa/als100.c
+++ b/sound/isa/als100.c
@@ -39,6 +39,8 @@
 
 #define chip_t sb_t
 
+#define PFX "als100: "
+
 EXPORT_NO_SYMBOLS;
 
 MODULE_AUTHOR("Massimo Piccioni <dafastidio@libero.it>");
@@ -178,7 +180,7 @@
 		isapnp_resource_change(&pdev->irq_resource[0], snd_irq[dev], 1);
 
 	if (pdev->activate(pdev)<0) {
-		snd_printk("AUDIO isapnp configure failure\n");
+		printk(KERN_ERR PFX "AUDIO isapnp configure failure\n");
 		return -EBUSY;
 	}
 
@@ -201,7 +203,7 @@
 			1);
 
 	if (pdev->activate(pdev)<0) {
-		snd_printk("MPU-401 isapnp configure failure\n");
+		printk(KERN_ERR PFX "MPU-401 isapnp configure failure\n");
 		snd_mpu_port[dev] = -1;
 		acard->devmpu = NULL;
 	} else {
@@ -219,7 +221,7 @@
 		isapnp_resource_change(&pdev->resource[0], snd_fm_port[dev], 4);
 
 	if (pdev->activate(pdev)<0) {
-		snd_printk("OPL isapnp configure failure\n");
+		printk(KERN_ERR PFX "OPL isapnp configure failure\n");
 		snd_fm_port[dev] = -1;
 		acard->devopl = NULL;
 	} else {
@@ -277,7 +279,7 @@
 		return error;
 	}
 #else
-	snd_printk("you have to enable PnP support ...\n");
+	printk(KERN_ERR PFX "you have to enable PnP support ...\n");
 	snd_card_free(card);
 	return -ENOSYS;
 #endif	/* __ISAPNP__ */
@@ -307,14 +309,14 @@
 					snd_mpu_port[dev], 0, 
 					snd_mpu_irq[dev], SA_INTERRUPT,
 					NULL) < 0)
-			snd_printk("no MPU-401 device at 0x%lx\n", snd_mpu_port[dev]);
+			printk(KERN_ERR PFX "no MPU-401 device at 0x%lx\n", snd_mpu_port[dev]);
 	}
 
 	if (snd_fm_port[dev] > 0) {
 		if (snd_opl3_create(card,
 				    snd_fm_port[dev], snd_fm_port[dev] + 2,
 				    OPL3_HW_AUTO, 0, &opl3) < 0) {
-			snd_printk("no OPL device at 0x%lx-0x%lx\n",
+			printk(KERN_ERR PFX "no OPL device at 0x%lx-0x%lx\n",
 				snd_fm_port[dev], snd_fm_port[dev] + 2);
 		} else {
 			if ((error = snd_opl3_timer_new(opl3, 0, 1)) < 0) {
@@ -370,11 +372,11 @@
 #ifdef __ISAPNP__
 	cards += isapnp_probe_cards(snd_als100_pnpids, snd_als100_isapnp_detect);
 #else
-	snd_printk("you have to enable ISA PnP support.\n");
+	printk(KERN_ERR PFX "you have to enable ISA PnP support.\n");
 #endif
 #ifdef MODULE
 	if (!cards)
-		snd_printk("no ALS100 based soundcards found\n");
+		printk(KERN_ERR "no ALS100 based soundcards found\n");
 #endif
 	return cards ? 0 : -ENODEV;
 }
diff --git a/sound/isa/azt2320.c b/sound/isa/azt2320.c
index 98c2d41..fa55a9f 100644
--- a/sound/isa/azt2320.c
+++ b/sound/isa/azt2320.c
@@ -50,6 +50,8 @@
 
 #define chip_t cs4231_t
 
+#define PFX "azt2320: "
+
 EXPORT_NO_SYMBOLS;
 
 MODULE_AUTHOR("Massimo Piccioni <dafastidio@libero.it>");
@@ -191,7 +193,7 @@
 		isapnp_resource_change(&pdev->irq_resource[0], snd_irq[dev], 1);
 
 	if (pdev->activate(pdev) < 0) {
-		snd_printk("AUDIO isapnp configure failure\n");
+		printk(KERN_ERR PFX "AUDIO isapnp configure failure\n");
 		return -EBUSY;
 	}
 
@@ -217,7 +219,7 @@
 
 	if (pdev->activate(pdev) < 0) {
 		/* not fatal error */
-		snd_printk("MPU-401 isapnp configure failure\n");
+		printk(KERN_ERR PFX "MPU-401 isapnp configure failure\n");
 		snd_mpu_port[dev] = -1;
 		acard->devmpu = NULL;
 	} else {
@@ -329,7 +331,7 @@
 				snd_mpu_port[dev], 0,
 				snd_mpu_irq[dev], SA_INTERRUPT,
 				NULL) < 0)
-			snd_printk("no MPU-401 device at 0x%lx\n",
+			printk(KERN_ERR PFX "no MPU-401 device at 0x%lx\n",
 				snd_mpu_port[dev]);
 	}
 
@@ -337,7 +339,7 @@
 		if (snd_opl3_create(card,
 				    snd_fm_port[dev], snd_fm_port[dev] + 2,
 				    OPL3_HW_AUTO, 0, &opl3) < 0) {
-			snd_printk("no OPL device at 0x%lx-0x%lx\n",
+			printk(KERN_ERR PFX "no OPL device at 0x%lx-0x%lx\n",
 				snd_fm_port[dev], snd_fm_port[dev] + 2);
 		} else {
 			if ((error = snd_opl3_timer_new(opl3, 1, 2)) < 0) {
@@ -393,11 +395,11 @@
 #ifdef __ISAPNP__
 	cards += isapnp_probe_cards(snd_azt2320_pnpids, snd_azt2320_isapnp_detect);
 #else
-	snd_printk("you have to enable ISA PnP support.\n");
+	printk(KERN_ERR PFX "you have to enable ISA PnP support.\n");
 #endif
 #ifdef MODULE
 	if (!cards)
-		snd_printk("no AZT2320 based soundcards found\n");
+		printk(KERN_ERR "no AZT2320 based soundcards found\n");
 #endif
 	return cards ? 0 : -ENODEV;
 }
diff --git a/sound/isa/cmi8330.c b/sound/isa/cmi8330.c
index c9ed3cb..d49c82e 100644
--- a/sound/isa/cmi8330.c
+++ b/sound/isa/cmi8330.c
@@ -488,7 +488,7 @@
 
 	if (!cards) {
 #ifdef MODULE
-		snd_printk("CMI8330 not found or device busy\n");
+		printk(KERN_ERR "CMI8330 not found or device busy\n");
 #endif
 		return -ENODEV;
 	}
diff --git a/sound/isa/cs423x/cs4231.c b/sound/isa/cs423x/cs4231.c
index 75ec75c..30bbc2e 100644
--- a/sound/isa/cs423x/cs4231.c
+++ b/sound/isa/cs423x/cs4231.c
@@ -135,7 +135,7 @@
 					snd_mpu_port[dev], 0,
 					snd_mpu_irq[dev], SA_INTERRUPT,
 					NULL) < 0)
-			snd_printk("MPU401 not detected\n");
+			printk(KERN_ERR "cs4231: MPU401 not detected\n");
 	}
 	strcpy(card->driver, "CS4231");
 	strcpy(card->shortname, pcm->name);
@@ -161,7 +161,7 @@
 	}
 	if (!cards) {
 #ifdef MODULE
-		snd_printk("CS4231 soundcard not found or device busy\n");
+		printk(KERN_ERR "CS4231 soundcard not found or device busy\n");
 #endif
 		return -ENODEV;
 	}
diff --git a/sound/isa/cs423x/cs4231_lib.c b/sound/isa/cs423x/cs4231_lib.c
index 659a549..23236e5 100644
--- a/sound/isa/cs423x/cs4231_lib.c
+++ b/sound/isa/cs423x/cs4231_lib.c
@@ -1335,7 +1335,7 @@
 	}
 	if (chip->res_cport) {
 		release_resource(chip->res_cport);
-		kfree_nocheck(chip->res_port);
+		kfree_nocheck(chip->res_cport);
 	}
 	if (chip->irq >= 0) {
 		disable_irq(chip->irq);
diff --git a/sound/isa/cs423x/cs4236.c b/sound/isa/cs423x/cs4236.c
index 5f3f80b..3e155d8 100644
--- a/sound/isa/cs423x/cs4236.c
+++ b/sound/isa/cs423x/cs4236.c
@@ -309,7 +309,7 @@
 	if (snd_dma2[dev] != SNDRV_AUTO_DMA)
 		isapnp_resource_change(&pdev->dma_resource[1], snd_dma2[dev] < 0 ? 4 : snd_dma2[dev], 1);
 	if (pdev->activate(pdev)<0) {
-		snd_printk(IDENT " isapnp configure failed for WSS (out of resources?)\n");
+		printk(KERN_ERR IDENT " isapnp configure failed for WSS (out of resources?)\n");
 		return -EBUSY;
 	}
 	snd_port[dev] = pdev->resource[0].start;
@@ -331,7 +331,7 @@
 	if (snd_cport[dev] != SNDRV_AUTO_PORT)
 		isapnp_resource_change(&pdev->resource[0], snd_cport[dev], 8);
 	if (pdev->activate(pdev)<0) {
-		snd_printk(IDENT " isapnp configure failed for control (out of resources?)\n");
+		printk(KERN_ERR IDENT " isapnp configure failed for control (out of resources?)\n");
 		acard->wss->deactivate(acard->wss);
 		return -EBUSY;
 	}
@@ -352,7 +352,7 @@
 		if (pdev->activate(pdev)<0) {
 			snd_mpu_port[dev] = SNDRV_AUTO_PORT;
 			snd_mpu_irq[dev] = SNDRV_AUTO_IRQ;
-			snd_printk(IDENT " isapnp configure failed for MPU (out of resources?)\n");
+			printk(KERN_ERR IDENT " isapnp configure failed for MPU (out of resources?)\n");
 		} else {
 			snd_mpu_port[dev] = pdev->resource[0].start;
 			if (pdev->irq_resource[0].flags & IORESOURCE_IRQ) {
@@ -429,7 +429,7 @@
 	card->private_free = snd_card_cs4236_free;
 #ifdef __ISAPNP__
 	if (snd_isapnp[dev] && (err = snd_card_cs4236_isapnp(dev, acard))<0) {
-		snd_printk("isapnp detection failed and probing for " IDENT " is not supported\n");
+		printk(KERN_ERR "isapnp detection failed and probing for " IDENT " is not supported\n");
 		snd_card_free(card);
 		return -ENXIO;
 	}
@@ -442,7 +442,7 @@
 		snd_sb_port[dev] = SNDRV_AUTO_PORT;
 	if (snd_sb_port[dev] != SNDRV_AUTO_PORT)
 		if ((acard->res_sb_port = request_region(snd_sb_port[dev], 16, IDENT " SB")) == NULL) {
-			snd_printk("unable to register SB port at 0x%lx\n", snd_sb_port[dev]);
+			printk(KERN_ERR IDENT ": unable to register SB port at 0x%lx\n", snd_sb_port[dev]);
 			snd_card_free(card);
 			return -ENOMEM;
 		}
@@ -501,7 +501,7 @@
 		if (snd_opl3_create(card,
 				    snd_fm_port[dev], snd_fm_port[dev] + 2,
 				    OPL3_HW_OPL3_CS, 0, &opl3) < 0) {
-			snd_printk(IDENT ": OPL3 not detected\n");
+			printk(KERN_ERR IDENT ": OPL3 not detected\n");
 		} else {
 			if ((err = snd_opl3_hwdep_new(opl3, 0, 1, NULL)) < 0) {
 				snd_card_free(card);
@@ -515,7 +515,7 @@
 					snd_mpu_port[dev], 0,
 					snd_mpu_irq[dev],
 					snd_mpu_irq[dev] >= 0 ? SA_INTERRUPT : 0, NULL) < 0)
-			snd_printk(IDENT ": MPU401 not detected\n");
+			printk(KERN_ERR IDENT ": MPU401 not detected\n");
 	}
 	strcpy(card->driver, pcm->name);
 	strcpy(card->shortname, pcm->name);
@@ -575,7 +575,7 @@
 #endif
 	if (!cards) {
 #ifdef MODULE
-		snd_printk(IDENT " soundcard not found or device busy\n");
+		printk(KERN_ERR IDENT " soundcard not found or device busy\n");
 #endif
 		return -ENODEV;
 	}
diff --git a/sound/isa/dt0197h.c b/sound/isa/dt0197h.c
index 93d23d0..e3c3076 100644
--- a/sound/isa/dt0197h.c
+++ b/sound/isa/dt0197h.c
@@ -36,6 +36,8 @@
 
 #define chip_t sb_t
 
+#define PFX "dt0197h: "
+
 EXPORT_NO_SYMBOLS;
 
 MODULE_AUTHOR("Massimo Piccioni <dafastidio@libero.it>");
@@ -150,7 +152,7 @@
 		isapnp_resource_change(&pdev->irq_resource[0], snd_irq[dev], 1);
 
 	if (pdev->activate(pdev)<0) {
-		snd_printk("AUDIO isapnp configure failure\n");
+		printk(KERN_ERR PFX "AUDIO isapnp configure failure\n");
 		return -EBUSY;
 	}
 
@@ -170,7 +172,7 @@
 			1);
 
 	if (pdev->activate(pdev)<0) {
-		snd_printk("MPU-401 isapnp configure failure\n");
+		printk(KERN_ERR PFX "MPU-401 isapnp configure failure\n");
 		snd_mpu_port[dev] = -1;
 		acard->devmpu = NULL;
 	} else {
@@ -186,7 +188,7 @@
 		isapnp_resource_change(&pdev->resource[0], snd_fm_port[dev], 4);
 
 	if (pdev->activate(pdev)<0) {
-		snd_printk("OPL isapnp configure failure\n");
+		printk(KERN_ERR PFX "OPL isapnp configure failure\n");
 		snd_fm_port[dev] = -1;
 		acard->devopl = NULL;
 	} else {
@@ -244,7 +246,7 @@
 		return error;
 	}
 #else
-	snd_printk("you have to enable PnP support ...\n");
+	printk(KERN_ERR PFX "you have to enable PnP support ...\n");
 	snd_card_free(card);
 	return -ENOSYS;
 #endif	/* __ISAPNP__ */
@@ -276,7 +278,7 @@
 					snd_mpu_irq[dev],
 					SA_INTERRUPT,
 					NULL) < 0)
-			snd_printk("no MPU-401 device at 0x%lx ?\n",
+			printk(KERN_ERR PFX "no MPU-401 device at 0x%lx ?\n",
 				snd_mpu_port[dev]);
 	}
 
@@ -285,7 +287,7 @@
 				    snd_fm_port[dev],
 				    snd_fm_port[dev] + 2,
 				    OPL3_HW_AUTO, 0, &opl3) < 0) {
-			snd_printk("no OPL device at 0x%lx-0x%lx ?\n",
+			printk(KERN_ERR PFX "no OPL device at 0x%lx-0x%lx ?\n",
 				snd_fm_port[dev], snd_fm_port[dev] + 2);
 		} else {
 			if ((error = snd_opl3_timer_new(opl3, 0, 1)) < 0) {
@@ -341,11 +343,11 @@
 #ifdef __ISAPNP__
 	cards += isapnp_probe_cards(snd_dt0197h_pnpids, snd_dt0197h_isapnp_detect);
 #else
-	snd_printk("you have to enable ISA PnP support.\n");
+	printk(KERN_ERR PFX "you have to enable ISA PnP support.\n");
 #endif
 #ifdef MODULE
 	if (!cards)
-		snd_printk("no DT-0197H based soundcards found\n");
+		printk(KERN_ERR "no DT-0197H based soundcards found\n");
 #endif
 	return cards ? 0 : -ENODEV;
 }
diff --git a/sound/isa/es1688/es1688.c b/sound/isa/es1688/es1688.c
index 40b2aa3..8f2d23e 100644
--- a/sound/isa/es1688/es1688.c
+++ b/sound/isa/es1688/es1688.c
@@ -133,7 +133,7 @@
 	}
 
 	if ((snd_opl3_create(card, chip->port, chip->port + 2, OPL3_HW_OPL3, 0, &opl3)) < 0) {
-		snd_printk("opl3 not detected at 0x%lx\n", chip->port);
+		printk(KERN_ERR "es1688: opl3 not detected at 0x%lx\n", chip->port);
 	} else {
 		if ((err = snd_opl3_hwdep_new(opl3, 0, 1, NULL)) < 0) {
 			snd_card_free(card);
@@ -194,7 +194,7 @@
 	cards += snd_legacy_auto_probe(possible_ports, snd_audiodrive_legacy_auto_probe);
 	if (!cards) {
 #ifdef MODULE
-		snd_printk("ESS AudioDrive ES1688 soundcard not found or device busy\n");
+		printk(KERN_ERR "ESS AudioDrive ES1688 soundcard not found or device busy\n");
 #endif
 		return -ENODEV;
 	}
diff --git a/sound/isa/es18xx.c b/sound/isa/es18xx.c
index 61f4aba..f547355 100644
--- a/sound/isa/es18xx.c
+++ b/sound/isa/es18xx.c
@@ -86,6 +86,8 @@
 #define SNDRV_GET_ID
 #include <sound/initval.h>
 
+#define PFX "es18xx: "
+
 struct _snd_es18xx {
 	unsigned long port;		/* port of ESS chip */
 	unsigned long mpu_port;		/* MPU-401 port of ESS chip */
@@ -1510,7 +1512,7 @@
 static int __init snd_es18xx_probe(es18xx_t *chip)
 {
 	if (snd_es18xx_identify(chip) < 0) {
-                snd_printk("[0x%lx] ESS chip not found\n", chip->port);
+		printk(KERN_ERR PFX "[0x%lx] ESS chip not found\n", chip->port);
                 return -ENODEV;
 	}
 
@@ -1752,27 +1754,27 @@
 
 	if ((chip->res_port = request_region(port, 16, "ES18xx")) == NULL) {
 		snd_es18xx_free(chip);
-		snd_printk("unable to grap ports 0x%lx-0x%lx\n", port, port + 16 - 1);
+		printk(KERN_ERR PFX "unable to grap ports 0x%lx-0x%lx\n", port, port + 16 - 1);
 		return -EBUSY;
 	}
 
 	if (request_irq(irq, snd_es18xx_interrupt, SA_INTERRUPT, "ES18xx", (void *) chip)) {
 		snd_es18xx_free(chip);
-		snd_printk("unable to grap IRQ %d\n", irq);
+		printk(KERN_ERR PFX "unable to grap IRQ %d\n", irq);
 		return -EBUSY;
 	}
 	chip->irq = irq;
 
 	if (request_dma(dma1, "ES18xx DMA 1")) {
 		snd_es18xx_free(chip);
-		snd_printk("unable to grap DMA1 %d\n", dma1);
+		printk(KERN_ERR PFX "unable to grap DMA1 %d\n", dma1);
 		return -EBUSY;
 	}
 	chip->dma1 = dma1;
 
 	if (request_dma(dma2, "ES18xx DMA 2")) {
 		snd_es18xx_free(chip);
-		snd_printk("unable to grap DMA2 %d\n", dma2);
+		printk(KERN_ERR PFX "unable to grap DMA2 %d\n", dma2);
 		return -EBUSY;
 	}
 	chip->dma2 = dma2;
@@ -2008,7 +2010,7 @@
 	if (acard->devc->prepare(acard->devc)<0)
 		return -EAGAIN;
 	if (acard->devc->activate(acard->devc)<0) {
-		snd_printk("isapnp control configure failure (out of resources?)\n");
+		printk(KERN_ERR PFX "isapnp control configure failure (out of resources?)\n");
 		return -EAGAIN;
 	}
 	snd_printdd("isapnp: port=0x%lx\n", acard->devc->resource[0].start);
@@ -2031,7 +2033,7 @@
 	if (snd_irq[dev] != SNDRV_AUTO_IRQ)
 		isapnp_resource_change(&pdev->irq_resource[0], snd_irq[dev], 1);
 	if (pdev->activate(pdev)<0) {
-		snd_printk("isapnp configure failure (out of resources?)\n");
+		printk(KERN_ERR PFX "isapnp configure failure (out of resources?)\n");
 		acard->devc->deactivate(acard->devc);
 		return -EBUSY;
 	}
@@ -2147,7 +2149,7 @@
 	}
 
 	if (snd_opl3_create(card, chip->fm_port, chip->fm_port + 2, OPL3_HW_OPL3, 0, &opl3) < 0) {
-		snd_printk("opl3 not detected at 0x%lx\n", chip->port);
+		printk(KERN_ERR PFX "opl3 not detected at 0x%lx\n", chip->port);
 	} else {
 		if ((err = snd_opl3_hwdep_new(opl3, 0, 1, NULL)) < 0) {
 			snd_card_free(card);
@@ -2259,7 +2261,7 @@
 #endif
 	if(!cards) {
 #ifdef MODULE
-		snd_printk("ESS AudioDrive ES18xx soundcard not found or device busy\n");
+		printk(KERN_ERR "ESS AudioDrive ES18xx soundcard not found or device busy\n");
 #endif
 		return -ENODEV;
 	}
diff --git a/sound/isa/gus/gusclassic.c b/sound/isa/gus/gusclassic.c
index 701a321..2c161f9 100644
--- a/sound/isa/gus/gusclassic.c
+++ b/sound/isa/gus/gusclassic.c
@@ -251,7 +251,7 @@
 	cards += snd_legacy_auto_probe(possible_ports, snd_gusclassic_legacy_auto_probe);
 	if (!cards) {
 #ifdef MODULE
-		snd_printk("GUS Classic soundcard not found or device busy\n");
+		printk(KERN_ERR "GUS Classic soundcard not found or device busy\n");
 #endif
 		return -ENODEV;
 	}
diff --git a/sound/isa/gus/gusextreme.c b/sound/isa/gus/gusextreme.c
index 37ea104..3d6593e8 100644
--- a/sound/isa/gus/gusextreme.c
+++ b/sound/isa/gus/gusextreme.c
@@ -316,7 +316,7 @@
 
 	if (snd_opl3_create(card, es1688->port, es1688->port + 2,
 			    OPL3_HW_OPL3, 0, &opl3) < 0) {
-		snd_printk("opl3 not detected at 0x%lx\n", es1688->port);
+		printk(KERN_ERR "gusextreme: opl3 not detected at 0x%lx\n", es1688->port);
 	} else {
 		if ((err = snd_opl3_hwdep_new(opl3, 0, 2, NULL)) < 0) {
 			snd_card_free(card);
@@ -376,7 +376,7 @@
 	cards += snd_legacy_auto_probe(possible_ports, snd_gusextreme_legacy_auto_probe);
 	if (!cards) {
 #ifdef MODULE
-		snd_printk("GUS Extreme soundcard not found or device busy\n");
+		printk(KERN_ERR "GUS Extreme soundcard not found or device busy\n");
 #endif
 		return -ENODEV;
 	}
diff --git a/sound/isa/gus/gusmax.c b/sound/isa/gus/gusmax.c
index 1553e12..eadc412 100644
--- a/sound/isa/gus/gusmax.c
+++ b/sound/isa/gus/gusmax.c
@@ -292,13 +292,13 @@
 	}
 	if (!gus->max_flag) {
 		snd_card_free(card);
-		snd_printk("GUS MAX soundcard was not detected at 0x%lx\n", gus->gf1.port);
+		printk(KERN_ERR "GUS MAX soundcard was not detected at 0x%lx\n", gus->gf1.port);
 		return -ENODEV;
 	}
 
 	if (request_irq(irq, snd_gusmax_interrupt, SA_INTERRUPT, "GUS MAX", (void *)maxcard)) {
 		snd_card_free(card);
-		snd_printk("unable to grab IRQ %d\n", irq);
+		printk(KERN_ERR "gusmax: unable to grab IRQ %d\n", irq);
 		return -EBUSY;
 	}
 	maxcard->irq = irq;
@@ -387,7 +387,7 @@
 	cards += snd_legacy_auto_probe(possible_ports, snd_gusmax_legacy_auto_probe);
 	if (!cards) {
 #ifdef MODULE
-		snd_printk("GUS MAX soundcard not found or device busy\n");
+		printk(KERN_ERR "GUS MAX soundcard not found or device busy\n");
 #endif
 		return -ENODEV;
 	}
diff --git a/sound/isa/gus/interwave.c b/sound/isa/gus/interwave.c
index 68d54e1e..a28db1c 100644
--- a/sound/isa/gus/interwave.c
+++ b/sound/isa/gus/interwave.c
@@ -948,7 +948,7 @@
 			continue;
 		}
 #ifdef MODULE
-		snd_printk("InterWave soundcard #%i not found at 0x%lx or device busy\n", dev, snd_port[dev]);
+		printk(KERN_ERR "InterWave soundcard #%i not found at 0x%lx or device busy\n", dev, snd_port[dev]);
 #endif
 	}
 	/* legacy auto configured cards */
@@ -960,7 +960,7 @@
 
 	if (!cards) {
 #ifdef MODULE
-		snd_printk("InterWave soundcard not found or device busy\n");
+		printk(KERN_ERR "InterWave soundcard not found or device busy\n");
 #endif
 		return -ENODEV;
 	}
diff --git a/sound/isa/opl3sa2.c b/sound/isa/opl3sa2.c
index c92701db..a389a65 100644
--- a/sound/isa/opl3sa2.c
+++ b/sound/isa/opl3sa2.c
@@ -893,7 +893,7 @@
 #endif
 	if (!cards) {
 #ifdef MODULE
-		snd_printk("Yamaha OPL3-SA soundcard not found or device busy\n");
+		printk(KERN_ERR "Yamaha OPL3-SA soundcard not found or device busy\n");
 #endif
 		return -ENODEV;
 	}
diff --git a/sound/isa/opti9xx/opti92x-ad1848.c b/sound/isa/opti9xx/opti92x-ad1848.c
index ea99fc5..b6771fb 100644
--- a/sound/isa/opti9xx/opti92x-ad1848.c
+++ b/sound/isa/opti9xx/opti92x-ad1848.c
@@ -2154,9 +2154,9 @@
 	if ((error = snd_card_opti9xx_probe())) {
 #ifdef MODULE
 #ifdef OPTi93X
-		snd_printk("no OPTi 82C93x soundcard found\n");
+		printk(KERN_ERR "no OPTi 82C93x soundcard found\n");
 #else
-		snd_printk("no OPTi 82C92x soundcard found\n");
+		printk(KERN_ERR "no OPTi 82C92x soundcard found\n");
 #endif	/* OPTi93X */
 #endif
 		return error;
diff --git a/sound/isa/sb/sb16.c b/sound/isa/sb/sb16.c
index b57b0bd..30f5c3d 100644
--- a/sound/isa/sb/sb16.c
+++ b/sound/isa/sb/sb16.c
@@ -43,6 +43,12 @@
 
 #define chip_t sb_t
 
+#ifdef SNDRV_SBAWE
+#define PFX "sbawe: "
+#else
+#define PFX "sb16: "
+#endif
+
 #ifndef SNDRV_SBAWE
 EXPORT_NO_SYMBOLS;
 #endif
@@ -296,7 +302,7 @@
 	if (snd_irq[dev] != SNDRV_AUTO_IRQ)
 		isapnp_resource_change(&pdev->irq_resource[0], snd_irq[dev], 1);
 	if (pdev->activate(pdev) < 0) {
-		snd_printk("isapnp configure failure (out of resources?)\n");
+		printk(KERN_ERR PFX "isapnp configure failure (out of resources?)\n");
 		return -EBUSY;
 	}
 	snd_port[dev] = pdev->resource[0].start;
@@ -322,7 +328,7 @@
 		isapnp_resource_change(&pdev->resource[2], snd_awe_port[dev] + 0x800, 4);
 	}
 	if (pdev->activate(pdev)<0) {
-		snd_printk("WaveTable isapnp configure failure (out of resources?)\n");
+		printk(KERN_ERR PFX "WaveTable isapnp configure failure (out of resources?)\n");
 		acard->dev->deactivate(acard->dev);		
 		return -EBUSY;
 	}
@@ -402,21 +408,21 @@
 	if (irq == SNDRV_AUTO_IRQ) {
 		if ((irq = snd_legacy_find_free_irq(possible_irqs)) < 0) {
 			snd_card_free(card);
-			snd_printk("unable to find a free IRQ\n");
+			printk(KERN_ERR PFX "unable to find a free IRQ\n");
 			return -EBUSY;
 		}
 	}
 	if (dma8 == SNDRV_AUTO_DMA) {
 		if ((dma8 = snd_legacy_find_free_dma(possible_dmas8)) < 0) {
 			snd_card_free(card);
-			snd_printk("unable to find a free 8-bit DMA\n");
+			printk(KERN_ERR PFX "unable to find a free 8-bit DMA\n");
 			return -EBUSY;
 		}
 	}
 	if (dma16 == SNDRV_AUTO_DMA) {
 		if ((dma16 = snd_legacy_find_free_dma(possible_dmas16)) < 0) {
 			snd_card_free(card);
-			snd_printk("unable to find a free 16-bit DMA\n");
+			printk(KERN_ERR PFX "unable to find a free 16-bit DMA\n");
 			return -EBUSY;
 		}
 	}
@@ -475,7 +481,7 @@
 		if (snd_opl3_create(card, snd_fm_port[dev], snd_fm_port[dev] + 2,
 				    OPL3_HW_OPL3, snd_fm_port[dev] == snd_port[dev],
 				    &opl3) < 0) {
-			snd_printk("no OPL device at 0x%lx-0x%lx\n",
+			printk(KERN_ERR PFX "no OPL device at 0x%lx-0x%lx\n",
 				   snd_fm_port[dev], snd_fm_port[dev] + 2);
 		} else {
 #ifdef SNDRV_SBAWE_EMU8000
@@ -503,7 +509,7 @@
 			chip->csp = csp->private_data;
 			chip->hardware = SB_HW_16CSP;
 		} else {
-			snd_printk("warning - CSP chip not detected on soundcard #%i\n", dev + 1);
+			printk(KERN_INFO PFX "warning - CSP chip not detected on soundcard #%i\n", dev + 1);
 		}
 	}
 #endif
@@ -511,7 +517,7 @@
 	if (snd_awe_port[dev] > 0) {
 		if (snd_emu8000_new(card, 1, snd_awe_port[dev],
 				    snd_seq_ports[dev], NULL) < 0) {
-			snd_printk("fatal error - EMU-8000 synthesizer not detected at 0x%lx\n", snd_awe_port[dev]);
+			printk(KERN_ERR PFX "fatal error - EMU-8000 synthesizer not detected at 0x%lx\n", snd_awe_port[dev]);
 			snd_card_free(card);
 			return -ENXIO;
 		}
@@ -612,7 +618,7 @@
 			continue;
 		}
 #ifdef MODULE
-		snd_printk("Sound Blaster 16+ soundcard #%i not found at 0x%lx or device busy\n", dev, snd_port[dev]);
+		printk(KERN_ERR "Sound Blaster 16+ soundcard #%i not found at 0x%lx or device busy\n", dev, snd_port[dev]);
 #endif			
 	}
 	/* legacy auto configured cards */
@@ -624,11 +630,11 @@
 
 	if (!cards) {
 #ifdef MODULE
-		snd_printk("Sound Blaster 16 soundcard not found or device busy\n");
+		printk(KERN_ERR "Sound Blaster 16 soundcard not found or device busy\n");
 #ifdef SNDRV_SBAWE_EMU8000
-		snd_printk("In case, if you have non-AWE card, try snd-card-sb16 module\n");
+		printk(KERN_ERR "In case, if you have non-AWE card, try snd-card-sb16 module\n");
 #else
-		snd_printk("In case, if you have AWE card, try snd-card-sbawe module\n");
+		printk(KERN_ERR "In case, if you have AWE card, try snd-card-sbawe module\n");
 #endif
 #endif
 		return -ENODEV;
diff --git a/sound/isa/sb/sb8.c b/sound/isa/sb/sb8.c
index 320b9fa..d668a17 100644
--- a/sound/isa/sb/sb8.c
+++ b/sound/isa/sb/sb8.c
@@ -144,13 +144,13 @@
 		if ((err = snd_opl3_create(card, chip->port + 8, 0,
 					   OPL3_HW_AUTO, 1,
 					   &opl3)) < 0) {
-			snd_printk("no OPL device at 0x%lx\n", chip->port + 8);
+			printk(KERN_ERR "sb8: no OPL device at 0x%lx\n", chip->port + 8);
 		}
 	} else {
 		if ((err = snd_opl3_create(card, chip->port, chip->port + 2,
 					   OPL3_HW_AUTO, 1,
 					   &opl3)) < 0) {
-			snd_printk("no OPL device at 0x%lx-0x%lx\n",
+			printk(KERN_ERR "sb8: no OPL device at 0x%lx-0x%lx\n",
 				   chip->port, chip->port + 2);
 		}
 	}
@@ -211,7 +211,7 @@
 	cards += snd_legacy_auto_probe(possible_ports, snd_card_sb8_legacy_auto_probe);
 	if (!cards) {
 #ifdef MODULE
-		snd_printk("Sound Blaster soundcard not found or device busy\n");
+		printk(KERN_ERR "Sound Blaster soundcard not found or device busy\n");
 #endif
 		return -ENODEV;
 	}
diff --git a/sound/isa/sgalaxy.c b/sound/isa/sgalaxy.c
index 09ddf37..10f4fdf 100644
--- a/sound/isa/sgalaxy.c
+++ b/sound/isa/sgalaxy.c
@@ -305,7 +305,7 @@
 	}
 	if (!cards) {
 #ifdef MODULE
-		snd_printk("Sound Galaxy soundcard not found or device busy\n");
+		printk(KERN_ERR "Sound Galaxy soundcard not found or device busy\n");
 #endif
 		return -ENODEV;
 	}
diff --git a/sound/isa/wavefront/wavefront.c b/sound/isa/wavefront/wavefront.c
index 59164bf..0e0ae3c 100644
--- a/sound/isa/wavefront/wavefront.c
+++ b/sound/isa/wavefront/wavefront.c
@@ -740,7 +740,7 @@
 #endif
 	if (!cards) {
 #ifdef MODULE
-		snd_printk ("No cards found or devices busy\n");
+		printk (KERN_ERR "No WaveFront cards found or devices busy\n");
 #endif
 		return -ENODEV;
 	}
diff --git a/sound/last.c b/sound/last.c
index ec5416a..5e2c8d5 100644
--- a/sound/last.c
+++ b/sound/last.c
@@ -27,14 +27,14 @@
 {
 	int idx, ok = 0;
 	
-	printk("ALSA device list:\n");
+	printk(KERN_INFO "ALSA device list:\n");
 	for (idx = 0; idx < SNDRV_CARDS; idx++)
 		if (snd_cards[idx] != NULL) {
-			printk("  #%i: %s\n", idx, snd_cards[idx]->longname);
+			printk(KERN_INFO "  #%i: %s\n", idx, snd_cards[idx]->longname);
 			ok++;
 		}
 	if (ok == 0)
-		printk("  No soundcards found.\n");
+		printk(KERN_INFO "  No soundcards found.\n");
 	return 0;
 }
 
diff --git a/sound/pci/ac97/ac97_codec.c b/sound/pci/ac97/ac97_codec.c
index b8a2bf11..e722c3c1f 100644
--- a/sound/pci/ac97/ac97_codec.c
+++ b/sound/pci/ac97/ac97_codec.c
@@ -115,7 +115,7 @@
 { 0x43525960, 0xfffffff8, "CS4291",		NULL },
 { 0x48525300, 0xffffff00, "HMP9701",		NULL },
 { 0x49434501, 0xffffffff, "ICE1230",		NULL },
-{ 0x49434511, 0xffffffff, "ICE1232",		NULL }, // only guess --jk
+{ 0x49434511, 0xffffffff, "ICE1232",		NULL }, // alias VIA VT1611A?
 { 0x4e534300, 0xffffffff, "LM4540/43/45/46/48",	NULL }, // only guess --jk
 { 0x4e534331, 0xffffffff, "LM4549",		NULL },
 { 0x53494c22, 0xffffffff, "Si3036",		NULL },
@@ -1393,28 +1393,31 @@
 	ac97->card = card;
 	spin_lock_init(&ac97->reg_lock);
 	snd_ac97_write(ac97, AC97_RESET, 0);	/* reset to defaults */
-	udelay(50);
+	if (ac97->wait)
+		ac97->wait(ac97);
+	else {
+		udelay(50);
 
-	/* it's necessary to wait awhile until registers are accessible after RESET */
-	/* because the PCM or MASTER volume registers can be modified, */
-	/* the REC_GAIN register is used for tests */
-	end_time = jiffies + (HZ / 2);
-	do {
-		/* use preliminary reads to settle the communication */
-		snd_ac97_read(ac97, AC97_RESET);
-		snd_ac97_read(ac97, AC97_VENDOR_ID1);
-		snd_ac97_read(ac97, AC97_VENDOR_ID2);
-		/* test if we can write to the PCM volume register */
-		snd_ac97_write_cache(ac97, AC97_REC_GAIN, 0x8a05);
-		if ((err = snd_ac97_read(ac97, AC97_REC_GAIN)) == 0x8a05)
-			goto __access_ok;
-		set_current_state(TASK_UNINTERRUPTIBLE);
-		schedule_timeout(HZ/100);
-	} while (end_time - (signed long)jiffies >= 0);
-	snd_printd("AC'97 %d:%d does not respond - RESET [REC_GAIN = 0x%x]\n", ac97->num, ac97->addr, err);
-	snd_ac97_free(ac97);
-	return -ENXIO;
-
+		/* it's necessary to wait awhile until registers are accessible after RESET */
+		/* because the PCM or MASTER volume registers can be modified, */
+		/* the REC_GAIN register is used for tests */
+		end_time = jiffies + HZ;
+		do {
+			/* use preliminary reads to settle the communication */
+			snd_ac97_read(ac97, AC97_RESET);
+			snd_ac97_read(ac97, AC97_VENDOR_ID1);
+			snd_ac97_read(ac97, AC97_VENDOR_ID2);
+			/* test if we can write to the PCM volume register */
+			snd_ac97_write_cache(ac97, AC97_REC_GAIN, 0x8a05);
+			if ((err = snd_ac97_read(ac97, AC97_REC_GAIN)) == 0x8a05)
+				goto __access_ok;
+			set_current_state(TASK_UNINTERRUPTIBLE);
+			schedule_timeout(HZ/100);
+		} while (end_time - (signed long)jiffies >= 0);
+		snd_printd("AC'97 %d:%d does not respond - RESET [REC_GAIN = 0x%x]\n", ac97->num, ac97->addr, err);
+		snd_ac97_free(ac97);
+		return -ENXIO;
+	}
       __access_ok:
 	ac97->caps = snd_ac97_read(ac97, AC97_RESET);
 	ac97->id = snd_ac97_read(ac97, AC97_VENDOR_ID1) << 16;
diff --git a/sound/pci/ali5451/ali5451.c b/sound/pci/ali5451/ali5451.c
index 200e61a..224d39d 100644
--- a/sound/pci/ali5451/ali5451.c
+++ b/sound/pci/ali5451/ali5451.c
@@ -2253,7 +2253,7 @@
 
 	if ((err = pci_module_init(&driver)) < 0) {
 #ifdef MODULE
-		snd_printk("ALi pci audio not found or device busy.\n");
+		printk(KERN_ERR "ALi pci audio not found or device busy.\n");
 #endif
 		return err;
 	}
diff --git a/sound/pci/als4000.c b/sound/pci/als4000.c
index 8732200..0e93702 100644
--- a/sound/pci/als4000.c
+++ b/sound/pci/als4000.c
@@ -635,7 +635,7 @@
 				        gcr+0x30, 1, pci->irq, 0,
 				        &chip->rmidi)) < 0) {
 		snd_card_free(card);
-		snd_printk("no MPU-401device at 0x%lx ?\n", gcr+0x30);
+		printk(KERN_ERR "als4000: no MPU-401device at 0x%lx ?\n", gcr+0x30);
 		return err;
 	}
 
@@ -650,7 +650,7 @@
 
 	if (snd_opl3_create(card, gcr+0x10, gcr+0x12,
 			    OPL3_HW_AUTO, 1, &opl3) < 0) {
-		snd_printk("no OPL device at 0x%lx-0x%lx ?\n",
+		printk(KERN_ERR "als4000: no OPL device at 0x%lx-0x%lx ?\n",
 			   gcr+0x10, gcr+0x12 );
 	} else {
 		if ((err = snd_opl3_hwdep_new(opl3, 0, 1, NULL)) < 0) {
@@ -692,7 +692,7 @@
 	
 	if ((err = pci_module_init(&driver)) < 0) {
 #ifdef MODULE
-		snd_printk("no ALS4000 based soundcards found or device busy\n");
+		printk(KERN_ERR "no ALS4000 based soundcards found or device busy\n");
 #endif
 		return err;
 	}
diff --git a/sound/pci/cmipci.c b/sound/pci/cmipci.c
index f60ca9a..926b570 100644
--- a/sound/pci/cmipci.c
+++ b/sound/pci/cmipci.c
@@ -113,6 +113,7 @@
 
 #define CM_AC3EN1		0x00100000	/* enable AC3: model 037 */
 #define CM_SPD24SEL		0x00020000	/* 24bit spdif: model 037 */
+#define CM_SPDIF_INVERSE	0x00010000
 
 #define CM_ADCBITLEN_MASK	0x0000C000	
 #define CM_ADCBITLEN_16		0x00000000
@@ -131,6 +132,8 @@
 #define CM_CH0_SRATE_176K	0x00000200
 #define CM_CH0_SRATE_88K	0x00000100
 
+#define CM_SPDIF_INVERSE2	0x00000080	/* model 055? */
+
 #define CM_CH1FMT_MASK		0x0000000C
 #define CM_CH1FMT_SHIFT		2
 #define CM_CH0FMT_MASK		0x00000003
@@ -201,6 +204,7 @@
 #define CM_VIDWPPRT		0x00002000
 #define CM_SFILENB		0x00001000
 #define CM_MMODE_MASK		0x00000E00
+#define CM_SPDIF_SELECT		0x00000100	/* for model > 039 ? */
 #define CM_ENCENTER		0x00000080	/* shared with FLINKON? */
 #define CM_FLINKON		0x00000080
 #define CM_FLINKOFF		0x00000040
@@ -347,7 +351,7 @@
 	unsigned int offset;	/* physical address of the buffer */
 	unsigned int fmt;	/* format bits */
 	int ch;			/* channel (0/1) */
-	int is_dac;		/* is dac? */
+	unsigned int is_dac;		/* is dac? */
 	int bytes_per_frame;
 	int shift;
 	int ac3_shift;	/* extra shift: 1 on soft ac3 mode */
@@ -388,6 +392,9 @@
 	unsigned int can_ac3_sw: 1;
 	unsigned int can_ac3_hw: 1;
 	unsigned int can_multi_ch: 1;
+
+	unsigned int spdif_playback_avail: 1;	/* spdif ready? */
+	unsigned int spdif_playback_enabled: 1;	/* spdif switch enabled? */
 	int spdif_counter;	/* for software AC3 */
 
 	unsigned int dig_status;
@@ -1133,11 +1140,13 @@
 		save_mixer_state(cm);
 
 	spin_lock_irqsave(&cm->reg_lock, flags);
+	cm->spdif_playback_avail = up;
 	if (up) {
 		/* they are controlled via "IEC958 Output Switch" */
 		/* snd_cmipci_set_bit(cm, CM_REG_LEGACY_CTRL, CM_ENSPDOUT); */
 		/* snd_cmipci_set_bit(cm, CM_REG_FUNCTRL1, CM_SPDO2DAC); */
-		snd_cmipci_set_bit(cm, CM_REG_FUNCTRL1, CM_PLAYBACK_SPDF);
+		if (cm->spdif_playback_enabled)
+			snd_cmipci_set_bit(cm, CM_REG_FUNCTRL1, CM_PLAYBACK_SPDF);
 		setup_ac3(cm, do_ac3, rate);
 
 		if (rate == 48000)
@@ -2020,7 +2029,7 @@
 	CMIPCI_DOUBLE("Mic Capture Switch", SB_DSP4_INPUT_LEFT, SB_DSP4_INPUT_RIGHT, 0, 0, 1, 0, 0),
 	CMIPCI_SB_VOL_MONO("PC Speaker Playback Volume", SB_DSP4_SPEAKER_DEV, 6, 3),
 	CMIPCI_MIXER_VOL_STEREO("Aux Playback Volume", CM_REG_AUX_VOL, 4, 0, 15),
-	CMIPCI_MIXER_SW_STEREO("Aux Playback Switch", CM_REG_MIXER2, CM_VAUXLM_SHIFT, CM_VAUXRM_SHIFT, 0),
+	CMIPCI_MIXER_SW_STEREO("Aux Playback Switch", CM_REG_MIXER2, CM_VAUXLM_SHIFT, CM_VAUXRM_SHIFT, 1),
 	CMIPCI_MIXER_SW_STEREO("Aux Capture Switch", CM_REG_MIXER2, CM_RAUXLEN_SHIFT, CM_RAUXREN_SHIFT, 0),
 	CMIPCI_MIXER_SW_MONO("Mic Boost", CM_REG_MIXER2, CM_MICGAINZ_SHIFT, 1),
 	CMIPCI_MIXER_VOL_MONO("Mic Capture Volume", CM_REG_MIXER2, CM_VADMIC_SHIFT, 7),
@@ -2132,6 +2141,7 @@
 DEFINE_BIT_SWITCH_ARG(spdif_0, CM_REG_FUNCTRL1, CM_SPDF_0, 0);
 DEFINE_BIT_SWITCH_ARG(spdo_48k, CM_REG_MISC_CTRL, CM_SPDF_AC97|CM_SPDIF48K, 0);
 #endif
+DEFINE_BIT_SWITCH_ARG(spdif_in_1_2, CM_REG_MISC_CTRL, CM_SPDIF_SELECT, 0, 0);
 DEFINE_BIT_SWITCH_ARG(spdif_enable, CM_REG_LEGACY_CTRL, CM_ENSPDOUT, 0, 0);
 DEFINE_BIT_SWITCH_ARG(spdo2dac, CM_REG_FUNCTRL1, CM_SPDO2DAC, 0, 1);
 DEFINE_BIT_SWITCH_ARG(spdi_valid, CM_REG_MISC, CM_SPDVALID, 1, 0);
@@ -2140,7 +2150,8 @@
 DEFINE_SWITCH_ARG(spdo_5v, CM_REG_MISC_CTRL, CM_SPDO5V, 0, 0, 0); /* inverse: 0 = 5V */
 DEFINE_BIT_SWITCH_ARG(spdif_loop, CM_REG_FUNCTRL1, CM_SPDFLOOP, 0, 1);
 DEFINE_BIT_SWITCH_ARG(spdi_monitor, CM_REG_MIXER1, CM_CDPLAY, 1, 0);
-DEFINE_BIT_SWITCH_ARG(spdi_phase, CM_REG_MISC, 0x04, 0, 0);
+DEFINE_BIT_SWITCH_ARG(spdi_phase, CM_REG_CHFORMAT, CM_SPDIF_INVERSE, 0, 0);
+DEFINE_BIT_SWITCH_ARG(spdi_phase2, CM_REG_CHFORMAT, CM_SPDIF_INVERSE2, 0, 0);
 #if CM_CH_PLAY == 1
 DEFINE_SWITCH_ARG(exchange_dac, CM_REG_MISC_CTRL, CM_XCHGDAC, 0, 0, 0); /* reversed */
 #else
@@ -2179,9 +2190,20 @@
 
 static int snd_cmipci_spdout_enable_put(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucontrol)
 {
+	cmipci_t *chip = snd_kcontrol_chip(kcontrol);
 	int changed;
 	changed = _snd_cmipci_uswitch_put(kcontrol, ucontrol, &cmipci_switch_arg_spdif_enable);
 	changed |= _snd_cmipci_uswitch_put(kcontrol, ucontrol, &cmipci_switch_arg_spdo2dac);
+	if (changed) {
+		if (ucontrol->value.integer.value[0]) {
+			if (chip->spdif_playback_avail)
+				snd_cmipci_set_bit(chip, CM_REG_FUNCTRL1, CM_PLAYBACK_SPDF);
+		} else {
+			if (chip->spdif_playback_avail)
+				snd_cmipci_clear_bit(chip, CM_REG_FUNCTRL1, CM_PLAYBACK_SPDF);
+		}
+	}
+	chip->spdif_playback_enabled = ucontrol->value.integer.value[0];
 	return changed;
 }
 
@@ -2213,17 +2235,19 @@
 	DEFINE_MIXER_SWITCH("IEC958 5V", spdo_5v),
 	DEFINE_MIXER_SWITCH("IEC958 Loop", spdif_loop),
 	DEFINE_MIXER_SWITCH("IEC958 In Monitor", spdi_monitor),
-	DEFINE_MIXER_SWITCH("IEC958 In Phase Inverse", spdi_phase),
 };
 
 /* only for model 033/037 */
 static snd_kcontrol_new_t snd_cmipci_old_mixer_switches[] __devinitdata = {
 	DEFINE_MIXER_SWITCH("IEC958 Mix Analog", spdif_dac_out),
+	DEFINE_MIXER_SWITCH("IEC958 In Phase Inverse", spdi_phase),
 };
 
-/* only for model 039 */
+/* only for model 039 or later */
 static snd_kcontrol_new_t snd_cmipci_extra_mixer_switches[] __devinitdata = {
 	DEFINE_MIXER_SWITCH("Line-In As Bass", line_bass),
+	DEFINE_MIXER_SWITCH("IEC958 In Select", spdif_in_1_2),
+	DEFINE_MIXER_SWITCH("IEC958 In Phase Inverse", spdi_phase2),
 };
 
 /* card control switches */
@@ -2283,7 +2307,7 @@
 		cm->spdif_pcm_ctl = kctl;
 		if (cm->chip_version <= 37) {
 			sw = snd_cmipci_old_mixer_switches;
-			for (idx = 0; idx < num_controls(snd_cmipci_extra_mixer_switches); idx++, sw++) {
+			for (idx = 0; idx < num_controls(snd_cmipci_old_mixer_switches); idx++, sw++) {
 				err = snd_ctl_add(cm->card, snd_ctl_new1(sw, cm));
 				if (err < 0)
 					return err;
@@ -2573,10 +2597,10 @@
 
 		if (snd_opl3_create(card, iosynth, iosynth + 2,
 				    OPL3_HW_OPL3, 0, &cm->opl3) < 0) {
-			snd_printk("no OPL device at 0x%lx\n", iosynth);
+			printk(KERN_ERR "cmipci: no OPL device at 0x%lx\n", iosynth);
 		} else {
 			if ((err = snd_opl3_hwdep_new(cm->opl3, 0, 1, &cm->opl3hwdep)) < 0)
-				snd_printk("cannot create OPL3 hwdep\n");
+				printk(KERN_ERR "cmipci: cannot create OPL3 hwdep\n");
 		}
 	}
 
@@ -2609,7 +2633,7 @@
 		if ((err = snd_mpu401_uart_new(card, 0, MPU401_HW_CMIPCI,
 					       iomidi, 0,
 					       cm->irq, 0, &cm->rmidi)) < 0) {
-			snd_printk("cmipci: no UART401 device at 0x%lx\n", iomidi);
+			printk(KERN_ERR "cmipci: no UART401 device at 0x%lx\n", iomidi);
 		}
 	}
 
@@ -2711,7 +2735,7 @@
 
 	if ((err = pci_module_init(&driver)) < 0) {
 #ifdef MODULE
-		snd_printk("C-Media PCI soundcard not found or device busy\n");
+		printk(KERN_ERR "C-Media PCI soundcard not found or device busy\n");
 #endif
 		return err;
 	}
diff --git a/sound/pci/cs4281.c b/sound/pci/cs4281.c
index 5d0e561..5aad9f4f 100644
--- a/sound/pci/cs4281.c
+++ b/sound/pci/cs4281.c
@@ -268,7 +268,7 @@
 #define BA0_SERC1_SO1EN		(1<<0)	/* Primary Output Port Enable */
 
 #define BA0_SERC2		0x042c	/* Serial Port Configuration 2 */
-#define BA0_SERC2_SI1F(x)	(((x)&7)>>1) */ Primary Input Port Format */
+#define BA0_SERC2_SI1F(x)	(((x)&7)>>1) /* Primary Input Port Format */
 #define BA0_SERC2_AC97		(1<<1)
 #define BA0_SERC2_SI1EN		(1<<0)	/* Primary Input Port Enable */
 
@@ -1910,7 +1910,7 @@
 
 	if ((err = pci_module_init(&driver)) < 0) {
 #ifdef MODULE
-		snd_printk("CS4281 soundcard not found or device busy\n");
+		printk(KERN_ERR "CS4281 soundcard not found or device busy\n");
 #endif
 		return err;
 	}
diff --git a/sound/pci/cs46xx/cs46xx.c b/sound/pci/cs46xx/cs46xx.c
index 14d4981..61a2120 100644
--- a/sound/pci/cs46xx/cs46xx.c
+++ b/sound/pci/cs46xx/cs46xx.c
@@ -183,7 +183,7 @@
 
 	if ((err = pci_module_init(&driver)) < 0) {
 #ifdef MODULE
-		snd_printk("Sound Fusion CS46xx soundcard not found or device busy\n");
+		printk(KERN_ERR "Sound Fusion CS46xx soundcard not found or device busy\n");
 #endif
 		return err;
 	}
diff --git a/sound/pci/emu10k1/emu10k1.c b/sound/pci/emu10k1/emu10k1.c
index e7e501d..84e0f8f 100644
--- a/sound/pci/emu10k1/emu10k1.c
+++ b/sound/pci/emu10k1/emu10k1.c
@@ -210,7 +210,7 @@
 
 	if ((err = pci_module_init(&driver)) < 0) {
 #ifdef MODULE
-		snd_printk("EMU10K1/Audigy soundcard not found or device busy\n");
+		printk(KERN_ERR "EMU10K1/Audigy soundcard not found or device busy\n");
 #endif
 		return err;
 	}
diff --git a/sound/pci/emu10k1/emu10k1_main.c b/sound/pci/emu10k1/emu10k1_main.c
index 241361a..25e0830 100644
--- a/sound/pci/emu10k1/emu10k1_main.c
+++ b/sound/pci/emu10k1/emu10k1_main.c
@@ -218,6 +218,10 @@
 	 */
 	outl(inl(emu->port + HCFG) | HCFG_AUDIOENABLE, emu->port + HCFG);
 
+	/* Enable analog/digital outs on audigy */
+	if (emu->audigy)
+		outl(inl(emu->port + A_IOCFG) & ~0x44, emu->port + A_IOCFG);
+
 #if 0
 	{
 	unsigned int tmp;
@@ -274,7 +278,7 @@
 	snd_emu10k1_ptr_write(emu, TCBS, 0, TCBS_BUFFSIZE_16K);
 	snd_emu10k1_ptr_write(emu, TCB, 0, 0);
 	if (emu->audigy)
-		snd_emu10k1_ptr_write(emu, A_DBG, 0, A_DBG_SINGLE_STEP_ADDR);
+		snd_emu10k1_ptr_write(emu, A_DBG, 0, A_DBG_SINGLE_STEP);
 	else
 		snd_emu10k1_ptr_write(emu, DBG, 0, 0x8000);
 
@@ -625,18 +629,10 @@
 	}
 	
 	emu->fx8010.fxbus_mask = 0x303f;
-	if (extin_mask == 0) {
-		if (emu->audigy)
-			extin_mask = 0x000f;
-		else
-			extin_mask = 0x1fcf;
-	}
-	if (extout_mask == 0) {
-		if (emu->audigy)
-			extout_mask = 0x3fff;
-		else
-			extout_mask = 0x3fff;
-	}
+	if (extin_mask == 0)
+		extin_mask = 0x1fcf;
+	if (extout_mask == 0)
+		extout_mask = 0x3fff;
 	emu->fx8010.extin_mask = extin_mask;
 	emu->fx8010.extout_mask = extout_mask;
 
diff --git a/sound/pci/emu10k1/emufx.c b/sound/pci/emu10k1/emufx.c
index 96c3a83..7393b02 100644
--- a/sound/pci/emu10k1/emufx.c
+++ b/sound/pci/emu10k1/emufx.c
@@ -95,12 +95,12 @@
 	/* 0x05 */ NULL,
 	/* 0x06 */ NULL,
 	/* 0x07 */ NULL,
-	/* 0x08 */ NULL,
-	/* 0x09 */ NULL,
+	/* 0x08 */ "Line/Mic 2 Left",
+	/* 0x09 */ "Line/Mic 2 Right",
 	/* 0x0a */ NULL,
 	/* 0x0b */ NULL,
-	/* 0x0c */ NULL,
-	/* 0x0d */ NULL,
+	/* 0x0c */ "Aux2 Left",
+	/* 0x0d */ "Aux2 Right",
 	/* 0x0e */ NULL,
 	/* 0x0f */ NULL
 };
@@ -141,14 +141,14 @@
 };
 
 static char *audigy_outs[32] = {
-	/* 0x00 */ NULL,
-	/* 0x01 */ NULL,
-	/* 0x02 */ NULL,
-	/* 0x03 */ NULL,
+	/* 0x00 */ "Digital Front Left",
+	/* 0x01 */ "Digital Front Right",
+	/* 0x02 */ "Digital Center",
+	/* 0x03 */ "Digital LEF",
 	/* 0x04 */ "Headphone Left",
 	/* 0x05 */ "Headphone Right",
-	/* 0x06 */ NULL,
-	/* 0x07 */ NULL,
+	/* 0x06 */ "Digital Rear Left",
+	/* 0x07 */ "Digital Rear Right",
 	/* 0x08 */ "Front Left",
 	/* 0x09 */ "Front Right",
 	/* 0x0a */ "Center",
@@ -157,14 +157,14 @@
 	/* 0x0d */ NULL,
 	/* 0x0e */ "Rear Left",
 	/* 0x0f */ "Rear Right",
-	/* 0x10 */ NULL,
-	/* 0x11 */ NULL,
-	/* 0x12 */ NULL,
-	/* 0x13 */ NULL,
+	/* 0x10 */ "AC97 Front Left",
+	/* 0x11 */ "AC97 Front Right",
+	/* 0x12 */ "ADC Caputre Left",
+	/* 0x13 */ "ADC Capture Right",
 	/* 0x14 */ NULL,
 	/* 0x15 */ NULL,
-	/* 0x16 */ "ADC Capture Left",
-	/* 0x17 */ "ADC Capture Right",
+	/* 0x16 */ NULL,
+	/* 0x17 */ NULL,
 	/* 0x18 */ NULL,
 	/* 0x19 */ NULL,
 	/* 0x1a */ NULL,
@@ -1034,7 +1034,7 @@
 	/* stop FX processor - this may be dangerous, but it's better to miss
 	   some samples than generate wrong ones - [jk] */
 	if (emu->audigy)
-		snd_emu10k1_ptr_write(emu, A_DBG, 0, emu->fx8010.dbg | A_DBG_SINGLE_STEP_ADDR);
+		snd_emu10k1_ptr_write(emu, A_DBG, 0, emu->fx8010.dbg | A_DBG_SINGLE_STEP);
 	else
 		snd_emu10k1_ptr_write(emu, DBG, 0, emu->fx8010.dbg | EMU10K1_DBG_SINGLE_STEP);
 	/* ok, do the main job */
@@ -1220,36 +1220,34 @@
 	ptr = 0;
 	nctl = 0;
 	playback = 10;
-	capture = playback + 6; /* 5+1 channels */
-	gpr = capture + 2; /* so far only a stereo capture */
+	capture = playback + 10; /* we reserve 10 voices */
+	gpr = capture + 10;
 	tmp = 0x80;
 	
 	/* stop FX processor */
-	snd_emu10k1_ptr_write(emu, A_DBG, 0, (emu->fx8010.dbg = 0) | A_DBG_SINGLE_STEP_ADDR);
-
-#define A_C_ZERO	0x0c0
+	snd_emu10k1_ptr_write(emu, A_DBG, 0, (emu->fx8010.dbg = 0) | A_DBG_SINGLE_STEP);
 
 	/* Wave Playback */
-	A_OP(icode, &ptr, iMAC0, A_GPR(playback), A_C_ZERO, A_GPR(gpr), A_FXBUS(FXBUS_PCM_LEFT));
-	A_OP(icode, &ptr, iMAC0, A_GPR(playback+1), A_C_ZERO, A_GPR(gpr+1), A_FXBUS(FXBUS_PCM_RIGHT));
+	A_OP(icode, &ptr, iMAC0, A_GPR(playback), A_C_00000000, A_GPR(gpr), A_FXBUS(FXBUS_PCM_LEFT));
+	A_OP(icode, &ptr, iMAC0, A_GPR(playback+1), A_C_00000000, A_GPR(gpr+1), A_FXBUS(FXBUS_PCM_RIGHT));
 	snd_emu10k1_init_stereo_control(&controls[nctl++], "Wave Playback Volume", gpr, 100);
 	gpr += 2;
 
 	/* Wave Surround Playback */
-	A_OP(icode, &ptr, iMAC0, A_GPR(playback+2), A_C_ZERO, A_GPR(gpr), A_FXBUS(FXBUS_PCM_LEFT_REAR));
-	A_OP(icode, &ptr, iMAC0, A_GPR(playback+3), A_C_ZERO, A_GPR(gpr+1), A_FXBUS(FXBUS_PCM_RIGHT_REAR));
+	A_OP(icode, &ptr, iMAC0, A_GPR(playback+2), A_C_00000000, A_GPR(gpr), A_FXBUS(FXBUS_PCM_LEFT));
+	A_OP(icode, &ptr, iMAC0, A_GPR(playback+3), A_C_00000000, A_GPR(gpr+1), A_FXBUS(FXBUS_PCM_RIGHT));
 	snd_emu10k1_init_stereo_control(&controls[nctl++], "Wave Surround Playback Volume", gpr, 0);
 	gpr += 2;
 
 	/* Wave Center Playback */
 	/* Center = sub = Left/2 + Right/2 */
 	A_OP(icode, &ptr, iINTERP, A_GPR(tmp), A_FXBUS(FXBUS_PCM_LEFT), 0xcd, A_FXBUS(FXBUS_PCM_RIGHT));
-	A_OP(icode, &ptr, iMAC0, A_GPR(playback+4), A_C_ZERO, A_GPR(gpr), A_GPR(tmp));
+	A_OP(icode, &ptr, iMAC0, A_GPR(playback+4), A_C_00000000, A_GPR(gpr), A_GPR(tmp));
 	snd_emu10k1_init_mono_control(&controls[nctl++], "Wave Center Playback Volume", gpr, 0);
 	gpr++;
 
 	/* Wave LFE Playback */
-	A_OP(icode, &ptr, iMAC0, A_GPR(playback+5), A_C_ZERO, A_GPR(gpr), A_GPR(tmp));
+	A_OP(icode, &ptr, iMAC0, A_GPR(playback+5), A_C_00000000, A_GPR(gpr), A_GPR(tmp));
 	snd_emu10k1_init_mono_control(&controls[nctl++], "Wave LFE Playback Volume", gpr, 0);
 	gpr++;
 
@@ -1260,8 +1258,8 @@
 	gpr += 2;
 
 	/* Wave Capture */
-	A_OP(icode, &ptr, iMAC0, A_GPR(capture+0), A_C_ZERO, A_GPR(gpr), A_FXBUS(FXBUS_PCM_LEFT));
-	A_OP(icode, &ptr, iMAC0, A_GPR(capture+1), A_C_ZERO, A_GPR(gpr+1), A_FXBUS(FXBUS_PCM_RIGHT));
+	A_OP(icode, &ptr, iMAC0, A_GPR(capture+0), A_C_00000000, A_GPR(gpr), A_FXBUS(FXBUS_PCM_LEFT));
+	A_OP(icode, &ptr, iMAC0, A_GPR(capture+1), A_C_00000000, A_GPR(gpr+1), A_FXBUS(FXBUS_PCM_RIGHT));
 	snd_emu10k1_init_stereo_control(&controls[nctl++], "Wave Capture Volume", gpr, 0);
 	gpr += 2;
 
@@ -1271,14 +1269,20 @@
 	snd_emu10k1_init_stereo_control(&controls[nctl++], "Music Capture Volume", gpr, 0);
 	gpr += 2;
 
+	/* Surround Playback */
+	A_OP(icode, &ptr, iMAC0, A_GPR(playback+2), A_C_00000000, A_GPR(gpr), A_FXBUS(FXBUS_PCM_LEFT_REAR));
+	A_OP(icode, &ptr, iMAC0, A_GPR(playback+3), A_C_00000000, A_GPR(gpr+1), A_FXBUS(FXBUS_PCM_RIGHT_REAR));
+	snd_emu10k1_init_stereo_control(&controls[nctl++], "Surround Playback Volume", gpr, 80);
+	gpr += 2;
+
 	/* Center Playback */
 	A_OP(icode, &ptr, iMAC0, A_GPR(playback+4), A_GPR(playback+4), A_GPR(gpr), A_FXBUS(FXBUS_PCM_CENTER));
-	snd_emu10k1_init_mono_control(&controls[nctl++], "Center Playback Volume", gpr, 0);
+	snd_emu10k1_init_mono_control(&controls[nctl++], "Center Playback Volume", gpr, 80);
 	gpr++;
 
 	/* LFE Playback */
 	A_OP(icode, &ptr, iMAC0, A_GPR(playback+5), A_GPR(playback+5), A_GPR(gpr), A_FXBUS(FXBUS_PCM_LFE));
-	snd_emu10k1_init_mono_control(&controls[nctl++], "LFE Playback Volume", gpr, 0);
+	snd_emu10k1_init_mono_control(&controls[nctl++], "LFE Playback Volume", gpr, 80);
 	gpr++;
 
 	/*
@@ -1286,54 +1290,70 @@
 	 */
 #define A_ADD_VOLUME_IN(var,vol,input) \
 A_OP(icode, &ptr, iMAC0, A_GPR(var), A_GPR(var), A_GPR(vol), A_EXTIN(input))
-	if (emu->fx8010.extin_mask & ((1<<A_EXTIN_AC97_L)|(1<<A_EXTIN_AC97_R))) {
-		/* AC'97 Playback Volume */
-		A_ADD_VOLUME_IN(playback, gpr, A_EXTIN_AC97_L);
-		A_ADD_VOLUME_IN(playback+1, gpr+1, A_EXTIN_AC97_R);
-		snd_emu10k1_init_stereo_control(&controls[nctl++], "AC97 Playback Volume", gpr, 0);
-		gpr += 2;
-		/* AC'97 Capture Volume */
-		A_ADD_VOLUME_IN(capture, gpr, A_EXTIN_AC97_L);
-		A_ADD_VOLUME_IN(capture+1, gpr+1, A_EXTIN_AC97_R);
-		snd_emu10k1_init_stereo_control(&controls[nctl++], "AC97 Capture Volume", gpr, 100);
-		gpr += 2;
-	}
 
-	if (emu->fx8010.extin_mask & ((1<<A_EXTIN_SPDIF_CD_L)|(1<<A_EXTIN_SPDIF_CD_R))) {
-		/* Audigy CD Playback Volume */
-		A_ADD_VOLUME_IN(playback, gpr, A_EXTIN_SPDIF_CD_L);
-		A_ADD_VOLUME_IN(playback+1, gpr+1, A_EXTIN_SPDIF_CD_R);
-		snd_emu10k1_init_stereo_control(&controls[nctl++], "Audigy CD Playback Volume", gpr, 0);
-		gpr += 2;
-		/* Audigy CD Capture Volume */
-		A_ADD_VOLUME_IN(capture, gpr, A_EXTIN_SPDIF_CD_L);
-		A_ADD_VOLUME_IN(capture+1, gpr+1, A_EXTIN_SPDIF_CD_R);
-		snd_emu10k1_init_stereo_control(&controls[nctl++], "Audigy CD Capture Volume", gpr, 100);
-		gpr += 2;
-	}
+	/* AC'97 Playback Volume */
+	A_ADD_VOLUME_IN(playback, gpr, A_EXTIN_AC97_L);
+	A_ADD_VOLUME_IN(playback+1, gpr+1, A_EXTIN_AC97_R);
+	snd_emu10k1_init_stereo_control(&controls[nctl++], "AC97 Playback Volume", gpr, 0);
+	gpr += 2;
+	/* AC'97 Capture Volume */
+	A_ADD_VOLUME_IN(capture, gpr, A_EXTIN_AC97_L);
+	A_ADD_VOLUME_IN(capture+1, gpr+1, A_EXTIN_AC97_R);
+	snd_emu10k1_init_stereo_control(&controls[nctl++], "AC97 Capture Volume", gpr, 100);
+	gpr += 2;
+
+	/* Audigy CD Playback Volume */
+	A_ADD_VOLUME_IN(playback, gpr, A_EXTIN_SPDIF_CD_L);
+	A_ADD_VOLUME_IN(playback+1, gpr+1, A_EXTIN_SPDIF_CD_R);
+	snd_emu10k1_init_stereo_control(&controls[nctl++], "Audigy CD Playback Volume", gpr, 0);
+	gpr += 2;
+	/* Audigy CD Capture Volume */
+	A_ADD_VOLUME_IN(capture, gpr, A_EXTIN_SPDIF_CD_L);
+	A_ADD_VOLUME_IN(capture+1, gpr+1, A_EXTIN_SPDIF_CD_R);
+	snd_emu10k1_init_stereo_control(&controls[nctl++], "Audigy CD Capture Volume", gpr, 0);
+	gpr += 2;
+
+	/* Line2 Playback Volume */
+	A_ADD_VOLUME_IN(playback, gpr, A_EXTIN_LINE2_L);
+	A_ADD_VOLUME_IN(playback+1, gpr+1, A_EXTIN_LINE2_R);
+	snd_emu10k1_init_stereo_control(&controls[nctl++], "Line2 Playback Volume", gpr, 0);
+	gpr += 2;
+	/* Line2 Capture Volume */
+	A_ADD_VOLUME_IN(capture, gpr, A_EXTIN_LINE2_L);
+	A_ADD_VOLUME_IN(capture+1, gpr+1, A_EXTIN_LINE2_R);
+	snd_emu10k1_init_stereo_control(&controls[nctl++], "Line2 Capture Volume", gpr, 0);
+	gpr += 2;
+
+	/* Aux2 Playback Volume */
+	A_ADD_VOLUME_IN(playback, gpr, A_EXTIN_AUX2_L);
+	A_ADD_VOLUME_IN(playback+1, gpr+1, A_EXTIN_AUX2_R);
+	snd_emu10k1_init_stereo_control(&controls[nctl++], "Aux2 Playback Volume", gpr, 0);
+	gpr += 2;
+	/* Aux2 Capture Volume */
+	A_ADD_VOLUME_IN(capture, gpr, A_EXTIN_AUX2_L);
+	A_ADD_VOLUME_IN(capture+1, gpr+1, A_EXTIN_AUX2_R);
+	snd_emu10k1_init_stereo_control(&controls[nctl++], "Aux2 Capture Volume", gpr, 0);
+	gpr += 2;
 
 	/*
 	 * outputs
 	 */
-#define A_PUT_OUTPUT(out,src) A_OP(icode, &ptr, iACC3, A_EXTOUT(out), A_C_ZERO, A_C_ZERO, A_GPR(src))
-#define A_PUT_MONO_OUTPUT(out,src) \
-	if (emu->fx8010.extout_mask & (1<<(out))) A_PUT_OUTPUT(out,src)
+#define A_PUT_OUTPUT(out,src) A_OP(icode, &ptr, iACC3, A_EXTOUT(out), A_C_00000000, A_C_00000000, A_GPR(src))
 #define A_PUT_STEREO_OUTPUT(out1,out2,src) \
-	if (emu->fx8010.extout_mask & ((1<<(out1))|(1<<(out2)))) {\
-		A_PUT_OUTPUT(out1,src);\
-		A_PUT_OUTPUT(out2,src+1);}
+	{A_PUT_OUTPUT(out1,src); A_PUT_OUTPUT(out2,src+1);}
 
 	/* digital outputs */
 	A_PUT_STEREO_OUTPUT(A_EXTOUT_FRONT_L, A_EXTOUT_FRONT_R, playback);
 	A_PUT_STEREO_OUTPUT(A_EXTOUT_REAR_L, A_EXTOUT_REAR_R, playback+2);
-	A_PUT_MONO_OUTPUT(A_EXTOUT_CENTER, playback+4);
-	A_PUT_MONO_OUTPUT(A_EXTOUT_LFE, playback+5);
+	A_PUT_OUTPUT(A_EXTOUT_CENTER, playback+4);
+	A_PUT_OUTPUT(A_EXTOUT_LFE, playback+5);
 
 	/* analog speakers */
-	A_PUT_STEREO_OUTPUT(A_EXTOUT_AFRONT_L, A_EXTOUT_AFRONT_R, playback);
+	//A_PUT_STEREO_OUTPUT(A_EXTOUT_AFRONT_L, A_EXTOUT_AFRONT_R, playback);
+	A_PUT_STEREO_OUTPUT(A_EXTOUT_AC97_L, A_EXTOUT_AC97_R, playback);
 	A_PUT_STEREO_OUTPUT(A_EXTOUT_AREAR_L, A_EXTOUT_AREAR_R, playback+2);
-	A_PUT_MONO_OUTPUT(A_EXTOUT_ACENTER, playback+4);
-	A_PUT_MONO_OUTPUT(A_EXTOUT_ALFE, playback+5);
+	A_PUT_OUTPUT(A_EXTOUT_ACENTER, playback+4);
+	A_PUT_OUTPUT(A_EXTOUT_ALFE, playback+5);
 
 	/* headphone */
 	A_PUT_STEREO_OUTPUT(A_EXTOUT_HEADPHONE_L, A_EXTOUT_HEADPHONE_R, playback);
@@ -1946,7 +1966,7 @@
 {
 	/* stop processor */
 	if (emu->audigy)
-		snd_emu10k1_ptr_write(emu, A_DBG, 0, emu->fx8010.dbg = A_DBG_SINGLE_STEP_ADDR);
+		snd_emu10k1_ptr_write(emu, A_DBG, 0, emu->fx8010.dbg = A_DBG_SINGLE_STEP);
 	else
 		snd_emu10k1_ptr_write(emu, DBG, 0, emu->fx8010.dbg = EMU10K1_DBG_SINGLE_STEP);
 }
@@ -2127,7 +2147,7 @@
 		if (!capable(CAP_SYS_ADMIN))
 			return -EPERM;
 		if (emu->audigy)
-			snd_emu10k1_ptr_write(emu, A_DBG, 0, emu->fx8010.dbg |= A_DBG_SINGLE_STEP_ADDR);
+			snd_emu10k1_ptr_write(emu, A_DBG, 0, emu->fx8010.dbg |= A_DBG_SINGLE_STEP);
 		else
 			snd_emu10k1_ptr_write(emu, DBG, 0, emu->fx8010.dbg |= EMU10K1_DBG_SINGLE_STEP);
 		return 0;
@@ -2160,12 +2180,12 @@
 		if (addr > 0x1ff)
 			return -EINVAL;
 		if (emu->audigy)
-			snd_emu10k1_ptr_write(emu, A_DBG, 0, emu->fx8010.dbg |= A_DBG_SINGLE_STEP_ADDR | addr);
+			snd_emu10k1_ptr_write(emu, A_DBG, 0, emu->fx8010.dbg |= A_DBG_SINGLE_STEP | addr);
 		else
 			snd_emu10k1_ptr_write(emu, DBG, 0, emu->fx8010.dbg |= EMU10K1_DBG_SINGLE_STEP | addr);
 		udelay(10);
 		if (emu->audigy)
-			snd_emu10k1_ptr_write(emu, A_DBG, 0, emu->fx8010.dbg |= A_DBG_SINGLE_STEP_ADDR | A_DBG_STEP_ADDR | addr);
+			snd_emu10k1_ptr_write(emu, A_DBG, 0, emu->fx8010.dbg |= A_DBG_SINGLE_STEP | A_DBG_STEP_ADDR | addr);
 		else
 			snd_emu10k1_ptr_write(emu, DBG, 0, emu->fx8010.dbg |= EMU10K1_DBG_SINGLE_STEP | EMU10K1_DBG_STEP | addr);
 		return 0;
diff --git a/sound/pci/emu10k1/emumixer.c b/sound/pci/emu10k1/emumixer.c
index 9ff7078..83bbf43 100644
--- a/sound/pci/emu10k1/emumixer.c
+++ b/sound/pci/emu10k1/emumixer.c
@@ -107,12 +107,40 @@
         put:            snd_emu10k1_spdif_put
 };
 
-/* FIXME: audigy has more routing/effects */
+
+static void update_emu10k1_fxrt(emu10k1_t *emu, int voice, unsigned char *route)
+{
+	if (emu->audigy) {
+		snd_emu10k1_ptr_write(emu, A_FXRT1, voice,
+				      snd_emu10k1_compose_audigy_fxrt1(route));
+		snd_emu10k1_ptr_write(emu, A_FXRT2, voice,
+				      snd_emu10k1_compose_audigy_fxrt2(route));
+	} else {
+		snd_emu10k1_ptr_write(emu, FXRT, voice,
+				      snd_emu10k1_compose_send_routing(route));
+	}
+}
+
+static void update_emu10k1_send_volume(emu10k1_t *emu, int voice, unsigned char *volume)
+{
+	snd_emu10k1_ptr_write(emu, PTRX_FXSENDAMOUNT_A, voice, volume[0]);
+	snd_emu10k1_ptr_write(emu, PTRX_FXSENDAMOUNT_B, voice, volume[1]);
+	snd_emu10k1_ptr_write(emu, PSST_FXSENDAMOUNT_C, voice, volume[2]);
+	snd_emu10k1_ptr_write(emu, DSL_FXSENDAMOUNT_D, voice, volume[3]);
+	if (emu->audigy) {
+		unsigned int val = ((unsigned int)volume[4] << 24) |
+			((unsigned int)volume[5] << 16) |
+			((unsigned int)volume[6] << 8) |
+			(unsigned int)volume[7];
+		snd_emu10k1_ptr_write(emu, A_SENDAMOUNTS, voice, val);
+	}
+}
+
 static int snd_emu10k1_send_routing_info(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t * uinfo)
 {
 	emu10k1_t *emu = snd_kcontrol_chip(kcontrol);
 	uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
-	uinfo->count = 3*4;
+	uinfo->count = emu->audigy ? 3*8 : 3*4;
 	uinfo->value.integer.min = 0;
 	uinfo->value.integer.max = emu->audigy ? 0x3f : 0x0f;
 	return 0;
@@ -125,13 +153,14 @@
 	emu10k1_pcm_mixer_t *mix = (emu10k1_pcm_mixer_t *)kcontrol->private_value;
 	emu10k1_t *emu = snd_kcontrol_chip(kcontrol);
 	int voice, idx;
+	int num_efx = emu->audigy ? 8 : 4;
+	int mask = emu->audigy ? 0x3f : 0x0f;
 
 	spin_lock_irqsave(&emu->reg_lock, flags);
 	for (voice = 0; voice < 3; voice++)
-		for (idx = 0; idx < 4; idx++)
-			ucontrol->value.integer.value[(voice * 4) + idx] = emu->audigy ?
-				((mix->send_routing[voice] >> (idx * 8)) & 0x3f) :
-				((mix->send_routing[voice] >> (idx * 4)) & 0x0f);
+		for (idx = 0; idx < num_efx; idx++)
+			ucontrol->value.integer.value[(voice * num_efx) + idx] = 
+				mix->send_routing[voice][idx] & mask;
 	spin_unlock_irqrestore(&emu->reg_lock, flags);
         return 0;
 }
@@ -143,44 +172,27 @@
 	emu10k1_pcm_mixer_t *mix = (emu10k1_pcm_mixer_t *)kcontrol->private_value;
 	emu10k1_t *emu = snd_kcontrol_chip(kcontrol);
 	int change = 0, voice, idx, val;
+	int num_efx = emu->audigy ? 8 : 4;
+	int mask = emu->audigy ? 0x3f : 0x0f;
 
 	spin_lock_irqsave(&emu->reg_lock, flags);
 	for (voice = 0; voice < 3; voice++)
-		for (idx = 0; idx < 4; idx++) {
-			val = ucontrol->value.integer.value[(voice * 4) + idx];
-			if (emu->audigy) {
-				int shift = idx * 8;
-				val &= 0x3f;
-				if (((mix->send_routing[voice] >> shift) & 0x3f) != val) {
-					mix->send_routing[voice] &= ~(0x3f << shift);
-					mix->send_routing[voice] |= val << shift;
-					change = 1;
-				}
-			} else {
-				int shift = idx * 4;
-				val = ucontrol->value.integer.value[(voice * 4) + idx] & 15;
-				if (((mix->send_routing[voice] >> shift) & 15) != val) {
-					mix->send_routing[voice] &= ~(15 << shift);
-					mix->send_routing[voice] |= val << shift;
-					change = 1;
-				}
+		for (idx = 0; idx < num_efx; idx++) {
+			val = ucontrol->value.integer.value[(voice * num_efx) + idx] & mask;
+			if (mix->send_routing[voice][idx] != val) {
+				mix->send_routing[voice][idx] = val;
+				change = 1;
 			}
 		}	
 	if (change && mix->epcm) {
 		if (mix->epcm->voices[0] && mix->epcm->voices[1]) {
-			if (emu->audigy) {
-				snd_emu10k1_ptr_write(emu, A_FXRT1, mix->epcm->voices[0]->number, mix->send_routing[1]);
-				snd_emu10k1_ptr_write(emu, A_FXRT1, mix->epcm->voices[1]->number, mix->send_routing[2]);
-			} else {
-				snd_emu10k1_ptr_write(emu, FXRT, mix->epcm->voices[0]->number, mix->send_routing[1] << 16);
-				snd_emu10k1_ptr_write(emu, FXRT, mix->epcm->voices[1]->number, mix->send_routing[2] << 16);
-			}
+			update_emu10k1_fxrt(emu, mix->epcm->voices[0]->number,
+					    &mix->send_routing[1][0]);
+			update_emu10k1_fxrt(emu, mix->epcm->voices[1]->number,
+					    &mix->send_routing[2][0]);
 		} else if (mix->epcm->voices[0]) {
-			if (emu->audigy) {
-				snd_emu10k1_ptr_write(emu, A_FXRT1, mix->epcm->voices[0]->number, mix->send_routing[0]);
-			} else {
-				snd_emu10k1_ptr_write(emu, FXRT, mix->epcm->voices[0]->number, mix->send_routing[0] << 16);
-			}
+			update_emu10k1_fxrt(emu, mix->epcm->voices[0]->number,
+					    &mix->send_routing[0][0]);
 		}
 	}
 	spin_unlock_irqrestore(&emu->reg_lock, flags);
@@ -199,8 +211,9 @@
 
 static int snd_emu10k1_send_volume_info(snd_kcontrol_t *kcontrol, snd_ctl_elem_info_t * uinfo)
 {
+	emu10k1_t *emu = snd_kcontrol_chip(kcontrol);
 	uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
-	uinfo->count = 3*4;
+	uinfo->count = emu->audigy ? 3*8 : 3*4;
 	uinfo->value.integer.min = 0;
 	uinfo->value.integer.max = 255;
 	return 0;
@@ -213,10 +226,11 @@
 	emu10k1_pcm_mixer_t *mix = (emu10k1_pcm_mixer_t *)kcontrol->private_value;
 	emu10k1_t *emu = snd_kcontrol_chip(kcontrol);
 	int idx;
+	int num_efx = emu->audigy ? 8 : 4;
 
 	spin_lock_irqsave(&emu->reg_lock, flags);
-	for (idx = 0; idx < 3*4; idx++)
-		ucontrol->value.integer.value[idx] = mix->send_volume[idx/4][idx%4];
+	for (idx = 0; idx < 3*num_efx; idx++)
+		ucontrol->value.integer.value[idx] = mix->send_volume[idx/num_efx][idx%num_efx];
 	spin_unlock_irqrestore(&emu->reg_lock, flags);
         return 0;
 }
@@ -228,34 +242,25 @@
 	emu10k1_pcm_mixer_t *mix = (emu10k1_pcm_mixer_t *)kcontrol->private_value;
 	emu10k1_t *emu = snd_kcontrol_chip(kcontrol);
 	int change = 0, idx, val;
+	int num_efx = emu->audigy ? 8 : 4;
 
 	spin_lock_irqsave(&emu->reg_lock, flags);
-	for (idx = 0; idx < 3*4; idx++) {
+	for (idx = 0; idx < 3*num_efx; idx++) {
 		val = ucontrol->value.integer.value[idx] & 255;
-		if (mix->send_volume[idx/4][idx%4] != val) {
-			mix->send_volume[idx/4][idx%4] = val;
+		if (mix->send_volume[idx/num_efx][idx%num_efx] != val) {
+			mix->send_volume[idx/num_efx][idx%num_efx] = val;
 			change = 1;
 		}
 	}
 	if (change && mix->epcm) {
-		u32 voice;
 		if (mix->epcm->voices[0] && mix->epcm->voices[1]) {
-			voice = mix->epcm->voices[0]->number;
-			snd_emu10k1_ptr_write(emu, PTRX_FXSENDAMOUNT_A, voice, mix->send_volume[1][0]);
-			snd_emu10k1_ptr_write(emu, PTRX_FXSENDAMOUNT_B, voice, mix->send_volume[1][1]);
-			snd_emu10k1_ptr_write(emu, PSST_FXSENDAMOUNT_C, voice, mix->send_volume[1][2]);
-			snd_emu10k1_ptr_write(emu, DSL_FXSENDAMOUNT_D, voice, mix->send_volume[1][3]);
-			voice = mix->epcm->voices[1]->number;
-			snd_emu10k1_ptr_write(emu, PTRX_FXSENDAMOUNT_A, voice, mix->send_volume[2][0]);
-			snd_emu10k1_ptr_write(emu, PTRX_FXSENDAMOUNT_B, voice, mix->send_volume[2][1]);
-			snd_emu10k1_ptr_write(emu, PSST_FXSENDAMOUNT_C, voice, mix->send_volume[2][2]);
-			snd_emu10k1_ptr_write(emu, DSL_FXSENDAMOUNT_D, voice, mix->send_volume[2][3]);
+			update_emu10k1_send_volume(emu, mix->epcm->voices[0]->number,
+						   &mix->send_volume[1][0]);
+			update_emu10k1_send_volume(emu, mix->epcm->voices[1]->number,
+						   &mix->send_volume[2][0]);
 		} else if (mix->epcm->voices[0]) {
-			voice = mix->epcm->voices[0]->number;
-			snd_emu10k1_ptr_write(emu, PTRX_FXSENDAMOUNT_A, voice, mix->send_volume[0][0]);
-			snd_emu10k1_ptr_write(emu, PTRX_FXSENDAMOUNT_B, voice, mix->send_volume[0][1]);
-			snd_emu10k1_ptr_write(emu, PSST_FXSENDAMOUNT_C, voice, mix->send_volume[0][2]);
-			snd_emu10k1_ptr_write(emu, DSL_FXSENDAMOUNT_D, voice, mix->send_volume[0][3]);
+			update_emu10k1_send_volume(emu, mix->epcm->voices[0]->number,
+						   &mix->send_volume[0][0]);
 		}
 	}
 	spin_unlock_irqrestore(&emu->reg_lock, flags);
@@ -380,6 +385,71 @@
 	put:		snd_emu10k1_shared_spdif_put
 };
 
+#if 0 // XXX: not working yet..
+/*
+ * Audigy analog / digital switches
+ */
+static int audigy_output_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 audigy_output_get(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucontrol)
+{
+	emu10k1_t *emu = snd_kcontrol_chip(kcontrol);
+	unsigned int mask = (unsigned int)kcontrol->private_value;
+
+	ucontrol->value.integer.value[0] = inl(emu->port + A_IOCFG) & mask ? 0 : 1;
+        return 0;
+}
+
+static int audigy_output_put(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_t *ucontrol)
+{
+	unsigned long flags;
+	emu10k1_t *emu = snd_kcontrol_chip(kcontrol);
+	unsigned int mask = (unsigned int)kcontrol->private_value;
+	unsigned int reg, oreg;
+	int change;
+
+	spin_lock_irqsave(&emu->reg_lock, flags);
+	reg = oreg = inl(emu->port + A_IOCFG);
+	reg &= ~mask;
+	reg |= ucontrol->value.integer.value[0] & 1 ? 0 : mask;
+	change = (reg != oreg);
+	if (change)
+		outl(reg, emu->port + A_IOCFG);
+	spin_unlock_irqrestore(&emu->reg_lock, flags);
+        return change;
+}
+
+static snd_kcontrol_new_t audigy_output_analog =
+{
+	iface:		SNDRV_CTL_ELEM_IFACE_MIXER,
+	name:		"Audigy Analog Output Switch",
+	info:		audigy_output_info,
+	get:		audigy_output_get,
+	put:		audigy_output_put,
+	private_value:	0x40,
+};
+
+static snd_kcontrol_new_t audigy_output_digital =
+{
+	iface:		SNDRV_CTL_ELEM_IFACE_MIXER,
+	name:		"Audigy Digital Output Switch",
+	info:		audigy_output_info,
+	get:		audigy_output_get,
+	put:		audigy_output_put,
+	private_value:	0x04,
+};
+#endif // XXX
+
+
+/*
+ */
 static void snd_emu10k1_mixer_free_ac97(ac97_t *ac97)
 {
 	emu10k1_t *emu = snd_magic_cast(emu10k1_t, ac97->private_data, return);
@@ -407,6 +477,7 @@
 
 	for (pcm = 0; pcm < 32; pcm++) {
 		emu10k1_pcm_mixer_t *mix;
+		int v;
 		
 		mix = &emu->pcm_mixer[pcm];
 		mix->epcm = NULL;
@@ -417,11 +488,10 @@
 		kctl->id.index = pcm;
 		if ((err = snd_ctl_add(card, kctl)))
 			return err;
-		if (emu->audigy) {
-			mix->send_routing[0] = mix->send_routing[1] = mix->send_routing[2] = 0x3210;
-		} else {
-			mix->send_routing[0] = mix->send_routing[1] = mix->send_routing[2] = 0x03020100;
-		}
+		for (v = 0; v < 4; v++)
+			mix->send_routing[0][v] = 
+				mix->send_routing[1][v] = 
+				mix->send_routing[2][v] = v;
 		
 		if ((kctl = mix->ctl_send_volume = snd_ctl_new1(&snd_emu10k1_send_volume_control, emu)) == NULL)
 			return -ENOMEM;
@@ -457,10 +527,23 @@
 			return err;
 	}
 
-	if ((kctl = snd_ctl_new1(&snd_emu10k1_shared_spdif, emu)) == NULL)
-		return -ENOMEM;
-	if ((err = snd_ctl_add(card, kctl)))
-		return err;
+	if (emu->audigy) {
+#if 0 // XXX
+		if ((kctl = snd_ctl_new1(&audigy_output_analog, emu)) == NULL)
+			return -ENOMEM;
+		if ((err = snd_ctl_add(card, kctl)))
+			return err;
+		if ((kctl = snd_ctl_new1(&audigy_output_digital, emu)) == NULL)
+			return -ENOMEM;
+		if ((err = snd_ctl_add(card, kctl)))
+			return err;
+#endif // XXX
+	} else {
+		if ((kctl = snd_ctl_new1(&snd_emu10k1_shared_spdif, emu)) == NULL)
+			return -ENOMEM;
+		if ((err = snd_ctl_add(card, kctl)))
+			return err;
+	}
 
 	return 0;
 }
diff --git a/sound/pci/emu10k1/emupcm.c b/sound/pci/emu10k1/emupcm.c
index 44037bb..3e92d39 100644
--- a/sound/pci/emu10k1/emupcm.c
+++ b/sound/pci/emu10k1/emupcm.c
@@ -237,8 +237,8 @@
 	emu10k1_pcm_mixer_t *mix = &emu->pcm_mixer[substream->number];
 	unsigned int silent_page, tmp;
 	int voice, stereo, w_16;
-	unsigned char attn, send_a, send_b, send_c, send_d;
-	unsigned short send_routing;
+	unsigned char attn, send_amount[8];
+	unsigned char send_routing[8];
 	unsigned long flags;
 	unsigned int pitch_target;
 
@@ -260,15 +260,16 @@
 	/* volume parameters */
 	if (extra) {
 		attn = 0;
-		send_routing = emu->audigy ? 0x03020100 : 0x3210;
-		send_a = send_b = send_c = send_d = 0x00;
+		memset(send_routing, 0, sizeof(send_routing));
+		send_routing[0] = 0;
+		send_routing[1] = 1;
+		send_routing[2] = 2;
+		send_routing[3] = 3;
+		memset(send_amount, 0, sizeof(send_amount));
 	} else {
 		tmp = stereo ? (master ? 1 : 2) : 0;
-		send_a = mix->send_volume[tmp][0];
-		send_b = mix->send_volume[tmp][1];
-		send_c = mix->send_volume[tmp][2];
-		send_d = mix->send_volume[tmp][3];
-		send_routing = mix->send_routing[tmp];
+		memcpy(send_routing, &mix->send_routing[tmp][0], 8);
+		memcpy(send_amount, &mix->send_volume[tmp][0], 8);
 	}
 
 	if (master) {
@@ -290,16 +291,29 @@
 
 	// setup routing
 	if (emu->audigy) {
-		snd_emu10k1_ptr_write(emu, A_FXRT1, voice, send_routing);
-		snd_emu10k1_ptr_write(emu, A_SENDAMOUNTS, voice, 0); /* no effects */
-		snd_emu10k1_ptr_write(emu, A_FXRT2, voice, 0); /* channels EFGH */
+		snd_emu10k1_ptr_write(emu, A_FXRT1, voice,
+				      ((unsigned int)send_routing[3] << 24) |
+				      ((unsigned int)send_routing[2] << 16) |
+				      ((unsigned int)send_routing[1] << 8) |
+				      (unsigned int)send_routing[0]);
+		snd_emu10k1_ptr_write(emu, A_FXRT2, voice,
+				      ((unsigned int)send_routing[7] << 24) |
+				      ((unsigned int)send_routing[6] << 16) |
+				      ((unsigned int)send_routing[5] << 8) |
+				      (unsigned int)send_routing[4]);
+		snd_emu10k1_ptr_write(emu, A_SENDAMOUNTS, voice,
+				      ((unsigned int)send_amount[4] << 24) |
+				      ((unsigned int)send_amount[5] << 16) |
+				      ((unsigned int)send_amount[6] << 8) |
+				      (unsigned int)send_amount[7]);
 	} else
-		snd_emu10k1_ptr_write(emu, FXRT, voice, send_routing << 16);
+		snd_emu10k1_ptr_write(emu, FXRT, voice,
+				      snd_emu10k1_compose_send_routing(send_routing));
 	// Stop CA
 	// Assumption that PT is already 0 so no harm overwriting
-	snd_emu10k1_ptr_write(emu, PTRX, voice, (send_a << 8) | send_b);
-	snd_emu10k1_ptr_write(emu, DSL, voice, end_addr | (send_d << 24));
-	snd_emu10k1_ptr_write(emu, PSST, voice, start_addr | (send_c << 24));
+	snd_emu10k1_ptr_write(emu, PTRX, voice, (send_amount[0] << 8) | send_amount[1]);
+	snd_emu10k1_ptr_write(emu, DSL, voice, end_addr | (send_amount[3] << 24));
+	snd_emu10k1_ptr_write(emu, PSST, voice, start_addr | (send_amount[2] << 24));
 	pitch_target = emu10k1_calc_pitch_target(runtime->rate);
 	snd_emu10k1_ptr_write(emu, CCCA, voice, evoice->epcm->ccca_start_addr |
 			      emu10k1_select_interprom(pitch_target) |
@@ -753,7 +767,7 @@
 	emu10k1_pcm_t *epcm;
 	emu10k1_pcm_mixer_t *mix;
 	snd_pcm_runtime_t *runtime = substream->runtime;
-	int err;
+	int i, err;
 
 	epcm = snd_magic_kcalloc(emu10k1_pcm_t, 0, GFP_KERNEL);
 	if (epcm == NULL)
@@ -773,8 +787,8 @@
 		return err;
 	}
 	mix = &emu->pcm_mixer[substream->number];
-	mix->send_routing[0] = mix->send_routing[1] = mix->send_routing[2] =
-		emu->audigy ? 0x03020100 : 0x3210;
+	for (i = 0; i < 4; i++)
+		mix->send_routing[0][i] = mix->send_routing[1][i] = mix->send_routing[2][i] = i;
 	memset(&mix->send_volume, 0, sizeof(mix->send_volume));
 	mix->send_volume[0][0] = mix->send_volume[0][1] =
 	mix->send_volume[1][0] = mix->send_volume[2][1] = 255;
diff --git a/sound/pci/emu10k1/emuproc.c b/sound/pci/emu10k1/emuproc.c
index d128b33..a522736 100644
--- a/sound/pci/emu10k1/emuproc.c
+++ b/sound/pci/emu10k1/emuproc.c
@@ -250,6 +250,7 @@
 		}
 	}
 	emu->proc_entry = entry;
+	entry = NULL;
 	if ((entry = snd_info_create_card_entry(emu->card, "fx8010_gpr", emu->card->proc_root)) != NULL) {
 		entry->content = SNDRV_INFO_CONTENT_DATA;
 		entry->private_data = emu;
@@ -262,6 +263,7 @@
 		}
 	}
 	emu->proc_entry_fx8010_gpr = entry;
+	entry = NULL;
 	if (!emu->audigy && (entry = snd_info_create_card_entry(emu->card, "fx8010_tram_data", emu->card->proc_root)) != NULL) {
 		entry->content = SNDRV_INFO_CONTENT_DATA;
 		entry->private_data = emu;
@@ -274,6 +276,7 @@
 		}
 	}
 	emu->proc_entry_fx8010_tram_data = entry;
+	entry = NULL;
 	if (!emu->audigy && (entry = snd_info_create_card_entry(emu->card, "fx8010_tram_addr", emu->card->proc_root)) != NULL) {
 		entry->content = SNDRV_INFO_CONTENT_DATA;
 		entry->private_data = emu;
@@ -286,6 +289,7 @@
 		}
 	}
 	emu->proc_entry_fx8010_tram_addr = entry;
+	entry = NULL;
 	if ((entry = snd_info_create_card_entry(emu->card, "fx8010_code", emu->card->proc_root)) != NULL) {
 		entry->content = SNDRV_INFO_CONTENT_DATA;
 		entry->private_data = emu;
@@ -298,6 +302,7 @@
 		}
 	}
 	emu->proc_entry_fx8010_code = entry;
+	entry = NULL;
 	if ((entry = snd_info_create_card_entry(emu->card, "fx8010_acode", emu->card->proc_root)) != NULL) {
 		entry->content = SNDRV_INFO_CONTENT_TEXT;
 		entry->private_data = emu;
diff --git a/sound/pci/ens1370.c b/sound/pci/ens1370.c
index 9d6df8b..64e94e6 100644
--- a/sound/pci/ens1370.c
+++ b/sound/pci/ens1370.c
@@ -2049,7 +2049,7 @@
 
 	if ((err = pci_module_init(&driver)) < 0) {
 #ifdef MODULE
-		snd_printk("Ensoniq AudioPCI soundcard not found or device busy\n");
+		printk(KERN_ERR "Ensoniq AudioPCI soundcard not found or device busy\n");
 #endif
 		return err;
 	}
diff --git a/sound/pci/es1938.c b/sound/pci/es1938.c
index e8a254a..0aaa38c 100644
--- a/sound/pci/es1938.c
+++ b/sound/pci/es1938.c
@@ -1626,7 +1626,7 @@
 			    SLSB_REG(chip, FMLOWADDR),
 			    SLSB_REG(chip, FMHIGHADDR),
 			    OPL3_HW_OPL3, 1, &opl3) < 0) {
-	        snd_printk("OPL3 not detected at 0x%lx\n",
+		printk(KERN_ERR "es1938: OPL3 not detected at 0x%lx\n",
 			   SLSB_REG(chip, FMLOWADDR));
 	} else {
 	        if ((err = snd_opl3_timer_new(opl3, 0, 1)) < 0) {
@@ -1640,7 +1640,7 @@
 	}
 	if (snd_mpu401_uart_new(card, 0, MPU401_HW_MPU401,
 				chip->mpu_port, 1, chip->irq, 0, &chip->rmidi) < 0) {
-		snd_printk("unable to initialize MPU-401\n");
+		printk(KERN_ERR "es1938: unable to initialize MPU-401\n");
 	}
 #ifndef LINUX_2_2
 	chip->gameport.io = chip->game_port;
@@ -1683,7 +1683,7 @@
 
 	if ((err = pci_module_init(&driver)) < 0) {
 #ifdef MODULE
-		snd_printk("ESS Solo-1 soundcard not found or device busy\n");
+		printk(KERN_ERR "ESS Solo-1 soundcard not found or device busy\n");
 #endif
 		return err;
 	}
diff --git a/sound/pci/es1968.c b/sound/pci/es1968.c
index aa0bdc5..905e176 100644
--- a/sound/pci/es1968.c
+++ b/sound/pci/es1968.c
@@ -2720,7 +2720,7 @@
 	if ((err = snd_mpu401_uart_new(card, 0, MPU401_HW_MPU401,
 				       chip->io_port + ESM_MPU401_PORT, 1,
 				       chip->irq, 0, &chip->rmidi)) < 0) {
-		printk(KERN_INFO "es1968: skipping MPU-401 MIDI support..\n");
+		printk(KERN_WARNING "es1968: skipping MPU-401 MIDI support..\n");
 	}
 
 	/* card switches */
@@ -2783,7 +2783,7 @@
 
         if ((err = pci_module_init(&driver)) < 0) {
 #ifdef MODULE
-		snd_printk("ESS Maestro soundcard not found or device busy\n");
+		printk(KERN_ERR "ESS Maestro soundcard not found or device busy\n");
 #endif
 		return err;
 	}
@@ -2792,7 +2792,7 @@
 	   leave the speaking emitting an annoying noise, so we catch
 	   shutdown events. */ 
 	if (register_reboot_notifier(&snd_es1968_nb)) {
-		snd_printk("reboot notifier registration failed; may make noise at shutdown.\n");
+		printk(KERN_ERR "reboot notifier registration failed; may make noise at shutdown.\n");
 	}
 #endif
 	return 0;
diff --git a/sound/pci/fm801.c b/sound/pci/fm801.c
index 469f537..c8432ef 100644
--- a/sound/pci/fm801.c
+++ b/sound/pci/fm801.c
@@ -1104,7 +1104,7 @@
 
 	if ((err = pci_module_init(&driver)) < 0) {
 #ifdef MODULE
-		snd_printk("ForteMedia FM801 soundcard not found or device busy\n");
+		printk(KERN_ERR "ForteMedia FM801 soundcard not found or device busy\n");
 #endif
 		return err;
 	}
diff --git a/sound/pci/ice1712.c b/sound/pci/ice1712.c
index 71cf791..6cf4a16 100644
--- a/sound/pci/ice1712.c
+++ b/sound/pci/ice1712.c
@@ -1718,7 +1718,7 @@
 	if (rpcm)
 		*rpcm = pcm;
 
-	printk("Consumer PCM code does not work well at the moment --jk\n");
+	printk(KERN_WARNING "Consumer PCM code does not work well at the moment --jk\n");
 
 	return 0;
 }
@@ -2410,7 +2410,7 @@
 		ac97.private_data = ice;
 		ac97.private_free = snd_ice1712_mixer_free_ac97;
 		if ((err = snd_ac97_mixer(ice->card, &ac97, &ice->ac97)) < 0) {
-			snd_printk("ice1712: cannot initialize ac97 for consumer, skipped\n");
+			printk(KERN_WARNING "ice1712: cannot initialize ac97 for consumer, skipped\n");
 			// return err;
 		} else {
 			if ((err = snd_ctl_add(ice->card, snd_ctl_new1(&snd_ice1712_mixer_digmix_route_ac97, ice))) < 0)
@@ -2428,7 +2428,7 @@
 		ac97.private_data = ice;
 		ac97.private_free = snd_ice1712_mixer_free_ac97;
 		if ((err = snd_ac97_mixer(ice->card, &ac97, &ice->ac97)) < 0) {
-			snd_printk("ice1712: cannot initialize pro ac97, skipped\n");
+			printk(KERN_WARNING "ice1712: cannot initialize pro ac97, skipped\n");
 			// return err;
 		}
 		return 0;
@@ -4329,7 +4329,7 @@
 
 	if ((err = pci_module_init(&driver)) < 0) {
 #ifdef MODULE
-		snd_printk("ICE1712 soundcard not found or device busy\n");
+		printk(KERN_ERR "ICE1712 soundcard not found or device busy\n");
 #endif
 		return err;
 	}
diff --git a/sound/pci/intel8x0.c b/sound/pci/intel8x0.c
index a22598c..26bc53ed 100644
--- a/sound/pci/intel8x0.c
+++ b/sound/pci/intel8x0.c
@@ -35,6 +35,7 @@
 #include <sound/pcm.h>
 #include <sound/ac97_codec.h>
 #include <sound/info.h>
+#include <sound/mpu401.h>
 #define SNDRV_GET_ID
 #include <sound/initval.h>
 
@@ -52,10 +53,24 @@
 		"{SiS,SI7012},"
 		"{NVidia,NForce Audio}}");
 
+#define SUPPORT_JOYSTICK 1
+#define SUPPORT_MIDI 1
+
 static int snd_index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX;	/* Index 0-MAX */
 static char *snd_id[SNDRV_CARDS] = SNDRV_DEFAULT_STR;	/* ID for this card */
 static int snd_enable[SNDRV_CARDS] = SNDRV_DEFAULT_ENABLE_PNP;	/* Enable this card */
 static int snd_ac97_clock[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS - 1)] = 0};
+#ifdef SUPPORT_JOYSTICK
+static int snd_joystick_port[SNDRV_CARDS] =
+#ifdef CONFIG_ISA
+	{0x200};	/* enable as default */
+#else
+	{0};	/* disabled */
+#endif
+#endif
+#ifdef SUPPORT_MIDI
+static int snd_mpu_port[SNDRV_CARDS]; /* disabled */
+#endif
 
 MODULE_PARM(snd_index, "1-" __MODULE_STRING(SNDRV_CARDS) "i");
 MODULE_PARM_DESC(snd_index, "Index value for Intel i8x0 soundcard.");
@@ -69,6 +84,16 @@
 MODULE_PARM(snd_ac97_clock, "1-" __MODULE_STRING(SNDRV_CARDS) "i");
 MODULE_PARM_DESC(snd_ac97_clock, "AC'97 codec clock (0 = auto-detect).");
 MODULE_PARM_SYNTAX(snd_ac97_clock, SNDRV_ENABLED ",default:0");
+#ifdef SUPPORT_JOYSTICK
+MODULE_PARM(snd_joystick_port, "1-" __MODULE_STRING(SNDRV_CARDS) "i");
+MODULE_PARM_DESC(snd_joystick_port, "Joystick port address for Intel i8x0 soundcard. (0 = disabled)");
+MODULE_PARM_SYNTAX(snd_joystick_port, SNDRV_ENABLED ",allows:{{0},{0x200}},dialog:list");
+#endif
+#ifdef SUPPORT_MIDI
+MODULE_PARM(snd_mpu_port, "1-" __MODULE_STRING(SNDRV_CARDS) "i");
+MODULE_PARM_DESC(snd_mpu_port, "MPU401 port # for Intel i8x0 driver.");
+MODULE_PARM_SYNTAX(snd_mpu_port, SNDRV_ENABLED ",allows:{{0},{0x330},{0x300}},dialog:list");
+#endif
 
 /*
  *  Direct registers
@@ -231,6 +256,8 @@
 	ac97_t *ac97;
 	ac97_t *ac97sec;
 
+	snd_rawmidi_t *rmidi;
+
 	spinlock_t reg_lock;
 	spinlock_t ac97_lock;
 	snd_info_entry_t *proc_entry;
@@ -256,9 +283,9 @@
 	{ 0x8086, 0x2445, PCI_ANY_ID, PCI_ANY_ID, 0, 0, DEVICE_INTEL },	/* 82801BA */
 	{ 0x8086, 0x2485, PCI_ANY_ID, PCI_ANY_ID, 0, 0, DEVICE_INTEL },	/* ICH3 */
 	{ 0x8086, 0x7195, PCI_ANY_ID, PCI_ANY_ID, 0, 0, DEVICE_INTEL },	/* 440MX */
-	{ 0x8086, 0x7195, PCI_ANY_ID, PCI_ANY_ID, 0, 0, DEVICE_INTEL },	/* 440MX */
 	{ 0x1039, 0x7012, PCI_ANY_ID, PCI_ANY_ID, 0, 0, DEVICE_SIS },	/* SI7012 */
 	{ 0x10de, 0x01b1, PCI_ANY_ID, PCI_ANY_ID, 0, 0, DEVICE_INTEL },	/* NFORCE */
+	{ 0x764d, 0x1022, PCI_ANY_ID, PCI_ANY_ID, 0, 0, DEVICE_INTEL },	/* AMD8111 */
 	{ 0, }
 };
 
@@ -1087,6 +1114,7 @@
 {
 	snd_card_t *card = chip->card;
 
+	chip->in_suspend = 1;
 	snd_power_lock(card);
 	if (card->power_state == SNDRV_CTL_POWER_D3hot)
 		goto __skip;
@@ -1364,6 +1392,7 @@
 	{ PCI_DEVICE_ID_INTEL_ICH3, "Intel ICH3" },
 	{ PCI_DEVICE_ID_SI_7012, "SiS SI7012" },
 	{ PCI_DEVICE_ID_NVIDIA_MCP_AUDIO, "NVidia NForce" },
+	{ 0x1022, "AMD-8111" },
 	{ 0, 0 },
 };
 
@@ -1416,6 +1445,16 @@
 		}
 	}
 	
+	if (snd_mpu_port[dev] == 0x300 || snd_mpu_port[dev] == 0x330) {
+		if ((err = snd_mpu401_uart_new(card, 0, MPU401_HW_CMIPCI,
+					       snd_mpu_port[dev], 0,
+					       -1, 0, &chip->rmidi)) < 0) {
+			printk(KERN_ERR "intel8x0: no UART401 device at 0x%x, skipping.\n", snd_mpu_port[dev]);
+			snd_mpu_port[dev] = 0;
+		}
+	} else
+		snd_mpu_port[dev] = 0;
+
 	sprintf(card->longname, "%s at 0x%lx, irq %i",
 		card->shortname, chip->port, chip->irq);
 
@@ -1450,16 +1489,77 @@
 #endif
 };
 
+
+#if defined(SUPPORT_JOYSTICK) || defined(SUPPORT_MIDI)
+/*
+ * initialize joystick/midi addresses
+ */
+
+static int __devinit snd_intel8x0_joystick_probe(struct pci_dev *pci,
+						 const struct pci_device_id *id)
+{
+	static int dev = 0;
+	if (dev >= SNDRV_CARDS)
+		return -ENODEV;
+	if (!snd_enable[dev]) {
+		dev++;
+		return -ENOENT;
+	}
+
+	if (snd_joystick_port[dev] > 0 || snd_mpu_port[dev] > 0) {
+		u16 val;
+		pci_read_config_word(pci, 0xe6, &val);
+		if (snd_joystick_port[dev] > 0)
+			val |= 0x100;
+		if (snd_mpu_port[dev] == 0x300 || snd_mpu_port[dev] == 0x330)
+			val |= 0x20;
+		pci_write_config_word(pci, 0xe6, val | 0x100);
+
+		if (snd_mpu_port[dev] == 0x300 || snd_mpu_port[dev] == 0x330) {
+			u8 b;
+			pci_read_config_byte(pci, 0xe2, &b);
+			if (snd_mpu_port[dev] == 0x300)
+				b |= 0x08;
+			else
+				b &= ~0x08;
+			pci_write_config_byte(pci, 0xe2, b);
+		}
+	}
+	return 0;
+}
+
+static struct pci_device_id snd_intel8x0_joystick_ids[] __devinitdata = {
+	{ 0x8086, 0x2410, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },	/* 82801AA */
+	{ 0x8086, 0x2420, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },	/* 82901AB */
+	{ 0x8086, 0x2440, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 }, /* ICH2 */
+	{ 0x8086, 0x244c, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 }, /* ICH2M */
+	{ 0x8086, 0x248c, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },	/* ICH3 */
+	// { 0x8086, 0x7195, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },	/* 440MX */
+	// { 0x1039, 0x7012, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },	/* SI7012 */
+	{ 0x10de, 0x01b2, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },	/* NFORCE */
+	{ 0, }
+};
+
+static struct pci_driver joystick_driver = {
+	name: "Intel ICH Joystick",
+	id_table: snd_intel8x0_joystick_ids,
+	probe: snd_intel8x0_joystick_probe,
+};
+#endif
+
 static int __init alsa_card_intel8x0_init(void)
 {
 	int err;
 
         if ((err = pci_module_init(&driver)) < 0) {
 #ifdef MODULE
-                snd_printk("Intel ICH soundcard not found or device busy\n");
+		printk(KERN_ERR "Intel ICH soundcard not found or device busy\n");
 #endif
                 return err;
         }
+#if defined(SUPPORT_JOYSTICK) || defined(SUPPORT_MIDI)
+	pci_module_init(&joystick_driver);
+#endif
         return 0;
 
 }
@@ -1467,6 +1567,9 @@
 static void __exit alsa_card_intel8x0_exit(void)
 {
 	pci_unregister_driver(&driver);
+#if defined(SUPPORT_JOYSTICK) || defined(SUPPORT_MIDI)
+	pci_unregister_driver(&joystick_driver);
+#endif
 }
 
 module_init(alsa_card_intel8x0_init)
diff --git a/sound/pci/korg1212/korg1212.c b/sound/pci/korg1212/korg1212.c
index e7cdc34..655b369 100644
--- a/sound/pci/korg1212/korg1212.c
+++ b/sound/pci/korg1212/korg1212.c
@@ -1953,27 +1953,27 @@
 
         korg1212->res_iomem = request_mem_region(korg1212->iomem, iomem_size, "korg1212");
         if (korg1212->res_iomem == NULL) {
-                PRINTK("unable to grab region 0x%lx-0x%lx\n",
+		snd_printk("unable to grab region 0x%lx-0x%lx\n",
                            korg1212->iomem, korg1212->iomem + iomem_size - 1);
                 return -EBUSY;
         }
 
         korg1212->res_ioport = request_region(korg1212->ioport, ioport_size, "korg1212");
         if (korg1212->res_ioport == NULL) {
-                PRINTK("unable to grab region 0x%lx-0x%lx\n",
+		snd_printk("unable to grab region 0x%lx-0x%lx\n",
                            korg1212->ioport, korg1212->ioport + ioport_size - 1);
                 return -EBUSY;
         }
 
         korg1212->res_iomem2 = request_mem_region(korg1212->iomem2, iomem2_size, "korg1212");
         if (korg1212->res_iomem2 == NULL) {
-                PRINTK("unable to grab region 0x%lx-0x%lx\n",
+		snd_printk("unable to grab region 0x%lx-0x%lx\n",
                            korg1212->iomem2, korg1212->iomem2 + iomem2_size - 1);
                 return -EBUSY;
         }
 
         if ((korg1212->iobase = (unsigned long) ioremap(korg1212->iomem, iomem_size)) == 0) {
-                PRINTK("unable to remap memory region 0x%lx-0x%lx\n", korg1212->iobase,
+		snd_printk("unable to remap memory region 0x%lx-0x%lx\n", korg1212->iobase,
                            korg1212->iobase + iomem_size - 1);
                 return -EBUSY;
         }
@@ -1983,7 +1983,7 @@
                           "korg1212", (void *) korg1212);
 
         if (err) {
-                PRINTK("unable to grab IRQ %d\n", pci->irq);
+		snd_printk("unable to grab IRQ %d\n", pci->irq);
                 return -EBUSY;
         }
 
@@ -2034,7 +2034,7 @@
 	korg1212->sharedBufferPhy = (unsigned long)phys_addr;
 
         if (korg1212->sharedBufferPtr == NULL) {
-                PRINTK("can not allocate shared buffer memory (%d bytes)\n", sizeof(KorgSharedBuffer));
+		snd_printk("can not allocate shared buffer memory (%d bytes)\n", sizeof(KorgSharedBuffer));
                 return -ENOMEM;
         }
 
@@ -2050,7 +2050,7 @@
 	korg1212->PlayDataPhy = (u32)phys_addr;
 
         if (korg1212->playDataBufsPtr == NULL) {
-                PRINTK("can not allocate play data buffer memory (%d bytes)\n", korg1212->DataBufsSize);
+		snd_printk("can not allocate play data buffer memory (%d bytes)\n", korg1212->DataBufsSize);
                 return -ENOMEM;
         }
 
@@ -2063,7 +2063,7 @@
 	korg1212->RecDataPhy = (u32)phys_addr;
 
         if (korg1212->recordDataBufsPtr == NULL) {
-                PRINTK("can not allocate record data buffer memory (%d bytes)\n", korg1212->DataBufsSize);
+		snd_printk("can not allocate record data buffer memory (%d bytes)\n", korg1212->DataBufsSize);
                 return -ENOMEM;
         }
 
@@ -2091,7 +2091,7 @@
 	korg1212->dspMemPhy = (u32)phys_addr;
 
         if (korg1212->dspMemPtr == NULL) {
-                PRINTK("can not allocate dsp code memory (%d bytes)\n", korg1212->dspCodeSize);
+		snd_printk("can not allocate dsp code memory (%d bytes)\n", korg1212->dspCodeSize);
                 return -ENOMEM;
         }
 
@@ -2114,7 +2114,7 @@
         if (snd_korg1212_downloadDSPCode(korg1212))
         	return -EBUSY;
 
-        PRINTK("dspMemPhy       = %08x U[%08x]\n"
+	printk(KERN_INFO "dspMemPhy       = %08x U[%08x]\n"
                "PlayDataPhy     = %08x L[%08x]\n"
                "RecDataPhy      = %08x L[%08x]\n"
                "VolumeTablePhy  = %08x L[%08x]\n"
@@ -2312,7 +2312,7 @@
 
 	if ((err = pci_module_init(&driver)) < 0) {
 #ifdef MODULE
-		PRINTK("No Korg 1212IO cards found\n");
+		printk(KERN_ERR "No Korg 1212IO cards found\n");
 #endif
 		return err;
 	}
diff --git a/sound/pci/maestro3.c b/sound/pci/maestro3.c
index c417429..310ec07 100644
--- a/sound/pci/maestro3.c
+++ b/sound/pci/maestro3.c
@@ -2676,7 +2676,7 @@
 
 	if ((err = pci_module_init(&driver)) < 0) {
 #ifdef MODULE
-		snd_printk("Maestro3/Allegro soundcard not found or device busy\n");
+		printk(KERN_ERR "Maestro3/Allegro soundcard not found or device busy\n");
 #endif
 		return err;
 	}
diff --git a/sound/pci/nm256/nm256.c b/sound/pci/nm256/nm256.c
index 7deb659..8912c62 100644
--- a/sound/pci/nm256/nm256.c
+++ b/sound/pci/nm256/nm256.c
@@ -331,7 +331,7 @@
 	offset -= chip->buffer_start;
 #ifdef SNDRV_CONFIG_DEBUG
 	if (offset < 0 || offset >= chip->buffer_size) {
-		printk("nm256: write_buffer invalid offset = %d size = %d\n", offset, size);
+		snd_printk("write_buffer invalid offset = %d size = %d\n", offset, size);
 		return;
 	}
 #endif
@@ -1436,10 +1436,10 @@
 		pval = snd_nm256_readw(chip, NM_MIXER_PRESENCE);
 		if ((pval & NM_PRESENCE_MASK) != NM_PRESENCE_VALUE) {
 			if (! force_load) {
-				printk(KERN_INFO "nm256: no ac97 is found!\n");
-				printk(KERN_INFO "  force the driver to load by passing in the module parameter\n");
-				printk(KERN_INFO "    snd_force_ac97=1\n");
-				printk(KERN_INFO "  or try sb16 or cs423x drivers instead.\n");
+				printk(KERN_ERR "nm256: no ac97 is found!\n");
+				printk(KERN_ERR "  force the driver to load by passing in the module parameter\n");
+				printk(KERN_ERR "    snd_force_ac97=1\n");
+				printk(KERN_ERR "  or try sb16 or cs423x drivers instead.\n");
 				err = -ENXIO;
 				goto __error;
 			}
@@ -1477,8 +1477,8 @@
 	chip->buffer_start = chip->buffer_end - chip->buffer_size;
 	chip->buffer_addr += chip->buffer_start;
 
-	snd_printd("NM256: Mapping port 1 from 0x%x - 0x%x\n",
-		   chip->buffer_start, chip->buffer_end);
+	printk(KERN_INFO "nm256: Mapping port 1 from 0x%x - 0x%x\n",
+	       chip->buffer_start, chip->buffer_end);
 
 	chip->res_buffer = request_mem_region(chip->buffer_addr,
 					      chip->buffer_size,
@@ -1652,7 +1652,7 @@
 	int err;
 	if ((err = pci_module_init(&driver)) < 0) {
 #ifdef MODULE
-		snd_printk("NeoMagic 256 audio soundchip not found or device busy\n");
+		printk(KERN_ERR "NeoMagic 256 audio soundchip not found or device busy\n");
 #endif
 		return err;
 	}
diff --git a/sound/pci/rme96.c b/sound/pci/rme96.c
index 31446b1..18891a0 100644
--- a/sound/pci/rme96.c
+++ b/sound/pci/rme96.c
@@ -2486,7 +2486,7 @@
 
 	if ((err = pci_module_init(&driver)) < 0) {
 #ifdef MODULE
-		snd_printk("No RME Digi96 cards found\n");
+		printk(KERN_ERR "No RME Digi96 cards found\n");
 #endif
 		return err;
 	}
diff --git a/sound/pci/rme9652/rme9652.c b/sound/pci/rme9652/rme9652.c
index 9d8d1ab..c4c7162 100644
--- a/sound/pci/rme9652/rme9652.c
+++ b/sound/pci/rme9652/rme9652.c
@@ -392,7 +392,7 @@
 	if (offset < period_size) {
 		if (offset > rme9652->max_jitter) {
 			if (frag)
-				printk("Unexpected hw_pointer position (bufid == 0): status: %x offset: %d\n", status, offset);
+				printk(KERN_ERR "Unexpected hw_pointer position (bufid == 0): status: %x offset: %d\n", status, offset);
 		} else if (!frag)
 			return 0;
 		offset -= rme9652->max_jitter;
@@ -401,7 +401,7 @@
 	} else {
 		if (offset > period_size + rme9652->max_jitter) {
 			if (!frag)
-				printk("Unexpected hw_pointer position (bufid == 1): status: %x offset: %d\n", status, offset);
+				printk(KERN_ERR "Unexpected hw_pointer position (bufid == 1): status: %x offset: %d\n", status, offset);
 		} else if (frag)
 			return period_size;
 		offset -= rme9652->max_jitter;
@@ -1887,8 +1887,7 @@
 #endif
 		}
 
-		snd_printk("%s: no buffers available\n",
-			   rme9652->card_name);
+		printk(KERN_ERR "%s: no buffers available\n", rme9652->card_name);
 		return -ENOMEM;
 	}
 
@@ -1901,24 +1900,16 @@
 
 	/* Align to bus-space 64K boundary */
 
-	cb_bus = cb_addr;
-	cb_bus = (cb_bus + 0xFFFF) & ~0xFFFFl;
-
-	pb_bus = pb_addr;
-	pb_bus = (pb_bus + 0xFFFF) & ~0xFFFFl;
+	cb_bus = (cb_addr + 0xFFFF) & ~0xFFFFl;
+	pb_bus = (pb_addr + 0xFFFF) & ~0xFFFFl;
 
 	/* Tell the card where it is */
 
 	rme9652_write(rme9652, RME9652_rec_buffer, cb_bus);
 	rme9652_write(rme9652, RME9652_play_buffer, pb_bus);
 
-#if 0 // not all architectures have this macro
-	rme9652->capture_buffer = bus_to_virt(cb_bus);
-	rme9652->playback_buffer = bus_to_virt(pb_bus);
-#else
-	rme9652->capture_buffer += cb_bus - cb_addr;
-	rme9652->playback_buffer += pb_bus - pb_addr;
-#endif
+	rme9652->capture_buffer = cb + (cb_bus - cb_addr);
+	rme9652->playback_buffer = pb + (pb_bus - pb_addr);
 
 	return 0;
 }
@@ -2732,7 +2723,7 @@
 {
 	if (pci_module_init(&driver) < 0) {
 #ifdef MODULE
-		snd_printk("RME Digi9652/Digi9636: no cards found\n");
+		printk(KERN_ERR "RME Digi9652/Digi9636: no cards found\n");
 #endif
 		return -ENODEV;
 	}
diff --git a/sound/pci/sonicvibes.c b/sound/pci/sonicvibes.c
index a3316e7..d204ae0 100644
--- a/sound/pci/sonicvibes.c
+++ b/sound/pci/sonicvibes.c
@@ -1551,7 +1551,7 @@
 
 	if ((err = pci_module_init(&driver)) < 0) {
 #ifdef MODULE
-		snd_printk("S3 SonicVibes soundcard not found or device busy\n");
+		printk(KERN_ERR "S3 SonicVibes soundcard not found or device busy\n");
 #endif
 		return err;
 	}
diff --git a/sound/pci/trident/trident.c b/sound/pci/trident/trident.c
index a352379..127b051 100644
--- a/sound/pci/trident/trident.c
+++ b/sound/pci/trident/trident.c
@@ -223,7 +223,7 @@
 
 	if ((err = pci_module_init(&driver)) < 0) {
 #ifdef MODULE
-		snd_printk("Trident 4DWave PCI soundcard not found or device busy\n");
+		printk(KERN_ERR "Trident 4DWave PCI soundcard not found or device busy\n");
 #endif
 		return err;
 	}
diff --git a/sound/pci/via686.c b/sound/pci/via686.c
index 9378a6a..a0fe9c1 100644
--- a/sound/pci/via686.c
+++ b/sound/pci/via686.c
@@ -246,6 +246,16 @@
 	return -EIO;
 }
  
+static void snd_via686a_codec_wait(ac97_t *ac97)
+{
+	via686a_t *chip = snd_magic_cast(via686a_t, ac97->private_data, return);
+	int err;
+	err = snd_via686a_codec_ready(chip, ac97->num);
+	/* here we need to wait fairly for long time.. */
+	set_current_state(TASK_UNINTERRUPTIBLE);
+	schedule_timeout(HZ/2);
+}
+
 static void snd_via686a_codec_write(ac97_t *ac97,
 				    unsigned short reg,
 				    unsigned short val)
@@ -811,6 +821,7 @@
 	ac97.write = snd_via686a_codec_write;
 	ac97.read = snd_via686a_codec_read;
 	ac97.init = snd_via686a_codec_init;
+	ac97.wait = snd_via686a_codec_wait;
 	ac97.private_data = chip;
 	ac97.private_free = snd_via686a_mixer_free_ac97;
 	ac97.clock = chip->ac97_clock;
@@ -1178,7 +1189,7 @@
 	pci_write_config_byte(pci, 0x43, legacy_cfg);
 	if (legacy & 0x02) {
 		if (check_region(snd_mpu_port[dev], 2)) {
-			snd_printk("unable to get MPU-401 port at 0x%lx, skipping\n", snd_mpu_port[dev]);
+			printk(KERN_WARNING "unable to get MPU-401 port at 0x%lx, skipping\n", snd_mpu_port[dev]);
 			legacy &= ~0x02;
 			pci_write_config_byte(pci, 0x42, legacy);
 			goto __skip_mpu;
@@ -1187,7 +1198,7 @@
 					snd_mpu_port[dev], 0,
 					pci->irq, 0,
 					&chip->rmidi) < 0) {
-			snd_printk("unable to initialize MPU-401 at 0x%lx, skipping\n", snd_mpu_port[dev]);
+			printk(KERN_WARNING "unable to initialize MPU-401 at 0x%lx, skipping\n", snd_mpu_port[dev]);
 			legacy &= ~0x02;
 			pci_write_config_byte(pci, 0x42, legacy);
 			goto __skip_mpu;
@@ -1239,7 +1250,7 @@
 
 	if ((err = pci_module_init(&driver)) < 0) {
 #ifdef MODULE
-		snd_printk("VIA 82C686A soundcard not found or device busy\n");
+		printk(KERN_ERR "VIA 82C686A soundcard not found or device busy\n");
 #endif
 		return err;
 	}
diff --git a/sound/pci/via8233.c b/sound/pci/via8233.c
index 7ee583a..61409bf 100644
--- a/sound/pci/via8233.c
+++ b/sound/pci/via8233.c
@@ -877,7 +877,7 @@
 
 	if ((err = pci_module_init(&driver)) < 0) {
 #ifdef MODULE
-		snd_printk("VIA 8233 soundcard not found or device busy\n");
+		printk(KERN_ERR "VIA 8233 soundcard not found or device busy\n");
 #endif
 		return err;
 	}
diff --git a/sound/pci/ymfpci/ymfpci.c b/sound/pci/ymfpci/ymfpci.c
index 66c2059..1bfa2b6 100644
--- a/sound/pci/ymfpci/ymfpci.c
+++ b/sound/pci/ymfpci/ymfpci.c
@@ -197,7 +197,7 @@
 		if ((err = snd_mpu401_uart_new(card, 0, MPU401_HW_YMFPCI,
 					       snd_mpu_port[dev], 0,
 					       pci->irq, 0, &chip->rawmidi)) < 0) {
-			printk(KERN_INFO "ymfpci: cannot initialize MPU401 at 0x%lx, skipping...\n", snd_mpu_port[dev]);
+			printk(KERN_WARNING "ymfpci: cannot initialize MPU401 at 0x%lx, skipping...\n", snd_mpu_port[dev]);
 		} else {
 			legacy_ctrl &= ~0x10; /* disable MPU401 irq */
 			pci_write_config_word(pci, PCIR_DSXG_LEGACY, legacy_ctrl);
@@ -208,7 +208,7 @@
 					   snd_fm_port[dev],
 					   snd_fm_port[dev] + 2,
 					   OPL3_HW_OPL3, 0, &opl3)) < 0) {
-			printk(KERN_INFO "ymfpci: cannot initialize FM OPL3 at 0x%lx, skipping...\n", snd_fm_port[dev]);
+			printk(KERN_WARNING "ymfpci: cannot initialize FM OPL3 at 0x%lx, skipping...\n", snd_fm_port[dev]);
 		} else if ((err = snd_opl3_hwdep_new(opl3, 0, 1, NULL)) < 0) {
 			snd_card_free(card);
 			snd_printk("cannot create opl3 hwdep\n");
@@ -216,7 +216,7 @@
 		}
 	}
 	if ((err = snd_ymfpci_joystick(chip)) < 0) {
-		printk(KERN_INFO "ymfpci: cannot initialize joystick, skipping...\n");
+		printk(KERN_WARNING "ymfpci: cannot initialize joystick, skipping...\n");
 	}
 	strcpy(card->driver, str);
 	sprintf(card->shortname, "Yamaha DS-XG PCI (%s)", str);
@@ -287,7 +287,7 @@
 
 	if ((err = pci_module_init(&driver)) < 0) {
 #ifdef MODULE
-		snd_printk("Yamaha DS-XG PCI soundcard not found or device busy\n");
+		printk(KERN_ERR "Yamaha DS-XG PCI soundcard not found or device busy\n");
 #endif
 		return err;
 	}
diff --git a/sound/ppc/keywest.c b/sound/ppc/keywest.c
index 0286406..d688606 100644
--- a/sound/ppc/keywest.c
+++ b/sound/ppc/keywest.c
@@ -179,7 +179,7 @@
 	i2c_device = find_compatible_devices("i2c", "keywest");
 	
 	if (i2c_device == 0) {
-		snd_printk("No Keywest i2c devices found.\n");
+		printk(KERN_ERR "pmac: No Keywest i2c devices found.\n");
 		return -ENODEV;
 	}
 	
diff --git a/sound/ppc/powermac.c b/sound/ppc/powermac.c
index 6957e95..06e2c71 100644
--- a/sound/ppc/powermac.c
+++ b/sound/ppc/powermac.c
@@ -150,7 +150,7 @@
 	int err;
 	if ((err = snd_pmac_probe() < 0)) {
 #ifdef MODULE
-		snd_printk("no PMac soundchip found\n");
+		printk(KERN_ERR "no PMac soundchip found\n");
 #endif
 		return err;
 	}
diff --git a/sound/sound_core.c b/sound/sound_core.c
index 9fd5562..45350b7 100644
--- a/sound/sound_core.c
+++ b/sound/sound_core.c
@@ -17,7 +17,7 @@
  *	plug into this. The fact they dont all go via OSS doesn't mean 
  *	they don't have to implement the OSS API. There is a lot of logic
  *	to keeping much of the OSS weight out of the code in a compatibility
- *	module, but its up to the driver to rember to load it...
+ *	module, but it's up to the driver to rember to load it...
  *
  *	The code provides a set of functions for registration of devices
  *	by type. This is done rather than providing a single call so that
@@ -171,10 +171,10 @@
 		return r;
 	}
 	
-	if (r == low)
+	if (r < SOUND_STEP)
 		sprintf (name_buf, "%s", name);
 	else
-		sprintf (name_buf, "%s%d", name, (r - low) / SOUND_STEP);
+		sprintf (name_buf, "%s%d", name, r / SOUND_STEP);
 	s->de = devfs_register (devfs_handle, name_buf,
 				DEVFS_FL_NONE, SOUND_MAJOR, s->unit_minor,
 				S_IFCHR | mode, fops, NULL);
@@ -215,7 +215,7 @@
  *	15	*16		unused
  */
 
-static struct sound_unit *chains[16];
+static struct sound_unit *chains[SOUND_STEP];
 
 /**
  *	register_sound_special - register a special sound node
@@ -229,17 +229,22 @@
  
 int register_sound_special(struct file_operations *fops, int unit)
 {
-	char *name;
+	const int chain = unit % (SOUND_STEP-1);
+	int max_unit = 128 + chain;
+	const char *name;
+	char _name[16];
 
-	switch (unit) {
+	switch (chain) {
 	    case 0:
 		name = "mixer";
 		break;
 	    case 1:
 		name = "sequencer";
-		break;
+		if (unit >= SOUND_STEP)
+			goto __unknown;
+		max_unit = unit + 1;
 	    case 2:
-		name = "midi00";
+		name = "midi";
 		break;
 	    case 3:
 		name = "dsp";
@@ -247,17 +252,11 @@
 	    case 4:
 		name = "audio";
 		break;
-	    case 5:
-		name = "unknown5";
-		break;
-	    case 6:		/* Was once sndstat */
-		name = "unknown6";
-		break;
-	    case 7:
-		name = "unknown7";
-		break;
 	    case 8:
 		name = "sequencer2";
+		if (unit >= SOUND_STEP)
+			goto __unknown;
+		max_unit = unit + 1;
 		break;
 	    case 9:
 		name = "dmmidi";
@@ -265,9 +264,6 @@
 	    case 10:
 		name = "dmfm";
 		break;
-	    case 11:
-		name = "unknown11";
-		break;
 	    case 12:
 		name = "adsp";
 		break;
@@ -278,10 +274,16 @@
 		name = "admmidi";
 		break;
 	    default:
-		name = "unknown";
+	    	{
+		    __unknown:
+			sprintf(_name, "unknown%d", chain);
+		    	if (unit >= SOUND_STEP)
+		    		strcat(_name, "-");
+		    	name = _name;
+		}
 		break;
 	}
-	return sound_insert_unit(&chains[unit&15], fops, -1, unit, unit+1,
+	return sound_insert_unit(&chains[chain], fops, -1, unit, max_unit,
 				 name, S_IRUSR | S_IWUSR);
 }
  
diff --git a/sound/synth/emux/emux_synth.c b/sound/synth/emux/emux_synth.c
index 7c4a972..ee8c327 100644
--- a/sound/synth/emux/emux_synth.c
+++ b/sound/synth/emux/emux_synth.c
@@ -629,6 +629,25 @@
 /*
  * calculate pitch parameter
  */
+static unsigned char pan_volumes[256] = {
+0x00,0x03,0x06,0x09,0x0c,0x0f,0x12,0x14,0x17,0x1a,0x1d,0x20,0x22,0x25,0x28,0x2a,
+0x2d,0x30,0x32,0x35,0x37,0x3a,0x3c,0x3f,0x41,0x44,0x46,0x49,0x4b,0x4d,0x50,0x52,
+0x54,0x57,0x59,0x5b,0x5d,0x60,0x62,0x64,0x66,0x68,0x6a,0x6c,0x6f,0x71,0x73,0x75,
+0x77,0x79,0x7b,0x7c,0x7e,0x80,0x82,0x84,0x86,0x88,0x89,0x8b,0x8d,0x8f,0x90,0x92,
+0x94,0x96,0x97,0x99,0x9a,0x9c,0x9e,0x9f,0xa1,0xa2,0xa4,0xa5,0xa7,0xa8,0xaa,0xab,
+0xad,0xae,0xaf,0xb1,0xb2,0xb3,0xb5,0xb6,0xb7,0xb9,0xba,0xbb,0xbc,0xbe,0xbf,0xc0,
+0xc1,0xc2,0xc3,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xce,0xcf,0xd0,0xd1,
+0xd2,0xd3,0xd4,0xd5,0xd6,0xd7,0xd7,0xd8,0xd9,0xda,0xdb,0xdc,0xdc,0xdd,0xde,0xdf,
+0xdf,0xe0,0xe1,0xe2,0xe2,0xe3,0xe4,0xe4,0xe5,0xe6,0xe6,0xe7,0xe8,0xe8,0xe9,0xe9,
+0xea,0xeb,0xeb,0xec,0xec,0xed,0xed,0xee,0xee,0xef,0xef,0xf0,0xf0,0xf1,0xf1,0xf1,
+0xf2,0xf2,0xf3,0xf3,0xf3,0xf4,0xf4,0xf5,0xf5,0xf5,0xf6,0xf6,0xf6,0xf7,0xf7,0xf7,
+0xf7,0xf8,0xf8,0xf8,0xf9,0xf9,0xf9,0xf9,0xf9,0xfa,0xfa,0xfa,0xfa,0xfb,0xfb,0xfb,
+0xfb,0xfb,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,
+0xfd,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,
+0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+};
+
 static int
 calc_pan(snd_emux_voice_t *vp)
 {
@@ -646,6 +665,16 @@
 	}
 	LIMITVALUE(pan, 0, 255);
 
+#if 1
+	/* using volume table */
+	if (vp->apan != (int)pan_volumes[pan]) {
+		vp->apan = pan_volumes[pan];
+		vp->aaux = pan_volumes[255 - pan];
+		return 1;
+	}
+	return 0;
+#else
+	/* assuming linear volume */
 	if (pan != vp->apan) {
 		vp->apan = pan;
 		if (pan == 0)
@@ -655,6 +684,7 @@
 		return 1;
 	} else
 		return 0;
+#endif
 }
 
 
