📄 reg0299.c
字号:
/* ----------------------------------------------------------------------------
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 + -