📄 dtvvsb1.c
字号:
}
/*****************************************************************************************/
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(®Entry));
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 + -