Index: uspace/drv/audio/sb16/dsp.c
===================================================================
--- uspace/drv/audio/sb16/dsp.c	(revision 1ba95ba22329ef38282fb014cef569f9c15483c2)
+++ uspace/drv/audio/sb16/dsp.c	(revision 018ab5018108207fc0601a6f793a0b0bb0a6995c)
@@ -55,5 +55,8 @@
 
 #define DSP_RESET_RESPONSE 0xaa
-#define DSP_RATE_LIMIT 45000
+
+/* These are only for SB16 (DSP4.00+) */
+#define DSP_RATE_UPPER_LIMIT 44100
+#define DSP_RATE_LOWER_LIMIT 5000
 
 #define AUTO_DMA_MODE
@@ -294,8 +297,4 @@
 		ret = ELIMIT;
 	}
-	if (*rate > DSP_RATE_LIMIT) {
-		*rate = DSP_RATE_LIMIT;
-		ret = ELIMIT;
-	}
 	//TODO 8bit DMA supports 8bit formats
 	if (*format != PCM_SAMPLE_SINT16_LE && *format != PCM_SAMPLE_UINT16_LE) {
@@ -304,4 +303,12 @@
 		ret = ELIMIT;
 	}
+	if (*rate > DSP_RATE_UPPER_LIMIT) {
+		*rate = DSP_RATE_UPPER_LIMIT;
+		ret = ELIMIT;
+	}
+	if (*rate < DSP_RATE_LOWER_LIMIT) {
+		*rate = DSP_RATE_LOWER_LIMIT;
+		ret = ELIMIT;
+	}
 	return ret;
 }
@@ -333,10 +340,16 @@
 {
 	assert(dsp);
-	assert(session);
 	if (dsp->event_session)
 		return EBUSY;
 	dsp->event_session = session;
-	ddf_log_debug("Set event session.");
-	return EOK;
+	ddf_log_debug("Set event session to %p.", session);
+	return EOK;
+}
+
+async_sess_t * sb_dsp_get_event_session(sb_dsp_t *dsp)
+{
+	assert(dsp);
+	ddf_log_debug("Get event session: %p.", dsp->event_session);
+	return dsp->event_session;
 }
 
Index: uspace/drv/audio/sb16/dsp.h
===================================================================
--- uspace/drv/audio/sb16/dsp.h	(revision 1ba95ba22329ef38282fb014cef569f9c15483c2)
+++ uspace/drv/audio/sb16/dsp.h	(revision 018ab5018108207fc0601a6f793a0b0bb0a6995c)
@@ -80,4 +80,5 @@
 int sb_dsp_get_buffer(sb_dsp_t *dsp, void **buffer, size_t *size);
 int sb_dsp_set_event_session(sb_dsp_t *dsp, async_sess_t *session);
+async_sess_t * sb_dsp_get_event_session(sb_dsp_t *dsp);
 int sb_dsp_release_buffer(sb_dsp_t *dsp);
 int sb_dsp_start_playback(sb_dsp_t *dsp, unsigned frames,
Index: uspace/drv/audio/sb16/pcm_iface.c
===================================================================
--- uspace/drv/audio/sb16/pcm_iface.c	(revision 1ba95ba22329ef38282fb014cef569f9c15483c2)
+++ uspace/drv/audio/sb16/pcm_iface.c	(revision 018ab5018108207fc0601a6f793a0b0bb0a6995c)
@@ -87,4 +87,12 @@
 }
 
+static async_sess_t * sb_get_event_session(ddf_fun_t *fun)
+{
+	assert(fun);
+	assert(fun->driver_data);
+	sb_dsp_t *dsp = fun->driver_data;
+	return sb_dsp_get_event_session(dsp);
+}
+
 static int sb_release_buffer(ddf_fun_t *fun)
 {
@@ -139,4 +147,5 @@
 	.release_buffer = sb_release_buffer,
 	.set_event_session = sb_set_event_session,
+	.get_event_session = sb_get_event_session,
 	.get_buffer_pos = sb_get_buffer_position,
 
