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

📄 tcdrv.c

📁 st7710的tuner标准驱动
💻 C
📖 第 1 页 / 共 5 页
字号:
/* ----------------------------------------------------------------------------
File Name: tcdrv.c (was tdrv.c from sat)

Description: external tuner drivers.

Copyright (C) 1999-2001 STMicroelectronics

   date: 01-October-2001
version: 3.2.0
 author: from STV0299 and MB validation drivers.
comment: Write for multi-instance/multi-FrontEnd.

Revision History:

Reference:
    ST API Definition "TUNER Driver API" DVD-API-06
---------------------------------------------------------------------------- */


/* Includes ---------------------------------------------------------------- */

/* C libs */
#include <string.h>
#include <stdlib.h> /* for abs() */

/* STAPI common includes */
#include "stlite.h"                     /* Standard includes */
#include "stddefs.h"

/* STAPI */
#include "sttbx.h"
#include "stcommon.h"
#include "stevt.h"
#include "sttuner.h"

/* local to sttuner */
#include "util.h"       /* generic utility functions for sttuner */
#include "dbtypes.h"    /* data types for databases */
#include "sysdbase.h"   /* functions to accesss system data */
#include "ioarch.h"     /* I/O for this driver */
#include "ioreg.h"      /* I/O for this driver */
#include "cdrv.h"       /* utilities */

#include "cioctl.h"     /* data structure typedefs for all the the cable ioctl functions */

#include "tcdrv.h"      /* header for this file */
#include <assert.h>

/* define ----------------------------------------------------------------- */

#ifdef ST_OS21
#define tuner_tdrv_DelayInMicroSec(micro_sec)  task_delay((signed int) \
                                            (((micro_sec) + 999) / 1000) * \
                                            ST_GetClocksPerSecond() / 1000)
#else
#define tuner_tdrv_DelayInMicroSec(micro_sec)  task_delay((unsigned int) \
                                            (((micro_sec) + 999) / 1000) * \
                                            ST_GetClocksPerSecond() / 1000)
#endif
#define tuner_tdrv_DelayInMilliSec(milli_sec)  tuner_tdrv_DelayInMicroSec(milli_sec*1000)

/* MT2060 */

/* LNA Band cross-over frequencies */
#ifdef STTUNER_DRV_CAB_TUN_MT2060 
static const U32 MT2060_LNA_Bands[] =
{
     95000000,     /*   0 ..  95 MHz: b1011 */
    180000000,     /*  95 .. 180 MHz: b1010 */
    260000000,     /* 180 .. 260 MHz: b1001 */
    335000000,     /* 260 .. 335 MHz: b1000 */
    425000000,     /* 335 .. 425 MHz: b0111 */
    490000000,     /* 425 .. 490 MHz: b0110 */
    570000000,     /* 490 .. 570 MHz: b0101 */
    645000000,     /* 570 .. 645 MHz: b0100 */
    730000000,     /* 645 .. 730 MHz: b0011 */
    810000000      /* 730 .. 810 MHz: b0010 */
                   /* 810 ..     MHz: b0001 */
};
#endif
typedef struct
{
    S32     min;
    S32     max;
} MT_ExclZoneS_t;


/*  Implement ceiling, floor functions.  */
#define ceil(n, d) (((n) < 0) ? (n)/(d) : (n)/(d) + ((n)%(d) != 0))
#define floor(n, d) (((n) < 0) ? (n)/(d) - ((n)%(d) != 0) : (n)/(d))
/* End MT2060*/

#define TCDRV_WAITING_TIME              5       /* In ms (Tuner polling) */
#define TCDRV_CP_WAITING_TIME           10      /* In ms (Charge Pump) */
#define TCDRV_MT2040_WAITING_TIME       10      /* In ms (Init Tuner MT) */

#define TCDRV_IO_TIMEOUT                10

#define TCDRV_TUNER_PART_CODE_MT2030    0x06
#define TCDRV_TUNER_PART_CODE_MT2040    0x07
#define TCDRV_TUNER_PART_CODE_MT2050    0x04
#define TCDRV_TUNER_PART_CODE_MT2060    0x06



typedef enum MT2040_Offsets       /* MT203X and MT2040 */
{
    TCDRV_MT2040_LO1_1 = 0,     /* 0x00: LO1 Byte 1*/
    TCDRV_MT2040_LO1_2,         /* 0x01: LO1 Byte 2*/
    TCDRV_MT2040_LOGC,          /* 0x02: LO GC Cntl*/
    TCDRV_MT2040_RESERVED_1,    /* 0x03: Reserved*/
    TCDRV_MT2040_LOVCOC,        /* 0x04: *For 2040 only : LO VCO Cntl*/
    TCDRV_MT2040_LO2_1,         /* 0x05: LO2 Byte 1*/
    TCDRV_MT2040_CONTROL_1,     /* 0x06: Control Byte 1*/
    TCDRV_MT2040_CONTROL_2,     /* 0x07: Control Byte 2*/
    TCDRV_MT2040_RESERVED_3,    /* 0x08: Reserved*/
    TCDRV_MT2040_RESERVED_4,    /* 0x09: Reserved*/
    TCDRV_MT2040_RESERVED_5,    /* 0x0A: Reserved*/
    TCDRV_MT2040_LO2_2,         /* 0x0B: LO2 Byte 2*/
    TCDRV_MT2040_LO2_3,         /* 0x0C: LO2 Byte 3*/
    TCDRV_MT2040_MIX1,          /* 0x0D: MIX1 Cntl*/
    TCDRV_MT2040_STATUS,        /* 0x0E: Status*/
    TCDRV_MT2040_TUNEA2D,       /* 0x0F: Tune A/D*/
    TCDRV_MT2040_RESERVED_6,    /* 0x10: Reserved*/
    TCDRV_MT2040_COCODE_1,      /* 0x11: Company Code Byte 1*/
    TCDRV_MT2040_COCODE_2,      /* 0x12: Company Code Byte 2*/
    TCDRV_MT2040_PARTCODE,      /* 0x13: Part Code*/
    TCDRV_MT2040_REVCODE,       /* 0x14: Revision Code*/
    TCDRV_MT2040_NB_REGS
} MT2040_Offsets_t;

typedef enum MT2050_Offsets
{
    TCDRV_MT2050_PART_REV = 0,   /*  0x00: Part/Rev Code        */
    TCDRV_MT2050_LO1C_1,         /*  0x01: LO1C Byte 1          */
    TCDRV_MT2050_LO1C_2,         /*  0x02: LO1C Byte 2          */
    TCDRV_MT2050_LO2C_1,         /*  0x03: LO2C Byte 1          */
    TCDRV_MT2050_LO2C_2,         /*  0x04: LO2C Byte 2          */
    TCDRV_MT2050_LO2C_3,         /*  0x05: LO2C Byte 3          */
    TCDRV_MT2050_PWR,            /*  0x06: PWR Byte             */
    TCDRV_MT2050_LO_STATUS,      /*  0x07: LO Status Byte       */
    TCDRV_MT2050_RSVD_08,        /*  0x08: Reserved             */
    TCDRV_MT2050_MISC_STATUS,    /*  0x09: Misc Status Byte     */
    TCDRV_MT2050_RSVD_0A,        /*  0x0A: Reserved             */
    TCDRV_MT2050_RSVD_0B,        /*  0x0B: Reserved             */
    TCDRV_MT2050_RSVD_0C,        /*  0x0C: Reserved             */
    TCDRV_MT2050_SRO,            /*  0x0D: SRO Byte             */
    TCDRV_MT2050_RSVD_0E,        /*  0x0E: Reserved             */
    TCDRV_MT2050_MIX_1,          /*  0x0F: Mix 1 Byte           */
    TCDRV_MT2050_PK_DET,         /*  0x10: Peak Detect Byte     */
    TCDRV_MT2050_NB_REGS
} MT2050_Offsets_t;


typedef enum MT2060_Offsets
{
    TCDRV_MT2060_PART_REV = 0,   /*  0x00: Part/Rev Code        */
    TCDRV_MT2060_LO1C_1,         /*  0x01: LO1C Byte 1          */
    TCDRV_MT2060_LO1C_2,         /*  0x02: LO1C Byte 2          */
    TCDRV_MT2060_LO2C_1,         /*  0x03: LO2C Byte 1          */
    TCDRV_MT2060_LO2C_2,         /*  0x04: LO2C Byte 2          */
    TCDRV_MT2060_LO2C_3,         /*  0x05: LO2C Byte 3          */
    TCDRV_MT2060_LO_STATUS,      /*  0x06: LO Status Byte       */
    TCDRV_MT2060_FM_FREQ,        /*  0x07: FM FREQ Byte         */
    TCDRV_MT2060_MISC_STATUS,    /*  0x08: Misc Status Byte     */
    TCDRV_MT2060_MISC_CTRL_1,    /*  0x09: Misc Ctrl Byte 1     */
    TCDRV_MT2060_MISC_CTRL_2,    /*  0x0A: Misc Ctrl Byte 2     */
    TCDRV_MT2060_MISC_CTRL_3,    /*  0x0B: Misc Ctrl Byte 3     */
    TCDRV_MT2060_RSVD_0C,        /*  0x0C: Reserved             */
    TCDRV_MT2060_RSVD_0D,        /*  0x0D: Reserved             */
    TCDRV_MT2060_RSVD_0E,        /*  0x0E: Reserved             */
    TCDRV_MT2060_RSVD_0F,        /*  0x0F: Reserved             */
    TCDRV_MT2060_RSVD_10,        /*  0x10: Reserved             */
    TCDRV_MT2060_RSVD_11,        /*  0x11: Reserved             */
    TCDRV_MT2060_NB_REGS
} MT2060_Offsets_t;

/* private variables ------------------------------------------------------- */

#ifdef ST_OS21
static semaphore_t *Lock_InitTermOpenClose; /* guard calls to the functions */
#else
static semaphore_t Lock_InitTermOpenClose; /* guard calls to the functions */
#endif

static BOOL Installed = FALSE;

static BOOL Installed_TDBE1       = FALSE;
static BOOL Installed_TDBE2       = FALSE;
static BOOL Installed_TDDE1       = FALSE;
static BOOL Installed_SP5730      = FALSE;
static BOOL Installed_MT2030      = FALSE;
static BOOL Installed_MT2040      = FALSE;
static BOOL Installed_MT2050      = FALSE;
static BOOL Installed_MT2060      = FALSE;
static BOOL Installed_DCT7040     = FALSE;
static BOOL Installed_DCT7050     = FALSE;
static BOOL Installed_DCT7710     = FALSE;
static BOOL Installed_DCF8710     = FALSE;
static BOOL Installed_DCF8720     = FALSE;
static BOOL Installed_MACOETA50DR = FALSE;
static BOOL Installed_CD1516LI    = FALSE;
static BOOL Installed_DF1CS1223   = FALSE;
static BOOL Installed_SHARPXX     = FALSE;
static BOOL Installed_TDBE1X016A  = FALSE;
static BOOL Installed_TDBE1X601   = FALSE;
static BOOL Installed_TDEE4X012A  = FALSE;

typedef struct
{
    U32         min;
    U32         max;
}
MT_ExclZone_t;

/*
**  Structure of data needed for Spur Avoidance
*/
#define MAX_ZONES 20
typedef struct
{
    U32     nAS_Algorithm;
    U32     f_ref;
    U32     f_in;
    U32     f_LO1;
    U32     f_if1_Center;
    U32     f_if1_Request;
    U32     f_if1_bw;
    U32     f_LO2;
    U32     f_out;
    U32     f_out_bw;
    U32     f_LO1_Step;
    U32     f_LO2_Step;
    U32     f_LO1_FracN_Avoid;
    U32     f_LO2_FracN_Avoid;
    U32     f_zif_bw;
    U32     f_min_LO_Separation;
    U32     maxH1;
    U32     maxH2;
    U32     bSpurPresent;
    U32     bSpurAvoided;
    U32     nSpursFound;
    U32     nZones;
    MT_ExclZone_t MT_ExclZones[MAX_ZONES];
}
MT_AvoidSpursData_t;

/* tuner instance data */

typedef struct
{
    ST_DeviceName_t     *DeviceName;            /* unique name for opening under */
    STTUNER_Handle_t    TopLevelHandle;         /* access tuner, lnb etc. using this */
    IOARCH_Handle_t     IOHandle;               /* passed in Open() to an instance of this driver */
    STTUNER_TunerType_t TunerType;              /* tuner ID number */
    TCDRV_PLLType_t     PLLType;                /* PLL on this type of tuner */

    U32         version;
    U32         tuner_id;
    MT_AvoidSpursData_t AS_Data;
    U32         f_IF1_actual;
    U32         LNA_Bands[10];

    U32                 FreqFactor;
    TUNER_Status_t      Status;
    U8                  IOBuffer[TCDRV_IOBUFFER_MAX];    /* buffer for ioarch I/O */
    U32                 BandWidth[TCDRV_BANDWIDTH_MAX];
    long                TunerLowBand;
    long                TunerMidBand;
    ST_Partition_t      *MemoryPartition;       /* which partition this data block belongs to */
    void                *InstanceChainPrev;     /* previous data block in chain or NULL if not */
    void                *InstanceChainNext;     /* next data block in chain or NULL if last */
}
TCDRV_InstanceData_t;

/* instance chain, the default boot value is invalid, to catch errors */
static TCDRV_InstanceData_t *InstanceChainTop = (TCDRV_InstanceData_t *)0x7fffffff;


/* functions --------------------------------------------------------------- */
/* API */

ST_ErrorCode_t tuner_tdrv_Init(ST_DeviceName_t *DeviceName, TUNER_InitParams_t *InitParams);
ST_ErrorCode_t tuner_tdrv_Term(ST_DeviceName_t *DeviceName, TUNER_TermParams_t *TermParams);

ST_ErrorCode_t tuner_tdrv_Open(ST_DeviceName_t *DeviceName, TUNER_OpenParams_t *OpenParams, TUNER_Handle_t *Handle);
#ifdef STTUNER_DRV_CAB_TUN_TDBE1
ST_ErrorCode_t tuner_tdrv_Open_TDBE1      (ST_DeviceName_t *DeviceName, TUNER_OpenParams_t *OpenParams, TUNER_Capability_t *Capability, TUNER_Handle_t *Handle);
#endif 
#ifdef STTUNER_DRV_CAB_TUN_TDBE2
ST_ErrorCode_t tuner_tdrv_Open_TDBE2      (ST_DeviceName_t *DeviceName, TUNER_OpenParams_t *OpenParams, TUNER_Capability_t *Capability, TUNER_Handle_t *Handle);
#endif 
#ifdef STTUNER_DRV_CAB_TUN_TDDE1
ST_ErrorCode_t tuner_tdrv_Open_TDDE1      (ST_DeviceName_t *DeviceName, TUNER_OpenParams_t *OpenParams, TUNER_Capability_t *Capability, TUNER_Handle_t *Handle);
#endif 
#ifdef STTUNER_DRV_CAB_TUN_SP5730
ST_ErrorCode_t tuner_tdrv_Open_SP5730     (ST_DeviceName_t *DeviceName, TUNER_OpenParams_t *OpenParams, TUNER_Capability_t *Capability, TUNER_Handle_t *Handle);
#endif 
#ifdef STTUNER_DRV_CAB_TUN_MT2030
ST_ErrorCode_t tuner_tdrv_Open_MT2030     (ST_DeviceName_t *DeviceName, TUNER_OpenParams_t *OpenParams, TUNER_Capability_t *Capability, TUNER_Handle_t *Handle);
#endif 
#ifdef STTUNER_DRV_CAB_TUN_MT2040
ST_ErrorCode_t tuner_tdrv_Open_MT2040     (ST_DeviceName_t *DeviceName, TUNER_OpenParams_t *OpenParams, TUNER_Capability_t *Capability, TUNER_Handle_t *Handle);
#endif 
#ifdef STTUNER_DRV_CAB_TUN_MT2050
ST_ErrorCode_t tuner_tdrv_Open_MT2050     (ST_DeviceName_t *DeviceName, TUNER_OpenParams_t *OpenParams, TUNER_Capability_t *Capability, TUNER_Handle_t *Handle);
#endif 
#ifdef STTUNER_DRV_CAB_TUN_MT2060
ST_ErrorCode_t tuner_tdrv_Open_MT2060     (ST_DeviceName_t *DeviceName, TUNER_OpenParams_t *OpenParams, TUNER_Capability_t *Capability, TUNER_Handle_t *Handle);
#endif 
#ifdef STTUNER_DRV_CAB_TUN_DCT7040
ST_ErrorCode_t tuner_tdrv_Open_DCT7040    (ST_DeviceName_t *DeviceName, TUNER_OpenParams_t *OpenParams, TUNER_Capability_t *Capability, TUNER_Handle_t *Handle);
#endif 
#ifdef STTUNER_DRV_CAB_TUN_DCT7050
ST_ErrorCode_t tuner_tdrv_Open_DCT7050    (ST_DeviceName_t *DeviceName, TUNER_OpenParams_t *OpenParams, TUNER_Capability_t *Capability, TUNER_Handle_t *Handle);
#endif 
#ifdef STTUNER_DRV_CAB_TUN_DCT7710
ST_ErrorCode_t tuner_tdrv_Open_DCT7710    (ST_DeviceName_t *DeviceName, TUNER_OpenParams_t *OpenParams, TUNER_Capability_t *Capability, TUNER_Handle_t *Handle);
#endif 
#ifdef STTUNER_DRV_CAB_TUN_DCF8710
ST_ErrorCode_t tuner_tdrv_Open_DCF8710    (ST_DeviceName_t *DeviceName, TUNER_OpenParams_t *OpenParams, TUNER_Capability_t *Capability, TUNER_Handle_t *Handle);
#endif 
#ifdef STTUNER_DRV_CAB_TUN_DCF8720
ST_ErrorCode_t tuner_tdrv_Open_DCF8720    (ST_DeviceName_t *DeviceName, TUNER_OpenParams_t *OpenParams, TUNER_Capability_t *Capability, TUNER_Handle_t *Handle);
#endif 
#ifdef STTUNER_DRV_CAB_TUN_MACOETA50DR
ST_ErrorCode_t tuner_tdrv_Open_MACOETA50DR(ST_DeviceName_t *DeviceName, TUNER_OpenParams_t *OpenParams, TUNER_Capability_t *Capability, TUNER_Handle_t *Handle);
#endif 
#ifdef STTUNER_DRV_CAB_TUN_CD1516LI
ST_ErrorCode_t tuner_tdrv_Open_CD1516LI   (ST_DeviceName_t *DeviceName, TUNER_OpenParams_t *OpenParams, TUNER_Capability_t *Capability, TUNER_Handle_t *Handle);
#endif 
#ifdef STTUNER_DRV_CAB_TUN_DF1CS1223
ST_ErrorCode_t tuner_tdrv_Open_DF1CS1223  (ST_DeviceName_t *DeviceName, TUNER_OpenParams_t *OpenParams, TUNER_Capability_t *Capability, TUNER_Handle_t *Handle);
#endif 
#ifdef STTUNER_DRV_CAB_TUN_SHARPXX
ST_ErrorCode_t tuner_tdrv_Open_SHARPXX    (ST_DeviceName_t *DeviceName, TUNER_OpenParams_t *OpenParams, TUNER_Capability_t *Capability, TUNER_Handle_t *Handle);
#endif 
#ifdef STTUNER_DRV_CAB_TUN_TDBE1X016A
ST_ErrorCode_t tuner_tdrv_Open_TDBE1X016A (ST_DeviceName_t *DeviceName, TUNER_OpenParams_t *OpenParams, TUNER_Capability_t *Capability, TUNER_Handle_t *Handle);
#endif 
#ifdef STTUNER_DRV_CAB_TUN_TDBE1X601
ST_ErrorCode_t tuner_tdrv_Open_TDBE1X601  (ST_DeviceName_t *DeviceName, TUNER_OpenParams_t *OpenParams, TUNER_Capability_t *Capability, TUNER_Handle_t *Handle);
#endif 
#ifdef STTUNER_DRV_CAB_TUN_TDEE4X012A

⌨️ 快捷键说明

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