Index: uspace/drv/audio/hdaudio/hdactl.c
===================================================================
--- uspace/drv/audio/hdaudio/hdactl.c	(revision 57a2208356e6cbd6dde020a912beee44deb45657)
+++ uspace/drv/audio/hdaudio/hdactl.c	(revision c4f67c8f458a934b5c666a52114343c5ccbf597a)
@@ -52,5 +52,6 @@
 	codec_enum_wait_us = 512,
 	corb_wait_max = 10,
-	rirb_wait_max = 100
+	rirb_wait_max = 100,
+	solrb_wait_us = 100 * 1000
 };
 
@@ -438,5 +439,4 @@
 {
 	hda_rirb_entry_t resp;
-	int wcnt;
 
 	ddf_msg(LVL_DEBUG, "hda_solrb_read()");
@@ -459,10 +459,8 @@
 
 		if (count > 0) {
-			wcnt = 100;
-			while (wcnt > 0 && hda->ctl->solrb_wp == hda->ctl->solrb_rp) {
-				fibril_mutex_unlock(&hda->ctl->solrb_lock);
-				async_usleep(10000);
-				fibril_mutex_lock(&hda->ctl->solrb_lock);
-				--wcnt;
+			if (hda->ctl->solrb_wp == hda->ctl->solrb_rp) {
+				fibril_condvar_wait_timeout(
+				    &hda->ctl->solrb_cv, &hda->ctl->solrb_lock,
+				    solrb_wait_us);
 			}
 
