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

📄 hamaro_cx24128.c

📁 机顶盒Hamaro解调器驱动。包含自动搜台
💻 C
📖 第 1 页 / 共 5 页
字号:
/* 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, &reg_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, &reg_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, &reg_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 + -