📄 hamaro_cx24128.c
字号:
/* hamaro_cx24128.c */
/*+++ *******************************************************************\
*
* Copyright and Disclaimer:
*
* ---------------------------------------------------------------
* ALL SOFTWARE, APPLICATIONS, DOCUMENTATION, OR MATERIALS
* FURNISHED HEREIN IS PROVIDED *AS IS*. CONEXANT DOES NOT MAKE
* ANY WARRANTIES, EITHER EXPRESS OR IMPLIED, AND HEREBY EXPRESSLY
* DISCLAIMS ANY AND ALL SUCH WARRANTIES TO THE EXTENT PERMITTED
* BY LAW, INCLUDING, SPECIFICALLY, ANY IMPLIED WARRANTY ARISING
* BY STATUTE OR OTHERWISE IN LAW OR FROM A COURSE OF DEALING OR
* USAGE OF TRADE. CONEXANT DOES NOT MAKE ANY WARRANTIES, EITHER
* EXPRESS OR IMPLIED, AND HEREBY EXPRESSLY DISCLAIMS ANY AND ALL
* SUCH WARRANTIES WITH RESPECT TO ALL SOFTWARE, APPLICATIONS,
* DOCUMENTATION, AND MATERIALS INCLUDING ALL IMPLIED WARRANTIES
* OF MERCHANTABILITY, OR OF MERCHANTABLE QUALITY, OR OF FITNESS
* FOR ANY PURPOSE, PARTICULAR, SPECIFIC OR OTHERWISE, OR OF
* NONINFRINGEMENT OF INTELLECTUAL PROPERTY RIGHTS OF OTHERS,
* RELATING TO THE SOFTWARE, APPLICATIONS, OPERATION,
* DOCUMENTATION, DATA OR RESULTS GENERATED BY THE OPERATION OR
* USE THEREOF, AND MATERIALS PROVIDED HEREIN. THE ENTIRE RISK AS
* TO THE SUBSTANCE, QUALITY AND PERFORMANCE OF SOFTWARE,
* APPLICATIONS, AND DOCUMENTATION DESCRIBING SUCH SOFTWARE
* REMAINS WITH THE BUYER.
*
* REGARDLESS OF WHETHER ANY REMEDY SET FORTH HEREIN FAILS OF ITS
* ESSENTIAL PURPOSE OR OTHERWISE, CONEXANT SHALL NOT BE LIABLE
* FOR ANY EXEMPLARY, SPECIAL, PUNITIVE, SPECULATIVE, INDIRECT,
* CONSEQUENTIAL OR INCIDENTAL DAMAGES OF ANY KIND (INCLUDING
* WITHOUT LIMITATION LOST PROFITS, LOSS OF INCOME, LOSS OF
* GOODWILL, OR OTHER TANGIBLE OR INTANGIBLE BUSINESS LOSS)
* ARISING OUT OF OR IN CONNECTION WITH, DIRECTLY OR INDIRECTLY,
* SOFTWARE, APPLICATIONS, DOCUMENTATION, OR ANY SERVICES OR
* MATERIALS PROVIDED HEREUNDER, OR USE OR INABILITY TO USE THE
* SOFTWARE, EVEN IF CONEXANT HAS BEEN ADVISED OF THE POSSIBILITY
* OF SUCH DAMAGES.
*
* Copyright (c) 2001 Conexant Systems, Inc.
* All Rights Reserved.
* ---------------------------------------------------------------
*
* Module Revision Id:
*
* $Header: hamaro_cx24128.c, 13, 2007-8-17 15:36:41, Tim Lu$
*
* Abstract:
*
* Contains CX24128-specific software.
*
\******************************************************************* ---*/
#include "hamaro.h" /* HAMARO include files, ordered */
#if HAMARO_INCLUDE_VIPER
extern const HAMARO_REGISTER_MAP hamaro_viper_register_map[];
/* Variables visible to this file only */
BOOL HAMARO_CX24128_refresh_tuner_pll_lock; /* Shadowing flag */
BOOL HAMARO_CX24128_tuner_pll_lock; /* Tuner pll lock status (uses HAMARO_CX24128_refresh_tuner_pll_lock) */
BOOL HAMARO_CX24128_refresh_tuner_pll_freq; /* Shadowing flag */
unsigned long HAMARO_CX24128_tuner_pll_freq; /* HAMAROTuner PLL frequency (uses refresh_tuner_pll_freq) */
/**************************************** I2C repeater functions ***************************************/
/*******************************************************************************************************
* HAMARO_TUNER_CX24128_SetDemodRepeaterMode()
* sets the demod to be in repeater Mode
*******************************************************************************************************/
BOOL
HAMARO_TUNER_CX24128_SetDemodRepeaterMode(HAMARO_NIM* p_nim)
{
unsigned char ucRegVal;
if (p_nim->demod_type == HAMARO_CX2430X)
{
ucRegVal = (p_nim->SBRead)(p_nim->demod_handle, 0x23, &p_nim->iostatus);
if (p_nim->iostatus)
{
return (False);
}
ucRegVal |= 0x20;
(p_nim->SBWrite)(p_nim->demod_handle, 0x23, ucRegVal, &p_nim->iostatus);
if (p_nim->iostatus)
{
return (False);
}
}
return (True);
}
/*******************************************************************************************************
* HAMARO_TUNER_CX24128_RepeaterModeReadData()
* Sets the demod in repeater mode and reads 8-bit data.
*******************************************************************************************************/
BOOL
HAMARO_TUNER_CX24128_RepeaterModeReadData(HAMARO_NIM* p_nim, unsigned long handle, HAMARO_SBaddress address, unsigned char* p_data_read)
{
if (p_data_read == 0)
{
return (False);
}
if (HAMARO_TUNER_CX24128_SetDemodRepeaterMode(p_nim) == False)
{
return(False);
}
*p_data_read = (*p_nim->SBRead)(handle, address, &p_nim->iostatus);
if (p_nim->iostatus != 0UL)
{
/* Hardware write error */
HAMARO_DRIVER_SET_ERROR(p_nim, HAMARO_REG_HDWR_REWTERR);
return (False);
}
return(True);
}
/*******************************************************************************************************
* HAMARO_TUNER_CX24128_RepeaterModeWriteData()
* Sets the demod in repeater mode and writes 8-bit data.
*******************************************************************************************************/
BOOL
HAMARO_TUNER_CX24128_RepeaterModeWriteData(HAMARO_NIM* p_nim, unsigned long handle, HAMARO_SBaddress address, unsigned char value)
{
if (HAMARO_TUNER_CX24128_SetDemodRepeaterMode(p_nim) == False)
{
return(False);
}
(*p_nim->SBWrite)(handle, address, value, &p_nim->iostatus);
if (p_nim->iostatus != 0UL)
{
return(False);
}
return(True);
}
/*******************************************************************************************************
* HAMARO_TUNER_CX24128_EnableDemodRepeaterMode()
* Enables the demod's repeater
*******************************************************************************************************/
BOOL
HAMARO_TUNER_CX24128_EnableDemodRepeaterMode(HAMARO_NIM *p_nim)
{
unsigned char ucRegVal;
/* Disable BTI mode */
ucRegVal = (p_nim->SBRead)(p_nim->demod_handle, 0x23, &p_nim->iostatus);
if (p_nim->iostatus)
{
return (False);
}
ucRegVal &= 0x7F;
(p_nim->SBWrite)(p_nim->demod_handle, 0x23, ucRegVal, &p_nim->iostatus);
if (p_nim->iostatus)
{
return (False);
}
if (p_nim->demod_type == HAMARO_CX2430X)
{
/* Set the repeater mode. */
ucRegVal |= 0x40;
(p_nim->SBWrite)(p_nim->demod_handle, 0x23, ucRegVal, &p_nim->iostatus);
if (p_nim->iostatus)
{
return (False);
}
}
return(True);
}
/**************************************** Viper functions **********************************************/
/*******************************************************************************************************
* HAMARO_TUNER_CX24128_LockTest()
* Lock test.
*******************************************************************************************************/
static BOOL
HAMARO_TUNER_CX24128_LockTest(HAMARO_NIM *p_nim)
{
unsigned long reg_value = 0;
if (HAMARO_RegisterRead(p_nim, HAMARO_CX24128_LOCK_DET, ®_value, p_nim->tuner.cx24128.io_method) != True)
{
return(False);
}
if (reg_value == 1UL)
{
return (True);
}
/* Check back again after some delay */
HAMARO_OS_Wait (p_nim, HAMARO_VIPER_LOCK_TEST_WAIT_TIME);
if (HAMARO_RegisterRead(p_nim, HAMARO_CX24128_LOCK_DET, ®_value, p_nim->tuner.cx24128.io_method) != True)
{
return(False);
}
if (reg_value == 0UL)
{
return (False);
}
else
{
return (True);
}
}
/*******************************************************************************************************
* HAMARO_TUNER_CX24128_SetReferenceFreq()
* sets the current reference frequency value to tuner register and nim
*******************************************************************************************************/
static BOOL
HAMARO_TUNER_CX24128_SetReferenceFreq(HAMARO_NIM *p_nim, /* pointer to nim */
HAMARO_RFREQVAL rfreqvalue) /* reference frequency value */
{
unsigned char reg_value, read_value = 0;
unsigned char ref_freq_shadow;
HAMARO_TUNER_CX24128_VALIDATE(p_nim);
reg_value = (unsigned char)(rfreqvalue & 0x01);
if (p_nim->tuner.cx24128.io_method == HAMARO_VIPER_I2C_IO)
{
if (HAMARO_TUNER_CX24128_RepeaterModeReadData(p_nim, p_nim->tuner.cx24128.tuner_handle, HAMARO_CX24128_XTAL_02, &read_value) == False)
{
return (False);
}
}
else
{
return (False);
}
if (p_nim->tuner.cx24128.vcodiv == HAMARO_VCODIV4 && p_nim->tuner.cx24128.chipid == HAMARO_VIPER_CHIP_ID) /* CR 21579 */
{
reg_value = 0x01;
}
if (p_nim->tuner.cx24128.register_offset == 0) /* Tuner A */
{
ref_freq_shadow = (unsigned char)((read_value >> 1) & 0x01);
read_value &= 0xFD;
read_value |= (reg_value << 1);
}
else /* Tuner B */
{
if (p_nim->tuner.cx24128.chipid == HAMARO_VIPER_CHIP_ID && p_nim->xtal >= HAMARO_CX24128_A3_XTAL_FREQ) /* Always set reference division ratio to /2 for A3 */
{
reg_value = 0x01;
}
ref_freq_shadow = (unsigned char)(read_value & 0x01);
read_value &= 0xFE;
read_value |= reg_value;
}
if (ref_freq_shadow != reg_value)
{
if (p_nim->tuner.cx24128.io_method == HAMARO_VIPER_I2C_IO)
{
if (HAMARO_TUNER_CX24128_RepeaterModeWriteData(p_nim, p_nim->tuner.cx24128.tuner_handle, HAMARO_CX24128_XTAL_02, read_value) == False)
{
return (False);
}
}
else
{
return (False);
}
}
return(True);
} /* HAMARO_TUNER_CX24128_SetReferenceFreq() */
/*******************************************************************************************************
* HAMARO_TUNER_CX24128_SetClkInversion()
* sets the clock inversion to both nim structure and to tuner register
*******************************************************************************************************/
BOOL
HAMARO_TUNER_CX24128_SetClkInversion(HAMARO_NIM *p_nim, /* pointer to nim */
BOOL clkinversion) /* clock inversion value */
{
unsigned long reg_value;
HAMARO_TUNER_CX24128_VALIDATE(p_nim);
reg_value = (unsigned long)clkinversion;
p_nim->tuner.cx24128.clkinversion = clkinversion;
/* set the clock inversion to the tuner */
if(HAMARO_RegisterWrite(p_nim, HAMARO_CX24128_DSM_CLK, reg_value, p_nim->tuner.cx24128.io_method) != True) return(False);
return(True);
} /* HAMARO_TUNER_CX24128_SetClkInversion() */
/*******************************************************************************************************
* HAMARO_TUNER_CX24128_SetEnableRegister()
* sets the enable bits to tuner
*******************************************************************************************************/
BOOL
HAMARO_TUNER_CX24128_SetEnableRegister(HAMARO_NIM *p_nim, /* pointer to nim */
unsigned char enable) /* enable bits */
{
unsigned long reg_value;
HAMARO_TUNER_CX24128_VALIDATE(p_nim);
reg_value = (unsigned long)enable;
/* set the enable bits to the tuner */
if(HAMARO_RegisterWrite(p_nim, HAMARO_CX24128_EN, reg_value, p_nim->tuner.cx24128.io_method) != True) return(False);
#if HAMARO_INCLUDE_RATTLER
/* Rattler specific */
if (p_nim->tuner_type == HAMARO_CX24113)
{ /* Enable FTA LNA */
if (HAMARO_RegisterWrite(p_nim, HAMARO_CX24128_LNA_EN, 1UL, p_nim->tuner.cx24128.io_method) != True)
{
return(False);
}
}
#endif /* HAMARO_INCLUDE_RATTLER */
return(True);
} /* HAMARO_TUNER_CX24128_SetEnableRegister() */
/*******************************************************************************************************
* HAMARO_TUNER_CX24128_GlobalSetRefSelSpi()
* Program the global ref_sel_spi bit
*******************************************************************************************************/
static BOOL
HAMARO_TUNER_CX24128_GlobalSetRefSelSpi(HAMARO_NIM* p_nim, unsigned char value)
{
unsigned char reg_val = 0;
if (p_nim->tuner.cx24128.io_method == HAMARO_VIPER_I2C_IO)
{
if (HAMARO_TUNER_CX24128_RepeaterModeReadData(p_nim, p_nim->tuner.cx24128.tuner_handle, HAMARO_CX24128_XTAL_02, ®_val) == False)
{
return (False);
}
}
else
{
return (False);
}
reg_val &= 0xFB;
reg_val |= ((value & 0x01) << 2);
if (p_nim->tuner.cx24128.io_method == HAMARO_VIPER_I2C_IO)
{
if (HAMARO_TUNER_CX24128_RepeaterModeWriteData(p_nim, p_nim->tuner.cx24128.tuner_handle, HAMARO_CX24128_XTAL_02, reg_val) == False)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -