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

📄 lgtunerdrv.c

📁 QPSK Tuner details, for conexant chipset.
💻 C
字号:
/*************************************************************************

* LGTunrDRV.C                                                           *

* Copyright ? Shenzhen Coship Electronics Co.#,LTD.  2002.3             *

* All rights reserved.                                                  *

*                                                                       *

* Author: Zhou Cheng                                                    *

* Date:  2002/3/13                                                      *

* Compiler:					                                            *

*                                                                       *

* Description:	LG Tuner PLL IC Driver ( used in LG TDQB-S001F Tuner )  *
 
* Notes:                                                                *

* Update:   2002/3/6  Zhou Cheng										*

*************************************************************************/
// For LG TDQB-S001F Tuner
#include "cs_typedef.h"
#include "CSHDI_typedef.h"
#include "CSQpskCFG.h"
#include "cs_os.h"
#include "CS_I2c.h"
#include "LGTunerDRV.h"

#define TUNER_IF		0
#define TUNE_STEP		125
#define TUNELIMIT_LOW	900000		// KHz  9f8qJiION*(950M - 2150M)
#define TUNELIMIT_HIGH	2200000		// KHz  Ub@oJJ517E?m
#define BANDFREQREF		1600000		// KHz
#define PLLLOCK_MASK	0x40
#define PLLLOCK_FLAG	0x40

static HCSHANDLE hLGI2C[MAX_TUNER_NUM];
//ADD BY SFG FOR COMPILER
extern CSQPSK_Error_t STV0299EnableTunerI2C ( CSHDITunerIndex bTunerIndex );
extern CSQPSK_Error_t STV0299DisableTunerI2C (CSHDITunerIndex bTunerIndex);
//add end
CSQPSK_Error_t LGInit(CSHDITunerIndex bTunerIndex)
{
	int ErrorCode;
	
	hLGI2C[bTunerIndex] = 0;
	ErrorCode = CSI2COpen(bTunerIndex,LGTunerADDR,&hLGI2C[bTunerIndex]);
	if (ErrorCode != CSI2C_SUCCESS)
	{
		return CSQPSK_I2C_ERROR;
	}
	return CSQPSK_SUCCESS;
}

CSQPSK_Error_t LGTerm(CSHDITunerIndex bTunerIndex)
{
	int ErrorCode;
	
	ErrorCode = CSI2CClose(hLGI2C[bTunerIndex]);
	if (ErrorCode != CSI2C_SUCCESS)
	{
		return CSQPSK_I2C_ERROR;
	}
	return CSQPSK_SUCCESS;
}

/* +==========================================================================+ */
/* | Function:	IhVC TUNER 5wP3F5BJ											  |	*/		
/* | Input:																	  |	*/
/* | Output:	N^															  |	*/
/* | Return:	2YWw3I9&1jV>												  |	*/
/* +==========================================================================+ */
CSQPSK_Error_t LGTunerWrtFreq( CSHDITunerIndex bTunerIndex, BYTE *pbTune ,DWORD dwDataLen)
{
	// sfg int ErrorCode;
	CSQPSK_Error_t ErrorCode;
	if ( CSI2CRequestBus_inner(bTunerIndex, CSHDI_TIMEOUT_INFINITY) == CSI2C_SUCCESS )
	{
		STV0299EnableTunerI2C(bTunerIndex);
		
		ErrorCode = CSI2CWriteWithStop ( hLGI2C[bTunerIndex], pbTune, dwDataLen ) ;

		STV0299DisableTunerI2C(bTunerIndex);
		
		CSI2CReleaseBus_inner(bTunerIndex);
		if ( ErrorCode == CSI2C_SUCCESS )
		{
			return CSQPSK_SUCCESS;
		}
	}
	
	return CSQPSK_I2C_ERROR;

}

/* +==========================================================================+ */
/* | Function:	<l2b TUNER PLL W4L,											  |	*/		
/* | Input:		N^															  |	*/
/* | Output:	6A3v5DJ}>]													  |	*/
/* | Return:	0 -- PLL Lost Lock, 1 -- PLL Lock							  |	*/
/* +==========================================================================+ */

CSQPSK_Error_t LGTunerGetPLLStatus ( CSHDITunerIndex bTunerIndex, int *pnPllLock )
{
	int nResult;
	BYTE bValue;

	if ( CSI2CRequestBus_inner(bTunerIndex, CSHDI_TIMEOUT_INFINITY) == CSI2C_SUCCESS )
	{
		STV0299EnableTunerI2C(bTunerIndex);
		
		nResult = CSI2CReadWithStop ( hLGI2C[bTunerIndex], &bValue, 1 ) ;

		STV0299DisableTunerI2C(bTunerIndex);

		CSI2CReleaseBus_inner(bTunerIndex);

		if ( nResult == CSI2C_SUCCESS )
		{
			if (( bValue & PLLLOCK_MASK ) == PLLLOCK_FLAG )
				*pnPllLock = TRUE;
			else
				*pnPllLock = FALSE;

			return CSQPSK_SUCCESS;
		}
	}

	return CSQPSK_I2C_ERROR;
}	

/* +==========================================================================+ */
/* | Function:	IhVC TUNER 5wP3F5BJ											  |	*/		
/* | Input:		F5BJ (KHzN*5%N;)											  |	*/
/* | Output:	N^															  |	*/
/* | Return:	2YWw3I9&1jV>												  |	*/
/* +==========================================================================+ */
CSQPSK_Error_t LGTunerSetFreq( CSHDITunerIndex bTunerIndex, DWORD dwTuneFreq)
{
	BYTE pbValue[4];

	DWORD dwFrequency;

	pbValue[2] = 0x84;

//	if (( dwTuneFreq < TUNELIMIT_LOW ) || ( dwTuneFreq > TUNELIMIT_HIGH ) )
//		return FAILURE;			// JdHkF5BJ3,3vTUNER5wP376N'

	if ( dwTuneFreq < BANDFREQREF )
		pbValue[3] = 0x84;
	else
		pbValue[3] = 0x80;
	/*
	dwFrquency	= (dwTuneFreq + 0) / 125 
	*/
	dwFrequency = ( dwTuneFreq + TUNER_IF ) / TUNE_STEP ; 
	
	pbValue[0] = (BYTE)( ( dwFrequency >> 8 ) & 0x7F );
	pbValue[1] = (BYTE)( dwFrequency & 0xFF );

	return ( LGTunerWrtFreq ( bTunerIndex,pbValue, 4 ) ) ;

}

⌨️ 快捷键说明

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