Index: uspace/drv/audio/sb16/registers.h
===================================================================
--- uspace/drv/audio/sb16/registers.h	(revision 61013bd407be1869ff1c55367394bf0a054ad5d3)
+++ uspace/drv/audio/sb16/registers.h	(revision 7d5057e12cf3ff9b3dce01b2dfe398b93855bb6b)
@@ -50,5 +50,5 @@
 	ioport8_t __reserved2; /*0xb*/
 	ioport8_t dsp_write; /* Both command and data, bit 7 is write status */
-#define DSP_WRITE_READY (1 << 7)
+#define DSP_WRITE_BUSY (1 << 7)
 	ioport8_t __reserved3; /*0xd*/
 	ioport8_t dsp_read_status; /* Bit 7 */
Index: uspace/drv/audio/sb16/sb16.c
===================================================================
--- uspace/drv/audio/sb16/sb16.c	(revision 61013bd407be1869ff1c55367394bf0a054ad5d3)
+++ uspace/drv/audio/sb16/sb16.c	(revision 7d5057e12cf3ff9b3dce01b2dfe398b93855bb6b)
@@ -34,14 +34,17 @@
 #include "sb16.h"
 
+#define PIO_DELAY udelay(10)
 
-static inline void sb16_dsp_command(sb16_drv_t *drv, dsp_command_t command)
+
+static inline void sb16_dsp_write(sb16_drv_t *drv, uint8_t data)
 {
 	assert(drv);
 	uint8_t status;
 	do {
+		PIO_DELAY;
 		status = pio_read_8(&drv->regs->dsp_write);
-	} while ((status & DSP_WRITE_READY) == 0);
-
-	pio_write_8(&drv->regs->dsp_write, command);
+	} while ((status & DSP_WRITE_BUSY) != 0);
+	PIO_DELAY;
+	pio_write_8(&drv->regs->dsp_write, data);
 }
 /*----------------------------------------------------------------------------*/
@@ -51,6 +54,9 @@
 	uint8_t status;
 	do {
+		PIO_DELAY;
 		status = pio_read_8(&drv->regs->dsp_read_status);
 	} while ((status & DSP_READ_READY) == 0);
+
+	PIO_DELAY;
 	return pio_read_8(&drv->regs->dsp_data_read);
 }
@@ -79,13 +85,16 @@
 	/* Reset DSP, see Chapter 2 of Sound Blaster HW programming guide */
 	pio_write_8(&drv->regs->dsp_reset, 1);
-	udelay(3);
+	udelay(3); /* Keep reset for 3 us */
 	pio_write_8(&drv->regs->dsp_reset, 0);
+
+	/* "DSP takes about 100 microseconds to initialize itself" */
 	udelay(100);
+
 
 	unsigned attempts = 100;
 	uint8_t status;
 	do {
+		PIO_DELAY;
 		status = pio_read_8(&drv->regs->dsp_read_status);
-		udelay(10);
 	} while (--attempts && ((status & DSP_READ_READY) == 0));
 
@@ -101,12 +110,11 @@
 		return EIO;
 	}
-	ddf_log_note("Sound blaster reset!\n");
-
 
 	/* Get DSP version number */
-	sb16_dsp_command(drv, DSP_VERSION);
-	const uint8_t major = sb16_dsp_read(drv);
-	const uint8_t minor = sb16_dsp_read(drv);
-	ddf_log_note("Sound blaster DSP version: %x.%x.\n", major, minor);
+	sb16_dsp_write(drv, DSP_VERSION);
+	drv->dsp_version.major = sb16_dsp_read(drv);
+	drv->dsp_version.minor = sb16_dsp_read(drv);
+	ddf_log_note("Sound blaster DSP (%x.%x) Initialized.\n",
+	    drv->dsp_version.major, drv->dsp_version.minor);
 
 
Index: uspace/drv/audio/sb16/sb16.h
===================================================================
--- uspace/drv/audio/sb16/sb16.h	(revision 61013bd407be1869ff1c55367394bf0a054ad5d3)
+++ uspace/drv/audio/sb16/sb16.h	(revision 7d5057e12cf3ff9b3dce01b2dfe398b93855bb6b)
@@ -43,4 +43,8 @@
 	sb16_regs_t *regs;
 	mpu_regs_t *mpu_regs;
+	struct {
+		uint8_t major;
+		uint8_t minor;
+	} dsp_version;
 } sb16_drv_t;
 
