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

📄 tcdrv.c

📁 st7710的tuner标准驱动
💻 C
📖 第 1 页 / 共 5 页
字号:
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 + -