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

📄 tmbslhdmitx_local.c

📁 HDMI NXP9983 chipset controller driver
💻 C
📖 第 1 页 / 共 3 页
字号:
    UInt8           regPage;    /* The index to the register's page        */    UInt8           regAddr;    /* The register's address on the page      */    UInt8           newRegPage; /* The register's new page number          */    tmbslHdmiTxSysArgs_t sysArgs; /* Arguments passed to system function   */    /* Unpack register shadow index, page index and address */    regShad = SPA2SHAD(regShadPageAddr);    regPage = SPA2PAGE(regShadPageAddr);    regAddr = SPA2ADDR(regShadPageAddr);    newRegPage = kPageIndexToPage[regPage];        /* Set page register if required */    if (pDis->curRegPage != newRegPage)    {        /* All non-OK results are errors */        sysArgs.slaveAddr       = pDis->uHwAddress;        sysArgs.firstRegister   = E_REG_CURPAGE_ADR_W;        sysArgs.lenData         = 1;        sysArgs.pData           = &newRegPage;        err = pDis->sysFuncWrite(&sysArgs);        RETIF(err != TM_OK, TMBSL_ERR_HDMI_I2C_WRITE)        pDis->curRegPage = newRegPage;    }    if ((regShad != E_SNONE)     && (regShadPageAddr != E_REG_P00_INT_FLAGS_0_RW)    && (regShadPageAddr != E_REG_P00_INT_FLAGS_1_RW)#ifdef TMFL_TDA9981_SUPPORT    && (regShadPageAddr != E_REG_P00_INT_FLAGS_2_RW)#endif /* TMFL_TDA9981_SUPPORT */    )    {        /* Get shadow copy - shadowed registers can't be read */        /* Don't read shadow copy of interrupt status flags! */        *pRegValue = pDis->shadowReg[regShad];        return TM_OK;    }        else    {        /* Get I2C register - all non-OK results are errors */        sysArgs.slaveAddr       = pDis->uHwAddress;        sysArgs.firstRegister   = regAddr;        sysArgs.lenData         = 1;        sysArgs.pData           = pRegValue;        err = pDis->sysFuncRead(&sysArgs);        return (err == TM_OK) ? TM_OK : TMBSL_ERR_HDMI_I2C_READ;    }}/*============================================================================*//* setHwRegisters                                                             *//*============================================================================*/tmErrorCode_tsetHwRegisters(    tmHdmiTxobject_t *pDis,     UInt16 regShadPageAddr,    UInt8 *pData,     UInt16 lenData    ){    tmErrorCode_t   err;        /* Error code */    UInt8           regShad;    /* The index to the register's shadow copy */    UInt8           regPage;    /* The index to the register's page        */    UInt8           regAddr;    /* The register's address on the page      */    UInt8           newRegPage; /* The register's new page number          */    tmbslHdmiTxSysArgs_t sysArgs; /* Arguments passed to system function   */    /* Unpack 1st register's shadow index, page index and address */    regShad = SPA2SHAD(regShadPageAddr);    regPage = SPA2PAGE(regShadPageAddr);    regAddr = SPA2ADDR(regShadPageAddr);    newRegPage = kPageIndexToPage[regPage];        /* Check length does not overflow page */    RETIF_BADPARAM((regAddr+lenData) > E_REG_CURPAGE_ADR_W)    /* Check 1st reg does not have a shadow - whole range assumed likewise */    RETIF_BADPARAM(regShad != E_SNONE)    /* Set page register if required - whole range is on same page */    if (pDis->curRegPage != newRegPage)    {        /* All non-OK results are errors */        sysArgs.slaveAddr       = pDis->uHwAddress;        sysArgs.firstRegister   = E_REG_CURPAGE_ADR_W;        sysArgs.lenData         = 1;        sysArgs.pData           = &newRegPage;        err = pDis->sysFuncWrite(&sysArgs);        RETIF(err != TM_OK, TMBSL_ERR_HDMI_I2C_WRITE)        pDis->curRegPage = newRegPage;    }    /* Write to I2C register range - all non-OK results are errors */    sysArgs.slaveAddr       = pDis->uHwAddress;    sysArgs.firstRegister   = regAddr;    sysArgs.lenData         = (UInt8)lenData;    sysArgs.pData           = pData;    err = pDis->sysFuncWrite(&sysArgs);    return (err == TM_OK) ? TM_OK : TMBSL_ERR_HDMI_I2C_WRITE;}/*============================================================================*//* setHwRegisterMsbLsb                                                        *//*============================================================================*/tmErrorCode_tsetHwRegisterMsbLsb(    tmHdmiTxobject_t *pDis,     UInt16  regShadPageAddr,     UInt16  regWord){    tmErrorCode_t   err;        /* Error code */    UInt8           regPage;    /* The index to the register's page        */    UInt8           regAddr;    /* The register's address on the page      */    UInt8           newRegPage; /* The register's new page number          */    UInt8           msbLsb[2];  /* The bytes from regWord                  */    tmbslHdmiTxSysArgs_t sysArgs; /* Arguments passed to system function   */    /* Unpack register shadow index, page index and address */    regPage = SPA2PAGE(regShadPageAddr);    regAddr = SPA2ADDR(regShadPageAddr);    newRegPage = kPageIndexToPage[regPage];    /* Unpack regWord bytes, MSB first */    msbLsb[0] = (UInt8)(regWord >> 8);    msbLsb[1] = (UInt8)(regWord & 0xFF);    /* Set page register if required */    if (pDis->curRegPage != newRegPage)    {        /* All non-OK results are errors */        sysArgs.slaveAddr       = pDis->uHwAddress;        sysArgs.firstRegister   = E_REG_CURPAGE_ADR_W;        sysArgs.lenData         = 1;        sysArgs.pData           = &newRegPage;        err = pDis->sysFuncWrite(&sysArgs);        RETIF(err != TM_OK, TMBSL_ERR_HDMI_I2C_WRITE)        pDis->curRegPage = newRegPage;    }    /* No word registers are shadowed */        /* Write to I2C - all non-OK results are errors */    sysArgs.slaveAddr       = pDis->uHwAddress;    sysArgs.firstRegister   = regAddr;    sysArgs.lenData         = 2;    sysArgs.pData           = &msbLsb[0];    err = pDis->sysFuncWrite(&sysArgs);    return (err == TM_OK) ? TM_OK : TMBSL_ERR_HDMI_I2C_WRITE;}/*============================================================================*//* setHwRegister                                                              *//*============================================================================*/tmErrorCode_tsetHwRegister(    tmHdmiTxobject_t *pDis,     UInt16  regShadPageAddr,     UInt8   regValue){    tmErrorCode_t   err;        /* Error code */    UInt8           regShad;    /* The index to the register's shadow copy */    UInt8           regPage;    /* The index to the register's page        */    UInt8           regAddr;    /* The register's address on the page      */    UInt8           newRegPage; /* The register's new page number          */    tmbslHdmiTxSysArgs_t sysArgs; /* Arguments passed to system function   */    /* Unpack register shadow index, page index and address */    regShad = SPA2SHAD(regShadPageAddr);    regPage = SPA2PAGE(regShadPageAddr);    regAddr = SPA2ADDR(regShadPageAddr);    newRegPage = kPageIndexToPage[regPage];        /* Set page register if required */    if (pDis->curRegPage != newRegPage)    {        /* All non-OK results are errors */        sysArgs.slaveAddr       = pDis->uHwAddress;        sysArgs.firstRegister   = E_REG_CURPAGE_ADR_W;        sysArgs.lenData         = 1;        sysArgs.pData           = &newRegPage;        err = pDis->sysFuncWrite(&sysArgs);        RETIF(err != TM_OK, TMBSL_ERR_HDMI_I2C_WRITE)        pDis->curRegPage = newRegPage;    }    /* Set shadow copy */    if (regShad != E_SNONE)    {        pDis->shadowReg[regShad] = regValue;    }            /* Write to I2C - all non-OK results are errors */    sysArgs.slaveAddr       = pDis->uHwAddress;    sysArgs.firstRegister   = regAddr;    sysArgs.lenData         = 1;    sysArgs.pData           = &regValue;    err = pDis->sysFuncWrite(&sysArgs);    return (err == TM_OK) ? TM_OK : TMBSL_ERR_HDMI_I2C_WRITE;}/*============================================================================*//*  setHwRegisterField                                                        *//*============================================================================*/tmErrorCode_tsetHwRegisterField(    tmHdmiTxobject_t *pDis,     UInt16  regShadPageAddr,     UInt8   fieldMask,     UInt8   fieldValue){    tmErrorCode_t   err;        /* Error code */    UInt8           regShad;    /* The index to the register's shadow copy */    UInt8           regPage;    /* The index to the register's page        */    UInt8           regAddr;    /* The register's address on the page      */    UInt8           newRegPage; /* The register's new page number          */    UInt8           regValue;   /* The register's current value            */    tmbslHdmiTxSysArgs_t sysArgs; /* Arguments passed to system function   */    /* Unpack register shadow index, page index and address */    regShad = SPA2SHAD(regShadPageAddr);    regPage = SPA2PAGE(regShadPageAddr);    regAddr = SPA2ADDR(regShadPageAddr);    newRegPage = kPageIndexToPage[regPage];        /* Set page register if required */    if (pDis->curRegPage != newRegPage)    {        /* All non-OK results are errors */        sysArgs.slaveAddr       = pDis->uHwAddress;        sysArgs.firstRegister   = E_REG_CURPAGE_ADR_W;        sysArgs.lenData         = 1;        sysArgs.pData           = &newRegPage;        err = pDis->sysFuncWrite(&sysArgs);        RETIF(err != TM_OK, TMBSL_ERR_HDMI_I2C_WRITE)        pDis->curRegPage = newRegPage;    }    if (regShad != E_SNONE)    {        /* Get shadow copy */        regValue = pDis->shadowReg[regShad];    }    else    {        /* Read I2C register value.         * All bitfield registers are either shadowed or can be read.         */        sysArgs.slaveAddr       = pDis->uHwAddress;        sysArgs.firstRegister   = regAddr;        sysArgs.lenData         = 1;        sysArgs.pData           = &regValue;        err = pDis->sysFuncRead(&sysArgs);        RETIF(err != TM_OK, TMBSL_ERR_HDMI_I2C_READ)    }    /* Reset register bits that are set in the mask */    regValue = regValue & (UInt8)(~fieldMask);    /* Shift the field value left to align its bits with the mask */

⌨️ 快捷键说明

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