📄 dtvvsb2.c
字号:
break;
case TVDIGDEM_CONFIG_CORR_START_MEM_FILL:
err = tda8961CorrStartMemFill(0);
break;
case TVDIGDEM_CONFIG_CORR_STOP_MEM_FILL:
err = tda8961CorrStopMemFill(0);
break;
default:
err = TVDIGDEM_ERR_UNSUPPORTED_COMMAND;
}
iicDirectionUnSelect(vsb2IICDirection);
return err;
}
/*****************************************************************************************/
static tmLibdevErr_t dtvVsb2DigDemStart(void)
{
tmLibdevErr_t err;
err = iicDirectionSelect(vsb2IICDirection);
if (err != TMLIBDEV_OK)
return err;
err = tda8961Start(0);
iicDirectionUnSelect(vsb2IICDirection);
return err;
}
/*****************************************************************************************/
static tmLibdevErr_t dtvVsb2DigDemStop(void)
{
return TMLIBDEV_OK;
}
/*****************************************************************************************/
static tmLibdevErr_t dtvVsb2DigDemGetStatus(tsaTvDigDemStatusMode_t statusMode, ptsaTvDigDemStatus_t status)
{
tmLibdevErr_t err;
tmAssert(status, TMLIBDEV_ERR_NULL_PARAMETER);
err = iicDirectionSelect(vsb2IICDirection);
if (err != TMLIBDEV_OK)
return err;
if (statusMode == TV_DIGDEM_STATUS_MODE_BASIC)
err = tda8961GetStatus(0, status);
else if (statusMode == TV_DIGDEM_STATUS_MODE_COMPREHENSIVE)
err = tda8961GetTapsAndStatus(0, status);
else
err = TVDIGDEM_ERR_UNSUPPORTED_STATUS_MODE;
iicDirectionUnSelect(vsb2IICDirection);
return err;
}
/*****************************************************************************************/
static tmLibdevErr_t dtvVsb2AudDemInit(unitSelect_t unitID, pboardTvAudDemParameters_t params)
{
tda9851Param_t t;
tmLibdevErr_t err;
t.audioMode = params->audioMode;
t.iicDirection = vsb2IICDirection;
err = tda9851Init(unitID, &t);
if (err != TMLIBDEV_OK)
return err;
return TMLIBDEV_OK;
}
/*****************************************************************************************/
static tmLibdevErr_t dtvVsb2AudDemConfig(unitSelect_t unitID, UInt32 command, Pointer Value)
{
tmLibdevErr_t err;
switch (command)
{
case TVAUDDEM_CONFIG_ENABLE_STEREO:
err = tda9851SetStereo(unitID, True);
break;
case TVAUDDEM_CONFIG_DISABLE_STEREO:
err = tda9851SetStereo(unitID, False);
break;
default:
err = TVAUDDEM_ERR_UNSUPPORTED_CONFIG_COMMAND;
break;
}
return err;
}
/*****************************************************************************************/
static tmLibdevErr_t dtvVsb2TunerInit(pboardTvTunerParameters_t params)
{
td1536Param_t tunerParams;
tmLibdevErr_t err;
err = iicDirectionSelect(vsb2IICDirection);
if (err != TMLIBDEV_OK)
return err;
switch (params->input)
{
case ttiAntennaNTSC:
case ttiCableNTSC:
iicPortA = 0x5a;
tunerParams.useInternalAGC = False;
break;
case ttiAntennaATSC:
case ttiCableATSC:
iicPortA = 0x06;
tunerParams.useInternalAGC = True;
break;
default:
err = -1;
break;
}
err = iicWriteReg(CATALINA_IIC_EXPANDER_A, -1, iicPortA);
if (err != TMLIBDEV_OK)
goto dtvVsb2TunerInitExit;
tunerParams.iicAddress = VSB2_TUNER_IIC_ADDRESS;
tunerParams.iFreq = 44000000;
tunerParams.input = params->input;
tunerInput = params->input;
if (params->stepSize != TD1536_SUPPORTED_STEP_SIZES)
{
err = TVTUNER_ERR_UNSUPPORTED_STEP_SIZE;
goto dtvVsb2TunerInitExit;
}
err = td1536Init(0, &tunerParams);
if (err != TMLIBDEV_OK)
goto dtvVsb2TunerInitExit;
dtvVsb2TunerInitExit:
iicDirectionUnSelect(vsb2IICDirection);
return err;
}
/*****************************************************************************************/
static tmLibdevErr_t dtvVsb2TunerTerm(void)
{
return TMLIBDEV_OK;
}
/*****************************************************************************************/
static tmLibdevErr_t dtvVsb2TunerConfig(UInt32 command, Pointer value)
{
tmLibdevErr_t err = TMLIBDEV_OK;
err = iicDirectionSelect(vsb2IICDirection);
if (err != TMLIBDEV_OK)
return err;
switch (command)
{
case TVTUNER_CONFIG_SET_INPUT:
err = td1536SetInput(0, *((tsaTvTunerInput_t *) value));
if (err != TMLIBDEV_OK)
goto dtvVsb2TunerConfigExit;
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 dtvVsb2TunerConfigExit;
break;
default:
err = TVTUNER_ERR_UNSUPPORTED_CONFIG_COMMAND;
goto dtvVsb2TunerConfigExit;
}
dtvVsb2TunerConfigExit:
iicDirectionUnSelect(vsb2IICDirection);
return err;
}
/*****************************************************************************************/
static tmLibdevErr_t dtvVsb2TunerSetChannel(ptsaTvTunerChannelParams_t chanParams)
{
tmLibdevErr_t err = TMLIBDEV_OK;
err = iicDirectionSelect(vsb2IICDirection);
if (err != TMLIBDEV_OK)
return err;
if ((tunerInput == ttiAntennaNTSC) || (tunerInput == ttiCableNTSC))
{
err = tda8961ViInit(0);
err = tda8980ViInit(&dtvVsb2Vi.vDec, 0);
}
else
{
err = tda8961DigDemInit(0);
err = tda8980DigDemInit(0);
}
if (err != TMLIBDEV_OK)
goto dtvVsb2TunerSetChannelExit;
err = td1536SetFrequency(0, chanParams);
dtvVsb2TunerSetChannelExit:
iicDirectionUnSelect(vsb2IICDirection);
return err;
}
/*****************************************************************************************/
static tmLibdevErr_t dtvVsb2TunerConfigChannel(UInt32 command, Pointer value)
{
tmLibdevErr_t err = TMLIBDEV_OK;
err = iicDirectionSelect(vsb2IICDirection);
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(vsb2IICDirection);
return err;
}
/*****************************************************************************************/
static tmLibdevErr_t dtvVsb2ViInit(pboardVIParam_t params)
{
tmLibdevErr_t err;
tmAssert(params, TMLIBDEV_ERR_NULL_PARAMETER);
err = iicDirectionSelect(vsb2IICDirection);
if (err != TMLIBDEV_OK)
return err;
switch (params->videoStandard)
{
case vasNTSC:
err = tda8980ViInit(&dtvVsb2Vi.vDec, 0);
if (err != TMLIBDEV_OK)
goto dtvVsb2ViInitExit;
err = tda8961ViInit(0);
if (err != TMLIBDEV_OK)
goto dtvVsb2ViInitExit;
iicPortA = 0x5a;
break;
case vasNone:
/* initialize digital demodulator */
err = tda8980DigDemInit(0);
if (err != TMLIBDEV_OK)
goto dtvVsb2ViInitExit;
err = tda8961DigDemInit(0);
if (err != TMLIBDEV_OK)
goto dtvVsb2ViInitExit;
iicPortA = 0x06;
break;
default:
err = VI_ERR_STANDARD_NOT_SUPPORTED;
break;
}
err = iicWriteReg(CATALINA_IIC_EXPANDER_A, -1, iicPortA);
if (err != TMLIBDEV_OK)
goto dtvVsb2ViInitExit;
dtvVsb2Vi.vDec.curVideoStandard = params->videoStandard;
dtvVsb2ViInitExit:
iicDirectionUnSelect(vsb2IICDirection);
return err;
}
/*****************************************************************************************/
static tmLibdevErr_t dtvVsb2ViConfigure(UInt32 subaddr, UInt32 value)
{
return TMLIBDEV_OK;
}
/*****************************************************************************************/
static tmLibdevErr_t dtvVsb2ViSetAnalogInput(pboardVIDec_t pVD, tmVideoAnalogAdapter_t adapter, UInt adapterInstance)
{
UInt mode;
tmLibdevErr_t err;
err = iicDirectionSelect(pVD->iicDirection);
if (err != TMLIBDEV_OK)
return err;
err = mapAdapter2Mode(pVD, adapter, adapterInstance, &mode);
if (err != TMLIBDEV_OK)
goto dtvVsb2ViSetAnalogInputExit;
err = tda8980ViSetAnalogInput(pVD, mode);
dtvVsb2ViSetAnalogInputExit:
iicDirectionUnSelect(pVD->iicDirection);
return err;
}
/*****************************************************************************************/
static tmLibdevErr_t dtvVsb2ViGetAnalogInput(pboardVIDec_t pVD, tmVideoAnalogAdapter_t *adapter, UInt *adapterInstance)
{
return TMLIBDEV_OK;
}
/***********************************************************************************************
*
* AI 2 support (used on TM2)
*
***********************************************************************************************/
static UInt dtvVsb2Ai2Input;
static UInt dtvVsb2Ai2AudioTypeFormat;
static UInt dtvVsb2Ai2AudioSbtypeFormat;
static Float dtvVsb2Ai2SRate;
static Int dtvVsb2Ai2Size;
/* function called in aiInstanceSetup(): On success, must leave
* the audio input system "stopped" but otherwise ready for action.
* MMIO setup will be done, as well as other board or codec specific
* actions like setting IIC control bits or initializing codec registers.
*/
static tmLibdevErr_t dtvVsb2AI2Init(boardAIParam_t *param)
{
UInt iicd;
Float val;
pprocCapabilities_t procCap;
Int err = TMLIBDEV_OK;
UInt32 ID;
Char *boardName;
err = tsaBoardGetBoard(&ID, &boardName);
if (err)
return err;
/* get the clock frequency of the TriMedia CPU */
err = procGetCapabilities(&procCap);
if (err) return err;
CPUClock = (Float) procCap->cpuClockFrequency;
err = iicDirectionSelect(vsb2IICDirection);
if (err != TMLIBDEV_OK)
return err;
err = tda8980AiInit(0);
if (err != TMLIBDEV_OK)
goto dtvVsb2AI2InitExit;
aiRESETM(aiMMIOBase);
if (param->input == aaaNone)
{
param->input = aaaLineInput; /* line input is the default */
}
switch (param->input)
{
case aaaAuxInput1: /* tuner audio input */
/* set input */
iicPortC &= 0xf3;
iicPortC |= 0x04;
dtvVsb2Ai2Input = aaaAuxInput1;
break;
case aaaLineInput: /* line input */
/* set input */
iicPortC &= 0xf3;
dtvVsb2Ai2Input = aaaLineInput;
break;
default:
err = AIO_ERR_UNSUPPORTED_INPUT;
goto dtvVsb2AI2InitExit;
}
/* write IIC port C */
err = iicWriteReg(CATALINA_IIC_EXPANDER_C, -1, iicPortC);
if (err != TMLIBDEV_OK)
goto dtvVsb2AI2InitExit;
/* set sample rate */
err = tda8980AiSetSRate(0, param->sRate);
if (err != TMLIBDEV_OK)
goto dtvVsb2AI2InitExit;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -