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

📄 reg0299.c

📁 st7710的tuner标准驱动
💻 C
📖 第 1 页 / 共 3 页
字号:
/* ----------------------------------------------------------------------------
File Name: reg0299.c

Description:

Copyright (C) 1999-2001 STMicroelectronics

   date: 29-June-2001
version: 3.1.0
 author: GJP from work by LW/CBB
comment: adapted from reg0299.c

Revision History:
    04/02/00        Code based on original implementation by CBB.

    21/03/00        Received code modifications that eliminate compiler
                    warnings.

    05/03/02        Removed some mfr. specific comments.

---------------------------------------------------------------------------- */

/* Includes ---------------------------------------------------------------- */
#ifdef ST_OSLINUX
   #include "stos.h"
#else

/* C libs */
#include <string.h>

/* Standard includes */
#include "stlite.h"

/* STAPI */
#include "sttbx.h"
#endif
#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"     /* IO access layer */
#include "ioreg.h"      /* register mapping */

#include "d0299.h"      /* top level driver header */
#include "reg0299.h"    /* header for this file */


 

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


/* ----------------------------------------------------------------------------
Name: Reg0299_Install()

Description:
    install driver register table

Parameters:

Return Value:
---------------------------------------------------------------------------- */
ST_ErrorCode_t Reg0299_Install(STTUNER_IOREG_DeviceMap_t *DeviceMap)
{
#ifdef DVD_DBG_STTUNER_SATDRV_REG0299
    const char *identity = "STTUNER reg0299.c Reg0299_Install()";
#endif
   ST_ErrorCode_t Error = ST_NO_ERROR;

    
    if (Error != ST_NO_ERROR)
    {
#ifdef DVD_DBG_STTUNER_SATDRV_REG0299
        STTBX_Print(("%s fail error=%d\n", identity, Error));
#endif
    }
    {
#ifdef DVD_DBG_STTUNER_SATDRV_REG0299
        STTBX_Print(("%s installed ok\n", identity));
#endif
    }

    return (Error);
}



/* ----------------------------------------------------------------------------
Name: Reg0299_Open()

Description:
    install driver register table

Parameters:

Return Value:
---------------------------------------------------------------------------- */
ST_ErrorCode_t Reg0299_Open(STTUNER_IOREG_DeviceMap_t *DeviceMap, U32 ExternalClock)
{
#ifdef DVD_DBG_STTUNER_SATDRV_REG0299
    const char *identity = "STTUNER reg0299.c Reg0299_Open()";
#endif
    ST_ErrorCode_t Error = ST_NO_ERROR;

    DeviceMap->RegExtClk = ExternalClock;

#ifdef DVD_DBG_STTUNER_SATDRV_REG0299
    STTBX_Print(("%s External clock=%u\n", identity, ExternalClock));
#endif
    return(Error);
}



/* ----------------------------------------------------------------------------
Name: Reg0299_SetExtClk()

Description:
    Set the value of the external clock variable
Parameters:

Return Value:
---------------------------------------------------------------------------- */
void Reg0299_SetExtClk(STTUNER_IOREG_DeviceMap_t *DeviceMap, long Value)
{
    DeviceMap->RegExtClk = Value;
}


/* ----------------------------------------------------------------------------
Name: Reg0299_GetExtClk()

Description:
    Get the external clock value
Parameters:

Return Value:
---------------------------------------------------------------------------- */
long Reg0299_GetExtClk(STTUNER_IOREG_DeviceMap_t *DeviceMap)
{
    return (DeviceMap->RegExtClk);
}


/* ----------------------------------------------------------------------------
Name: Reg0299_CalcRefFrequency()

Description:
    Compute reference frequency
Parameters:

Return Value:
---------------------------------------------------------------------------- */
long Reg0299_CalcRefFrequency(STTUNER_IOREG_DeviceMap_t *DeviceMap, int k)
{
    return ( Reg0299_GetExtClk(DeviceMap) / ( (long)k + 1) );   /* cast to eliminate compiler warning --SFS */
}


/* ----------------------------------------------------------------------------
Name: Reg0299_CalcVCOFrequency()

Description:
    Compute VCO frequency
Parameters:

Return Value:
---------------------------------------------------------------------------- */
long Reg0299_CalcVCOFrequency(STTUNER_IOREG_DeviceMap_t *DeviceMap, int k, int m)
{
    return ( Reg0299_CalcRefFrequency(DeviceMap, k) * 4 * ( (long)m + 1) );  /* cast to eliminate compiler warning --SFS */
}


/* ----------------------------------------------------------------------------
Name: Reg0299_RegGetVCOFreq()

Description:
    Read registers and compute VCO frequency
Parameters:

Return Value:
---------------------------------------------------------------------------- */
long Reg0299_RegGetVCOFreq(STTUNER_IOREG_DeviceMap_t *DeviceMap, IOARCH_Handle_t IOHandle)
{ U8 RCR;
    /*	Read register	*/
    RCR =  STTUNER_IOREG_GetRegister(DeviceMap, IOHandle, R0299_RCR);

    /* compute VCO freq */
    return( Reg0299_CalcVCOFrequency(DeviceMap, STTUNER_IOREG_FieldExtractVal(RCR, F0299_K), STTUNER_IOREG_FieldExtractVal(RCR, F0299_M)) );
}


/* ----------------------------------------------------------------------------
Name: Reg0299_CalcF22Frequency()

Description:
    Compute F22 frequency
Parameters:

Return Value:
---------------------------------------------------------------------------- */
long Reg0299_CalcF22Frequency(STTUNER_IOREG_DeviceMap_t *DeviceMap, int k, int m, int f22)
{
    return (f22 != 0) ? ( Reg0299_CalcVCOFrequency(DeviceMap, k, m)/(128*(long)f22)) : 0;  /* cast to eliminate compiler warning --SFS */
}


/* ----------------------------------------------------------------------------
Name: Reg0299_RegGetF22Freq()

Description:
    Read registers and Compute F22 frequency
Parameters:

Return Value:
---------------------------------------------------------------------------- */
long Reg0299_RegGetF22Freq(STTUNER_IOREG_DeviceMap_t *DeviceMap, IOARCH_Handle_t IOHandle)
{  U8 RCRTemp;
    /*	Read registers	*/
    RCRTemp=STTUNER_IOREG_GetRegister(DeviceMap, IOHandle, R0299_RCR);
    

    return Reg0299_CalcF22Frequency(DeviceMap, STTUNER_IOREG_FieldExtractVal(RCRTemp, F0299_K),
                                               STTUNER_IOREG_FieldExtractVal(RCRTemp, F0299_M),
                                               STTUNER_IOREG_GetRegister(DeviceMap, IOHandle, R0299_F22FR) );
}


/* ----------------------------------------------------------------------------
Name: Reg0299_CalcMasterClkFrequency()

Description:
    Compute Master clock frequency
Parameters:

Return Value:
---------------------------------------------------------------------------- */
long Reg0299_CalcMasterClkFrequency(STTUNER_IOREG_DeviceMap_t *DeviceMap, int stdby, int dirclk, int k, int m, int p)
{
    long mclk;

    if(stdby)
        mclk = 0;
    else if(dirclk)
        mclk = Reg0299_GetExtClk(DeviceMap);
    else
        mclk = Reg0299_CalcVCOFrequency(DeviceMap, k, m)/((2+((long)p%2)) * STTUNER_Util_PowOf2((p/2)+1));  /* cast to eliminate compiler warning --SFS */

    return(mclk);
}


/* ----------------------------------------------------------------------------
Name: Reg0299_RegGetMasterFreq()

Description:
    Read registers and compute Master clock frequency
Parameters:

Return Value:
---------------------------------------------------------------------------- */
long Reg0299_RegGetMasterFreq(STTUNER_IOREG_DeviceMap_t *DeviceMap, IOARCH_Handle_t IOHandle)
{
	U8 RCRCopy,MCRCopy;
    /*	Read registers	*/
    RCRCopy=STTUNER_IOREG_GetRegister(DeviceMap, IOHandle, R0299_RCR);
    MCRCopy=STTUNER_IOREG_GetRegister(DeviceMap, IOHandle, R0299_MCR);

    return Reg0299_CalcMasterClkFrequency( DeviceMap, STTUNER_IOREG_FieldExtractVal(MCRCopy, F0299_STDBY),
                                                      STTUNER_IOREG_FieldExtractVal(RCRCopy, F0299_DIRCLK),
                                                      STTUNER_IOREG_FieldExtractVal(RCRCopy, F0299_K),
                                                      STTUNER_IOREG_FieldExtractVal(RCRCopy, F0299_M),
                                                      STTUNER_IOREG_FieldExtractVal(MCRCopy, F0299_P) ); /* Compute master clock freq */
}


/* ----------------------------------------------------------------------------
Name: Reg0299_CalcDerotatorFrequency()

Description:
    Compute Derotator frequency
Parameters:

Return Value:
    Derotator frequency (KHz)
---------------------------------------------------------------------------- */
long Reg0299_CalcDerotatorFrequency(int derotmsb, int derotlsb, long fm)
{
    long       dfreq;
    short int  Itmp;

    Itmp   = (derotmsb<<8) + derotlsb;
    dfreq  = ( ((long)Itmp) * (fm/10000L) ) / 65536L;
    dfreq *= 10;

    return(dfreq);
}


/* ----------------------------------------------------------------------------
Name: Reg0299_RegGetDerotatorFreq()

Description:
    Get registeres then Compute Derotator frequency
Parameters:

Return Value:
    Derotator frequency (KHz)
---------------------------------------------------------------------------- */
long Reg0299_RegGetDerotatorFreq(STTUNER_IOREG_DeviceMap_t *DeviceMap, IOARCH_Handle_t IOHandle)
{
	U8 cfrm[2];
    /*	Read registers	*/
    STTUNER_IOREG_GetContigousRegisters(DeviceMap, IOHandle, R0299_CFRM, 2,cfrm);

    return Reg0299_CalcDerotatorFrequency(cfrm[0],cfrm[1],Reg0299_RegGetMasterFreq(DeviceMap, IOHandle));
}


/* ----------------------------------------------------------------------------
Name: Reg0299_CalcAuxClkFrequency()

Description:
    Compute Auxiliary clock frequency
Parameters:

Return Value:
    Auxiliary Clock frequency
---------------------------------------------------------------------------- */
long Reg0299_CalcAuxClkFrequency(STTUNER_IOREG_DeviceMap_t *DeviceMap, int k, int m, int acr)
{
    long aclk, factor;
    int  function, value;

    function = (acr >> 5);
    value = acr & 0x1F;

⌨️ 快捷键说明

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