Index: uspace/drv/audio/sb16/Makefile
===================================================================
--- uspace/drv/audio/sb16/Makefile	(revision cf083e84ee82f1305d773dd592e8655485b7eaaa)
+++ uspace/drv/audio/sb16/Makefile	(revision 01282fcc4e9b8dec3bb7998a61f1ec820a49f989)
@@ -39,4 +39,5 @@
 SOURCES = \
 	main.c \
+	mixer.c \
 	sb16.c
 
Index: uspace/drv/audio/sb16/mixer.c
===================================================================
--- uspace/drv/audio/sb16/mixer.c	(revision 01282fcc4e9b8dec3bb7998a61f1ec820a49f989)
+++ uspace/drv/audio/sb16/mixer.c	(revision 01282fcc4e9b8dec3bb7998a61f1ec820a49f989)
@@ -0,0 +1,78 @@
+/*
+ * Copyright (c) 2011 Jan Vesely
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <errno.h>
+
+#include "mixer.h"
+
+const char * mixer_type_to_str(mixer_type_t type)
+{
+	static const char * names[] = {
+		[SB_MIXER_CT1335] = "CT 1335",
+		[SB_MIXER_CT1345] = "CT 1345",
+		[SB_MIXER_CT1745] = "CT 1745",
+		[SB_MIXER_UNKNOWN] = "Unknown mixer",
+	};
+	return names[type];
+}
+/*----------------------------------------------------------------------------*/
+int mixer_init(sb16_regs_t *regs, mixer_type_t type)
+{
+	return EOK;
+}
+/*----------------------------------------------------------------------------*/
+void mixer_load_volume_levels(sb16_regs_t *regs, mixer_type_t type)
+{
+}
+/*----------------------------------------------------------------------------*/
+void mixer_store_volume_levels(sb16_regs_t *regs, mixer_type_t type)
+{
+}
+/*----------------------------------------------------------------------------*/
+int mixer_get_control_item_count(sb16_regs_t *regs, mixer_type_t type)
+{
+	return 1;
+}
+/*----------------------------------------------------------------------------*/
+int mixer_get_control_item_info(sb16_regs_t *regs, mixer_type_t type,
+    const char** name, unsigned *channels)
+{
+	return ENOTSUP;
+}
+/*----------------------------------------------------------------------------*/
+int mixer_set_volume_level(sb16_regs_t *regs, mixer_type_t type,
+    unsigned item, unsigned channel, unsigned level)
+{
+	return ENOTSUP;
+}
+/*----------------------------------------------------------------------------*/
+unsigned mixer_get_volume_level(sb16_regs_t *regs, mixer_type_t type,
+    unsigned item, unsigned channel)
+{
+	return 0;
+}
Index: uspace/drv/audio/sb16/mixer.h
===================================================================
--- uspace/drv/audio/sb16/mixer.h	(revision 01282fcc4e9b8dec3bb7998a61f1ec820a49f989)
+++ uspace/drv/audio/sb16/mixer.h	(revision 01282fcc4e9b8dec3bb7998a61f1ec820a49f989)
@@ -0,0 +1,60 @@
+/*
+ * Copyright (c) 2011 Jan Vesely
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+/** @addtogroup drvaudiosb16
+ * @{
+ */
+/** @file
+ * @brief SB16 main structure combining all functionality
+ */
+#ifndef DRV_AUDIO_SB16_MIXER_H
+#define DRV_AUDIO_SB16_MIXER_H
+
+#include "registers.h"
+
+typedef enum mixer_type {
+	SB_MIXER_CT1335,
+	SB_MIXER_CT1345,
+	SB_MIXER_CT1745,
+	SB_MIXER_UNKNOWN,
+} mixer_type_t;
+
+const char * mixer_type_to_str(mixer_type_t type);
+int mixer_init(sb16_regs_t *regs, mixer_type_t type);
+void mixer_load_volume_levels(sb16_regs_t *regs, mixer_type_t type);
+void mixer_store_volume_levels(sb16_regs_t *regs, mixer_type_t type);
+int mixer_get_control_item_count(sb16_regs_t *regs, mixer_type_t type);
+int mixer_get_control_item_info(sb16_regs_t *regs, mixer_type_t type,
+    const char** name, unsigned *channels);
+int mixer_set_volume_level(sb16_regs_t *regs, mixer_type_t type,
+    unsigned item, unsigned channel, unsigned level);
+unsigned mixer_get_volume_level(sb16_regs_t *regs, mixer_type_t type,
+    unsigned item, unsigned channel);
+#endif
+/**
+ * @}
+ */
Index: uspace/drv/audio/sb16/registers.h
===================================================================
--- uspace/drv/audio/sb16/registers.h	(revision cf083e84ee82f1305d773dd592e8655485b7eaaa)
+++ uspace/drv/audio/sb16/registers.h	(revision 01282fcc4e9b8dec3bb7998a61f1ec820a49f989)
@@ -35,4 +35,6 @@
 #ifndef DRV_AUDIO_SB16_REGISTERS_H
 #define DRV_AUDIO_SB16_REGISTERS_H
+
+#include <ddi.h>
 
 typedef struct sb16_regs {
Index: uspace/drv/audio/sb16/sb16.c
===================================================================
--- uspace/drv/audio/sb16/sb16.c	(revision cf083e84ee82f1305d773dd592e8655485b7eaaa)
+++ uspace/drv/audio/sb16/sb16.c	(revision 01282fcc4e9b8dec3bb7998a61f1ec820a49f989)
@@ -28,4 +28,5 @@
 
 #include <errno.h>
+#include <str_error.h>
 #include <libarch/ddi.h>
 
@@ -41,4 +42,8 @@
     { .cmdcount = 1, .cmds = (irq_cmd_t*)irq_cmds };
 
+static mixer_type_t mixer_type_by_dsp_version(unsigned major, unsigned minor)
+{
+	return SB_MIXER_UNKNOWN;
+}
 /*----------------------------------------------------------------------------*/
 irq_code_t * sb16_irq_code(void)
@@ -79,6 +84,16 @@
 	    drv->dsp_version.major, drv->dsp_version.minor);
 
+	/* Initialize mixer */
+	drv->mixer = mixer_type_by_dsp_version(
+	    drv->dsp_version.major, drv->dsp_version.minor);
 
-	// TODO Initialize mixer
+	ret = mixer_init(drv->regs, drv->mixer);
+	if (ret != EOK) {
+		ddf_log_error("Failed to initialize SB mixer: %s.\n",
+		    str_error(ret));
+		return ret;
+	}
+	ddf_log_note("Initialized mixer: %s.\n", mixer_type_to_str(drv->mixer));
+
 	return EOK;
 }
Index: uspace/drv/audio/sb16/sb16.h
===================================================================
--- uspace/drv/audio/sb16/sb16.h	(revision cf083e84ee82f1305d773dd592e8655485b7eaaa)
+++ uspace/drv/audio/sb16/sb16.h	(revision 01282fcc4e9b8dec3bb7998a61f1ec820a49f989)
@@ -38,4 +38,6 @@
 #include <ddf/driver.h>
 #include <ddi.h>
+
+#include "mixer.h"
 #include "registers.h"
 
@@ -47,4 +49,5 @@
 		uint8_t minor;
 	} dsp_version;
+	mixer_type_t mixer;
 } sb16_drv_t;
 
