⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tmbslhdmitx_2.c

📁 HDMI NXP9983 chipset controller driver
💻 C
📖 第 1 页 / 共 5 页
字号:
     * register values, and write to register pairs     */    for (i = 0; i < HDMITX_MAT_OFFSET_NUM; i++)    {        /* Mask & copy MSB */        buf[i*2] = (UInt8)(((UInt16)pMatOffset->Offset[i] & 0x0700) >> 8);        /* Copy LSB */        buf[(i*2)+1] = (UInt8)((UInt16)pMatOffset->Offset[i] & 0x00FF);    }    err = setHwRegisters(pDis,                         E_REG_P00_MAT_OI1_MSB_W,                         &buf[0],                         HDMITX_MAT_OFFSET_NUM * 2);    return err;}#endif /* DEMO_BUILD *//*============================================================================*//* tmbslHdmiTxMatrixSetMode                                                   *//*============================================================================*/tmErrorCode_ttmbslHdmiTxMatrixSetMode(    tmUnitSelect_t		 txUnit,    tmbslHdmiTxmCntrl_t mControl,    tmbslHdmiTxmScale_t mScale){    tmHdmiTxobject_t    *pDis;  /* Pointer to Device Instance Structure */    tmErrorCode_t       err;    /* Error code */    /* Check unit parameter and point to TX unit object */    err = checkUnitSetDis(txUnit, &pDis);    RETIF(err != TM_OK, err)    /* Check remaining parameter(s) */    RETIF_BADPARAM((mControl > HDMITX_MCNTRL_MAX) ||          (mScale > HDMITX_MSCALE_MAX))    /* For each value that is not NoChange, update the appropriate register */    if (mControl != HDMITX_MCNTRL_NO_CHANGE)    {        err = setHwRegisterField(pDis,                                  E_REG_P00_MAT_CONTRL_W,                                 E_MASKREG_P00_MAT_CONTRL_mat_bp,                                 (UInt8)mControl);        RETIF_REG_FAIL(err)    }    if (mScale != HDMITX_MSCALE_NO_CHANGE)    {        err = setHwRegisterField(pDis,                                  E_REG_P00_MAT_CONTRL_W,                                 E_MASKREG_P00_MAT_CONTRL_mat_sc,                                 (UInt8)mScale);        RETIF_REG_FAIL(err)    }    return TM_OK;}/*============================================================================*//* tmbslHdmiTxMatrixSetOutputOffset                                           *//*============================================================================*/#ifndef DEMO_BUILDtmErrorCode_ttmbslHdmiTxMatrixSetOutputOffset(    tmUnitSelect_t		    txUnit,    tmbslHdmiTxMatOffset_t  *pMatOffset){    tmHdmiTxobject_t    *pDis;  /* Pointer to Device Instance Structure */    tmErrorCode_t       err;    /* Error code */    Int                 i;      /* Loop index */    UInt8               buf[HDMITX_MAT_OFFSET_NUM * 2];   /* Temp buffer */    /* Check unit parameter and point to TX unit object */    err = checkUnitSetDis(txUnit, &pDis);    RETIF(err != TM_OK, err)    /* Check remaining parameter(s) */    RETIF_BADPARAM(pMatOffset == (tmbslHdmiTxMatOffset_t *)0)    for (i = 0; i < HDMITX_MAT_OFFSET_NUM; i++)    {        RETIF_BADPARAM((pMatOffset->Offset[i] < HDMITX_MAT_OFFSET_MIN) ||               (pMatOffset->Offset[i] > HDMITX_MAT_OFFSET_MAX))    }    /* Convert signed 11 bit values from Offset array to pairs of MSB-LSB     * register values, and write to register pairs     */    for (i = 0; i < HDMITX_MAT_OFFSET_NUM; i++)    {        /* Mask & copy MSB */        buf[i*2] = (UInt8)(((UInt16)pMatOffset->Offset[i] & 0x0700) >> 8);        /* Copy LSB */        buf[(i*2)+1] = (UInt8)((UInt16)pMatOffset->Offset[i] & 0x00FF);    }    err = setHwRegisters(pDis,                         E_REG_P00_MAT_OO1_MSB_W,                         &buf[0],                         HDMITX_MAT_OFFSET_NUM * 2);    return err;}#endif /* DEMO_BUILD *//*============================================================================*//* tmbslHdmiTxPktSetAclkRecovery                                              *//*============================================================================*/#ifndef DEMO_BUILDtmErrorCode_ttmbslHdmiTxPktSetAclkRecovery(    tmUnitSelect_t  txUnit,    Bool            bEnable){    tmHdmiTxobject_t    *pDis;  /* Pointer to Device Instance Structure */    tmErrorCode_t       err;    /* Error code */    /* Check unit parameter and point to TX unit object */    err = checkUnitSetDis(txUnit, &pDis);    RETIF(err != TM_OK, err)    /* Return TMBSL_ERR_HDMI_OPERATION_NOT_PERMITTED error if the      * sinkType is not HDMI     */     RETIF(pDis->sinkType != HDMITX_SINK_HDMI,          TMBSL_ERR_HDMI_OPERATION_NOT_PERMITTED)    /* Check remaining parameter(s) */    RETIF_BADPARAM((bEnable != True) && (bEnable != False))        /* Write the ACR packet insertion flag */    err = setHwRegisterField(pDis,                              E_REG_P11_DIP_FLAGS_RW,                             E_MASKREG_P11_DIP_FLAGS_acr,                             (UInt8)bEnable);    return err;}/*============================================================================*//* tmbslHdmiTxPktSetAcp                                                       *//*============================================================================*/tmErrorCode_ttmbslHdmiTxPktSetAcp(    tmUnitSelect_t		txUnit,    tmbslHdmiTxPkt_t    *pPkt,    UInt                byteCnt,    UInt8               uAcpType,    Bool                bEnable){    tmHdmiTxobject_t    *pDis;  /* Pointer to Device Instance Structure */    tmErrorCode_t       err;    /* Error code */    UInt8               buf[3]; /* Temp buffer to hold header bytes */    /* Check unit parameter and point to TX unit object */    err = checkUnitSetDis(txUnit, &pDis);    RETIF(err != TM_OK, err)    /* Return TMBSL_ERR_HDMI_OPERATION_NOT_PERMITTED error if the      * sinkType is not HDMI     */     RETIF(pDis->sinkType != HDMITX_SINK_HDMI,          TMBSL_ERR_HDMI_OPERATION_NOT_PERMITTED)    /* Only supported for device N4 or later */     /* Check remaining parameter(s) - NULL pointer allowed */    RETIF_BADPARAM((bEnable != True) && (bEnable != False))    if(pPkt != Null)    {        /* Pointer to structure provided so check parameters */        RETIF_BADPARAM(byteCnt > HDMITX_PKT_DATA_BYTE_CNT)        RETIF(byteCnt == 0, TMBSL_ERR_HDMI_INCONSISTENT_PARAMS)        /* Data to change, start by clearing ACP packet insertion flag */        err = setHwRegisterField(pDis,                                  E_REG_P11_DIP_FLAGS_RW,                                 E_MASKREG_P11_DIP_FLAGS_acp,                                 0x00);        RETIF_REG_FAIL(err)        /* Prepare ACP header */        buf[0] = 0x04;      /* ACP packet */        buf[1] = uAcpType;        buf[2] = 0;         /* Reserved [HDMI 1.2] */        /* Write 3 header bytes to registers */        err = setHwRegisters(pDis,                             E_REG_P11_ACP_HB0_RW,                             &buf[0],                             3);        RETIF_REG_FAIL(err)        /* Write "byteCnt" bytes of data to registers */        err = setHwRegisters(pDis,                             E_REG_P11_ACP_PB0_RW,                             &pPkt->dataByte[0],                             (UInt16)byteCnt);        RETIF_REG_FAIL(err)    }    /* Write the ACP packet insertion flag */    err = setHwRegisterField(pDis,                              E_REG_P11_DIP_FLAGS_RW,                             E_MASKREG_P11_DIP_FLAGS_acp,                             (UInt8)bEnable);    return err;}#endif /* DEMO_BUILD *//*============================================================================*//* tmbslHdmiTxPktSetAudioInfoframe                                            *//*============================================================================*/tmErrorCode_ttmbslHdmiTxPktSetAudioInfoframe(    tmUnitSelect_t      txUnit,    tmbslHdmiTxPktAif_t *pPkt,    Bool                bEnable){    tmHdmiTxobject_t    *pDis;  /* Pointer to Device Instance Structure */    tmErrorCode_t       err;    /* Error code */    UInt8               buf[9]; /* Temp buffer to hold header/packet bytes */    UInt16              bufReg; /* Base register used for writing InfoFrame*/    UInt16              flagReg;/* Flag register to be used */    UInt8               flagMask;/* Mask used for writing flag register */    /* Check unit parameter and point to TX unit object */    err = checkUnitSetDis(txUnit, &pDis);    RETIF(err != TM_OK, err)    /* Return TMBSL_ERR_HDMI_OPERATION_NOT_PERMITTED error if the      * sinkType is not HDMI     */     RETIF(pDis->sinkType != HDMITX_SINK_HDMI,          TMBSL_ERR_HDMI_OPERATION_NOT_PERMITTED)    /* Check remaining parameter(s) - NULL pointer allowed */    RETIF_BADPARAM((bEnable != True) && (bEnable != False))    if(pPkt != Null)    {        /* Pointer to structure provided so check parameters */        RETIF_BADPARAM(pPkt->CodingType   > 0x0F)        RETIF_BADPARAM(pPkt->ChannelCount > 0x07)        RETIF_BADPARAM(pPkt->SampleFreq   > 0x07)        RETIF_BADPARAM(pPkt->SampleSize   > 0x03)        /* No need to check ChannelAlloc - all values are allowed */        RETIF_BADPARAM((pPkt->DownMixInhibit != True) &&              (pPkt->DownMixInhibit != False))        RETIF_BADPARAM(pPkt->LevelShift   > 0x0F)    }    /* Only supported for device N4 or later */     /* We're using n4 or later, use IF4 buffer for Audio InfoFrame */    bufReg = E_REG_P10_IF4_HB0_RW;     flagReg = E_REG_P11_DIP_IF_FLAGS_RW;    flagMask = E_MASKREG_P11_DIP_IF_FLAGS_if4;    if(pPkt != Null)    {        /* Data to change, start by clearing AIF packet insertion flag */        err = setHwRegisterField(pDis,                                  flagReg,                                 flagMask,                                 0x00);        RETIF_REG_FAIL(err)        /* Prepare AIF header */        buf[0] = 0x84;     /* Audio InfoFrame */        buf[1] = 0x01;     /* Version 1 [HDMI 1.2] */        buf[2] = 0x0A;     /* Length [HDMI 1.2] */        /* Prepare AIF packet (byte numbers offset by 3) */        buf[0+3] = 0;     /* Preset checksum to zero so calculation works! */        buf[1+3] = ((pPkt->CodingType & 0x0F) << 4) |                     (pPkt->ChannelCount & 0x07);        /* CT3-0, CC2-0 */        buf[2+3] = ((pPkt->SampleFreq & 0x07) << 2) |                     (pPkt->SampleSize & 0x03);          /* SF2-0, SS1-0 */        buf[3+3] = 0;                                      /* [HDMI 1.2] */        buf[4+3] = pPkt->ChannelAlloc;                  /* CA7-0 */        buf[5+3] = ((pPkt->LevelShift & 0x0F) << 3);    /* LS3-0 */        if(pPkt->DownMixInhibit == True)        {            buf[5+3] += 0x80;                              /* DMI bit */        }        /* Calculate checksum - this is worked out on "Length" bytes of the         * packet, the checksum (which we've preset to zero), and the three         * header bytes.  We exclude bytes PB6 to PB10 (which we         * are not writing) since they are zero.         */        buf[0+3] = calculateChecksum(&buf[0], 0x0A+1+3-5);        /* Write header and packet bytes in one operation */        err = setHwRegisters(pDis,                             bufReg,                             &buf[0],                             9);        RETIF_REG_FAIL(err)    }    /* Write AIF packet insertion flag */    err = setHwRegisterField(pDis,                              flagReg,                             flagMask,                             (UInt8)bEnable);    return err;}/*============================================================================*//* tmbslHdmiTxPktSetGeneralCntrl                                              *//*============================================================================*/#ifndef DEMO_BUILDtmErrorCode_ttmbslHdmiTxPktSetGeneralCntrl(    tmUnitSelect_t      txUnit,    tmbslHdmiTxaMute_t  *paMute,    Bool                bEnable){    tmHdmiTxobject_t    *pDis;  /* Pointer to Device Instance Structure */    tmErrorCode_t       err;    /* Error code */    /* Check unit parameter and point to TX unit object */    err = checkUnitSetDis(txUnit, &pDis);    RETIF(err != TM_OK, err)    /* Return TMBSL_ERR_HDMI_OPERATION_NOT_PERMITTED error if the      * sinkType is not HDMI     */     RETIF(pDis->sinkType != HDMITX_SINK_HDMI,          TMBSL_ERR_HDMI_OPERATION_NOT_PERMITTED)    /* Check remaining parameter(s) - NULL pointer allowed */    RETIF_BADPARAM((bEnable != True) && (bEnable != False))    if(paMute != Null)    {        RETIF_BADPARAM((*paMute != HDMITX_AMUTE_OFF) && (*paMute != HDMITX_AMUTE_ON))        if (*paMute == HDMITX_AMUTE_ON)        {            err = setHwRegister(pDis, E_REG_P11_GC_AVMUTE_RW, 0x02);            RETIF_REG_FAIL(err)        }        else        {            err = setHwRegister(pDis, E_REG_P11_GC_AVMUTE_RW, 0x01);            RETIF_REG_FAIL(err)        }    }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -