VirtualBox

Changeset 56727 in vbox for trunk/src/VBox/Devices


Ignore:
Timestamp:
Jul 1, 2015 9:17:59 AM (10 years ago)
Author:
vboxsync
Message:

Devices/Audio: HDA:

  • Implemented debugger commands "hdcnodes" and "hdcselector".
  • Added defines for STAC9220/STAC9221.
  • Added more codec register defines / types.
  • Whitespaces cleanup.
Location:
trunk/src/VBox/Devices/Audio
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Devices/Audio/DevIchHda.cpp

    r56692 r56727  
    33003300    PHDASTATE pThis = PDMINS_2_DATA(pDevIns, PHDASTATE);
    33013301
    3302     if (pThis->pCodec->pfnCodecDbgListNodes)
    3303         pThis->pCodec->pfnCodecDbgListNodes(pThis->pCodec, pHlp, pszArgs);
     3302    if (pThis->pCodec->pfnDbgListNodes)
     3303        pThis->pCodec->pfnDbgListNodes(pThis->pCodec, pHlp, pszArgs);
    33043304    else
    33053305        pHlp->pfnPrintf(pHlp, "Codec implementation doesn't provide corresponding callback\n");
     
    33143314    PHDASTATE pThis = PDMINS_2_DATA(pDevIns, PHDASTATE);
    33153315
    3316     if (pThis->pCodec->pfnCodecDbgSelector)
    3317         pThis->pCodec->pfnCodecDbgSelector(pThis->pCodec, pHlp, pszArgs);
     3316    if (pThis->pCodec->pfnDbgSelector)
     3317        pThis->pCodec->pfnDbgSelector(pThis->pCodec, pHlp, pszArgs);
    33183318    else
    33193319        pHlp->pfnPrintf(pHlp, "Codec implementation doesn't provide corresponding callback\n");
  • trunk/src/VBox/Devices/Audio/DevIchHdaCodec.cpp

    r56689 r56727  
    4343/* PRM 5.3.1 */
    4444/** Codec address mask. */
    45 #define CODEC_CAD_MASK              0xF0000000
     45#define CODEC_CAD_MASK                                     0xF0000000
    4646/** Codec address shift. */
    47 #define CODEC_CAD_SHIFT             28
    48 #define CODEC_DIRECT_MASK           RT_BIT(27)
     47#define CODEC_CAD_SHIFT                                    28
     48#define CODEC_DIRECT_MASK                                  RT_BIT(27)
    4949/** Node ID mask. */
    50 #define CODEC_NID_MASK              0x07F00000
     50#define CODEC_NID_MASK                                     0x07F00000
    5151/** Node ID shift. */
    52 #define CODEC_NID_SHIFT             20
    53 #define CODEC_VERBDATA_MASK         0x000FFFFF
    54 #define CODEC_VERB_4BIT_CMD         0x000FFFF0
    55 #define CODEC_VERB_4BIT_DATA        0x0000000F
    56 #define CODEC_VERB_8BIT_CMD         0x000FFF00
    57 #define CODEC_VERB_8BIT_DATA        0x000000FF
    58 #define CODEC_VERB_16BIT_CMD        0x000F0000
    59 #define CODEC_VERB_16BIT_DATA       0x0000FFFF
    60 
    61 #define CODEC_CAD(cmd) (((cmd) & CODEC_CAD_MASK) >> CODEC_CAD_SHIFT)
    62 #define CODEC_DIRECT(cmd) ((cmd) & CODEC_DIRECT_MASK)
    63 #define CODEC_NID(cmd) ((((cmd) & CODEC_NID_MASK)) >> CODEC_NID_SHIFT)
    64 #define CODEC_VERBDATA(cmd) ((cmd) & CODEC_VERBDATA_MASK)
    65 #define CODEC_VERB_CMD(cmd, mask, x) (((cmd) & (mask)) >> (x))
    66 #define CODEC_VERB_CMD4(cmd) (CODEC_VERB_CMD((cmd), CODEC_VERB_4BIT_CMD, 4))
    67 #define CODEC_VERB_CMD8(cmd) (CODEC_VERB_CMD((cmd), CODEC_VERB_8BIT_CMD, 8))
    68 #define CODEC_VERB_CMD16(cmd) (CODEC_VERB_CMD((cmd), CODEC_VERB_16BIT_CMD, 16))
    69 #define CODEC_VERB_PAYLOAD4(cmd) ((cmd) & CODEC_VERB_4BIT_DATA)
    70 #define CODEC_VERB_PAYLOAD8(cmd) ((cmd) & CODEC_VERB_8BIT_DATA)
    71 #define CODEC_VERB_PAYLOAD16(cmd) ((cmd) & CODEC_VERB_16BIT_DATA)
    72 
    73 #define CODEC_VERB_GET_AMP_DIRECTION  RT_BIT(15)
    74 #define CODEC_VERB_GET_AMP_SIDE       RT_BIT(13)
    75 #define CODEC_VERB_GET_AMP_INDEX      0x7
     52#define CODEC_NID_SHIFT                                    20
     53#define CODEC_VERBDATA_MASK                                0x000FFFFF
     54#define CODEC_VERB_4BIT_CMD                                0x000FFFF0
     55#define CODEC_VERB_4BIT_DATA                               0x0000000F
     56#define CODEC_VERB_8BIT_CMD                                0x000FFF00
     57#define CODEC_VERB_8BIT_DATA                               0x000000FF
     58#define CODEC_VERB_16BIT_CMD                               0x000F0000
     59#define CODEC_VERB_16BIT_DATA                              0x0000FFFF
     60
     61#define CODEC_CAD(cmd)                                     (((cmd) & CODEC_CAD_MASK) >> CODEC_CAD_SHIFT)
     62#define CODEC_DIRECT(cmd)                                  ((cmd) & CODEC_DIRECT_MASK)
     63#define CODEC_NID(cmd)                                     ((((cmd) & CODEC_NID_MASK)) >> CODEC_NID_SHIFT)
     64#define CODEC_VERBDATA(cmd)                                ((cmd) & CODEC_VERBDATA_MASK)
     65#define CODEC_VERB_CMD(cmd, mask, x)                       (((cmd) & (mask)) >> (x))
     66#define CODEC_VERB_CMD4(cmd)                               (CODEC_VERB_CMD((cmd), CODEC_VERB_4BIT_CMD, 4))
     67#define CODEC_VERB_CMD8(cmd)                               (CODEC_VERB_CMD((cmd), CODEC_VERB_8BIT_CMD, 8))
     68#define CODEC_VERB_CMD16(cmd)                              (CODEC_VERB_CMD((cmd), CODEC_VERB_16BIT_CMD, 16))
     69#define CODEC_VERB_PAYLOAD4(cmd)                           ((cmd) & CODEC_VERB_4BIT_DATA)
     70#define CODEC_VERB_PAYLOAD8(cmd)                           ((cmd) & CODEC_VERB_8BIT_DATA)
     71#define CODEC_VERB_PAYLOAD16(cmd)                          ((cmd) & CODEC_VERB_16BIT_DATA)
     72
     73#define CODEC_VERB_GET_AMP_DIRECTION                       RT_BIT(15)
     74#define CODEC_VERB_GET_AMP_SIDE                            RT_BIT(13)
     75#define CODEC_VERB_GET_AMP_INDEX                           0x7
    7676
    7777/* HDA spec 7.3.3.7 NoteA */
    78 #define CODEC_GET_AMP_DIRECTION(cmd)  (((cmd) & CODEC_VERB_GET_AMP_DIRECTION) >> 15)
    79 #define CODEC_GET_AMP_SIDE(cmd)       (((cmd) & CODEC_VERB_GET_AMP_SIDE) >> 13)
    80 #define CODEC_GET_AMP_INDEX(cmd)      (CODEC_GET_AMP_DIRECTION(cmd) ? 0 : ((cmd) & CODEC_VERB_GET_AMP_INDEX))
     78#define CODEC_GET_AMP_DIRECTION(cmd)                       (((cmd) & CODEC_VERB_GET_AMP_DIRECTION) >> 15)
     79#define CODEC_GET_AMP_SIDE(cmd)                            (((cmd) & CODEC_VERB_GET_AMP_SIDE) >> 13)
     80#define CODEC_GET_AMP_INDEX(cmd)                           (CODEC_GET_AMP_DIRECTION(cmd) ? 0 : ((cmd) & CODEC_VERB_GET_AMP_INDEX))
    8181
    8282/* HDA spec 7.3.3.7 NoteC */
    83 #define CODEC_VERB_SET_AMP_OUT_DIRECTION  RT_BIT(15)
    84 #define CODEC_VERB_SET_AMP_IN_DIRECTION   RT_BIT(14)
    85 #define CODEC_VERB_SET_AMP_LEFT_SIDE      RT_BIT(13)
    86 #define CODEC_VERB_SET_AMP_RIGHT_SIDE     RT_BIT(12)
    87 #define CODEC_VERB_SET_AMP_INDEX          (0x7 << 8)
    88 
    89 #define CODEC_SET_AMP_IS_OUT_DIRECTION(cmd)  (((cmd) & CODEC_VERB_SET_AMP_OUT_DIRECTION) != 0)
    90 #define CODEC_SET_AMP_IS_IN_DIRECTION(cmd)   (((cmd) & CODEC_VERB_SET_AMP_IN_DIRECTION) != 0)
    91 #define CODEC_SET_AMP_IS_LEFT_SIDE(cmd)      (((cmd) & CODEC_VERB_SET_AMP_LEFT_SIDE) != 0)
    92 #define CODEC_SET_AMP_IS_RIGHT_SIDE(cmd)     (((cmd) & CODEC_VERB_SET_AMP_RIGHT_SIDE) != 0)
    93 #define CODEC_SET_AMP_INDEX(cmd)             (((cmd) & CODEC_VERB_SET_AMP_INDEX) >> 7)
     83#define CODEC_VERB_SET_AMP_OUT_DIRECTION                   RT_BIT(15)
     84#define CODEC_VERB_SET_AMP_IN_DIRECTION                    RT_BIT(14)
     85#define CODEC_VERB_SET_AMP_LEFT_SIDE                       RT_BIT(13)
     86#define CODEC_VERB_SET_AMP_RIGHT_SIDE                      RT_BIT(12)
     87#define CODEC_VERB_SET_AMP_INDEX                           (0x7 << 8)
     88#define CODEC_VERB_SET_AMP_MUTE                            RT_BIT(7)
     89/** Note: 7-bit value [6:0]. */
     90#define CODEC_VERB_SET_AMP_GAIN                            0x7F
     91
     92#define CODEC_SET_AMP_IS_OUT_DIRECTION(cmd)                (((cmd) & CODEC_VERB_SET_AMP_OUT_DIRECTION) != 0)
     93#define CODEC_SET_AMP_IS_IN_DIRECTION(cmd)                 (((cmd) & CODEC_VERB_SET_AMP_IN_DIRECTION) != 0)
     94#define CODEC_SET_AMP_IS_LEFT_SIDE(cmd)                    (((cmd) & CODEC_VERB_SET_AMP_LEFT_SIDE) != 0)
     95#define CODEC_SET_AMP_IS_RIGHT_SIDE(cmd)                   (((cmd) & CODEC_VERB_SET_AMP_RIGHT_SIDE) != 0)
     96#define CODEC_SET_AMP_INDEX(cmd)                           (((cmd) & CODEC_VERB_SET_AMP_INDEX) >> 7)
     97#define CODEC_SET_AMP_MUTE(cmd)                            ((cmd) & CODEC_VERB_SET_AMP_MUTE)
     98#define CODEC_SET_AMP_GAIN(cmd)                            ((cmd) & CODEC_VERB_SET_AMP_GAIN)
    9499
    95100/* HDA spec 7.3.3.1 defines layout of configuration registers/verbs (0xF00) */
    96101/* VendorID (7.3.4.1) */
    97 #define CODEC_MAKE_F00_00(vendorID, deviceID) (((vendorID) << 16) | (deviceID))
    98 #define CODEC_F00_00_VENDORID(f00_00) (((f00_00) >> 16) & 0xFFFF)
    99 #define CODEC_F00_00_DEVICEID(f00_00) ((f00_00) & 0xFFFF)
     102#define CODEC_MAKE_F00_00(vendorID, deviceID)              (((vendorID) << 16) | (deviceID))
     103#define CODEC_F00_00_VENDORID(f00_00)                      (((f00_00) >> 16) & 0xFFFF)
     104#define CODEC_F00_00_DEVICEID(f00_00)                      ((f00_00) & 0xFFFF)
    100105/* RevisionID (7.3.4.2)*/
    101106#define CODEC_MAKE_F00_02(MajRev, MinRev, RevisionID, SteppingID) (((MajRev) << 20)|((MinRev) << 16)|((RevisionID) << 8)|(SteppingID))
    102107/* Subordinate node count (7.3.4.3)*/
    103108#define CODEC_MAKE_F00_04(startNodeNumber, totalNodeNumber) ((((startNodeNumber) & 0xFF) << 16)|((totalNodeNumber) & 0xFF))
    104 #define CODEC_F00_04_TO_START_NODE_NUMBER(f00_04) (((f00_04) >> 16) & 0xFF)
    105 #define CODEC_F00_04_TO_NODE_COUNT(f00_04) ((f00_04) & 0xFF)
     109#define CODEC_F00_04_TO_START_NODE_NUMBER(f00_04)          (((f00_04) >> 16) & 0xFF)
     110#define CODEC_F00_04_TO_NODE_COUNT(f00_04)                 ((f00_04) & 0xFF)
    106111/*
    107112 * Function Group Type  (7.3.4.4)
     
    109114 * [0x80 - 0xff] are vendor defined function groups
    110115 */
    111 #define CODEC_MAKE_F00_05(UnSol, NodeType) (((UnSol) << 8)|(NodeType))
    112 #define CODEC_F00_05_UNSOL  RT_BIT(8)
    113 #define CODEC_F00_05_AFG    (0x1)
    114 #define CODEC_F00_05_MFG    (0x2)
    115 #define CODEC_F00_05_IS_UNSOL(f00_05) RT_BOOL((f00_05) & RT_BIT(8))
    116 #define CODEC_F00_05_GROUP(f00_05) ((f00_05) & 0xff)
     116#define CODEC_MAKE_F00_05(UnSol, NodeType)                 (((UnSol) << 8)|(NodeType))
     117#define CODEC_F00_05_UNSOL                                 RT_BIT(8)
     118#define CODEC_F00_05_AFG                                   (0x1)
     119#define CODEC_F00_05_MFG                                   (0x2)
     120#define CODEC_F00_05_IS_UNSOL(f00_05)                      RT_BOOL((f00_05) & RT_BIT(8))
     121#define CODEC_F00_05_GROUP(f00_05)                         ((f00_05) & 0xff)
    117122/*  Audio Function Group capabilities (7.3.4.5) */
    118123#define CODEC_MAKE_F00_08(BeepGen, InputDelay, OutputDelay) ((((BeepGen) & 0x1) << 16)| (((InputDelay) & 0xF) << 8) | ((OutputDelay) & 0xF))
    119 #define CODEC_F00_08_BEEP_GEN(f00_08) ((f00_08) & RT_BIT(16)
     124#define CODEC_F00_08_BEEP_GEN(f00_08)                      ((f00_08) & RT_BIT(16)
    120125
    121126/* Widget Capabilities (7.3.4.6) */
     
    125130    | (((chanel_count) & 0xF) << 13))
    126131/* note: types 0x8-0xe are reserved */
    127 #define CODEC_F00_09_TYPE_AUDIO_OUTPUT      (0x0)
    128 #define CODEC_F00_09_TYPE_AUDIO_INPUT       (0x1)
    129 #define CODEC_F00_09_TYPE_AUDIO_MIXER       (0x2)
    130 #define CODEC_F00_09_TYPE_AUDIO_SELECTOR    (0x3)
    131 #define CODEC_F00_09_TYPE_PIN_COMPLEX       (0x4)
    132 #define CODEC_F00_09_TYPE_POWER_WIDGET      (0x5)
    133 #define CODEC_F00_09_TYPE_VOLUME_KNOB       (0x6)
    134 #define CODEC_F00_09_TYPE_BEEP_GEN          (0x7)
    135 #define CODEC_F00_09_TYPE_VENDOR_DEFINED    (0xF)
    136 
    137 #define CODEC_F00_09_CAP_CP                 RT_BIT(12)
    138 #define CODEC_F00_09_CAP_L_R_SWAP           RT_BIT(11)
    139 #define CODEC_F00_09_CAP_POWER_CTRL         RT_BIT(10)
    140 #define CODEC_F00_09_CAP_DIGITAL            RT_BIT(9)
    141 #define CODEC_F00_09_CAP_CONNECTION_LIST    RT_BIT(8)
    142 #define CODEC_F00_09_CAP_UNSOL              RT_BIT(7)
    143 #define CODEC_F00_09_CAP_PROC_WIDGET        RT_BIT(6)
    144 #define CODEC_F00_09_CAP_STRIPE             RT_BIT(5)
    145 #define CODEC_F00_09_CAP_FMT_OVERRIDE       RT_BIT(4)
    146 #define CODEC_F00_09_CAP_AMP_FMT_OVERRIDE   RT_BIT(3)
    147 #define CODEC_F00_09_CAP_OUT_AMP_PRESENT    RT_BIT(2)
    148 #define CODEC_F00_09_CAP_IN_AMP_PRESENT     RT_BIT(1)
    149 #define CODEC_F00_09_CAP_LSB                RT_BIT(0)
    150 
    151 #define CODEC_F00_09_TYPE(f00_09) (((f00_09) >> 20) & 0xF)
    152 
    153 #define CODEC_F00_09_IS_CAP_CP(f00_09)              RT_BOOL((f00_09) & RT_BIT(12))
    154 #define CODEC_F00_09_IS_CAP_L_R_SWAP(f00_09)        RT_BOOL((f00_09) & RT_BIT(11))
    155 #define CODEC_F00_09_IS_CAP_POWER_CTRL(f00_09)      RT_BOOL((f00_09) & RT_BIT(10))
    156 #define CODEC_F00_09_IS_CAP_DIGITAL(f00_09)         RT_BOOL((f00_09) & RT_BIT(9))
    157 #define CODEC_F00_09_IS_CAP_CONNECTION_LIST(f00_09) RT_BOOL((f00_09) & RT_BIT(8))
    158 #define CODEC_F00_09_IS_CAP_UNSOL(f00_09)           RT_BOOL((f00_09) & RT_BIT(7))
    159 #define CODEC_F00_09_IS_CAP_PROC_WIDGET(f00_09)     RT_BOOL((f00_09) & RT_BIT(6))
    160 #define CODEC_F00_09_IS_CAP_STRIPE(f00_09)          RT_BOOL((f00_09) & RT_BIT(5))
    161 #define CODEC_F00_09_IS_CAP_FMT_OVERRIDE(f00_09)    RT_BOOL((f00_09) & RT_BIT(4))
    162 #define CODEC_F00_09_IS_CAP_AMP_OVERRIDE(f00_09)    RT_BOOL((f00_09) & RT_BIT(3))
    163 #define CODEC_F00_09_IS_CAP_OUT_AMP_PRESENT(f00_09) RT_BOOL((f00_09) & RT_BIT(2))
    164 #define CODEC_F00_09_IS_CAP_IN_AMP_PRESENT(f00_09)  RT_BOOL((f00_09) & RT_BIT(1))
    165 #define CODEC_F00_09_IS_CAP_LSB(f00_09)             RT_BOOL((f00_09) & RT_BIT(0))
     132#define CODEC_F00_09_TYPE_AUDIO_OUTPUT                     (0x0)
     133#define CODEC_F00_09_TYPE_AUDIO_INPUT                      (0x1)
     134#define CODEC_F00_09_TYPE_AUDIO_MIXER                      (0x2)
     135#define CODEC_F00_09_TYPE_AUDIO_SELECTOR                   (0x3)
     136#define CODEC_F00_09_TYPE_PIN_COMPLEX                      (0x4)
     137#define CODEC_F00_09_TYPE_POWER_WIDGET                     (0x5)
     138#define CODEC_F00_09_TYPE_VOLUME_KNOB                      (0x6)
     139#define CODEC_F00_09_TYPE_BEEP_GEN                         (0x7)
     140#define CODEC_F00_09_TYPE_VENDOR_DEFINED                   (0xF)
     141
     142#define CODEC_F00_09_CAP_CP                                RT_BIT(12)
     143#define CODEC_F00_09_CAP_L_R_SWAP                          RT_BIT(11)
     144#define CODEC_F00_09_CAP_POWER_CTRL                        RT_BIT(10)
     145#define CODEC_F00_09_CAP_DIGITAL                           RT_BIT(9)
     146#define CODEC_F00_09_CAP_CONNECTION_LIST                   RT_BIT(8)
     147#define CODEC_F00_09_CAP_UNSOL                             RT_BIT(7)
     148#define CODEC_F00_09_CAP_PROC_WIDGET                       RT_BIT(6)
     149#define CODEC_F00_09_CAP_STRIPE                            RT_BIT(5)
     150#define CODEC_F00_09_CAP_FMT_OVERRIDE                      RT_BIT(4)
     151#define CODEC_F00_09_CAP_AMP_FMT_OVERRIDE                  RT_BIT(3)
     152#define CODEC_F00_09_CAP_OUT_AMP_PRESENT                   RT_BIT(2)
     153#define CODEC_F00_09_CAP_IN_AMP_PRESENT                    RT_BIT(1)
     154#define CODEC_F00_09_CAP_LSB                               RT_BIT(0)
     155
     156#define CODEC_F00_09_TYPE(f00_09)                          (((f00_09) >> 20) & 0xF)
     157
     158#define CODEC_F00_09_IS_CAP_CP(f00_09)                     RT_BOOL((f00_09) & RT_BIT(12))
     159#define CODEC_F00_09_IS_CAP_L_R_SWAP(f00_09)               RT_BOOL((f00_09) & RT_BIT(11))
     160#define CODEC_F00_09_IS_CAP_POWER_CTRL(f00_09)             RT_BOOL((f00_09) & RT_BIT(10))
     161#define CODEC_F00_09_IS_CAP_DIGITAL(f00_09)                RT_BOOL((f00_09) & RT_BIT(9))
     162#define CODEC_F00_09_IS_CAP_CONNECTION_LIST(f00_09)        RT_BOOL((f00_09) & RT_BIT(8))
     163#define CODEC_F00_09_IS_CAP_UNSOL(f00_09)                  RT_BOOL((f00_09) & RT_BIT(7))
     164#define CODEC_F00_09_IS_CAP_PROC_WIDGET(f00_09)            RT_BOOL((f00_09) & RT_BIT(6))
     165#define CODEC_F00_09_IS_CAP_STRIPE(f00_09)                 RT_BOOL((f00_09) & RT_BIT(5))
     166#define CODEC_F00_09_IS_CAP_FMT_OVERRIDE(f00_09)           RT_BOOL((f00_09) & RT_BIT(4))
     167#define CODEC_F00_09_IS_CAP_AMP_OVERRIDE(f00_09)           RT_BOOL((f00_09) & RT_BIT(3))
     168#define CODEC_F00_09_IS_CAP_OUT_AMP_PRESENT(f00_09)        RT_BOOL((f00_09) & RT_BIT(2))
     169#define CODEC_F00_09_IS_CAP_IN_AMP_PRESENT(f00_09)         RT_BOOL((f00_09) & RT_BIT(1))
     170#define CODEC_F00_09_IS_CAP_LSB(f00_09)                    RT_BOOL((f00_09) & RT_BIT(0))
    166171
    167172/* Supported PCM size, rates (7.3.4.7) */
    168 #define CODEC_F00_0A_32_BIT             RT_BIT(19)
    169 #define CODEC_F00_0A_24_BIT             RT_BIT(18)
    170 #define CODEC_F00_0A_16_BIT             RT_BIT(17)
    171 #define CODEC_F00_0A_8_BIT              RT_BIT(16)
    172 
    173 #define CODEC_F00_0A_48KHZ_MULT_8X      RT_BIT(11)
    174 #define CODEC_F00_0A_48KHZ_MULT_4X      RT_BIT(10)
    175 #define CODEC_F00_0A_44_1KHZ_MULT_4X    RT_BIT(9)
    176 #define CODEC_F00_0A_48KHZ_MULT_2X      RT_BIT(8)
    177 #define CODEC_F00_0A_44_1KHZ_MULT_2X    RT_BIT(7)
    178 #define CODEC_F00_0A_48KHZ              RT_BIT(6)
    179 #define CODEC_F00_0A_44_1KHZ            RT_BIT(5)
     173#define CODEC_F00_0A_32_BIT                                RT_BIT(19)
     174#define CODEC_F00_0A_24_BIT                                RT_BIT(18)
     175#define CODEC_F00_0A_16_BIT                                RT_BIT(17)
     176#define CODEC_F00_0A_8_BIT                                 RT_BIT(16)
     177
     178#define CODEC_F00_0A_48KHZ_MULT_8X                         RT_BIT(11)
     179#define CODEC_F00_0A_48KHZ_MULT_4X                         RT_BIT(10)
     180#define CODEC_F00_0A_44_1KHZ_MULT_4X                       RT_BIT(9)
     181#define CODEC_F00_0A_48KHZ_MULT_2X                         RT_BIT(8)
     182#define CODEC_F00_0A_44_1KHZ_MULT_2X                       RT_BIT(7)
     183#define CODEC_F00_0A_48KHZ                                 RT_BIT(6)
     184#define CODEC_F00_0A_44_1KHZ                               RT_BIT(5)
    180185/* 2/3 * 48kHz */
    181 #define CODEC_F00_0A_48KHZ_2_3X         RT_BIT(4)
     186#define CODEC_F00_0A_48KHZ_2_3X                            RT_BIT(4)
    182187/* 1/2 * 44.1kHz */
    183 #define CODEC_F00_0A_44_1KHZ_1_2X       RT_BIT(3)
     188#define CODEC_F00_0A_44_1KHZ_1_2X                          RT_BIT(3)
    184189/* 1/3 * 48kHz */
    185 #define CODEC_F00_0A_48KHZ_1_3X         RT_BIT(2)
     190#define CODEC_F00_0A_48KHZ_1_3X                            RT_BIT(2)
    186191/* 1/4 * 44.1kHz */
    187 #define CODEC_F00_0A_44_1KHZ_1_4X       RT_BIT(1)
     192#define CODEC_F00_0A_44_1KHZ_1_4X                          RT_BIT(1)
    188193/* 1/6 * 48kHz */
    189 #define CODEC_F00_0A_48KHZ_1_6X         RT_BIT(0)
     194#define CODEC_F00_0A_48KHZ_1_6X                            RT_BIT(0)
    190195
    191196/* Supported streams formats (7.3.4.8) */
    192 #define CODEC_F00_0B_AC3                RT_BIT(2)
    193 #define CODEC_F00_0B_FLOAT32            RT_BIT(1)
    194 #define CODEC_F00_0B_PCM                RT_BIT(0)
     197#define CODEC_F00_0B_AC3                                   RT_BIT(2)
     198#define CODEC_F00_0B_FLOAT32                               RT_BIT(1)
     199#define CODEC_F00_0B_PCM                                   RT_BIT(0)
    195200
    196201/* Pin Capabilities (7.3.4.9)*/
    197202#define CODEC_MAKE_F00_0C(vref_ctrl) (((vref_ctrl) & 0xFF) << 8)
    198 #define CODEC_F00_0C_CAP_HBR                    RT_BIT(27)
    199 #define CODEC_F00_0C_CAP_DP                     RT_BIT(24)
    200 #define CODEC_F00_0C_CAP_EAPD                   RT_BIT(16)
    201 #define CODEC_F00_0C_CAP_HDMI                   RT_BIT(7)
    202 #define CODEC_F00_0C_CAP_BALANCED_IO            RT_BIT(6)
    203 #define CODEC_F00_0C_CAP_INPUT                  RT_BIT(5)
    204 #define CODEC_F00_0C_CAP_OUTPUT                 RT_BIT(4)
    205 #define CODEC_F00_0C_CAP_HP                     RT_BIT(3)
    206 #define CODEC_F00_0C_CAP_PRESENSE_DETECT        RT_BIT(2)
    207 #define CODEC_F00_0C_CAP_TRIGGER_REQUIRED       RT_BIT(1)
    208 #define CODEC_F00_0C_CAP_IMPENDANCE_SENSE       RT_BIT(0)
     203#define CODEC_F00_0C_CAP_HBR                               RT_BIT(27)
     204#define CODEC_F00_0C_CAP_DP                                RT_BIT(24)
     205#define CODEC_F00_0C_CAP_EAPD                              RT_BIT(16)
     206#define CODEC_F00_0C_CAP_HDMI                              RT_BIT(7)
     207#define CODEC_F00_0C_CAP_BALANCED_IO                       RT_BIT(6)
     208#define CODEC_F00_0C_CAP_INPUT                             RT_BIT(5)
     209#define CODEC_F00_0C_CAP_OUTPUT                            RT_BIT(4)
     210#define CODEC_F00_0C_CAP_HP                                RT_BIT(3)
     211#define CODEC_F00_0C_CAP_PRESENSE_DETECT                   RT_BIT(2)
     212#define CODEC_F00_0C_CAP_TRIGGER_REQUIRED                  RT_BIT(1)
     213#define CODEC_F00_0C_CAP_IMPENDANCE_SENSE                  RT_BIT(0)
    209214
    210215#define CODEC_F00_0C_IS_CAP_HBR(f00_0c)                    ((f00_0c) & RT_BIT(27))
     
    227232         | ((offset) & 0xFF))
    228233
     234#define CODEC_F00_0D_CAP_MUTE                              RT_BIT(7)
     235
     236#define CODEC_F00_0D_IS_CAP_MUTE(f00_0d)                   ( ( f00_0d) & RT_BIT(31))
     237#define CODEC_F00_0D_STEP_SIZE(f00_0d)                     ((( f00_0d) & (0x7F << 16)) >> 16)
     238#define CODEC_F00_0D_NUM_STEPS(f00_0d)                     ((((f00_0d) & (0x7F << 8)) >> 8) + 1)
     239#define CODEC_F00_0D_OFFSET(f00_0d)                        (  (f00_0d) & 0x7F)
     240
    229241/* Output Amplifier capabilities (7.3.4.10) */
    230 #define CODEC_MAKE_F00_12 CODEC_MAKE_F00_0D
     242#define CODEC_MAKE_F00_12                                  CODEC_MAKE_F00_0D
     243
     244#define CODEC_F00_12_IS_CAP_MUTE(f00_12)                   CODEC_F00_0D_IS_CAP_MUTE(f00_12)
     245#define CODEC_F00_12_STEP_SIZE(f00_12)                     CODEC_F00_0D_STEP_SIZE(f00_12)
     246#define CODEC_F00_12_NUM_STEPS(f00_12)                     CODEC_F00_0D_NUM_STEPS(f00_12)
     247#define CODEC_F00_12_OFFSET(f00_12)                        CODEC_F00_0D_OFFSET(f00_12)
    231248
    232249/* Connection list lenght (7.3.4.11) */
     
    234251    (  (((long_form) & 0x1) << 7)               \
    235252     | ((length) & 0x7F))
    236 #define CODEC_F00_0E_IS_LONG(f00_0e) RT_BOOL((f00_0e) & RT_BIT(7))
    237 #define CODEC_F00_0E_COUNT(f00_0e) ((f00_0e) & 0x7F)
     253/* Indicates short-form NIDs. */
     254#define CODEC_F00_0E_LIST_NID_SHORT                        0
     255/* Indicates long-form NIDs. */
     256#define CODEC_F00_0E_LIST_NID_LONG                         1
     257#define CODEC_F00_0E_IS_LONG(f00_0e)                       RT_BOOL((f00_0e) & RT_BIT(7))
     258#define CODEC_F00_0E_COUNT(f00_0e)                         ((f00_0e) & 0x7F)
    238259/* Supported Power States (7.3.4.12) */
    239 #define CODEC_F00_0F_EPSS       RT_BIT(31)
    240 #define CODEC_F00_0F_CLKSTOP    RT_BIT(30)
    241 #define CODEC_F00_0F_S3D3       RT_BIT(29)
    242 #define CODEC_F00_0F_D3COLD     RT_BIT(4)
    243 #define CODEC_F00_0F_D3         RT_BIT(3)
    244 #define CODEC_F00_0F_D2         RT_BIT(2)
    245 #define CODEC_F00_0F_D1         RT_BIT(1)
    246 #define CODEC_F00_0F_D0         RT_BIT(0)
     260#define CODEC_F00_0F_EPSS                                  RT_BIT(31)
     261#define CODEC_F00_0F_CLKSTOP                               RT_BIT(30)
     262#define CODEC_F00_0F_S3D3                                  RT_BIT(29)
     263#define CODEC_F00_0F_D3COLD                                RT_BIT(4)
     264#define CODEC_F00_0F_D3                                    RT_BIT(3)
     265#define CODEC_F00_0F_D2                                    RT_BIT(2)
     266#define CODEC_F00_0F_D1                                    RT_BIT(1)
     267#define CODEC_F00_0F_D0                                    RT_BIT(0)
    247268
    248269/* Processing capabilities 7.3.4.13 */
    249 #define CODEC_MAKE_F00_10(num, benign) ((((num) & 0xFF) << 8) | ((benign) & 0x1))
    250 #define CODEC_F00_10_NUM(f00_10) (((f00_10) & (0xFF << 8)) >> 8)
    251 #define CODEC_F00_10_BENING(f00_10) ((f00_10) & 0x1)
     270#define CODEC_MAKE_F00_10(num, benign)                     ((((num) & 0xFF) << 8) | ((benign) & 0x1))
     271#define CODEC_F00_10_NUM(f00_10)                           (((f00_10) & (0xFF << 8)) >> 8)
     272#define CODEC_F00_10_BENING(f00_10)                        ((f00_10) & 0x1)
    252273
    253274/* CP/IO Count (7.3.4.14) */
     
    260281
    261282/* Processing States (7.3.3.4) */
    262 #define CODEC_F03_OFF    (0)
    263 #define CODEC_F03_ON     RT_BIT(0)
    264 #define CODEC_F03_BENING RT_BIT(1)
     283#define CODEC_F03_OFF                                      (0)
     284#define CODEC_F03_ON                                       RT_BIT(0)
     285#define CODEC_F03_BENING                                   RT_BIT(1)
    265286/* Power States (7.3.3.10) */
    266287#define CODEC_MAKE_F05(reset, stopok, error, act, set)          \
     
    270291      | (((act) & 0x7) << 4)                                    \
    271292      | ((set) & 0x7))
    272 #define CODEC_F05_D3COLD    (4)
    273 #define CODEC_F05_D3        (3)
    274 #define CODEC_F05_D2        (2)
    275 #define CODEC_F05_D1        (1)
    276 #define CODEC_F05_D0        (0)
    277 
    278 #define CODEC_F05_IS_RESET(value)   (((value) & RT_BIT(10)) != 0)
    279 #define CODEC_F05_IS_STOPOK(value)  (((value) & RT_BIT(9)) != 0)
    280 #define CODEC_F05_IS_ERROR(value)   (((value) & RT_BIT(8)) != 0)
    281 #define CODEC_F05_ACT(value)        (((value) & 0x7) >> 4)
    282 #define CODEC_F05_SET(value)        (((value) & 0x7))
    283 
    284 #define CODEC_F05_GE(p0, p1) ((p0) <= (p1))
    285 #define CODEC_F05_LE(p0, p1) ((p0) >= (p1))
     293#define CODEC_F05_D3COLD                                   (4)
     294#define CODEC_F05_D3                                       (3)
     295#define CODEC_F05_D2                                       (2)
     296#define CODEC_F05_D1                                       (1)
     297#define CODEC_F05_D0                                       (0)
     298
     299#define CODEC_F05_IS_RESET(value)                          (((value) & RT_BIT(10)) != 0)
     300#define CODEC_F05_IS_STOPOK(value)                         (((value) & RT_BIT(9)) != 0)
     301#define CODEC_F05_IS_ERROR(value)                          (((value) & RT_BIT(8)) != 0)
     302#define CODEC_F05_ACT(value)                               (((value) & 0x7) >> 4)
     303#define CODEC_F05_SET(value)                               (((value) & 0x7))
     304
     305#define CODEC_F05_GE(p0, p1)                               ((p0) <= (p1))
     306#define CODEC_F05_LE(p0, p1)                               ((p0) >= (p1))
    286307
    287308/* Pin Widged Control (7.3.3.13) */
    288 #define CODEC_F07_VREF_HIZ      (0)
    289 #define CODEC_F07_VREF_50       (0x1)
    290 #define CODEC_F07_VREF_GROUND   (0x2)
    291 #define CODEC_F07_VREF_80       (0x4)
    292 #define CODEC_F07_VREF_100      (0x5)
    293 #define CODEC_F07_IN_ENABLE     RT_BIT(5)
    294 #define CODEC_F07_OUT_ENABLE    RT_BIT(6)
    295 #define CODEC_F07_OUT_H_ENABLE  RT_BIT(7)
     309#define CODEC_F07_VREF_HIZ                                 (0)
     310#define CODEC_F07_VREF_50                                  (0x1)
     311#define CODEC_F07_VREF_GROUND                              (0x2)
     312#define CODEC_F07_VREF_80                                  (0x4)
     313#define CODEC_F07_VREF_100                                 (0x5)
     314#define CODEC_F07_IN_ENABLE                                RT_BIT(5)
     315#define CODEC_F07_OUT_ENABLE                               RT_BIT(6)
     316#define CODEC_F07_OUT_H_ENABLE                             RT_BIT(7)
    296317
    297318/* Unsolicited enabled (7.3.3.14) */
     
    307328     | ((chan) & 0xF))
    308329
    309 #define CODEC_A_MULT_1X     (0)
    310 #define CODEC_A_MULT_2X     (1)
    311 #define CODEC_A_MULT_3X     (2)
    312 #define CODEC_A_MULT_4X     (3)
    313 
    314 #define CODEC_A_DIV_1X      (0)
    315 #define CODEC_A_DIV_2X      (1)
    316 #define CODEC_A_DIV_3X      (2)
    317 #define CODEC_A_DIV_4X      (3)
    318 #define CODEC_A_DIV_5X      (4)
    319 #define CODEC_A_DIV_6X      (5)
    320 #define CODEC_A_DIV_7X      (6)
    321 #define CODEC_A_DIV_8X      (7)
    322 
    323 #define CODEC_A_8_BIT       (0)
    324 #define CODEC_A_16_BIT      (1)
    325 #define CODEC_A_20_BIT      (2)
    326 #define CODEC_A_24_BIT      (3)
    327 #define CODEC_A_32_BIT      (4)
     330#define CODEC_A_TYPE                                       RT_BIT(15)
     331#define CODEC_A_TYPE_PCM                                   (0)
     332#define CODEC_A_TYPE_NON_PCM                               (1)
     333
     334#define CODEC_A_BASE                                       RT_BIT(14)
     335#define CODEC_A_BASE_48KHZ                                 (0)
     336#define CODEC_A_BASE_44KHZ                                 (1)
     337
     338#define CODEC_A_MULT_1X                                    (0)
     339#define CODEC_A_MULT_2X                                    (1)
     340#define CODEC_A_MULT_3X                                    (2)
     341#define CODEC_A_MULT_4X                                    (3)
     342
     343#define CODEC_A_DIV_1X                                     (0)
     344#define CODEC_A_DIV_2X                                     (1)
     345#define CODEC_A_DIV_3X                                     (2)
     346#define CODEC_A_DIV_4X                                     (3)
     347#define CODEC_A_DIV_5X                                     (4)
     348#define CODEC_A_DIV_6X                                     (5)
     349#define CODEC_A_DIV_7X                                     (6)
     350#define CODEC_A_DIV_8X                                     (7)
     351
     352#define CODEC_A_8_BIT                                      (0)
     353#define CODEC_A_16_BIT                                     (1)
     354#define CODEC_A_20_BIT                                     (2)
     355#define CODEC_A_24_BIT                                     (3)
     356#define CODEC_A_32_BIT                                     (4)
     357
     358#define CODEC_A_CHAN_MONO                                  (0)
     359#define CODEC_A_CHAN_STEREO                                (1)
    328360
    329361/* Pin Sense (7.3.3.15) */
     
    337369
    338370#define CODEC_MAKE_F0C(lrswap, eapd, btl) ((((lrswap) & 1) << 2) | (((eapd) & 1) << 1) | ((btl) & 1))
    339 #define CODEC_FOC_IS_LRSWAP(f0c)    RT_BOOL((f0c) & RT_BIT(2))
    340 #define CODEC_FOC_IS_EAPD(f0c)      RT_BOOL((f0c) & RT_BIT(1))
    341 #define CODEC_FOC_IS_BTL(f0c)       RT_BOOL((f0c) & RT_BIT(0))
     371#define CODEC_FOC_IS_LRSWAP(f0c)                           RT_BOOL((f0c) & RT_BIT(2))
     372#define CODEC_FOC_IS_EAPD(f0c)                             RT_BOOL((f0c) & RT_BIT(1))
     373#define CODEC_FOC_IS_BTL(f0c)                              RT_BOOL((f0c) & RT_BIT(0))
    342374/* HDA spec 7.3.3.31 defines layout of configuration registers/verbs (0xF1C) */
    343375/* Configuration's port connection */
    344 #define CODEC_F1C_PORT_MASK    (0x3)
    345 #define CODEC_F1C_PORT_SHIFT   (30)
    346 
    347 #define CODEC_F1C_PORT_COMPLEX (0x0)
    348 #define CODEC_F1C_PORT_NO_PHYS (0x1)
    349 #define CODEC_F1C_PORT_FIXED   (0x2)
    350 #define CODEC_F1C_BOTH         (0x3)
    351 
    352 /* Configuration's location */
    353 #define CODEC_F1C_LOCATION_MASK  (0x3F)
    354 #define CODEC_F1C_LOCATION_SHIFT (24)
     376#define CODEC_F1C_PORT_MASK                                (0x3)
     377#define CODEC_F1C_PORT_SHIFT                               (30)
     378
     379#define CODEC_F1C_PORT_COMPLEX                             (0x0)
     380#define CODEC_F1C_PORT_NO_PHYS                             (0x1)
     381#define CODEC_F1C_PORT_FIXED                               (0x2)
     382#define CODEC_F1C_BOTH                                     (0x3)
     383
     384/* Configuration default: connection */
     385#define CODEC_F1C_PORT_MASK                                (0x3)
     386#define CODEC_F1C_PORT_SHIFT                               (30)
     387
     388/* Connected to a jack (1/8", ATAPI, ...). */
     389#define CODEC_F1C_PORT_COMPLEX                             (0x0)
     390/* No physical connection. */
     391#define CODEC_F1C_PORT_NO_PHYS                             (0x1)
     392/* Fixed function device (integrated speaker, integrated mic, ...). */
     393#define CODEC_F1C_PORT_FIXED                               (0x2)
     394/* Both, a jack and an internal device are attached. */
     395#define CODEC_F1C_BOTH                                     (0x3)
     396
     397/* Configuration default: Location */
     398#define CODEC_F1C_LOCATION_MASK                            (0x3F)
     399#define CODEC_F1C_LOCATION_SHIFT                           (24)
     400
    355401/* [4:5] bits of location region means chassis attachment */
    356 #define CODEC_F1C_LOCATION_PRIMARY_CHASSIS     (0)
    357 #define CODEC_F1C_LOCATION_INTERNAL            RT_BIT(4)
    358 #define CODEC_F1C_LOCATION_SECONDRARY_CHASSIS  RT_BIT(5)
    359 #define CODEC_F1C_LOCATION_OTHER               (RT_BIT(5))
     402#define CODEC_F1C_LOCATION_PRIMARY_CHASSIS                 (0)
     403#define CODEC_F1C_LOCATION_INTERNAL                        RT_BIT(4)
     404#define CODEC_F1C_LOCATION_SECONDRARY_CHASSIS              RT_BIT(5)
     405#define CODEC_F1C_LOCATION_OTHER                           RT_BIT(5)
    360406
    361407/* [0:3] bits of location region means geometry location attachment */
    362 #define CODEC_F1C_LOCATION_NA                  (0)
    363 #define CODEC_F1C_LOCATION_REAR                (0x1)
    364 #define CODEC_F1C_LOCATION_FRONT               (0x2)
    365 #define CODEC_F1C_LOCATION_LEFT                (0x3)
    366 #define CODEC_F1C_LOCATION_RIGTH               (0x4)
    367 #define CODEC_F1C_LOCATION_TOP                 (0x5)
    368 #define CODEC_F1C_LOCATION_BOTTOM              (0x6)
    369 #define CODEC_F1C_LOCATION_SPECIAL_0           (0x7)
    370 #define CODEC_F1C_LOCATION_SPECIAL_1           (0x8)
    371 #define CODEC_F1C_LOCATION_SPECIAL_2           (0x9)
    372 
    373 /* Configuration's devices */
    374 #define CODEC_F1C_DEVICE_MASK                  (0xF)
    375 #define CODEC_F1C_DEVICE_SHIFT                 (20)
    376 #define CODEC_F1C_DEVICE_LINE_OUT              (0)
    377 #define CODEC_F1C_DEVICE_SPEAKER               (0x1)
    378 #define CODEC_F1C_DEVICE_HP                    (0x2)
    379 #define CODEC_F1C_DEVICE_CD                    (0x3)
    380 #define CODEC_F1C_DEVICE_SPDIF_OUT             (0x4)
    381 #define CODEC_F1C_DEVICE_DIGITAL_OTHER_OUT     (0x5)
    382 #define CODEC_F1C_DEVICE_MODEM_LINE_SIDE       (0x6)
    383 #define CODEC_F1C_DEVICE_MODEM_HANDSET_SIDE    (0x7)
    384 #define CODEC_F1C_DEVICE_LINE_IN               (0x8)
    385 #define CODEC_F1C_DEVICE_AUX                   (0x9)
    386 #define CODEC_F1C_DEVICE_MIC                   (0xA)
    387 #define CODEC_F1C_DEVICE_PHONE                 (0xB)
    388 #define CODEC_F1C_DEVICE_SPDIF_IN              (0xC)
    389 #define CODEC_F1C_DEVICE_RESERVED              (0xE)
    390 #define CODEC_F1C_DEVICE_OTHER                 (0xF)
    391 
    392 /* Configuration's Connection type */
    393 #define CODEC_F1C_CONNECTION_TYPE_MASK         (0xF)
    394 #define CODEC_F1C_CONNECTION_TYPE_SHIFT        (16)
    395 
    396 #define CODEC_F1C_CONNECTION_TYPE_UNKNOWN               (0)
    397 #define CODEC_F1C_CONNECTION_TYPE_1_8INCHES             (0x1)
    398 #define CODEC_F1C_CONNECTION_TYPE_1_4INCHES             (0x2)
    399 #define CODEC_F1C_CONNECTION_TYPE_ATAPI                 (0x3)
    400 #define CODEC_F1C_CONNECTION_TYPE_RCA                   (0x4)
    401 #define CODEC_F1C_CONNECTION_TYPE_OPTICAL               (0x5)
    402 #define CODEC_F1C_CONNECTION_TYPE_OTHER_DIGITAL         (0x6)
    403 #define CODEC_F1C_CONNECTION_TYPE_ANALOG                (0x7)
    404 #define CODEC_F1C_CONNECTION_TYPE_DIN                   (0x8)
    405 #define CODEC_F1C_CONNECTION_TYPE_XLR                   (0x9)
    406 #define CODEC_F1C_CONNECTION_TYPE_RJ_11                 (0xA)
    407 #define CODEC_F1C_CONNECTION_TYPE_COMBO                 (0xB)
    408 #define CODEC_F1C_CONNECTION_TYPE_OTHER                 (0xF)
     408#define CODEC_F1C_LOCATION_NA                              (0)
     409#define CODEC_F1C_LOCATION_REAR                            (0x1)
     410#define CODEC_F1C_LOCATION_FRONT                           (0x2)
     411#define CODEC_F1C_LOCATION_LEFT                            (0x3)
     412#define CODEC_F1C_LOCATION_RIGTH                           (0x4)
     413#define CODEC_F1C_LOCATION_TOP                             (0x5)
     414#define CODEC_F1C_LOCATION_BOTTOM                          (0x6)
     415#define CODEC_F1C_LOCATION_SPECIAL_0                       (0x7)
     416#define CODEC_F1C_LOCATION_SPECIAL_1                       (0x8)
     417#define CODEC_F1C_LOCATION_SPECIAL_2                       (0x9)
     418
     419/* Configuration default: Device type */
     420#define CODEC_F1C_DEVICE_MASK                              (0xF)
     421#define CODEC_F1C_DEVICE_SHIFT                             (20)
     422#define CODEC_F1C_DEVICE_LINE_OUT                          (0)
     423#define CODEC_F1C_DEVICE_SPEAKER                           (0x1)
     424#define CODEC_F1C_DEVICE_HP                                (0x2)
     425#define CODEC_F1C_DEVICE_CD                                (0x3)
     426#define CODEC_F1C_DEVICE_SPDIF_OUT                         (0x4)
     427#define CODEC_F1C_DEVICE_DIGITAL_OTHER_OUT                 (0x5)
     428#define CODEC_F1C_DEVICE_MODEM_LINE_SIDE                   (0x6)
     429#define CODEC_F1C_DEVICE_MODEM_HANDSET_SIDE                (0x7)
     430#define CODEC_F1C_DEVICE_LINE_IN                           (0x8)
     431#define CODEC_F1C_DEVICE_AUX                               (0x9)
     432#define CODEC_F1C_DEVICE_MIC                               (0xA)
     433#define CODEC_F1C_DEVICE_PHONE                             (0xB)
     434#define CODEC_F1C_DEVICE_SPDIF_IN                          (0xC)
     435#define CODEC_F1C_DEVICE_RESERVED                          (0xE)
     436#define CODEC_F1C_DEVICE_OTHER                             (0xF)
     437
     438/* Configuration default: Connection type */
     439#define CODEC_F1C_CONNECTION_TYPE_MASK                     (0xF)
     440#define CODEC_F1C_CONNECTION_TYPE_SHIFT                    (16)
     441
     442#define CODEC_F1C_CONNECTION_TYPE_UNKNOWN                  (0)
     443#define CODEC_F1C_CONNECTION_TYPE_1_8INCHES                (0x1)
     444#define CODEC_F1C_CONNECTION_TYPE_1_4INCHES                (0x2)
     445#define CODEC_F1C_CONNECTION_TYPE_ATAPI                    (0x3)
     446#define CODEC_F1C_CONNECTION_TYPE_RCA                      (0x4)
     447#define CODEC_F1C_CONNECTION_TYPE_OPTICAL                  (0x5)
     448#define CODEC_F1C_CONNECTION_TYPE_OTHER_DIGITAL            (0x6)
     449#define CODEC_F1C_CONNECTION_TYPE_ANALOG                   (0x7)
     450#define CODEC_F1C_CONNECTION_TYPE_DIN                      (0x8)
     451#define CODEC_F1C_CONNECTION_TYPE_XLR                      (0x9)
     452#define CODEC_F1C_CONNECTION_TYPE_RJ_11                    (0xA)
     453#define CODEC_F1C_CONNECTION_TYPE_COMBO                    (0xB)
     454#define CODEC_F1C_CONNECTION_TYPE_OTHER                    (0xF)
    409455
    410456/* Configuration's color */
    411 #define CODEC_F1C_COLOR_MASK                  (0xF)
    412 #define CODEC_F1C_COLOR_SHIFT                 (12)
    413 #define CODEC_F1C_COLOR_UNKNOWN               (0)
    414 #define CODEC_F1C_COLOR_BLACK                 (0x1)
    415 #define CODEC_F1C_COLOR_GREY                  (0x2)
    416 #define CODEC_F1C_COLOR_BLUE                  (0x3)
    417 #define CODEC_F1C_COLOR_GREEN                 (0x4)
    418 #define CODEC_F1C_COLOR_RED                   (0x5)
    419 #define CODEC_F1C_COLOR_ORANGE                (0x6)
    420 #define CODEC_F1C_COLOR_YELLOW                (0x7)
    421 #define CODEC_F1C_COLOR_PURPLE                (0x8)
    422 #define CODEC_F1C_COLOR_PINK                  (0x9)
    423 #define CODEC_F1C_COLOR_RESERVED_0            (0xA)
    424 #define CODEC_F1C_COLOR_RESERVED_1            (0xB)
    425 #define CODEC_F1C_COLOR_RESERVED_2            (0xC)
    426 #define CODEC_F1C_COLOR_RESERVED_3            (0xD)
    427 #define CODEC_F1C_COLOR_WHITE                 (0xE)
    428 #define CODEC_F1C_COLOR_OTHER                 (0xF)
     457#define CODEC_F1C_COLOR_MASK                               (0xF)
     458#define CODEC_F1C_COLOR_SHIFT                              (12)
     459#define CODEC_F1C_COLOR_UNKNOWN                            (0)
     460#define CODEC_F1C_COLOR_BLACK                              (0x1)
     461#define CODEC_F1C_COLOR_GREY                               (0x2)
     462#define CODEC_F1C_COLOR_BLUE                               (0x3)
     463#define CODEC_F1C_COLOR_GREEN                              (0x4)
     464#define CODEC_F1C_COLOR_RED                                (0x5)
     465#define CODEC_F1C_COLOR_ORANGE                             (0x6)
     466#define CODEC_F1C_COLOR_YELLOW                             (0x7)
     467#define CODEC_F1C_COLOR_PURPLE                             (0x8)
     468#define CODEC_F1C_COLOR_PINK                               (0x9)
     469#define CODEC_F1C_COLOR_RESERVED_0                         (0xA)
     470#define CODEC_F1C_COLOR_RESERVED_1                         (0xB)
     471#define CODEC_F1C_COLOR_RESERVED_2                         (0xC)
     472#define CODEC_F1C_COLOR_RESERVED_3                         (0xD)
     473#define CODEC_F1C_COLOR_WHITE                              (0xE)
     474#define CODEC_F1C_COLOR_OTHER                              (0xF)
    429475
    430476/* Configuration's misc */
    431 #define CODEC_F1C_MISC_MASK                  (0xF)
    432 #define CODEC_F1C_MISC_SHIFT                 (8)
    433 #define CODEC_F1C_MISC_JACK_DETECT           (0)
    434 #define CODEC_F1C_MISC_RESERVED_0            (1)
    435 #define CODEC_F1C_MISC_RESERVED_1            (2)
    436 #define CODEC_F1C_MISC_RESERVED_2            (3)
    437 
    438 /* Configuration's association */
    439 #define CODEC_F1C_ASSOCIATION_MASK                  (0xF)
    440 #define CODEC_F1C_ASSOCIATION_SHIFT                 (4)
    441 /* Connection's sequence */
    442 #define CODEC_F1C_SEQ_MASK                  (0xF)
    443 #define CODEC_F1C_SEQ_SHIFT                 (0)
     477#define CODEC_F1C_MISC_MASK                                (0xF)
     478#define CODEC_F1C_MISC_SHIFT                               (8)
     479#define CODEC_F1C_MISC_JACK_DETECT                         (0)
     480#define CODEC_F1C_MISC_RESERVED_0                          (1)
     481#define CODEC_F1C_MISC_RESERVED_1                          (2)
     482#define CODEC_F1C_MISC_RESERVED_2                          (3)
     483
     484/* Configuration default: Association */
     485#define CODEC_F1C_ASSOCIATION_MASK                         (0xF)
     486#define CODEC_F1C_ASSOCIATION_SHIFT                        (4)
     487
     488/* Reserved; don't use. */
     489#define CODEC_F1C_ASSOCIATION_INVALID                      0x0
     490#define CODEC_F1C_ASSOCIATION_GROUP_0                      0x1
     491#define CODEC_F1C_ASSOCIATION_GROUP_1                      0x2
     492#define CODEC_F1C_ASSOCIATION_GROUP_2                      0x3
     493#define CODEC_F1C_ASSOCIATION_GROUP_3                      0x4
     494#define CODEC_F1C_ASSOCIATION_GROUP_4                      0x5
     495#define CODEC_F1C_ASSOCIATION_GROUP_5                      0x6
     496#define CODEC_F1C_ASSOCIATION_GROUP_6                      0x7
     497#define CODEC_F1C_ASSOCIATION_GROUP_7                      0x8
     498#define CODEC_F1C_ASSOCIATION_GROUP_15                     0xF
     499
     500/* Configuration default: Association Sequence */
     501#define CODEC_F1C_SEQ_MASK                                 (0xF)
     502#define CODEC_F1C_SEQ_SHIFT                                (0)
    444503
    445504/* Implementation identification (7.3.3.30) */
     
    701760*   Global Variables                                                           *
    702761*******************************************************************************/
     762/* STAC9220 - Nodes IDs / names. */
     763#define STAC9220_NID_ROOT                                  0x0  /* Root node */
     764#define STAC9220_NID_AFG                                   0x1  /* Audio Configuration Group */
     765#define STAC9220_NID_DAC0                                  0x2  /* Out */
     766#define STAC9220_NID_DAC1                                  0x3  /* Out */
     767#define STAC9220_NID_DAC2                                  0x4  /* Out */
     768#define STAC9220_NID_DAC3                                  0x5  /* Out */
     769#define STAC9220_NID_ADC0                                  0x6  /* In */
     770#define STAC9220_NID_ADC1                                  0x7  /* In */
     771#define STAC9220_NID_SPDIF_OUT                             0x8  /* Out */
     772#define STAC9220_NID_SPDIF_IN                              0x9  /* In */
     773#define STAC9220_NID_PIN_HEADPHONE0                        0xA  /* In, Out */
     774#define STAC9220_NID_PIN_B                                 0xB  /* In, Out */
     775#define STAC9220_NID_PIN_C                                 0xC  /* In, Out */
     776#define STAC9220_NID_PIN_HEADPHONE1                        0xD  /* In, Out */
     777#define STAC9220_NID_PIN_E                                 0xE  /* In */
     778#define STAC9220_NID_PIN_F                                 0xF  /* In, Out */
     779#define STAC9220_NID_PIN_SPDIF_OUT                         0x10 /* Out */
     780#define STAC9220_NID_PIN_SPDIF_IN                          0x11 /* In */
     781#define STAC9220_NID_ADC0_MUX                              0x12 /* In */
     782#define STAC9220_NID_ADC1_MUX                              0x13 /* In */
     783#define STAC9220_NID_PCBEEP                                0x14 /* Out */
     784#define STAC9220_NID_PIN_CD                                0x15 /* In */
     785#define STAC9220_NID_VOL_KNOB                              0x16
     786#define STAC9220_NID_AMP_ADC0                              0x17 /* In */
     787#define STAC9220_NID_AMP_ADC1                              0x18 /* In */
     788/* STAC9221. */
     789#define STAC9221_NID_ADAT_OUT                              0x19 /* Out */
     790#define STAC9221_NID_I2S_OUT                               0x1A /* Out */
     791#define STAC9221_NID_PIN_I2S_OUT                           0x1B /* Out */
     792
     793#if 1
    703794/* STAC9220 - Referenced thru STAC9220WIDGET in the constructor below. */
    704795static uint8_t const g_abStac9220Ports[]      = { 0x0A, 0xB, 0xC, 0xD, 0xE, 0xF, 0};
     
    715806static uint8_t const g_abStac9220VolKnobs[]   = { 0x16, 0 };
    716807static uint8_t const g_abStac9220Reserveds[]  = { 0x09, 0x19, 0x1a, 0x1b, 0 };
    717 
     808#else /** @todo Enable this after 5.0 -- needs more testing first. */
     809static uint8_t const g_abStac9220Ports[]      = { STAC9220_NID_PIN_HEADPHONE0, STAC9220_NID_PIN_B, STAC9220_NID_PIN_C, STAC9220_NID_PIN_HEADPHONE1, STAC9220_NID_PIN_E, STAC9220_NID_PIN_F, 0};
     810static uint8_t const g_abStac9220Dacs[]       = { STAC9220_NID_DAC0, STAC9220_NID_DAC1, STAC9220_NID_DAC2, STAC9220_NID_DAC3, 0};
     811static uint8_t const g_abStac9220Adcs[]       = { STAC9220_NID_ADC0, STAC9220_NID_ADC1, 0};
     812static uint8_t const g_abStac9220SpdifOuts[]  = { STAC9220_NID_SPDIF_OUT, 0 };
     813static uint8_t const g_abStac9220SpdifIns[]   = { STAC9220_NID_SPDIF_IN, 0 };
     814static uint8_t const g_abStac9220DigOutPins[] = { STAC9220_NID_PIN_SPDIF_OUT, 0 };
     815static uint8_t const g_abStac9220DigInPins[]  = { STAC9220_NID_PIN_SPDIF_IN, 0 };
     816static uint8_t const g_abStac9220AdcVols[]    = { STAC9220_NID_AMP_ADC0, STAC9220_NID_AMP_ADC1, 0};
     817static uint8_t const g_abStac9220AdcMuxs[]    = { STAC9220_NID_ADC0_MUX, STAC9220_NID_ADC1_MUX, 0};
     818static uint8_t const g_abStac9220Pcbeeps[]    = { STAC9220_NID_PCBEEP, 0 };
     819static uint8_t const g_abStac9220Cds[]        = { STAC9220_NID_PIN_CD, 0 };
     820static uint8_t const g_abStac9220VolKnobs[]   = { STAC9220_NID_VOL_KNOB, 0 };
     821/* STAC 9221. */
     822/** @todo Is STAC9220_NID_SPDIF_IN really correct for reserved nodes? */
     823+static uint8_t const g_abStac9220Reserveds[]  = { STAC9220_NID_SPDIF_IN, STAC9221_NID_ADAT_OUT, STAC9221_NID_I2S_OUT, STAC9221_NID_PIN_I2S_OUT, 0 };
     824#endif
    718825
    719826/** SSM description of a CODECNODE. */
     
    11031210    unconst(pThis->cTotalNodes) = 0x1C;
    11041211    pThis->pfnCodecNodeReset = stac9220ResetNode;
    1105     pThis->pfnCodecDbgListNodes = stac9220DbgNodes;
     1212    pThis->pfnDbgListNodes  = stac9220DbgNodes;
    11061213    pThis->u16VendorId = 0x8384;
    11071214    pThis->u16DeviceId = 0x7680;
     
    22302337};
    22312338
     2339#ifdef DEBUG
     2340typedef struct CODECDBGINFO
     2341{
     2342    /** DBGF info helpers. */
     2343    PCDBGFINFOHLP pHlp;
     2344    /** Current recursion level. */
     2345    uint8_t uLevel;
     2346    /** Pointer to codec state. */
     2347    PHDACODEC pThis;
     2348
     2349} CODECDBGINFO, *PCODECDBGINFO;
     2350
     2351#define CODECDBG_INDENT   pInfo->uLevel++;
     2352#define CODECDBG_UNINDENT if (pInfo->uLevel) pInfo->uLevel--;
     2353
     2354#define CODECDBG_PRINT(x, ...)  pInfo->pHlp->pfnPrintf(pInfo->pHlp, x);
     2355#define CODECDBG_PRINTI(x, ...) codecDbgPrintf(pInfo, x);
     2356
     2357static void codecDbgPrintfIndentV(PCODECDBGINFO pInfo, uint16_t uIndent, const char *pszFormat, va_list va)
     2358{
     2359    char *pszValueFormat;
     2360    if (RTStrAPrintfV(&pszValueFormat, pszFormat, va))
     2361    {
     2362        pInfo->pHlp->pfnPrintf(pInfo->pHlp, "%*s%s", uIndent, "", pszValueFormat);
     2363        RTStrFree(pszValueFormat);
     2364    }
     2365}
     2366
     2367static void codecDbgPrintf(PCODECDBGINFO pInfo, const char *pszFormat, ...)
     2368{
     2369    va_list va;
     2370    va_start(va, pszFormat);
     2371    codecDbgPrintfIndentV(pInfo, pInfo->uLevel * 4, pszFormat, va);
     2372    va_end(va);
     2373}
     2374
     2375/* Power state */
     2376static void codecDbgPrintNodeRegF05(PCODECDBGINFO pInfo, uint32_t u32Reg)
     2377{
     2378    codecDbgPrintf(pInfo, "Power (F05): fReset=%RTbool, fStopOk=%RTbool, Set=%RU8, Act=%RU8\n",
     2379                   CODEC_F05_IS_RESET(u32Reg), CODEC_F05_IS_STOPOK(u32Reg), CODEC_F05_SET(u32Reg), CODEC_F05_ACT(u32Reg));
     2380}
     2381
     2382static void codecDbgPrintNodeRegA(PCODECDBGINFO pInfo, uint32_t u32Reg)
     2383{
     2384    codecDbgPrintf(pInfo, "RegA: %x\n", u32Reg);
     2385}
     2386
     2387static void codecDbgPrintNodeRegF00(PCODECDBGINFO pInfo, uint32_t *paReg00)
     2388{
     2389    codecDbgPrintf(pInfo, "Parameters (F00):\n");
     2390
     2391    CODECDBG_INDENT
     2392        codecDbgPrintf(pInfo, "Amplifier Caps:\n");
     2393        uint32_t uReg = paReg00[0xD];
     2394        CODECDBG_INDENT
     2395            codecDbgPrintf(pInfo, "Input Steps=%02RU8, StepSize=%02RU8, StepOff=%02RU8, fCanMute=%RTbool\n",
     2396                           CODEC_F00_0D_NUM_STEPS(uReg),
     2397                           CODEC_F00_0D_STEP_SIZE(uReg),
     2398                           CODEC_F00_0D_OFFSET(uReg),
     2399                           RT_BOOL(CODEC_F00_0D_IS_CAP_MUTE(uReg)));
     2400
     2401            uReg = paReg00[0x12];
     2402            codecDbgPrintf(pInfo, "Output Steps=%02RU8, StepSize=%02RU8, StepOff=%02RU8, fCanMute=%RTbool\n",
     2403                           CODEC_F00_12_NUM_STEPS(uReg),
     2404                           CODEC_F00_12_STEP_SIZE(uReg),
     2405                           CODEC_F00_12_OFFSET(uReg),
     2406                           RT_BOOL(CODEC_F00_0D_IS_CAP_MUTE(uReg)));
     2407        CODECDBG_UNINDENT
     2408    CODECDBG_UNINDENT
     2409}
     2410
     2411static void codecDbgPrintNodeAmp(PCODECDBGINFO pInfo, uint32_t *paReg, uint8_t uIdx, uint8_t uDir)
     2412{
     2413#define CODECDBG_AMP(reg, chan) \
     2414    codecDbgPrintf(pInfo, "Amp %RU8 %s %s: In=%RTbool, Out=%RTbool, Left=%RTbool, Right=%RTbool, Idx=%RU8, fMute=%RTbool, uGain=%RU8\n", \
     2415                   uIdx, chan, uDir == AMPLIFIER_IN ? "In" : "Out", \
     2416                   RT_BOOL(CODEC_SET_AMP_IS_IN_DIRECTION(reg)), RT_BOOL(CODEC_SET_AMP_IS_OUT_DIRECTION(reg)), \
     2417                   RT_BOOL(CODEC_SET_AMP_IS_LEFT_SIDE(reg)), RT_BOOL(CODEC_SET_AMP_IS_RIGHT_SIDE(reg)), \
     2418                   CODEC_SET_AMP_INDEX(reg), RT_BOOL(CODEC_SET_AMP_MUTE(reg)), CODEC_SET_AMP_GAIN(reg));
     2419
     2420    uint32_t regAmp = AMPLIFIER_REGISTER(paReg, uDir, AMPLIFIER_LEFT, uIdx);
     2421    CODECDBG_AMP(regAmp, "Left");
     2422    regAmp = AMPLIFIER_REGISTER(paReg, uDir, AMPLIFIER_RIGHT, uIdx);
     2423    CODECDBG_AMP(regAmp, "Right");
     2424
     2425#undef CODECDBG_AMP
     2426}
     2427
     2428static void codecDbgPrintNodeConnections(PCODECDBGINFO pInfo, PCODECNODE pNode)
     2429{
     2430    if (pNode->node.au32F00_param[0xE] == 0) /* Directly connected to HDA link. */
     2431    {
     2432         codecDbgPrintf(pInfo, "[HDA LINK]\n");
     2433         return;
     2434    }
     2435}
     2436
     2437static void codecDbgPrintNode(PCODECDBGINFO pInfo, PCODECNODE pNode)
     2438{
     2439    codecDbgPrintf(pInfo, "Node 0x%02x (%02RU8): ", pNode->node.id, pNode->node.id);
     2440
     2441    if (pNode->node.id == STAC9220_NID_ROOT)
     2442    {
     2443        CODECDBG_PRINT("ROOT\n")
     2444    }
     2445    else if (pNode->node.id == STAC9220_NID_AFG)
     2446    {
     2447        CODECDBG_PRINT("AFG\n")
     2448        CODECDBG_INDENT
     2449            codecDbgPrintNodeRegF00(pInfo, pNode->node.au32F00_param);
     2450            codecDbgPrintNodeRegF05(pInfo, pNode->afg.u32F05_param);
     2451        CODECDBG_UNINDENT
     2452    }
     2453    else if (hdaCodecIsPortNode(pInfo->pThis, pNode->node.id))
     2454    {
     2455        CODECDBG_PRINT("PORT\n")
     2456    }
     2457    else if (hdaCodecIsDacNode(pInfo->pThis, pNode->node.id))
     2458    {
     2459        CODECDBG_PRINT("DAC\n")
     2460        CODECDBG_INDENT
     2461            codecDbgPrintNodeRegF00(pInfo, pNode->node.au32F00_param);
     2462            codecDbgPrintNodeRegF05(pInfo, pNode->dac.u32F05_param);
     2463            codecDbgPrintNodeRegA  (pInfo, pNode->dac.u32A_param);
     2464            codecDbgPrintNodeAmp   (pInfo, pNode->dac.B_params, 0, AMPLIFIER_OUT);
     2465        CODECDBG_UNINDENT
     2466    }
     2467    else if (hdaCodecIsAdcVolNode(pInfo->pThis, pNode->node.id))
     2468    {
     2469        CODECDBG_PRINT("ADC VOLUME\n")
     2470        CODECDBG_INDENT
     2471            codecDbgPrintNodeRegF00(pInfo, pNode->node.au32F00_param);
     2472            codecDbgPrintNodeRegA  (pInfo, pNode->adcvol.u32A_params);
     2473            codecDbgPrintNodeAmp   (pInfo, pNode->adcvol.B_params, 0, AMPLIFIER_IN);
     2474        CODECDBG_UNINDENT
     2475    }
     2476    else if (hdaCodecIsAdcNode(pInfo->pThis, pNode->node.id))
     2477    {
     2478        CODECDBG_PRINT("ADC\n")
     2479        CODECDBG_INDENT
     2480            codecDbgPrintNodeRegF00(pInfo, pNode->node.au32F00_param);
     2481            codecDbgPrintNodeRegF05(pInfo, pNode->adc.u32F05_param);
     2482            codecDbgPrintNodeRegA  (pInfo, pNode->adc.u32A_param);
     2483            codecDbgPrintNodeAmp   (pInfo, pNode->adc.B_params, 0, AMPLIFIER_IN);
     2484        CODECDBG_UNINDENT
     2485    }
     2486    else if (hdaCodecIsAdcMuxNode(pInfo->pThis, pNode->node.id))
     2487    {
     2488        CODECDBG_PRINT("ADC MUX\n")
     2489        CODECDBG_INDENT
     2490            codecDbgPrintNodeRegF00(pInfo, pNode->node.au32F00_param);
     2491            codecDbgPrintNodeRegA  (pInfo, pNode->adcmux.u32A_param);
     2492            codecDbgPrintNodeAmp   (pInfo, pNode->adcmux.B_params, 0, AMPLIFIER_IN);
     2493        CODECDBG_UNINDENT
     2494    }
     2495    else if (hdaCodecIsPcbeepNode(pInfo->pThis, pNode->node.id))
     2496    {
     2497        CODECDBG_PRINT("PC BEEP\n")
     2498    }
     2499    else if (hdaCodecIsSpdifOutNode(pInfo->pThis, pNode->node.id))
     2500    {
     2501        CODECDBG_PRINT("SPDIF OUT\n")
     2502    }
     2503    else if (hdaCodecIsSpdifInNode(pInfo->pThis, pNode->node.id))
     2504    {
     2505        CODECDBG_PRINT("SPDIF IN\n")
     2506    }
     2507    else if (hdaCodecIsDigInPinNode(pInfo->pThis, pNode->node.id))
     2508    {
     2509        CODECDBG_PRINT("DIGITAL IN PIN\n")
     2510    }
     2511    else if (hdaCodecIsDigOutPinNode(pInfo->pThis, pNode->node.id))
     2512    {
     2513        CODECDBG_PRINT("DIGITAL OUT PIN\n")
     2514    }
     2515    else if (hdaCodecIsCdNode(pInfo->pThis, pNode->node.id))
     2516    {
     2517        CODECDBG_PRINT("CD\n")
     2518    }
     2519    else if (hdaCodecIsVolKnobNode(pInfo->pThis, pNode->node.id))
     2520    {
     2521        CODECDBG_PRINT("VOLUME KNOB\n")
     2522    }
     2523    else if (hdaCodecIsReservedNode(pInfo->pThis, pNode->node.id))
     2524    {
     2525        CODECDBG_PRINT("RESERVED\n")
     2526    }
     2527    else
     2528        CODECDBG_PRINT("UNKNOWN TYPE 0x%x\n", pNode->node.id);
     2529}
     2530
     2531static DECLCALLBACK(void) codecDbgListNodes(PHDACODEC pThis, PCDBGFINFOHLP pHlp, const char *pszArgs)
     2532{
     2533    pHlp->pfnPrintf(pHlp, "HDA LINK\n");
     2534
     2535    CODECDBGINFO dbgInfo;
     2536    dbgInfo.pHlp   = pHlp;
     2537    dbgInfo.pThis  = pThis;
     2538    dbgInfo.uLevel = 0;
     2539
     2540    PCODECDBGINFO pInfo = &dbgInfo;
     2541
     2542    CODECDBG_INDENT
     2543        for (uint8_t i = 0; i < pThis->cTotalNodes; i++)
     2544        {
     2545            PCODECNODE pNode = &pThis->paNodes[i];
     2546            if (pNode->node.au32F00_param[0xE] == 0) /* Start with all nodes connected directly to the HDA (Azalia) link. */
     2547                codecDbgPrintNode(&dbgInfo, pNode);
     2548        }
     2549    CODECDBG_UNINDENT
     2550}
     2551
     2552static DECLCALLBACK(void) codecDbgSelector(PHDACODEC pThis, PCDBGFINFOHLP pHlp, const char *pszArgs)
     2553{
     2554
     2555}
     2556#endif
     2557
    22322558static int codecLookup(PHDACODEC pThis, uint32_t cmd, PPFNHDACODECVERBPROCESSOR pfn)
    22332559{
     
    23972723    pThis->paVerbs   = &g_aCodecVerbs[0];
    23982724    pThis->cVerbs    = RT_ELEMENTS(g_aCodecVerbs);
    2399     pThis->pfnLookup = codecLookup;
     2725    pThis->pfnLookup       = codecLookup;
     2726#ifdef DEBUG
     2727    pThis->pfnDbgSelector  = codecDbgSelector;
     2728    pThis->pfnDbgListNodes = codecDbgListNodes;
     2729#endif
    24002730    int rc = stac9220Construct(pThis);
    24012731    AssertRC(rc);
  • trunk/src/VBox/Devices/Audio/DevIchHdaCodec.h

    r56292 r56727  
    110110    const uint8_t           u8DacLineOut;
    111111#endif
    112     /* Callbacks to the HDA controller, mostly used for multiplexing to the various host backends. */
     112    /** Callbacks to the HDA controller, mostly used for multiplexing to the various host backends. */
    113113    DECLR3CALLBACKMEMBER(void, pfnCloseIn, (PHDASTATE pThis, PDMAUDIORECSOURCE enmRecSource));
    114114    DECLR3CALLBACKMEMBER(void, pfnCloseOut, (PHDASTATE pThis));
     
    116116    DECLR3CALLBACKMEMBER(int, pfnOpenOut, (PHDASTATE pThis, const char *pszName, PPDMAUDIOSTREAMCFG pCfg));
    117117    DECLR3CALLBACKMEMBER(int, pfnSetVolume, (PHDASTATE pThis, ENMSOUNDSOURCE enmSource, bool fMute, uint8_t uVolLeft, uint8_t uVolRight));
    118     /* Callbacks by codec implementation. */
     118    /** Callbacks by codec implementation. */
    119119    DECLR3CALLBACKMEMBER(int, pfnLookup, (PHDACODEC pThis, uint32_t verb, PPFNHDACODECVERBPROCESSOR));
    120120    DECLR3CALLBACKMEMBER(int, pfnReset, (PHDACODEC pThis));
    121121    DECLR3CALLBACKMEMBER(int, pfnCodecNodeReset, (PHDACODEC pThis, uint8_t, PCODECNODE));
    122     /* Callbacks by codec implementation to answer debugger requests. */
    123     DECLR3CALLBACKMEMBER(void, pfnCodecDbgListNodes, (PHDACODEC pThis, PCDBGFINFOHLP pHlp, const char *pszArgs));
    124     DECLR3CALLBACKMEMBER(void, pfnCodecDbgSelector, (PHDACODEC pThis, PCDBGFINFOHLP pHlp, const char *pszArgs));
     122    /** These callbacks are set by codec implementation to answer debugger requests. */
     123    DECLR3CALLBACKMEMBER(void, pfnDbgListNodes, (PHDACODEC pThis, PCDBGFINFOHLP pHlp, const char *pszArgs));
     124    DECLR3CALLBACKMEMBER(void, pfnDbgSelector, (PHDACODEC pThis, PCDBGFINFOHLP pHlp, const char *pszArgs));
    125125} CODECState;
    126126
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette