Index: /trunk/src/VBox/Devices/Audio/DevCodec.cpp
===================================================================
--- /trunk/src/VBox/Devices/Audio/DevCodec.cpp	(revision 33720)
+++ /trunk/src/VBox/Devices/Audio/DevCodec.cpp	(revision 33721)
@@ -123,4 +123,18 @@
 #define CODEC_F00_09_CAP_IN_AMP_PRESENT     RT_BIT(1)
 #define CODEC_F00_09_CAP_LSB                RT_BIT(0)
+
+/* Pin Capabilities (7.3.4.9)*/
+#define CODEC_MAKE_F00_0C(vref_ctrl) (((vref_ctrl) & 0xFF) << 8)
+#define CODEC_F00_0C_CAP_HBR                    RT_BIT(27)
+#define CODEC_F00_0C_CAP_DP                     RT_BIT(24)
+#define CODEC_F00_0C_CAP_EAPD                   RT_BIT(16)
+#define CODEC_F00_0C_CAP_HDMI                   RT_BIT(7)
+#define CODEC_F00_0C_CAP_BALANCED_IO            RT_BIT(6)
+#define CODEC_F00_0C_CAP_INPUT                  RT_BIT(5)
+#define CODEC_F00_0C_CAP_OUTPUT                 RT_BIT(4)
+#define CODEC_F00_0C_CAP_HP                     RT_BIT(3)
+#define CODEC_F00_0C_CAP_PRESENSE_DETECT        RT_BIT(2)
+#define CODEC_F00_0C_CAP_TRIGGER_REQUIRED       RT_BIT(1)
+#define CODEC_F00_0C_CAP_IMPENDANCE_SENSE       RT_BIT(0)
 
 /* HDA spec 7.3.3.31 defines layout of configuration registers/verbs (0xF1C) */
@@ -298,5 +312,10 @@
             pNode->afg.node.name = "AFG";
             pNode->node.au32F00_param[8] = CODEC_MAKE_F00_08(CODEC_F00_08_BEEP_GEN, 0xd, 0xd);
-            pNode->node.au32F00_param[0xC] = (17 << 8)|RT_BIT(6)|RT_BIT(5)|RT_BIT(2)|RT_BIT(1)|RT_BIT(0);
+            pNode->node.au32F00_param[0xC] =   CODEC_MAKE_F00_0C(0x17)
+                                             | CODEC_F00_0C_CAP_BALANCED_IO
+                                             | CODEC_F00_0C_CAP_INPUT
+                                             | CODEC_F00_0C_CAP_PRESENSE_DETECT
+                                             | CODEC_F00_0C_CAP_TRIGGER_REQUIRED
+                                             | CODEC_F00_0C_CAP_IMPENDANCE_SENSE;//(17 << 8)|RT_BIT(6)|RT_BIT(5)|RT_BIT(2)|RT_BIT(1)|RT_BIT(0);
             pNode->node.au32F00_param[0xB] = RT_BIT(0);
             pNode->node.au32F00_param[0xD] = RT_BIT(31)|(0x5 << 16)|(0xE)<<8;
@@ -383,5 +402,12 @@
         case 0xA:
             pNode->node.name = "PortA";
-            pNode->node.au32F00_param[0xC] = 0x173f;
+            pNode->node.au32F00_param[0xC] =   CODEC_MAKE_F00_0C(0x17)
+                                             | CODEC_F00_0C_CAP_BALANCED_IO
+                                             | CODEC_F00_0C_CAP_INPUT
+                                             | CODEC_F00_0C_CAP_OUTPUT
+                                             | CODEC_F00_0C_CAP_HP
+                                             | CODEC_F00_0C_CAP_PRESENSE_DETECT
+                                             | CODEC_F00_0C_CAP_TRIGGER_REQUIRED
+                                             | CODEC_F00_0C_CAP_IMPENDANCE_SENSE;//0x173f;
             pNode->node.au32F02_param[0] = 0x2;
             pNode->port.u32F07_param = 0xc0;//RT_BIT(6);
@@ -398,5 +424,10 @@
         case 0xB:
             pNode->node.name = "PortB";
-            pNode->node.au32F00_param[0xC] = 0x1737;
+            pNode->node.au32F00_param[0xC] =   CODEC_MAKE_F00_0C(0x17)
+                                             | CODEC_F00_0C_CAP_INPUT
+                                             | CODEC_F00_0C_CAP_OUTPUT
+                                             | CODEC_F00_0C_CAP_PRESENSE_DETECT
+                                             | CODEC_F00_0C_CAP_TRIGGER_REQUIRED
+                                             | CODEC_F00_0C_CAP_IMPENDANCE_SENSE;//0x1737;
             pNode->node.au32F02_param[0] = 0x4;
             pNode->port.u32F07_param = RT_BIT(5);
@@ -413,5 +444,10 @@
             pNode->node.name = "PortC";
             pNode->node.au32F02_param[0] = 0x3;
-            pNode->node.au32F00_param[0xC] = 0x1737;
+            pNode->node.au32F00_param[0xC] =   CODEC_MAKE_F00_0C(0x17)
+                                             | CODEC_F00_0C_CAP_INPUT
+                                             | CODEC_F00_0C_CAP_OUTPUT
+                                             | CODEC_F00_0C_CAP_PRESENSE_DETECT
+                                             | CODEC_F00_0C_CAP_TRIGGER_REQUIRED
+                                             | CODEC_F00_0C_CAP_IMPENDANCE_SENSE;//0x1737;
             pNode->port.u32F07_param = RT_BIT(5);
             if (!pState->fInReset)
@@ -425,5 +461,10 @@
         case 0xD:
             pNode->node.name = "PortD";
-            pNode->node.au32F00_param[0xC] = 0x1737;
+            pNode->node.au32F00_param[0xC] =   CODEC_MAKE_F00_0C(0x17)
+                                             | CODEC_F00_0C_CAP_INPUT
+                                             | CODEC_F00_0C_CAP_OUTPUT
+                                             | CODEC_F00_0C_CAP_PRESENSE_DETECT
+                                             | CODEC_F00_0C_CAP_TRIGGER_REQUIRED
+                                             | CODEC_F00_0C_CAP_IMPENDANCE_SENSE;//0x1737;
             pNode->port.u32F07_param = RT_BIT(5);
             pNode->node.au32F02_param[0] = 0x2;
@@ -450,5 +491,7 @@
                                            | CODEC_F00_09_CAP_LSB;//(4 << 20)|RT_BIT(7)|RT_BIT(0);
             pNode->port.u32F08_param = 0;
-            pNode->node.au32F00_param[0xC] = 0x34;
+            pNode->node.au32F00_param[0xC] =   CODEC_F00_0C_CAP_INPUT
+                                             | CODEC_F00_0C_CAP_OUTPUT
+                                             | CODEC_F00_0C_CAP_PRESENSE_DETECT;//0x34;
             pNode->port.u32F07_param = RT_BIT(5);
             pNode->port.u32F09_param = 0x7fffffff;
@@ -468,5 +511,9 @@
                                            | CODEC_F00_09_CAP_OUT_AMP_PRESENT
                                            | CODEC_F00_09_CAP_LSB;//(4 << 20)|RT_BIT(8)|RT_BIT(7)|RT_BIT(2)|RT_BIT(0);
-            pNode->node.au32F00_param[0xC] = 0x37;
+            pNode->node.au32F00_param[0xC] =   CODEC_F00_0C_CAP_INPUT
+                                             | CODEC_F00_0C_CAP_OUTPUT
+                                             | CODEC_F00_0C_CAP_PRESENSE_DETECT
+                                             | CODEC_F00_0C_CAP_TRIGGER_REQUIRED
+                                             | CODEC_F00_0C_CAP_IMPENDANCE_SENSE;//0x37;
             pNode->node.au32F00_param[0xE] = 0x1;
             pNode->port.u32F08_param = 0;
@@ -488,5 +535,5 @@
                                            | CODEC_F00_09_CAP_CONNECTION_LIST
                                            | CODEC_F00_09_CAP_LSB;//(4<<20)|RT_BIT(9)|RT_BIT(8)|RT_BIT(0);
-            pNode->node.au32F00_param[0xC] = RT_BIT(4);
+            pNode->node.au32F00_param[0xC] = CODEC_F00_0C_CAP_OUTPUT;//RT_BIT(4);
             pNode->node.au32F00_param[0xE] = 0x3;
             pNode->digout.u32F01_param = 0;
@@ -504,5 +551,7 @@
             pNode->node.name = "DigIn_0";
             pNode->node.au32F00_param[9] = (4 << 20)|(3<<16)|RT_BIT(10)|RT_BIT(9)|RT_BIT(7)|RT_BIT(0);
-            pNode->node.au32F00_param[0xC] = RT_BIT(16)| RT_BIT(5)|RT_BIT(2);
+            pNode->node.au32F00_param[0xC] =   CODEC_F00_0C_CAP_EAPD
+                                             | CODEC_F00_0C_CAP_INPUT
+                                             | CODEC_F00_0C_CAP_PRESENSE_DETECT;//RT_BIT(16)| RT_BIT(5)|RT_BIT(2);
             pNode->digin.u32F05_param = 0x3 << 4 | 0x3; /* PS-Act: D3 -> D3 */
             pNode->digin.u32F07_param = 0;
@@ -551,5 +600,5 @@
             pNode->node.au32F00_param[0x9] =   CODEC_MAKE_F00_09(CODEC_F00_09_TYPE_PIN_COMPLEX, 0, 0)
                                              | CODEC_F00_09_CAP_LSB;//(4 << 20)|RT_BIT(0);
-            pNode->node.au32F00_param[0xc] = RT_BIT(5);
+            pNode->node.au32F00_param[0xc] = CODEC_F00_0C_CAP_INPUT;//RT_BIT(5);
             pNode->cdnode.u32F07_param = 0;
             if (!pState->fInReset)
@@ -609,5 +658,5 @@
                                              | CODEC_F00_09_CAP_LSB;//(0x4 << 20)|RT_BIT(9)|RT_BIT(8)|RT_BIT(0);
             pNode->node.au32F00_param[0xE] = 0x1;
-            pNode->node.au32F00_param[0xC] = 0x10;
+            pNode->node.au32F00_param[0xC] = CODEC_F00_0C_CAP_OUTPUT;//0x10;
             pNode->node.au32F02_param[0] = 0x1a;
             pNode->reserved.u32F07_param = 0;
