Index: uspace/drv/audio/hdaudio/codec.c
===================================================================
--- uspace/drv/audio/hdaudio/codec.c	(revision 2f6b91659579dd82be8b0fdc52984e936479ade7)
+++ uspace/drv/audio/hdaudio/codec.c	(revision dda58487beae06864d4a26c56ad58665b9ffdc22)
@@ -56,4 +56,5 @@
 	verb = (codec->address << 28) | (node << 20) | (vid << 8) | payload;
 	int rc = hda_cmd(codec->hda, verb, resp);
+/*
 	if (resp != NULL) {
 		ddf_msg(LVL_NOTE, "verb 0x%" PRIx32 " -> 0x%" PRIx32, verb,
@@ -62,4 +63,5 @@
 		ddf_msg(LVL_NOTE, "verb 0x%" PRIx32, verb);
 	}
+*/
 	return rc;
 }
@@ -409,9 +411,18 @@
 
 			} else if (awtype == awt_audio_output) {
-				codec->out_aw = aw;
 				codec->out_aw_list[codec->out_aw_num++] = aw;
+
+				rc = hda_get_supp_rates(codec, aw, &rates);
+				if (rc != EOK)
+					goto error;
+
+				rc = hda_get_supp_formats(codec, aw, &formats);
+				if (rc != EOK)
+					goto error;
+
+				ddf_msg(LVL_NOTE, "Output widget %d: rates=0x%x formats=0x%x",
+				    aw, rates, formats);
 			}
 
-if (0) {
 			if ((awcaps & BIT_V(uint32_t, awc_out_amp_present)) != 0)
 				hda_set_out_amp_max(codec, aw);
@@ -419,18 +430,8 @@
 			if ((awcaps & BIT_V(uint32_t, awc_in_amp_present)) != 0)
 				hda_set_in_amp_max(codec, aw);
-}
 		}
 	}
 
-	rc = hda_get_supp_rates(codec, codec->out_aw, &rates);
-	if (rc != EOK)
-		goto error;
-
-	rc = hda_get_supp_formats(codec, codec->out_aw, &formats);
-	if (rc != EOK)
-		goto error;
-
-	ddf_msg(LVL_NOTE, "Output widget %d: rates=0x%x formats=0x%x",
-	    codec->out_aw, rates, formats);
+	hda_ctl_dump_info(hda->ctl);
 
 	ddf_msg(LVL_NOTE, "Codec OK");
Index: uspace/drv/audio/hdaudio/codec.h
===================================================================
--- uspace/drv/audio/hdaudio/codec.h	(revision 2f6b91659579dd82be8b0fdc52984e936479ade7)
+++ uspace/drv/audio/hdaudio/codec.h	(revision dda58487beae06864d4a26c56ad58665b9ffdc22)
@@ -43,5 +43,4 @@
 	hda_t *hda;
 	uint8_t address;
-	uint8_t out_aw;
 	uint8_t out_aw_list[MAX_OUT_AW];
 	int out_aw_num;
Index: uspace/drv/audio/hdaudio/hdactl.c
===================================================================
--- uspace/drv/audio/hdaudio/hdactl.c	(revision 2f6b91659579dd82be8b0fdc52984e936479ade7)
+++ uspace/drv/audio/hdaudio/hdactl.c	(revision dda58487beae06864d4a26c56ad58665b9ffdc22)
@@ -106,5 +106,5 @@
  *
  * We always use the largest available size. In @a sizecap each of bits
- * 0, 1, 2 determine whether one of the supported size (0 == 2 enries,
+ * 0, 1, 2 determine whether one of the supported size (0 == 2 entries,
  * 1 == 16 entries, 2 == 256 entries) is supported. @a *selsz is set to
  * one of 0, 1, 2 on success.
@@ -249,5 +249,5 @@
 	}
 	rirbsz = rirbsz & ~BIT_RANGE(uint8_t, rirbsize_size_h, rirbsize_size_l);
-	rirbsz = rirbsz | selsz;
+	rirbsz = rirbsz | (selsz << rirbsize_size_l);
 
 	ddf_msg(LVL_NOTE, "Setting RIRB Size register to 0x%x", rirbsz);
@@ -395,5 +395,5 @@
 		return ENOENT;
 
-	++hda->ctl->rirb_rp;
+	hda->ctl->rirb_rp = (hda->ctl->rirb_rp + 1) % hda->ctl->rirb_entries;
 	resp = rirb[hda->ctl->rirb_rp];
 
@@ -415,5 +415,5 @@
 	while (count > 0) {
 		while (count > 0 && hda->ctl->solrb_rp != hda->ctl->solrb_wp) {
-			++hda->ctl->solrb_rp;
+			hda->ctl->solrb_rp = (hda->ctl->solrb_rp + 1) % softrb_entries;
 			resp = hda->ctl->solrb[hda->ctl->solrb_rp];
 
@@ -629,4 +629,19 @@
 }
 
+void hda_ctl_dump_info(hda_ctl_t *ctl)
+{
+	ddf_msg(LVL_NOTE, "corbwp=%d, corbrp=%d",
+	    hda_reg16_read(&ctl->hda->regs->corbwp),
+	    hda_reg16_read(&ctl->hda->regs->corbrp));
+	ddf_msg(LVL_NOTE, "corbctl=0x%x, corbsts=0x%x",
+	    hda_reg8_read(&ctl->hda->regs->corbctl),
+	    hda_reg8_read(&ctl->hda->regs->corbsts));
+	ddf_msg(LVL_NOTE, "rirbwp=0x%x, soft-rirbrp=0x%x",
+	    hda_reg16_read(&ctl->hda->regs->rirbwp),
+	    ctl->rirb_rp);
+	ddf_msg(LVL_NOTE, "solrb_wp=0x%x, solrb_rp=0x%x",
+	    ctl->solrb_wp, ctl->solrb_wp);
+}
+
 /** @}
  */
Index: uspace/drv/audio/hdaudio/hdactl.h
===================================================================
--- uspace/drv/audio/hdaudio/hdactl.h	(revision 2f6b91659579dd82be8b0fdc52984e936479ade7)
+++ uspace/drv/audio/hdaudio/hdactl.h	(revision dda58487beae06864d4a26c56ad58665b9ffdc22)
@@ -79,4 +79,5 @@
 extern void hda_ctl_interrupt(hda_ctl_t *);
 extern int hda_cmd(hda_t *, uint32_t, uint32_t *);
+extern void hda_ctl_dump_info(hda_ctl_t *);
 
 #endif
