📄 tcdrv.c
字号:
ST_ErrorCode_t tuner_tdrv_Open_TDEE4X012A (ST_DeviceName_t *DeviceName, TUNER_OpenParams_t *OpenParams, TUNER_Capability_t *Capability, TUNER_Handle_t *Handle);
#endif
ST_ErrorCode_t tuner_tdrv_Close(TUNER_Handle_t Handle, TUNER_CloseParams_t *CloseParams);
ST_ErrorCode_t tuner_tdrv_SetFrequency (TUNER_Handle_t Handle, U32 Frequency, U32 *NewFrequency);
ST_ErrorCode_t tuner_tdrv_GetStatus (TUNER_Handle_t Handle, TUNER_Status_t *Status);
ST_ErrorCode_t tuner_tdrv_IsTunerLocked(TUNER_Handle_t Handle, BOOL *Locked);
ST_ErrorCode_t tuner_tdrv_SetBandWidth (TUNER_Handle_t Handle, U32 BandWidth, U32 *NewBandWidth);
/* I/O API */
ST_ErrorCode_t tuner_tdrv_ioaccess(TUNER_Handle_t Handle, IOARCH_Handle_t IOHandle,
STTUNER_IOARCH_Operation_t Operation, U16 SubAddr, U8 *Data, U32 TransferSize, U32 Timeout);
/* access device specific low-level functions */
ST_ErrorCode_t tuner_tdrv_ioctl(TUNER_Handle_t Handle, U32 Function, void *InParams, void *OutParams, STTUNER_Da_Status_t *Status);
/* local functions/var ----------------------------------------------------- */
ST_ErrorCode_t STTUNER_DRV_TUNER_TCDRV_Install (STTUNER_tuner_dbase_t *Tuner, STTUNER_TunerType_t TunerType);
ST_ErrorCode_t STTUNER_DRV_TUNER_TCDRV_UnInstall (STTUNER_tuner_dbase_t *Tuner, STTUNER_TunerType_t TunerType);
static U32 TCDRV_TunerSetNbSteps (TCDRV_InstanceData_t *Instance, U32 Steps);
static U32 TCDRV_TunerGetChargePump (TCDRV_InstanceData_t *Instance);
static void TCDRV_TunerSetChargePump (TCDRV_InstanceData_t *Instance, U32 ChargePump);
static U32 TCDRV_TunerInitBand (TCDRV_InstanceData_t *Instance, U32 Frequency);
static U32 TCDRV_CalculateStepsAndFrequency (TCDRV_InstanceData_t *Instance, U32 Frequency);
TCDRV_InstanceData_t *TCDRV_GetInstFromHandle (TUNER_Handle_t Handle);
#if defined( STTUNER_DRV_CAB_TUN_MT2030) || defined(STTUNER_DRV_CAB_TUN_MT2040)
static int TCDRV_MT_CheckLOLock (TCDRV_InstanceData_t *Instance);
static unsigned char TCDRV_MT_SelectVCO (long fLO1);
static int TCDRV_MT_AdjustVCO (TCDRV_InstanceData_t *Instance);
#endif
#if defined( STTUNER_DRV_CAB_TUN_MT2030) || defined(STTUNER_DRV_CAB_TUN_MT2040)
static int TCDRV_MT2040_IsSpurInBand (TCDRV_InstanceData_t *Instance, long fLO1, long fLO2, long Spur);
#endif
#if defined( STTUNER_DRV_CAB_TUN_MT2050) || defined(STTUNER_DRV_CAB_TUN_MT2060)
static int TCDRV_MT2050_IsSpurInBand (TCDRV_InstanceData_t *Instance, long fLO1, long fLO2, long Spur);
#endif
#if defined( STTUNER_DRV_CAB_TUN_MT2030) || defined(STTUNER_DRV_CAB_TUN_MT2040)
static int TCDRV_MT2040_GetTunerLock (TCDRV_InstanceData_t *Instance);
#endif
#if defined( STTUNER_DRV_CAB_TUN_MT2050) || defined(STTUNER_DRV_CAB_TUN_MT2060)
static int TCDRV_MT2050_GetTunerLock (TCDRV_InstanceData_t *Instance);
#endif
#if defined( STTUNER_DRV_CAB_TUN_MT2030) || defined(STTUNER_DRV_CAB_TUN_MT2040)
static long TCDRV_MT2030_TunerSetFrequency (TCDRV_InstanceData_t *Instance, long _Freq);
#endif
#if defined( STTUNER_DRV_CAB_TUN_MT2030) || defined(STTUNER_DRV_CAB_TUN_MT2040)
static long TCDRV_MT2040_TunerSetFrequency (TCDRV_InstanceData_t *Instance, long _Freq);
#endif
#if defined( STTUNER_DRV_CAB_TUN_MT2050) || defined(STTUNER_DRV_CAB_TUN_MT2060)
static long TCDRV_MT2050_TunerSetFrequency (TCDRV_InstanceData_t *Instance, long _Freq);
#endif
#if defined( STTUNER_DRV_CAB_TUN_MT2050) || defined(STTUNER_DRV_CAB_TUN_MT2060)
static long TCDRV_MT2060_TunerSetFrequency (TCDRV_InstanceData_t *Instance, long _Freq);
static ST_ErrorCode_t TCDRV_MT2060_ManualCalibrate (TCDRV_InstanceData_t *Instance);
static void TCDRV_MT2060_ResetExclZones (MT_AvoidSpursData_t* pAS_Info);
static U32 TCDRV_MT2060_ChooseFirstIF (MT_AvoidSpursData_t* pAS_Info);
static BOOL TCDRV_MT2060_AvoidSpurs (MT_AvoidSpursData_t* pAS_Info);
static U32 CalcLO1Mult (U32 *Div, U32 *FracN, U32 f_LO, U32 f_LO_Step, U32 f_Ref);
static U32 CalcLO2Mult (U32 *Div, U32 *FracN, U32 f_LO, U32 f_LO_Step, U32 f_Ref);
static S8 TCDRV_MT2060_Locked (TCDRV_InstanceData_t *Instance);
static S8 TCDRV_MT2060_LO1LockWorkAround (TCDRV_InstanceData_t *Instance);
static void TCDRV_MT2060_AddExclZone (MT_AvoidSpursData_t* pAS_Info, U32 f_min, U32 f_max);
#endif
#if defined( STTUNER_DRV_CAB_TUN_MT2030) || defined(STTUNER_DRV_CAB_TUN_MT2040) || defined (STTUNER_DRV_CAB_TUN_MT2050) || defined (STTUNER_DRV_CAB_TUN_MT2060)
/* MT2030 tuner */
/* ============ */
const int TCDRV_MT2030_MAX_LOSpurHarmonic = 5; /* The maximum number of LO harmonics to search for internally-generated LO-related spurs */
/* MT2040 tuner */
/* ============ */
const U32 TCDRV_MT2040_VCO_FREQS[5] = { 1890000, /* VCO 1 lower limit*/
1720000, /* VCO 2 lower limit*/
1530000, /* VCO 3 lower limit*/
1370000, /* VCO 4 lower limit*/
0}; /* VCO 5 lower limit*/
const int TCDRV_MT2040_MAX_LOSpurHarmonic = 7; /* The maximum number of LO harmonics to search for internally-generated LO-related spurs */
long TCDRV_MT2040_SRO_FREQ = 5250; /* The SRO Frequency (in kHz) : 5.25 MHz */
const long TCDRV_MT2040_PKENRANGE = 400000; /* The minimum frequency where the PKEN bit should be set : 400 MHz */
/* MT2050 tuner */
/* ============ */
const int TCDRV_MT2050_MAX_LOSpurHarmonic = 11; /* The maximum number of LO harmonics to search for internally-generated LO-related spurs */
long TCDRV_MT2050_SRO_FREQ = 4000; /* The SRO Frequency (in kHz) : 4.00 MHz */
const long TCDRV_MT2050_PKENRANGE = 275000; /* The minimum frequency where the PKEN bit should be set : 275 MHz */
const long TCDRV_MT2050_IF1_BW = 10000; /* The First IF1 filter bandwidth (in kHz) : 10 MHz */
/* MT2060 tuner */
/* ============ */
const U32 TCDRV_MT2060_TUNER_VERSION = 0x00010000; /* Version 01.00 */
const U32 TCDRV_MT2060_REF_FREQ = 16000000; /* Reference oscillator Frequency (in Hz) */
const U32 TCDRV_MT2060_IF1_CENTER = 1220000000; /* Center of the IF1 filter (in Hz) */
const U32 TCDRV_MT2060_IF1_BW = 20000000; /* The IF1 filter bandwidth (in Hz) */
const U32 TCDRV_MT2060_ZIF_BW = 3000000; /* Zero-IF spur-free bandwidth (in Hz) */
const U32 TCDRV_MT2060_MIN_LO_SEP = 1000000; /* Minimum inter-tuner LO frequency separation */
const U32 TCDRV_MT2060_LO1_FRACN_AVOID = 999999; /* LO1 FracN numerator avoid region (in Hz) */
const U32 TCDRV_MT2060_LO2_FRACN_AVOID = 99999; /* LO2 FracN numerator avoid region (in Hz) */
const U32 TCDRV_MT2060_IF1_FREQ = 1220000000; /* Default IF1 Frequency (in Hz) */
const U32 TCDRV_MT2060_SPUR_STEP_HZ = 250000; /* Step size (in Hz) to move IF1 when avoiding spurs */
const U32 TCDRV_MT2060_LO1_STEP_SIZE = 250000; /* Step size (in Hz) of PLL1 */
const U32 TCDRV_MT2060_MAX_HARMONICS_1 = 11; /* Highest intra-tuner LO Spur Harmonic to be avoided */
const U32 TCDRV_MT2060_MAX_HARMONICS_2 = 7; /* Highest inter-tuner LO Spur Harmonic to be avoided */
#endif
/* ----------------------------------------------------------------------------
Name: STTUNER_DRV_TUNER_TCDRV_Install()
Description:
install a cable device driver.
Parameters:
Return Value:
---------------------------------------------------------------------------- */
ST_ErrorCode_t STTUNER_DRV_TUNER_TCDRV_Install(STTUNER_tuner_dbase_t *Tuner, STTUNER_TunerType_t TunerType)
{
#ifdef STTUNER_DEBUG_MODULE_CABDRV_TCDRV
const char *identity = "STTUNER tcdrv.c STTUNER_DRV_TUNER_TCDRV_Install()";
#endif
ST_ErrorCode_t Error = ST_NO_ERROR;
/* driver wide bits to init once only */
if (Installed == FALSE)
{
InstanceChainTop = NULL;
#ifdef ST_OS21
Lock_InitTermOpenClose = semaphore_create_fifo(1);
#else
semaphore_init_fifo(&Lock_InitTermOpenClose, 1);
#endif
Installed = TRUE;
}
switch(TunerType)
{
#ifdef STTUNER_DRV_CAB_TUN_TDBE1
case STTUNER_TUNER_TDBE1:
#ifdef STTUNER_DEBUG_MODULE_CABDRV_TCDRV
STTBX_Print(("%s installing cable:tuner:TDBE1...", identity));
#endif
if (Installed_TDBE1 == TRUE)
{
#ifdef STTUNER_DEBUG_MODULE_CABDRV_TCDRV
STTBX_Print(("fail already installed\n"));
#endif
return(STTUNER_ERROR_INITSTATE);
}
Tuner->ID = STTUNER_TUNER_TDBE1;
Tuner->tuner_Open = tuner_tdrv_Open_TDBE1;
Installed_TDBE1 = TRUE;
break;
#endif
#ifdef STTUNER_DRV_CAB_TUN_TDBE2
case STTUNER_TUNER_TDBE2:
#ifdef STTUNER_DEBUG_MODULE_CABDRV_TCDRV
STTBX_Print(("%s installing cable:tuner:TDBE2...", identity));
#endif
if (Installed_TDBE2 == TRUE)
{
#ifdef STTUNER_DEBUG_MODULE_CABDRV_TCDRV
STTBX_Print(("fail already installed\n"));
#endif
return(STTUNER_ERROR_INITSTATE);
}
Tuner->ID = STTUNER_TUNER_TDBE2;
Tuner->tuner_Open = tuner_tdrv_Open_TDBE2;
Installed_TDBE2 = TRUE;
break;
#endif
#ifdef STTUNER_DRV_CAB_TUN_TDDE1
case STTUNER_TUNER_TDDE1:
#ifdef STTUNER_DEBUG_MODULE_CABDRV_TCDRV
STTBX_Print(("%s installing cable:tuner:TDDE1...", identity));
#endif
if (Installed_TDDE1 == TRUE)
{
#ifdef STTUNER_DEBUG_MODULE_CABDRV_TCDRV
STTBX_Print(("fail already installed\n"));
#endif
return(STTUNER_ERROR_INITSTATE);
}
Tuner->ID = STTUNER_TUNER_TDDE1;
Tuner->tuner_Open = tuner_tdrv_Open_TDDE1;
Installed_TDDE1 = TRUE;
break;
#endif
#ifdef STTUNER_DRV_CAB_TUN_SP5730
case STTUNER_TUNER_SP5730:
#ifdef STTUNER_DEBUG_MODULE_CABDRV_TCDRV
STTBX_Print(("%s installing cable:tuner:SP5730...", identity));
#endif
if (Installed_SP5730 == TRUE)
{
#ifdef STTUNER_DEBUG_MODULE_CABDRV_TCDRV
STTBX_Print(("fail already installed\n"));
#endif
return(STTUNER_ERROR_INITSTATE);
}
Tuner->ID = STTUNER_TUNER_SP5730;
Tuner->tuner_Open = tuner_tdrv_Open_SP5730;
Installed_SP5730 = TRUE;
break;
#endif
#ifdef STTUNER_DRV_CAB_TUN_MT2030
case STTUNER_TUNER_MT2030:
#ifdef STTUNER_DEBUG_MODULE_CABDRV_TCDRV
STTBX_Print(("%s installing cable:tuner:MT2030...", identity));
#endif
if (Installed_MT2030 == TRUE)
{
#ifdef STTUNER_DEBUG_MODULE_CABDRV_TCDRV
STTBX_Print(("fail already installed\n"));
#endif
return(STTUNER_ERROR_INITSTATE);
}
Tuner->ID = STTUNER_TUNER_MT2030;
Tuner->tuner_Open = tuner_tdrv_Open_MT2030;
Installed_MT2030 = TRUE;
break;
#endif
#ifdef STTUNER_DRV_CAB_TUN_MT2040
case STTUNER_TUNER_MT2040:
#ifdef STTUNER_DEBUG_MODULE_CABDRV_TCDRV
STTBX_Print(("%s installing cable:tuner:MT2040...", identity));
#endif
if (Installed_MT2040 == TRUE)
{
#ifdef STTUNER_DEBUG_MODULE_CABDRV_TCDRV
STTBX_Print(("fail already installed\n"));
#endif
return(STTUNER_ERROR_INITSTATE);
}
Tuner->ID = STTUNER_TUNER_MT2040;
Tuner->tuner_Open = tuner_tdrv_Open_MT2040;
Installed_MT2040 = TRUE;
break;
#endif
#ifdef STTUNER_DRV_CAB_TUN_MT2050
case STTUNER_TUNER_MT2050:
#ifdef STTUNER_DEBUG_MODULE_CABDRV_TCDRV
STTBX_Print(("%s installing cable:tuner:MT2050...", identity));
#endif
if (Installed_MT2050 == TRUE)
{
#ifdef STTUNER_DEBUG_MODULE_CABDRV_TCDRV
STTBX_Print(("fail already installed\n"));
#endif
return(STTUNER_ERROR_INITSTATE);
}
Tuner->ID = STTUNER_TUNER_MT2050;
Tuner->tuner_Open = tuner_tdrv_Open_MT2050;
Installed_MT2050 = TRUE;
break;
#endif
#ifdef STTUNER_DRV_CAB_TUN_MT2060
case STTUNER_TUNER_MT2060:
#ifdef STTUNER_DEBUG_MODULE_CABDRV_TCDRV
STTBX_Print(("%s installing cable:tuner:MT2060...", identity));
#endif
if (Installed_MT2060 == TRUE)
{
#ifdef STTUNER_DEBUG_MODULE_CABDRV_TCDRV
STTBX_Print(("fail already installed\n"));
#endif
return(STTUNER_ERROR_INITSTATE);
}
Tuner->ID = STTUNER_TUNER_MT2060;
Tuner->tuner_Open = tuner_tdrv_Open_MT2060;
Installed_MT2060 = TRUE;
break;
#endif
#ifdef STTUNER_DRV_CAB_TUN_DCT7040
case STTUNER_TUNER_DCT7040:
#ifdef STTUNER_DEBUG_MODULE_CABDRV_TCDRV
STTBX_Print(("%s installing cable:tuner:DCT7040...", identity));
#endif
if (Installed_DCT7040 == TRUE)
{
#ifdef STTUNER_DEBUG_MODULE_CABDRV_TCDRV
STTBX_Print(("fail already installed\n"));
#endif
return(STTUNER_ERROR_INITSTATE);
}
Tuner->ID = STTUNER_TUNER_DCT7040;
Tuner->tuner_Open = tuner_tdrv_Open_DCT7040;
Installed_DCT7040 = TRUE;
break;
#endif
#ifdef STTUNER_DRV_CAB_TUN_DCT7050
case STTUNER_TUNER_DCT7050:
#ifdef STTUNER_DEBUG_MODULE_CABDRV_TCDRV
STTBX_Print(("%s installing cable:tuner:DCT7050...", identity));
#endif
if (Installed_DCT7050 == TRUE)
{
#ifdef STTUNER_DEBUG_MODULE_CABDRV_TCDRV
STTBX_Print(("fail already installed\n"));
#endif
return(STTUNER_ERROR_INITSTATE);
}
Tuner->ID = STTUNER_TUNER_DCT7050;
Tuner->tuner_Open = tuner_tdrv_Open_DCT7050;
Installed_DCT7050 = TRUE;
break;
#endif
#ifdef STTUNER_DRV_CAB_TUN_DCT7710
case STTUNER_TUNER_DCT7710:
#ifdef STTUNER_DEBUG_MODULE_CABDRV_TCDRV
STTBX_Print(("%s installing cable:tuner:DCT7710...", identity));
#endif
if (Installed_DCT7710 == TRUE)
{
#ifdef STTUNER_DEBUG_MODULE_CABDRV_TCDRV
STTBX_Print(("fail already installed\n"));
#endif
return(STTUNER_ERROR_INITSTATE);
}
Tuner->ID = STTUNER_TUNER_DCT7710;
Tuner->tuner_Open = tuner_tdrv_Open_DCT7710;
Installed_DCT7710 = TRUE;
break;
#endif
#ifdef STTUNER_DRV_CAB_TUN_DCF8710
case STTUNER_TUNER_DCF8710:
#ifdef STTUNER_DEBUG_MODULE_CABDRV_TCDRV
STTBX_Print(("%s installing cable:tuner:DCF8710...", identity));
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -