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

📄 drv_ch_i2c_com.c

📁 ST5100 driver files for ST chipset
💻 C
📖 第 1 页 / 共 3 页
字号:
/******************************************************************************

File Name   : drv_ch_i2c.c

Description : Channel I2C(Inter IC bus) driver functions

Copyright (C) 2004

******************************************************************************/

/********************************************************************
 Header Files
 ********************************************************************/
/* global include */
#include <string.h>
//  #include "types.h"
//  #include "iic.h"
#if defined(SUPPORT_NEC_CHIP)	
#include "types.h"
#include "htype.h"
#include "Iic.h"
#elif defined(CHIPSET_ST)
#include "stddefs.h"
#include "sti2c.h"
#endif
/* local include */
#include "app_data.h"//  7710_T
#include "i2c.h"
#include "sttbx.h"//  7710_T


#include "drv_ch_i2c_com.h"
#include "ddi_channel.h"
#include "ddi_uart.h"
#include "ddi_hw.h"
#include "drv_tuner_com.h"
#include "ddi_ch_common.h"

#include "vkernel.h"

#include "sss_dbg.h"
// #include "ch_print.h"

//#define STTBX_PRINT
#include "sttbx.h"
/********************************************************************
							Debug Option
 ********************************************************************/

//#define CH_PRINT				// All Print Enable /Disable
#define CH_PRINT_ERROR			// Error Print Enable / Disable
//#define CH_PRINT_WARNING
//#define CH_PRINT_DEBUG
//#define CH_PRINT_DATA

#ifdef	CHANNEL_DEBUG
#define	PrintInfo(_x_)	STTBX_Print (_x_)
#define	PrintDebug(_x_)	STTBX_Print (_x_)
#else
#define	PrintInfo(_x_)	
#define	PrintDebug(_x_)
#endif

#if defined(CH_PRINT_ERROR)
#define	PrintError(_x_)	STTBX_Print (_x_)
#else
#define	PrintError(_x_)
#endif

#ifdef	CHANNEL_DEBUG
#define	PrintDump(_x_)	STTBX_Print (_x_)
#else
#define	PrintDump(_x_)
#endif

/*=============================================================================
	Definitions
=============================================================================*/
#define DDI_CH_I2C_DEVICEID			(0)

#define I2C_BUS_ACCESS_TIMEOUT		(100)
#define DDI_CH_I2C_WRITE_TIMEOUT	(100)
#define DDI_CH_I2C_READ_TIMEOUT		(100)// SN栏肺 message啊 救棵扼坷绰 巩力甫 秦搬窍扁 困秦 10->100栏肺 蔼阑 淋   20060111

#define	DDI_CH_I2C_OK				(0)
#define	DDI_CH_I2C_SEND_BYTES		(1)

#ifdef PHILIPS_TUNER
unsigned char DEMOD_REG[DEMOD_NUM_OF_REG] = 
{
/*		0    1    2    3        4    5    6    7        8    9    A    B        C    D    E    F    */
/* 0 */	0x21,0x97,0x00,0xD4,	0x53,0x0B,0xAA,0x2A,	0x09,0x00,0x00,0x00,	0x8C,0x02,0x00,0x00,
#if defined(CI_DVDC_S)
/* 1 */	0x80,0x85,0x89,0x00,	0x00,0x00,0x00,0xB0,	0x80,0x40,0x61,0xB0,	0x00,0x00,0x00,0x00,
#else//0x11 : 8D->85 (conti. clock) on Dec-8, for new aston cam's aging stability
/* 1 */	0x80,0x85,0x89,0x00,	0x00,0x00,0x00,0xB0,	0x80,0x40,0x61,0xB0,	0x00,0x00,0x00,0x00,
#endif
/* 2 */	0x81,0x00,0x00,0x00,	0x00,0x00,0x00,0x00,	0x00,0x00,0x00,0x00,	0x00,0x00,0x00,0x00,
/* 3 */	0x03,0x55,0x00,0x00,	0x78,0x00,0x30,0x44,	0x00,0x00,0x2F,0x00,	0x06,0x00,0x00,0x8A,
/* 4 */	0x64,0x4F,0x43,0x00,	0x00,0x00,0x00,0x00,	0xE0,0x10,0x38,0xF0,	0x00,0x00,0x00,0x00,
/* 5 */	0x00,0x00,0x00,0x00,	0x00,0x07
}; /* initial value */
#else
unsigned char DEMOD_REG[2][DEMOD_NUM_OF_REG] = 
{
{
/*		0    1    2    3        4    5    6    7        8    9    A    B        C    D    E    F    */
/* 0 */	0x21,0x97,0x00,0xD4,	0x53,0x2B,0xAA,0x2A,	0x09,0x00,0x00,0x00,	0x8C,0x02,0x00,0x00,
#if defined(CI_DVDC_S)
/* 1 */	0x80,0x85,0x89,0x00,	0x00,0x00,0x00,0xB0,	0x80,0x40,0x61,0xB0,	0x00,0x00,0x00,0x00,
#else //0x11 : 8D->85 (conti. clock) on Dec-8, for new aston cam's aging stability
/* 1 */	0x80,0x85,0x89,0x00,	0x00,0x00,0x00,0xB0,	0x80,0x40,0x61,0xB0,	0x00,0x00,0x00,0x00,
#endif
/* 2 */	0x81,0x00,0x00,0x00,	0x00,0x00,0x00,0x00,	0x00,0x00,0x00,0x00,	0x00,0x00,0x00,0x00,
/* 3 */	0x03,0x55,0x00,0x00,	0x78,0x00,0x30,0x44,	0x00,0x00,0x2F,0x00,	0x06,0x00,0x00,0x0A,
/* 4 */	0x64,0x4F,0x43,0x00,	0x00,0x00,0x00,0x00,	0xE0,0x10,0x38,0xF0,	0x00,0x00,0x00,0x00,
/* 5 */	0x00,0x00,0x00,0x00,	0x00,0x07
}
,
{
/*		0    1    2    3        4    5    6    7        8    9    A    B        C    D    E    F    */
/* 0 */	0x21,0x97,0x00,0xD4,	0x53,0x2B,0xAA,0x2A,	0x09,0x00,0x00,0x00,	0x8C,0x02,0x00,0x00,
#if defined(CI_DVDC_S)
/* 1 */	0x80,0x85,0x89,0x00,	0x00,0x00,0x00,0xB0,	0x80,0x40,0x61,0xB0,	0x00,0x00,0x00,0x00,
#else //0x11 : 8D->85 (conti. clock) on Dec-8, for new aston cam's aging stability
/* 1 */	0x80,0x85,0x89,0x00,	0x00,0x00,0x00,0xB0,	0x80,0x40,0x61,0xB0,	0x00,0x00,0x00,0x00,
#endif
/* 2 */	0x81,0x00,0x00,0x00,	0x00,0x00,0x00,0x00,	0x00,0x00,0x00,0x00,	0x00,0x00,0x00,0x00,
/* 3 */	0x03,0x55,0x00,0x00,	0x78,0x00,0x30,0x44,	0x00,0x00,0x2F,0x00,	0x06,0x00,0x00,0x0A,
/* 4 */	0x64,0x4F,0x43,0x00,	0x00,0x00,0x00,0x00,	0xE0,0x10,0x38,0xF0,	0x00,0x00,0x00,0x00,
/* 5 */	0x00,0x00,0x00,0x00,	0x00,0x07
}
}; /* initial value */
#endif

/*=============================================================================
	Export Variables
=============================================================================*/
#if defined(CHIPSET_ST)	
extern ST_DeviceName_t	g_I2CDeviceName[];// 
#endif
/*=============================================================================
	Variables
=============================================================================*/

#if defined(CHIPSET_ST)	
STI2C_Handle_t	g_hDEMOD_I2CHandle[MAXIMUM_NUMBER_UNITS];
STI2C_Handle_t	g_hTUNER_I2CHandle[MAXIMUM_NUMBER_UNITS];
STI2C_Handle_t	g_hDEMOD_Ter_I2CHandle[MAXIMUM_NUMBER_UNITS];
STI2C_Handle_t	g_hTUNER_Ter_I2CHandle[MAXIMUM_NUMBER_UNITS];
#else
#endif

unsigned long	g_hDemod_I2c_Addr[MAXIMUM_NUMBER_UNITS];
unsigned long	g_hTuner_I2c_Addr[MAXIMUM_NUMBER_UNITS];
unsigned char	g_hI2c_DeviceId[MAXIMUM_NUMBER_UNITS];



#define CH_I2C_TUNER_HANDLEID_SAT 0//  7710_sh
#define CH_I2C_DEMOD_HANDLEID_SAT 1//  7710_sh
#define CH_I2C_TUNER_HANDLEID_TER 2//  7710_sh
#define CH_I2C_DEMOD_HANDLEID_TER 3//  7710_sh

int	DRV_Ch_Sat_I2c_Init(unsigned char unitId);
int DRV_Ch_Ter_I2c_Init(unsigned char unitId);

/*=============================================================================
	Function	: drv_ch_i2c_Init
	Description	: STI2C_Open
	Input		:
	Output		:
	Return		: TRUE if error, FALSE if success
=============================================================================*/
int	DRV_Ch_I2c_Init(unsigned char unitId, unsigned long type)
{

	switch(type)
	{
		case DDI_CHANNEL_TYPE_SAT:
			DRV_Ch_Sat_I2c_Init(unitId);
			break;
		case DDI_CHANNEL_TYPE_TER:
			DRV_Ch_Ter_I2c_Init(unitId);
			break;
		case DDI_CHANNEL_TYPE_CAB:
			break;
		default:
			break;
	}
}

/*=============================================================================
	Function	: drv_ch_i2c_Init
	Description	: STI2C_Open
	Input		:
	Output		:
	Return		: TRUE if error, FALSE if success
=============================================================================*/
int	DRV_Ch_Sat_I2c_Init(unsigned char unitId)
{
	int			TotalError = DDI_CH_I2C_OK;
	
	
#if defined(CHIPSET_ST)	
	int			ErrCode;
	STI2C_OpenParams_t		I2COpenParams;

	
	I2COpenParams.BusAccessTimeOut 	= CHANNEL_I2C_ACCESS_TIMEOUT;
	I2COpenParams.AddressType		= STI2C_ADDRESS_7_BITS;
	I2COpenParams.I2cAddress 		= g_hTuner_I2c_Addr[unitId];	

	//  7710_T ErrCode = STI2C_Open(g_I2CDeviceName[I2C_BACK_DEVICE], &I2COpenParams, &g_hTUNER_I2CHandle[unitId]);
	ErrCode = I2C_Open(I2C_BACK, CH_I2C_TUNER_HANDLEID_SAT, g_hTuner_I2c_Addr[unitId]);
	if(ErrCode != DDI_CH_I2C_OK){
		PrintError(("drv_ch_Sat_i2c_Init() Error :<Tuner> STI2C_Open(%s) ErrCode : 0x%x \n" , I2C_GET_DEVICENAME(I2C_BACK) , ErrCode ));
		TotalError |= ErrCode;
	}
	

	I2COpenParams.BusAccessTimeOut 	= CHANNEL_I2C_ACCESS_TIMEOUT;
	I2COpenParams.AddressType		= STI2C_ADDRESS_7_BITS;
	I2COpenParams.I2cAddress 		= g_hDemod_I2c_Addr[unitId];	
	PrintDebug((">> drv_ch_Sat_i2c_Init Unit Id [%x]==> I2COpenParams_2.I2cAddress  %x \n",unitId,I2COpenParams.I2cAddress  ));
	//  7710_T ErrCode = STI2C_Open(g_I2CDeviceName[I2C_BACK_DEVICE], &I2COpenParams, &g_hDEMOD_I2CHandle[unitId]);
	ErrCode = I2C_Open(I2C_BACK, CH_I2C_DEMOD_HANDLEID_SAT,g_hDemod_I2c_Addr[unitId]);

	if(ErrCode != DDI_CH_I2C_OK){
		PrintError(("drv_ch_Sat_i2c_Init() Error :<Demod>  STI2C_Open(%s , 0x%x) 0x%x \n" , I2C_GET_DEVICENAME(I2C_BACK) , g_hDEMOD_I2CHandle[unitId] , ErrCode ));
		TotalError |= ErrCode;
	}
#else
#endif
	return TotalError;

}


int DRV_Ch_Ter_I2c_Init(unsigned char unitId)
{
	int			TotalError = DDI_CH_I2C_OK;

	int			ErrCode;
	STI2C_OpenParams_t		I2COpenParams;

	
	g_hTuner_I2c_Addr[unitId]=0xC0;
	g_hDemod_I2c_Addr[unitId]=0x86;

	ErrCode = I2C_Open(I2C_BACK, CH_I2C_TUNER_HANDLEID_SAT, g_hTuner_I2c_Addr[unitId]);
	if(ErrCode != ST_NO_ERROR){
		PrintError(("DRV_Ch_Ter_I2c_Init() Error :<Tuner> STI2C_Open(%s , 0x%x) 0x%x \n" , I2C_GET_DEVICENAME(I2C_BACK) , ErrCode ));
		TotalError |= ErrCode;
	}

	ErrCode = I2C_Open(I2C_BACK, CH_I2C_DEMOD_HANDLEID_SAT, g_hDemod_I2c_Addr[unitId]);
	if(ErrCode != ST_NO_ERROR){
		PrintError(("DRV_Ch_Ter_I2c_Init() Error :<Tuner> STI2C_Open(%s , 0x%x) 0x%x \n" ,I2C_GET_DEVICENAME(I2C_BACK) , ErrCode ));
		TotalError |= ErrCode;
	}
	
#if 0
#if defined(CHIPSET_ST)	
	
	int			ErrCode;
	STI2C_OpenParams_t		I2COpenParams;

	
	I2COpenParams.BusAccessTimeOut 	= CHANNEL_I2C_ACCESS_TIMEOUT;
	I2COpenParams.AddressType		= STI2C_ADDRESS_7_BITS;
	I2COpenParams.I2cAddress 		= g_hTuner_I2c_Addr[unitId];	
	
	ErrCode = STI2C_Open(g_I2CDeviceName[I2C_BACK_DEVICE], &I2COpenParams, &g_hTUNER_Ter_I2CHandle[unitId]);

	if(ErrCode != DDI_CH_I2C_OK){
		PrintError(("drv_ch_ter_i2c_Init() Error :<Tuner> STI2C_Open(%s , 0x%x) 0x%x \n" , g_I2CDeviceName[unitId] , g_hTUNER_Ter_I2CHandle[unitId] , ErrCode ));
		TotalError |= ErrCode;
	}
	

	I2COpenParams.BusAccessTimeOut 	= CHANNEL_I2C_ACCESS_TIMEOUT;
	I2COpenParams.AddressType		= STI2C_ADDRESS_7_BITS;
	I2COpenParams.I2cAddress 		= g_hDemod_I2c_Addr[unitId];	

	ErrCode = STI2C_Open(g_I2CDeviceName[I2C_BACK_DEVICE], &I2COpenParams, &g_hDEMOD_Ter_I2CHandle[unitId]);
	if(ErrCode != DDI_CH_I2C_OK){
		PrintError(("drv_ch_ter_i2c_Init() Error :<Demod>  STI2C_Open(%s , 0x%x) 0x%x \n" , g_I2CDeviceName[unitId] , g_hDEMOD_Ter_I2CHandle[unitId] , ErrCode ));
		TotalError |= ErrCode;
	}
#elif defined(SUPPORT_NEC_CHIP)

#else
	PrintError(("[DRV_Ch_I2c_Write()] UNKNOWN CHIP\n\r"));
#endif	
#endif

	return TotalError;
} /* end of drv_ch_ter_i2c_Init */


/*=============================================================================
	Function	: drv_i2c_Write
	Description	: STI2C_Write
	Input		:
	Output		:
	Return		: TRUE if error, FALSE if success
=============================================================================*/
int DRV_Ch_I2c_Write(unsigned char unitId, unsigned long Handle,	unsigned char *Buffer, unsigned long NumberToWrite )
{
	int				ErrCode;
	unsigned int	NumberWritten;

#if defined(CHIPSET_ST)	
	STI2C_Lock((STI2C_Handle_t)Handle,TRUE);
	ErrCode = STI2C_Write((STI2C_Handle_t)Handle, (const unsigned char *)Buffer, (unsigned int)NumberToWrite, (unsigned int)DDI_CH_I2C_WRITE_TIMEOUT, &NumberWritten);
	STI2C_Unlock((STI2C_Handle_t)Handle);

#elif defined(SUPPORT_NEC_CHIP)
	MMAC_IIC_WRITE_IOPB			iopb;

	// buffer[0] -> subaddr buffer[1] -> data.
	iopb.deviceNumber	= (MMAC_IIC_DEV_NUM)g_hI2c_DeviceId[unitId];
	iopb.data			= &Buffer[1];
	iopb.length			= (unsigned long)(NumberToWrite-1);
	iopb.slaveAddr		= (unsigned char)g_hDemod_I2c_Addr[unitId];
	iopb.numSubAddressBytes	= MMAC_IIC_ONE_BYTE_ADDRESSING;
	iopb.subAddr		= (unsigned long)Buffer[0];
	iopb.timeout		= (unsigned long)DDI_CH_I2C_WRITE_TIMEOUT;

	ErrCode = (int)MMAC_IIC_Write(&iopb);
#else	
		PrintError(("[DRV_Ch_I2c_Write()] UNKNOWN CHIP\n\r"));
#endif
	if(ErrCode != DDI_CH_I2C_OK)
	{
		PrintError(("DRV_Ch_I2c_Write() Fails[%x] Handle:[%x] SubAddr:[%x] NtR:[%d]\n\r", ErrCode, Handle, Buffer[0], NumberWritten));
	}
	else
	{
#ifdef CH_PRINT_DATA
		int		i=0;
		PrintDump((" drv_i2c_Write() OK \n"));
		for(i = 0; i < NumberToWrite; i++)
			PrintDump(("[0x%02X]", Buffer[i]));
		PrintDump(("\n"));
#endif
	}

	return ErrCode;
} /* end of drv_i2c_Write */

/*=============================================================================
	Function	: drv_i2c_Write
	Description	: STI2C_Write
	Input		:
	Output		:
	Return		: TRUE if error, FALSE if success
=============================================================================*/
int DRV_Ch_Tuner_I2c_Write(unsigned char unitId, unsigned long Handle,	 unsigned char *Buffer, unsigned long NumberToWrite )
{
	int				ErrCode;
	unsigned int	NumberWritten;

#if defined(CHIPSET_ST)	
	STI2C_Lock((STI2C_Handle_t)Handle,TRUE);
	ErrCode = STI2C_Write((STI2C_Handle_t)Handle, Buffer, (unsigned int)NumberToWrite, (unsigned int)DDI_CH_I2C_WRITE_TIMEOUT, &NumberWritten);
	STI2C_Unlock((STI2C_Handle_t)Handle);

#elif defined(SUPPORT_NEC_CHIP)
	MMAC_IIC_WRITE_IOPB			iopb;

	// buffer[0] -> subaddr buffer[1] -> data.
	iopb.deviceNumber	= (MMAC_IIC_DEV_NUM)g_hI2c_DeviceId[unitId];
	iopb.data			= &Buffer[0];
	iopb.length			= (unsigned long)(NumberToWrite);
	iopb.slaveAddr		= (unsigned char)g_hTuner_I2c_Addr[unitId];
	iopb.numSubAddressBytes	= MMAC_IIC_ZERO_BYTE_ADDRESSING;
	iopb.subAddr		= (unsigned long)0;
	iopb.timeout		= (unsigned long)DDI_CH_I2C_WRITE_TIMEOUT;

	ErrCode = (int)MMAC_IIC_Write(&iopb);
#else	
		PrintError(("[DRV_Ch_I2c_Write()] UNKNOWN CHIP\n\r"));
#endif
	if(ErrCode != DDI_CH_I2C_OK)
	{
		PrintError(("DRV_Ch_Tuner_I2c_Write() Fails[%x] Handle:[%x] SubAddr:[%x] NtR:[%d]\n\r", ErrCode, Handle, Buffer[0], NumberWritten));
	}
	else
	{
#ifdef CH_PRINT_DATA
		int		i=0;
		PrintDump((" drv_i2c_Write() OK \n"));
		for(i = 0; i < NumberToWrite; i++)
			PrintDump(("[0x%02X]", Buffer[i]));
		PrintDump(("\n"));
#endif
	}

	return ErrCode;
} /* end of drv_i2c_Write */



/*=============================================================================
	Function	: drv_i2c_Write
	Description	: STI2C_Write
	Input		:
	Output		:
	Return		: TRUE if error, FALSE if success
=============================================================================*/
int DRV_Ch_I2c_WriteNoStop(unsigned char unitId, unsigned long  Handle,	unsigned char	*Buffer, unsigned long NumberToWrite)
{
	int			ErrCode;
	unsigned int			NumberWritten;

#if defined(CHIPSET_ST)

	ErrCode = STI2C_WriteNoStop(Handle, Buffer, NumberToWrite, DDI_CH_I2C_WRITE_TIMEOUT, &NumberWritten);

#elif defined(SUPPORT_NEC_CHIP)
	MMAC_IIC_WRITE_IOPB			iopb;

	// buffer[0] -> subaddr buffer[1] -> data.
	iopb.deviceNumber	= (MMAC_IIC_DEV_NUM)g_hI2c_DeviceId[unitId];
	iopb.data			= &Buffer[1];
	iopb.length			= (unsigned long)(NumberToWrite-1);
	iopb.slaveAddr		= (unsigned char)g_hDemod_I2c_Addr[unitId];
	iopb.numSubAddressBytes	= MMAC_IIC_ONE_BYTE_ADDRESSING;
	iopb.subAddr		= (unsigned long)Buffer[0];
	iopb.timeout		= (unsigned long)DDI_CH_I2C_WRITE_TIMEOUT;

	ErrCode = (int)MMAC_IIC_Write(&iopb);
#else	

⌨️ 快捷键说明

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