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

📄 dtvvsb1.c

📁 用于TM1300/PNX1300系列DSP(主要用于视频处理)的设备库的源码
💻 C
📖 第 1 页 / 共 2 页
字号:
}

/*****************************************************************************************/
static tmLibdevErr_t dtvVsb1TunerInit(pboardTvTunerParameters_t params)
{
    td1536Param_t tunerParams;
    tmLibdevErr_t err;

    err = iicDirectionSelect(vsb1IICDirection);
    if (err != TMLIBDEV_OK)
        return err;

    tunerParams.iicAddress     = VSB1_TUNER_IIC_ADDRESS;
    tunerParams.useInternalAGC = True;
    tunerParams.iFreq          = 43750000;
    tunerParams.input          = params->input;
    tunerInput                 = params->input;

    if (params->stepSize != TD1536_SUPPORTED_STEP_SIZES)
        return TVTUNER_ERR_UNSUPPORTED_STEP_SIZE;

    err = td1536Init(0, &tunerParams); 

    iicDirectionUnSelect(vsb1IICDirection);

    return err;
}

/*****************************************************************************************/
static tmLibdevErr_t dtvVsb1TunerTerm(void)
{
    return TMLIBDEV_OK;
}

/*****************************************************************************************/
static tmLibdevErr_t dtvVsb1TunerConfig(UInt32 command, Pointer value)
{
    tmLibdevErr_t err = TMLIBDEV_OK;

    err = iicDirectionSelect(vsb1IICDirection);
    if (err != TMLIBDEV_OK)
        return err;

    switch (command)
    {
    case TVTUNER_CONFIG_SET_INPUT:
        err = td1536SetInput(0, *((tsaTvTunerInput_t *) value));
        if (err != TMLIBDEV_OK)
            goto dtvVsb1TunerConfigExit;
        tunerInput = *((tsaTvTunerInput_t *) value);
        break;
    case TVTUNER_CONFIG_GET_INPUT:
        *((tsaTvTunerInput_t *) value) = tunerInput;
        break;
    case TVTUNER_CONFIG_GET_LOCK:
        tmAssert(value, TMLIBDEV_ERR_NULL_PARAMETER);
        err = td1536GetLock(0, (Bool *) value);
        if (err != TMLIBDEV_OK)
            goto dtvVsb1TunerConfigExit;
        break;
    default:
        err = TVTUNER_ERR_UNSUPPORTED_CONFIG_COMMAND;
    }

dtvVsb1TunerConfigExit:

    iicDirectionUnSelect(vsb1IICDirection);

    return err;
}

/*****************************************************************************************/
static tmLibdevErr_t dtvVsb1TunerSetChannel(ptsaTvTunerChannelParams_t chanParams)
{
    tmLibdevErr_t err = TMLIBDEV_OK;

    err = iicDirectionSelect(vsb1IICDirection);
    if (err != TMLIBDEV_OK)
        return err;

    err = td1536SetFrequency(0, chanParams);

    iicDirectionUnSelect(vsb1IICDirection);

    return err;
}

/*****************************************************************************************/
static tmLibdevErr_t dtvVsb1TunerConfigChannel(UInt32 command, Pointer value)
{
    tmLibdevErr_t err = TMLIBDEV_OK;

    err = iicDirectionSelect(vsb1IICDirection);
    if (err != TMLIBDEV_OK)
        return err;

    switch (command)
    {
    case TVTUNER_CHAN_CONFIG_TWEAK_UP:
        err = td1536Tweak(0, td1536TweakUp);
        break;
    case TVTUNER_CHAN_CONFIG_TWEAK_DOWN:
        err = td1536Tweak(0, td1536TweakDown);
        break;
    case TVTUNER_CHAN_CONFIG_CENTER:
        err = td1536Tweak(0, td1536TweakReset);
        break;
    case TVTUNER_CHAN_CONFIG_GET_CHAN_PARAMETERS:
        tmAssert(value, TMLIBDEV_ERR_NULL_PARAMETER);
        err = td1536GetChanParams(0, (ptsaTvTunerChannelParams_t) value);
        break;
    default:
        err = TVTUNER_ERR_UNSUPPORTED_CONFIG_COMMAND;
        break;
    }

    iicDirectionUnSelect(vsb1IICDirection);

    return err;
}

/*****************************************************************************************/
static tmLibdevErr_t dtvVsb1Activate(pcomponent_t comp)
{
    TRY(dtvVsb1Detect());

    TRY(dtvVsb1Register());

    return TMLIBDEV_OK;
}

#define PATH_STRING_LENGTH 256
/*****************************************************************************************/
static tmLibdevErr_t dtvVsb1Register(void)
{
    UInt32              ID;
    Char                *boardName;
    UInt32              daughterboardsNumberOfUnits;
    UInt32              tvTunerNumberOfUnits;
    UInt32              tvDigDemNumberOfUnits;
    Char                pathString[PATH_STRING_LENGTH];
    Char                daughterboardName[] = "VSB 1 board";
    tsaRegDataEntry_t   dataEntry   = {redtChar, 0, Null};
    tsaRegEntryAdd_t    regEntry;

    memset(pathString, 0, PATH_STRING_LENGTH);

    TRY(tsaBoardGetBoard(&ID, &boardName));
    DP((" connected to board: %s (ID = %#x)\n", boardName, ID));

    /* on the TM1 boards the tuner is connected to unit 0 */
    if((ID == BOARD_VERSION_PHILIPS_DTV_TTR)  ||
       (ID == BOARD_VERSION_PHILIPS_DTV_TR)   ||
       (ID == BOARD_VERSION_PHILIPS_DTV_REF2) ||
       (ID == BOARD_VERSION_PHILIPS_DTV_REF5) ||
       (ID == BOARD_VERSION_PHILIPS_DTV_REF3))
    {
        DP((" tm1 board\n"));
        digDemConfig.tpUnit = tmUnit0;
    }

    /* get number of existing daughterboards, tvTuners and tvAudDems */
    TRY(getNumberOfUnits(&daughterboardsNumberOfUnits, "/bsp/daughterboard/*"));
    TRY(getNumberOfUnits(&tvDigDemNumberOfUnits, "/bsp/TvDigDem/*"));
    TRY(getNumberOfUnits(&tvTunerNumberOfUnits, "/bsp/TvTuner/*"));

    digDemConfig.tunerID = tvTunerNumberOfUnits;
    TRY(tsaBoardRegisterTvDigDem(tvDigDemNumberOfUnits, &digDemConfig));
    tunerConfig.connections.digDemUnit = tvDigDemNumberOfUnits;
    TRY(tsaBoardRegisterTvTuner(tvTunerNumberOfUnits, &tunerConfig));

    dataEntry.data       = daughterboardName;
    dataEntry.dataLength = strlen(daughterboardName) + 1;
    regEntry.path        = pathString;
    regEntry.entryType   = recData;
    regEntry.entrySize   = 0;
    regEntry.entry       = &dataEntry;    
    regEntry.flags       = TSA_REG_CREATE_ALWAYS;
    strcpy(regEntry.keyString, daughterboardName);

    /* register daughter board */
    sprintf(regEntry.path, "bsp/daughterboard/%02d", daughterboardsNumberOfUnits);
    TRY(tsaRegAddEntry(&regEntry));

    return TMLIBDEV_OK;
}


/*****************************************************************************************/
static tmLibdevErr_t dtvVsb1Detect(void)
{
    UInt32        ID;
    Char          *boardName;
    UInt          iicd;
    tmLibdevErr_t err = TMLIBDEV_OK;

    DP(("dtvVsb1Detect\n"));

    TRY(tsaBoardGetBoard(&ID, &boardName));

    if (ID == BOARD_VERSION_PHILIPS_DTV_REF5)
    {
        vsb1IICDirection = IIC_DIRECTION_NIM1;
    }

    err = iicDirectionSelect(vsb1IICDirection);
    if (err != TMLIBDEV_OK)
        return err;

    /* first check if tuner is there */
    TRY_UNSELECT(iicReadReg(TD1536_IIC_ADDRESS_0, -1, &iicd));
    DP(("  tuner present\n"));

    /* check if VSB I chip is there */
    TRY_UNSELECT(iicReadReg(TDA8960_IIC_ADDRESS_0, -1, &iicd));
    DP(("  VSB present\n"));

    if ((ID == BOARD_VERSION_PHILIPS_DTV_TTR)  ||
        (ID == BOARD_VERSION_PHILIPS_DTV_TR)   ||
        (ID == BOARD_VERSION_PHILIPS_DTV_REF2) ||
        (ID == BOARD_VERSION_PHILIPS_DTV_REF3))
    {
        DP(("  running on TM1 board, don't have to check further.\n"));
        err = TMLIBDEV_OK;
        goto dtvVsb1DetectExit;
    }

    /* check if MPOC is not there (difference to Catalina board */
    err = iicReadReg(0x8a, -1, &iicd);
    if (err == TMLIBDEV_OK)
    {
        err = -1;
        goto dtvVsb1DetectExit;
    }
    DP(("  no MPOC\n"));

    err = TMLIBDEV_OK;

dtvVsb1DetectExit:

    iicDirectionUnSelect(vsb1IICDirection);

    return err;
}


/*****************************************************************************************/
TSA_COMP_DEF_I_COMPONENT(vsb1Board, 
                         TSA_COMP_BUILD_ARG_LIST_1("bsp/boardID"), 
                         dtvVsb1Activate);

⌨️ 快捷键说明

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