VirtualBox

Changeset 31190 in vbox for trunk/src/VBox/Devices/Audio


Ignore:
Timestamp:
Jul 29, 2010 7:38:02 AM (15 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
64182
Message:

Audio/HDA: ConSelect (verbID: F01/701).

File:
1 edited

Legend:

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

    r31188 r31190  
    9393#define STAC9220_IS_SPDIFOUT_CMD(cmd) (CODEC_NID((cmd)) == 0x8)
    9494
    95 #define STAC9220_IS_DIGPIN_CMD(cmd) (   \
    96        CODEC_NID((cmd)) == 0x10         \
    97     || CODEC_NID((cmd)) == 0x11)
     95#define STAC9220_IS_DIGINPIN_CMD(cmd) (CODEC_NID((cmd)) == 0x11)
     96#define STAC9220_IS_DIGOUTPIN_CMD(cmd) (CODEC_NID((cmd)) == 0x10)
    9897
    9998#define STAC9220_IS_CD_CMD(cmd) (CODEC_NID((cmd)) == 0x15)
     
    188187    return VINF_SUCCESS;
    189188}
     189
     190/* F01 */
     191static int codecGetConSelectCtrl(struct CODECState *pState, uint32_t cmd, uint64_t *pResp)
     192{
     193    Assert((CODEC_CAD(cmd) == pState->id));
     194    if (STAC9220_IS_ADCMUX_CMD(cmd))
     195        *pResp = pState->pNodes[CODEC_NID(cmd)].adcmux.u32F01_param;
     196    else if (STAC9220_IS_DIGOUTPIN_CMD(cmd))
     197        *pResp = pState->pNodes[CODEC_NID(cmd)].digout.u32F07_param;
     198    return VINF_SUCCESS;
     199}
     200
     201/* 701 */
     202static int codecSetConSelectCtrl(struct CODECState *pState, uint32_t cmd, uint64_t *pResp)
     203{
     204    uint32_t *pu32Reg = NULL;
     205    *pResp = 0;
     206    if (STAC9220_IS_ADCMUX_CMD(cmd))
     207        pu32Reg = &pState->pNodes[CODEC_NID(cmd)].adcmux.u32F01_param;
     208    else if (STAC9220_IS_DIGOUTPIN_CMD(cmd))
     209        pu32Reg = &pState->pNodes[CODEC_NID(cmd)].digout.u32F01_param;
     210    Assert((pu32Reg));
     211    if (!pu32Reg)
     212        return VINF_SUCCESS;
     213    *pu32Reg = (*pu32Reg) & ~CODEC_VERB_8BIT_DATA;
     214    *pu32Reg = (*pu32Reg) | (cmd & CODEC_VERB_8BIT_DATA);
     215    return VINF_SUCCESS;
     216}
     217
     218/* F07 */
    190219static int codecGetPinCtrl(struct CODECState *pState, uint32_t cmd, uint64_t *pResp)
    191220{
    192221    if (STAC9220_IS_PORT_CMD(cmd))
    193222        *pResp = pState->pNodes[CODEC_NID(cmd)].port.u32F07_param;
    194     else if (STAC9220_IS_DIGPIN_CMD(cmd))
     223    else if (STAC9220_IS_DIGOUTPIN_CMD(cmd))
     224        *pResp = pState->pNodes[CODEC_NID(cmd)].digout.u32F07_param;
     225    else if (STAC9220_IS_DIGINPIN_CMD(cmd))
    195226        *pResp = pState->pNodes[CODEC_NID(cmd)].digin.u32F07_param;
    196227    else if (STAC9220_IS_CD_CMD(cmd))
     
    201232}
    202233
     234/* 707 */
    203235static int codecSetPinCtrl(struct CODECState *pState, uint32_t cmd, uint64_t *pResp)
    204236{
     
    207239    if (STAC9220_IS_PORT_CMD(cmd))
    208240        pu32Reg = &pState->pNodes[CODEC_NID(cmd)].port.u32F07_param;
    209     else if (STAC9220_IS_DIGPIN_CMD(cmd))
     241    else if (STAC9220_IS_DIGINPIN_CMD(cmd))
    210242        pu32Reg = &pState->pNodes[CODEC_NID(cmd)].digin.u32F07_param;
     243    else if (STAC9220_IS_DIGOUTPIN_CMD(cmd))
     244        pu32Reg = &pState->pNodes[CODEC_NID(cmd)].digout.u32F07_param;
    211245    else if (STAC9220_IS_CD_CMD(cmd))
    212246        pu32Reg = &pState->pNodes[CODEC_NID(cmd)].cdnode.u32F07_param;
     
    219253}
    220254
     255/* F08 */
    221256static int codecGetUnsolicitedEnabled(struct CODECState *pState, uint32_t cmd, uint64_t *pResp)
    222257{
     
    224259    if (STAC9220_IS_PORT_CMD(cmd))
    225260        *pResp = pState->pNodes[CODEC_NID(cmd)].port.u32F08_param;
    226     else if (STAC9220_IS_DIGPIN_CMD(cmd))
     261    else if (STAC9220_IS_DIGINPIN_CMD(cmd))
    227262        *pResp = pState->pNodes[CODEC_NID(cmd)].digin.u32F08_param;
    228263    else if (STAC9220_IS_AFG_CMD(cmd))
     
    235270}
    236271
     272/* 708 */
    237273static int codecSetUnsolicitedEnabled(struct CODECState *pState, uint32_t cmd, uint64_t *pResp)
    238274{
     
    241277    if (STAC9220_IS_PORT_CMD(cmd))
    242278        pu32Reg = &pState->pNodes[CODEC_NID(cmd)].port.u32F08_param;
    243     else if (STAC9220_IS_DIGPIN_CMD(cmd))
     279    else if (STAC9220_IS_DIGINPIN_CMD(cmd))
    244280        pu32Reg = &pState->pNodes[CODEC_NID(cmd)].digin.u32F08_param;
    245281    else if (STAC9220_IS_AFG_CMD(cmd))
     
    255291}
    256292
     293/* F09 */
    257294static int codecGetPinSense(struct CODECState *pState, uint32_t cmd, uint64_t *pResp)
    258295{
     
    260297    if (STAC9220_IS_PORT_CMD(cmd))
    261298        *pResp = pState->pNodes[CODEC_NID(cmd)].port.u32F09_param;
    262     else if (STAC9220_IS_DIGPIN_CMD(cmd))
     299    else if (STAC9220_IS_DIGINPIN_CMD(cmd))
    263300        *pResp = pState->pNodes[CODEC_NID(cmd)].digin.u32F09_param;
    264301    else
     
    266303    return VINF_SUCCESS;
    267304}
     305
     306/* 709 */
    268307static int codecSetPinSense(struct CODECState *pState, uint32_t cmd, uint64_t *pResp)
    269308{
     
    272311    if (STAC9220_IS_PORT_CMD(cmd))
    273312        pu32Reg = &pState->pNodes[CODEC_NID(cmd)].port.u32F08_param;
    274     else if (STAC9220_IS_DIGPIN_CMD(cmd))
     313    else if (STAC9220_IS_DIGINPIN_CMD(cmd))
    275314        pu32Reg = &pState->pNodes[CODEC_NID(cmd)].digin.u32F08_param;
    276315    Assert(pu32Reg);
     
    372411}
    373412
     413/* F05 */
    374414static int codecGetPowerState(struct CODECState *pState, uint32_t cmd, uint64_t *pResp)
    375415{
     
    377417    *pResp = 0;
    378418    if (STAC9220_IS_AFG_CMD(cmd))
    379     {
    380419        *pResp = pState->pNodes[CODEC_NID(cmd)].afg.u32F05_param;
    381     }
    382420    else if (STAC9220_IS_DAC_CMD(cmd))
    383     {
    384421        *pResp = pState->pNodes[CODEC_NID(cmd)].dac.u32F05_param;
    385     }
    386     else if (STAC9220_IS_DIGPIN_CMD(cmd))
    387     {
     422    else if (STAC9220_IS_DIGINPIN_CMD(cmd))
    388423        *pResp = pState->pNodes[CODEC_NID(cmd)].digin.u32F05_param;
    389     }
    390424    else if (STAC9220_IS_ADC_CMD(cmd))
    391     {
    392425        *pResp = pState->pNodes[CODEC_NID(cmd)].adc.u32F05_param;
    393     }
    394     return VINF_SUCCESS;
    395 }
    396 
     426    return VINF_SUCCESS;
     427}
     428
     429/* 705 */
    397430static int codecSetPowerState(struct CODECState *pState, uint32_t cmd, uint64_t *pResp)
    398431{
     
    401434    *pResp = 0;
    402435    if (STAC9220_IS_AFG_CMD(cmd))
    403     {
    404436        pu32Reg = &pState->pNodes[CODEC_NID(cmd)].afg.u32F05_param;
    405     }
    406437    else if (STAC9220_IS_DAC_CMD(cmd))
    407     {
    408438        pu32Reg = &pState->pNodes[CODEC_NID(cmd)].dac.u32F05_param;
    409     }
    410     else if (STAC9220_IS_DIGPIN_CMD(cmd))
    411     {
     439    else if (STAC9220_IS_DIGINPIN_CMD(cmd))
    412440        pu32Reg = &pState->pNodes[CODEC_NID(cmd)].digin.u32F05_param;
    413     }
    414441    else if (STAC9220_IS_ADC_CMD(cmd))
    415     {
    416442        pu32Reg = &pState->pNodes[CODEC_NID(cmd)].adc.u32F05_param;
    417     }
    418443    Assert((pu32Reg));
    419444    if (!pu32Reg)
     
    490515}
    491516
     517/* F0C */
    492518static int codecGetEAPD_BTLEnabled(struct CODECState *pState, uint32_t cmd, uint64_t *pResp)
    493519{
     
    497523    else if (STAC9220_IS_DAC_CMD(cmd))
    498524        *pResp = pState->pNodes[CODEC_NID(cmd)].dac.u32F0c_param;
    499     else if (STAC9220_IS_DIGPIN_CMD(cmd))
     525    else if (STAC9220_IS_DIGINPIN_CMD(cmd))
    500526        *pResp = pState->pNodes[CODEC_NID(cmd)].digin.u32F0c_param;
    501527    *pResp = 0;
     
    503529}
    504530
     531/* 70C */
    505532static int codecSetEAPD_BTLEnabled(struct CODECState *pState, uint32_t cmd, uint64_t *pResp)
    506533{
     
    512539    else if (STAC9220_IS_DAC_CMD(cmd))
    513540        pu32Reg = &pState->pNodes[CODEC_NID(cmd)].dac.u32F0c_param;
    514     else if (STAC9220_IS_DIGPIN_CMD(cmd))
     541    else if (STAC9220_IS_DIGINPIN_CMD(cmd))
    515542        pu32Reg = &pState->pNodes[CODEC_NID(cmd)].digin.u32F0c_param;
    516543    *pResp = 0;
     
    559586    if (STAC9220_IS_PORT_CMD(cmd))
    560587        *pResp = pState->pNodes[CODEC_NID(cmd)].port.u32F1c_param;
    561     else if (STAC9220_IS_DIGPIN_CMD(cmd))
    562         *pResp = pState->pNodes[CODEC_NID(cmd)].digin.u32F1c_param;
     588    else if (STAC9220_IS_DIGOUTPIN_CMD(cmd))
     589        *pResp = pState->pNodes[CODEC_NID(cmd)].digout.u32F1c_param;
     590    else if (STAC9220_IS_DIGINPIN_CMD(cmd))
     591        *pResp = pState->pNodes[CODEC_NID(cmd)].digout.u32F1c_param;
    563592    else if (STAC9220_IS_CD_CMD(cmd))
    564         *pResp = pState->pNodes[CODEC_NID(cmd)].digin.u32F1c_param;
     593        *pResp = pState->pNodes[CODEC_NID(cmd)].cdnode.u32F1c_param;
    565594    return VINF_SUCCESS;
    566595}
     
    571600    if (STAC9220_IS_PORT_CMD(cmd))
    572601        pu32Reg = &pState->pNodes[CODEC_NID(cmd)].port.u32F1c_param;
    573     else if (STAC9220_IS_DIGPIN_CMD(cmd))
    574         pu32Reg = &pState->pNodes[CODEC_NID(cmd)].port.u32F1c_param;
     602    else if (STAC9220_IS_DIGINPIN_CMD(cmd))
     603        pu32Reg = &pState->pNodes[CODEC_NID(cmd)].digin.u32F1c_param;
     604    else if (STAC9220_IS_DIGOUTPIN_CMD(cmd))
     605        pu32Reg = &pState->pNodes[CODEC_NID(cmd)].digout.u32F1c_param;
    575606    else if (STAC9220_IS_CD_CMD(cmd))
    576607        pu32Reg = &pState->pNodes[CODEC_NID(cmd)].cdnode.u32F1c_param;
     
    834865/*  -----------  --------------------   -----------------------  */
    835866    {0x000F0000, CODEC_VERB_8BIT_CMD , codecGetParameter           },
    836     {0x000A0000, CODEC_VERB_16BIT_CMD, codecGetConverterFormat     },
    837     {0x00020000, CODEC_VERB_16BIT_CMD, codecSetConverterFormat     },
    838     {0x000B0000, CODEC_VERB_16BIT_CMD, codecGetAmplifier           },
    839     {0x00030000, CODEC_VERB_16BIT_CMD, codecSetAmplifier           },
     867    {0x000F0100, CODEC_VERB_8BIT_CMD , codecGetConSelectCtrl       },
     868    {0x00070100, CODEC_VERB_8BIT_CMD , codecSetConSelectCtrl       },
     869    {0x000F0600, CODEC_VERB_8BIT_CMD , codecGetStreamId            },
    840870    {0x00070600, CODEC_VERB_8BIT_CMD , codecSetStreamId            },
    841     {0x000F0600, CODEC_VERB_8BIT_CMD , codecGetStreamId            },
    842871    {0x000F0700, CODEC_VERB_8BIT_CMD , codecGetPinCtrl             },
    843872    {0x00070700, CODEC_VERB_8BIT_CMD , codecSetPinCtrl             },
     
    865894    {0x00071E00, CODEC_VERB_8BIT_CMD , codecSetConfig2             },
    866895    {0x00071F00, CODEC_VERB_8BIT_CMD , codecSetConfig3             },
     896    {0x000A0000, CODEC_VERB_16BIT_CMD, codecGetConverterFormat     },
     897    {0x00020000, CODEC_VERB_16BIT_CMD, codecSetConverterFormat     },
     898    {0x000B0000, CODEC_VERB_16BIT_CMD, codecGetAmplifier           },
     899    {0x00030000, CODEC_VERB_16BIT_CMD, codecSetAmplifier           },
    867900};
    868901
Note: See TracChangeset for help on using the changeset viewer.

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