VirtualBox

Changeset 33705 in vbox


Ignore:
Timestamp:
Nov 2, 2010 6:33:41 PM (14 years ago)
Author:
vboxsync
Message:

Audio/HDA: makes default configuration (verb: F1C) more clear (for ports of STAC9220).

File:
1 edited

Legend:

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

    r33681 r33705  
    7373#define CODEC_SET_AMP_IS_RIGHT_SIDE(cmd)     (((cmd) & CODEC_VERB_SET_AMP_RIGHT_SIDE) != 0)
    7474#define CODEC_SET_AMP_INDEX(cmd)             (((cmd) & CODEC_VERB_SET_AMP_INDEX) >> 7)
     75
     76/* HDA spec 7.3.3.31 defines layout of configuration registers/verbs (0xF1C) */
     77/* Configuration's port connection */
     78#define CODEC_DEFAULT_CONF_PORT_MASK    (0x3)
     79#define CODEC_DEFAULT_CONF_PORT_SHIFT   (30)
     80
     81#define CODEC_DEFAULT_CONF_PORT_COMPLEX (0x0)
     82#define CODEC_DEFAULT_CONF_PORT_NO_PHYS (0x1)
     83#define CODEC_DEFAULT_CONF_PORT_FIXED   (0x2)
     84#define CODEC_DEFAULT_CONF_BOTH         (0x3)
     85
     86/* Configuration's location */
     87#define CODEC_DEFAULT_CONF_LOCATION_MASK  (0x3F)
     88#define CODEC_DEFAULT_CONF_LOCATION_SHIFT (24)
     89/* [4:5] bits of location region means chassis attachment */
     90#define CODEC_DEFAULT_CONF_LOCATION_PRIMARY_CHASSIS     (0)
     91#define CODEC_DEFAULT_CONF_LOCATION_INTERNAL            RT_BIT(4)
     92#define CODEC_DEFAULT_CONF_LOCATION_SECONDRARY_CHASSIS  RT_BIT(5)
     93#define CODEC_DEFAULT_CONF_LOCATION_OTHER               (RT_BIT(5))
     94
     95/* [0:3] bits of location region means geometry location attachment */
     96#define CODEC_DEFAULT_CONF_LOCATION_NA                  (0)
     97#define CODEC_DEFAULT_CONF_LOCATION_REAR                (0x1)
     98#define CODEC_DEFAULT_CONF_LOCATION_FRONT               (0x2)
     99#define CODEC_DEFAULT_CONF_LOCATION_LEFT                (0x3)
     100#define CODEC_DEFAULT_CONF_LOCATION_RIGTH               (0x4)
     101#define CODEC_DEFAULT_CONF_LOCATION_TOP                 (0x5)
     102#define CODEC_DEFAULT_CONF_LOCATION_BOTTOM              (0x6)
     103#define CODEC_DEFAULT_CONF_LOCATION_SPECIAL_0           (0x7)
     104#define CODEC_DEFAULT_CONF_LOCATION_SPECIAL_1           (0x8)
     105#define CODEC_DEFAULT_CONF_LOCATION_SPECIAL_3           (0x9)
     106
     107/* Configuration's devices */
     108#define CODEC_DEFAULT_CONF_DEVICE_MASK                  (0xF)
     109#define CODEC_DEFAULT_CONF_DEVICE_SHIFT                 (20)
     110#define CODEC_DEFAULT_CONF_DEVICE_LINE_OUT              (0)
     111#define CODEC_DEFAULT_CONF_DEVICE_SPEAKER               (0x1)
     112#define CODEC_DEFAULT_CONF_DEVICE_HP                    (0x2)
     113#define CODEC_DEFAULT_CONF_DEVICE_CD                    (0x3)
     114#define CODEC_DEFAULT_CONF_DEVICE_SPDIF_OUT             (0x4)
     115#define CODEC_DEFAULT_CONF_DEVICE_DIGITAL_OTHER_OUT     (0x5)
     116#define CODEC_DEFAULT_CONF_DEVICE_MODEM_LINE_SIDE       (0x6)
     117#define CODEC_DEFAULT_CONF_DEVICE_MODEM_HANDSET_SIDE    (0x7)
     118#define CODEC_DEFAULT_CONF_DEVICE_LINE_IN               (0x8)
     119#define CODEC_DEFAULT_CONF_DEVICE_AUX                   (0x9)
     120#define CODEC_DEFAULT_CONF_DEVICE_MIC                   (0xA)
     121#define CODEC_DEFAULT_CONF_DEVICE_PHONE                 (0xB)
     122#define CODEC_DEFAULT_CONF_DEVICE_SPDIF_IN              (0xC)
     123#define CODEC_DEFAULT_CONF_DEVICE_RESERVED              (0xE)
     124#define CODEC_DEFAULT_CONF_DEVICE_OTHER                 (0xF)
     125
     126/* Configuration's Connection type */
     127#define CODEC_DEFAULT_CONF_CONNECTION_TYPE_MASK         (0xF)
     128#define CODEC_DEFAULT_CONF_CONNECTION_TYPE_SHIFT        (16)
     129
     130#define CODEC_DEFAULT_CONF_CONNECTION_TYPE_UNKNOWN               (0)
     131#define CODEC_DEFAULT_CONF_CONNECTION_TYPE_1_8INCHES             (0x1)
     132#define CODEC_DEFAULT_CONF_CONNECTION_TYPE_1_4INCHES             (0x2)
     133#define CODEC_DEFAULT_CONF_CONNECTION_TYPE_ATAPI                 (0x3)
     134#define CODEC_DEFAULT_CONF_CONNECTION_TYPE_RCA                   (0x4)
     135#define CODEC_DEFAULT_CONF_CONNECTION_TYPE_OPTICAL               (0x5)
     136#define CODEC_DEFAULT_CONF_CONNECTION_TYPE_OTHER_DIGITAL         (0x6)
     137#define CODEC_DEFAULT_CONF_CONNECTION_TYPE_ANALOG                (0x7)
     138#define CODEC_DEFAULT_CONF_CONNECTION_TYPE_DIN                   (0x8)
     139#define CODEC_DEFAULT_CONF_CONNECTION_TYPE_XLR                   (0x9)
     140#define CODEC_DEFAULT_CONF_CONNECTION_TYPE_RJ_11                 (0xA)
     141#define CODEC_DEFAULT_CONF_CONNECTION_TYPE_COMBO                 (0xB)
     142#define CODEC_DEFAULT_CONF_CONNECTION_TYPE_OTHER                 (0xF)
     143
     144/* Configuration's color */
     145#define CODEC_DEFAULT_CONF_COLOR_MASK                  (0xF)
     146#define CODEC_DEFAULT_CONF_COLOR_SHIFT                 (12)
     147#define CODEC_DEFAULT_CONF_COLOR_UNKNOWN               (0)
     148#define CODEC_DEFAULT_CONF_COLOR_BLACK                 (0x1)
     149#define CODEC_DEFAULT_CONF_COLOR_GREY                  (0x2)
     150#define CODEC_DEFAULT_CONF_COLOR_BLUE                  (0x3)
     151#define CODEC_DEFAULT_CONF_COLOR_GREEN                 (0x4)
     152#define CODEC_DEFAULT_CONF_COLOR_RED                   (0x5)
     153#define CODEC_DEFAULT_CONF_COLOR_ORANGE                (0x6)
     154#define CODEC_DEFAULT_CONF_COLOR_YELLOW                (0x7)
     155#define CODEC_DEFAULT_CONF_COLOR_PURPLE                (0x8)
     156#define CODEC_DEFAULT_CONF_COLOR_PINK                  (0x9)
     157#define CODEC_DEFAULT_CONF_COLOR_RESERVED_0            (0xA)
     158#define CODEC_DEFAULT_CONF_COLOR_RESERVED_1            (0xB)
     159#define CODEC_DEFAULT_CONF_COLOR_RESERVED_2            (0xC)
     160#define CODEC_DEFAULT_CONF_COLOR_RESERVED_3            (0xD)
     161#define CODEC_DEFAULT_CONF_COLOR_WHITE                 (0xE)
     162#define CODEC_DEFAULT_CONF_COLOR_OTHER                 (0xF)
     163
     164/* Configuration's misc */
     165#define CODEC_DEFAULT_CONF_MISC_MASK                  (0xF)
     166#define CODEC_DEFAULT_CONF_MISC_SHIFT                 (8)
     167#define CODEC_DEFAULT_CONF_MISC_JACK_DETECT           RT_BIT(0)
     168#define CODEC_DEFAULT_CONF_MISC_RESERVED_0            RT_BIT(1)
     169#define CODEC_DEFAULT_CONF_MISC_RESERVED_1            RT_BIT(2)
     170#define CODEC_DEFAULT_CONF_MISC_RESERVED_2            RT_BIT(3)
     171
     172/* Configuration's association */
     173#define CODEC_DEFAULT_CONF_ASSOCIATION_MASK                  (0xF)
     174#define CODEC_DEFAULT_CONF_ASSOCIATION_SHIFT                 (4)
     175/* Connection's sequence */
     176#define CODEC_DEFAULT_CONF_SEQ_MASK                  (0xF)
     177#define CODEC_DEFAULT_CONF_SEQ_SHIFT                 (0)
     178
     179/* macro definition helping in filling the configuration registers. */
     180#define CODEC_MAKE_U32_DEFAULT_CONF(port_connectivity, location, device, connection_type, color, misc, association, sequence)    \
     181    (  ((port_connectivity) << CODEC_DEFAULT_CONF_PORT_SHIFT)          \
     182     | ((location) << CODEC_DEFAULT_CONF_LOCATION_SHIFT)               \
     183     | ((device) << CODEC_DEFAULT_CONF_DEVICE_SHIFT)                   \
     184     | ((connection_type) << CODEC_DEFAULT_CONF_CONNECTION_TYPE_SHIFT) \
     185     | ((color) << CODEC_DEFAULT_CONF_COLOR_SHIFT)                     \
     186     | ((misc) << CODEC_DEFAULT_CONF_MISC_SHIFT)                       \
     187     | ((association) << CODEC_DEFAULT_CONF_ASSOCIATION_SHIFT)         \
     188     | ((sequence)))
    75189
    76190/* STAC9220 */
     
    215329            pNode->port.u32F08_param = 0;
    216330            if (!pState->fInReset)
    217                 pNode->port.u32F1c_param = RT_MAKE_U32_FROM_U8(0x20, 0x40, 0x21, 0x02);
     331                pNode->port.u32F1c_param = CODEC_MAKE_U32_DEFAULT_CONF(CODEC_DEFAULT_CONF_PORT_COMPLEX,
     332                                                                       CODEC_DEFAULT_CONF_LOCATION_FRONT,
     333                                                                       CODEC_DEFAULT_CONF_DEVICE_HP,
     334                                                                       CODEC_DEFAULT_CONF_CONNECTION_TYPE_1_8INCHES,
     335                                                                       CODEC_DEFAULT_CONF_COLOR_GREEN,
     336                                                                       CODEC_DEFAULT_CONF_MISC_JACK_DETECT,
     337                                                                       0x2, 0);//RT_MAKE_U32_FROM_U8(0x20, 0x40, 0x21, 0x02);
    218338            goto port_init;
    219339        case 0xB:
     
    223343            pNode->port.u32F07_param = RT_BIT(5);
    224344            if (!pState->fInReset)
    225                 pNode->port.u32F1c_param = RT_MAKE_U32_FROM_U8(0x11, 0x60, 0x11, 0x01);
     345                pNode->port.u32F1c_param = CODEC_MAKE_U32_DEFAULT_CONF(CODEC_DEFAULT_CONF_PORT_COMPLEX,
     346                                                                       CODEC_DEFAULT_CONF_LOCATION_INTERNAL|CODEC_DEFAULT_CONF_LOCATION_REAR,
     347                                                                       CODEC_DEFAULT_CONF_DEVICE_SPEAKER,
     348                                                                       CODEC_DEFAULT_CONF_CONNECTION_TYPE_1_8INCHES,
     349                                                                       CODEC_DEFAULT_CONF_COLOR_BLACK,
     350                                                                       CODEC_DEFAULT_CONF_MISC_JACK_DETECT,
     351                                                                       0x1, 0x1);//RT_MAKE_U32_FROM_U8(0x11, 0x60, 0x11, 0x01);
    226352            goto port_init;
    227353        case 0xC:
     
    231357            pNode->port.u32F07_param = RT_BIT(5);
    232358            if (!pState->fInReset)
    233                 pNode->port.u32F1c_param = RT_MAKE_U32_FROM_U8(0x10, 0x40, 0x11, 0x01);
     359                pNode->port.u32F1c_param = CODEC_MAKE_U32_DEFAULT_CONF(CODEC_DEFAULT_CONF_PORT_COMPLEX,
     360                                                                       CODEC_DEFAULT_CONF_LOCATION_REAR,
     361                                                                       CODEC_DEFAULT_CONF_DEVICE_SPEAKER,
     362                                                                       CODEC_DEFAULT_CONF_CONNECTION_TYPE_1_8INCHES,
     363                                                                       CODEC_DEFAULT_CONF_COLOR_GREEN,
     364                                                                       0x0, 0x1, 0x0);//RT_MAKE_U32_FROM_U8(0x10, 0x40, 0x11, 0x01);
    234365            goto port_init;
    235366        case 0xD:
     
    239370            pNode->node.au32F02_param[0] = 0x2;
    240371            if (!pState->fInReset)
    241                 pNode->port.u32F1c_param = RT_MAKE_U32_FROM_U8(0x50, 0x90, 0xA1, 0x02); /* Microphone */
     372                pNode->port.u32F1c_param = CODEC_MAKE_U32_DEFAULT_CONF(CODEC_DEFAULT_CONF_PORT_COMPLEX,
     373                                                                       CODEC_DEFAULT_CONF_LOCATION_FRONT,
     374                                                                       CODEC_DEFAULT_CONF_DEVICE_MIC,
     375                                                                       CODEC_DEFAULT_CONF_CONNECTION_TYPE_1_8INCHES,
     376                                                                       CODEC_DEFAULT_CONF_COLOR_PINK,
     377                                                                       0x0, 0x5, 0x0);//RT_MAKE_U32_FROM_U8(0x50, 0x90, 0xA1, 0x02); /* Microphone */
    242378        port_init:
    243379            pNode->port.u32F09_param = RT_BIT(31)|0x7fffffff;
     
    254390            pNode->port.u32F09_param = 0x7fffffff;
    255391            if (!pState->fInReset)
    256                 pNode->port.u32F1c_param = 0x01013040;  /* Line Out */
     392                pNode->port.u32F1c_param = CODEC_MAKE_U32_DEFAULT_CONF(CODEC_DEFAULT_CONF_PORT_COMPLEX,
     393                                                                       CODEC_DEFAULT_CONF_LOCATION_REAR,
     394                                                                       CODEC_DEFAULT_CONF_DEVICE_LINE_OUT,
     395                                                                       CODEC_DEFAULT_CONF_CONNECTION_TYPE_1_8INCHES,
     396                                                                       CODEC_DEFAULT_CONF_COLOR_BLUE,
     397                                                                       0x0, 0x4, 0x0);//0x01013040;  /* Line Out */
    257398            break;
    258399        case 0xF:
     
    264405            pNode->port.u32F07_param = 0x40;
    265406            if (!pState->fInReset)
    266                 pNode->port.u32F1c_param = RT_MAKE_U32_FROM_U8(0x12, 0x60, 0x11, 0x01);
     407                pNode->port.u32F1c_param = CODEC_MAKE_U32_DEFAULT_CONF(CODEC_DEFAULT_CONF_PORT_COMPLEX,
     408                                                                       CODEC_DEFAULT_CONF_LOCATION_REAR,
     409                                                                       CODEC_DEFAULT_CONF_DEVICE_SPEAKER,
     410                                                                       CODEC_DEFAULT_CONF_CONNECTION_TYPE_1_8INCHES,
     411                                                                       CODEC_DEFAULT_CONF_COLOR_ORANGE,
     412                                                                       0x0, 0x1, 0x2);//RT_MAKE_U32_FROM_U8(0x12, 0x60, 0x11, 0x01);
    267413            pNode->node.au32F02_param[0] = 0x5;
    268414            pNode->port.u32F09_param = 0x7fffffff;
     
    274420            pNode->node.au32F00_param[0xE] = 0x3;
    275421            pNode->digout.u32F01_param = 0;
    276             /* STAC9220 spec defines default connection list containing reserved nodes, that confuses some drivers. */
    277422            pNode->node.au32F02_param[0] = RT_MAKE_U32_FROM_U8(0x08, 0x17, 0x19, 0);
    278423            pNode->digout.u32F07_param = 0;
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