Index: /trunk/src/VBox/Devices/Audio/DevCodec.cpp
===================================================================
--- /trunk/src/VBox/Devices/Audio/DevCodec.cpp	(revision 31061)
+++ /trunk/src/VBox/Devices/Audio/DevCodec.cpp	(revision 31062)
@@ -89,4 +89,9 @@
        CODEC_NID(cmd) == 0x12           \
     || CODEC_NID(cmd) == 0x13)
+
+
+static int stac9220ResetNode(struct CODECState *pState, uint8_t nodenum, PCODECNODE pNode);
+
+
 static int codecUnimplemented(struct CODECState *pState, uint32_t cmd, uint64_t *pResp)
 {
@@ -182,4 +187,23 @@
         *pResp = pState->pNodes[CODEC_NID(cmd)].afg.u32F20_param;
     }
+    return VINF_SUCCESS;
+}
+
+static int codecReset(struct CODECState *pState, uint32_t cmd, uint64_t *pResp)
+{
+    Assert((CODEC_CAD(cmd) == 0));
+    Assert(STAC9220_IS_AFG_CMD(cmd));
+    if(STAC9220_IS_AFG_CMD(cmd))
+    {
+        uint8_t i;
+        Log(("HDAcodec: enters reset\n"));
+        for (i = 0; i < STAC9220_NODE_COUNT; ++i)
+        {
+            stac9220ResetNode(pState, i, &pState->pNodes[i]);
+        }
+        pState->pfnReset(pState);
+        Log(("HDAcodec: exits reset\n"));
+    }
+    *pResp = 0;
     return VINF_SUCCESS;
 }
@@ -263,5 +287,5 @@
             pNode->node.au32F00_param[0x12] = RT_BIT(31)|(0x2 << 16)|(0x7f << 8)|0x7f;
             pNode->afg.u32F05_param = (0x2) << 4 | 0x2; /* PS-Act: 0x2, D2 */
-            pNode->afg.u32F20_param = 0x106b0800; /* Old Intel Mac */
+            pNode->afg.u32F20_param = 0x83847626; /*STAC9271X */
             pNode->afg.u32F08_param = 0;
             break;
@@ -459,4 +483,5 @@
     {0x000F0200, CODEC_VERB_8BIT_CMD , codecGetF02       },
     {0x000F2000, CODEC_VERB_8BIT_CMD , codecGetSubId     },
+    {0x0007FF00, CODEC_VERB_8BIT_CMD , codecReset        },
 #if 0
     {0x000F0500, CODEC_VERB_8BIT_CMD , codecGetPowerState},
Index: /trunk/src/VBox/Devices/Audio/DevCodec.h
===================================================================
--- /trunk/src/VBox/Devices/Audio/DevCodec.h	(revision 31061)
+++ /trunk/src/VBox/Devices/Audio/DevCodec.h	(revision 31062)
@@ -197,4 +197,5 @@
 typedef struct CODECState
 {
+    uint16_t                id;
     CODECVERB               *pVerbs;
     int                     cVerbs;
Index: /trunk/src/VBox/Devices/Audio/DevIchIntelHDA.cpp
===================================================================
--- /trunk/src/VBox/Devices/Audio/DevIchIntelHDA.cpp	(revision 31061)
+++ /trunk/src/VBox/Devices/Audio/DevIchIntelHDA.cpp	(revision 31062)
@@ -1159,4 +1159,11 @@
 }
 
+DECLCALLBACK(int) hdaCodecReset(CODECState *pCodecState)
+{
+    INTELHDLinkState *pState = (INTELHDLinkState *)pCodecState->pHDAState;
+    STATESTS(pState) |= 1 << (pCodecState->id);
+    INTSTS(pState) |= HDA_REG_FIELD_FLAG_MASK(INTSTS, CIS);
+    return VINF_SUCCESS;
+}
 DECLCALLBACK(void) hdaTransfer(CODECState *pCodecState, ENMSOUNDSOURCE src, int avail)
 {
@@ -1531,5 +1538,7 @@
         AssertRCReturn(rc, rc);
     hdaReset (pDevIns);
+    pThis->hda.Codec.id = 0;
     pThis->hda.Codec.pfnTransfer = hdaTransfer;
+    pThis->hda.Codec.pfnReset = hdaCodecReset;
     /* 
      * 18.2.6,7 defines that values of this registers might be cleared on power on/reset
