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

📄 drv_ch_i2c_com.c

📁 ST5100 driver files for ST chipset
💻 C
📖 第 1 页 / 共 3 页
字号:
		PrintError(("[DRV_Ch_I2c_Write()] UNKNOWN CHIP\n\r"));
#endif

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

	return ( ErrCode );
} /* end of drv_i2c_WriteNoStop */

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

#if defined(CHIPSET_ST)
	STI2C_Lock(Handle,TRUE);
	ErrCode = STI2C_WriteNoStop((STI2C_Handle_t)Handle, (const U8 *)wBuffer, NumberToWrite, DDI_CH_I2C_WRITE_TIMEOUT, (U32 *)&NumberWritten);
	if(ErrCode != ST_NO_ERROR)
	{
		sttbx_Print("STI2C_WriteNoStop err 0x%x\n",ErrCode);
	}
	ErrCode = STI2C_Read((STI2C_Handle_t)Handle, (U8*)rBuffer, (U32)NumberToRead, DDI_CH_I2C_READ_TIMEOUT, (U32 *)&NumberToRead);
	if(ErrCode != ST_NO_ERROR)
	{
		sttbx_Print("STI2C_Read err 0x%x\n",ErrCode);
	}
	STI2C_Unlock(Handle);

#endif
	return ( ErrCode );
} /* end of drv_i2c_WriteNoStop */



/*=============================================================================
	Function	: drv_i2c_Read
	Description	: STI2C_Read
	Input		:
	Output		:
	Return		: TRUE if error, FALSE if success
=============================================================================*/
int DRV_Ch_I2c_Read(unsigned char unitId, unsigned long Handle, unsigned char *Buffer, unsigned long NumberToRead )
{
	int			ErrCode;
	unsigned int			NumberRead;
	
#if defined(CHIPSET_ST)
	STI2C_Lock(Handle,TRUE);
	ErrCode = STI2C_Read(Handle, Buffer, NumberToRead, DDI_CH_I2C_READ_TIMEOUT, &NumberRead);
	STI2C_Unlock(Handle);


#elif defined(SUPPORT_NEC_CHIP)
	MMAC_IIC_READ_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)(NumberToRead-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_READ_TIMEOUT;

	ErrCode = MMAC_IIC_Read( &iopb ); 
#else	
		PrintError(("[DRV_Ch_I2c_Write()] UNKNOWN CHIP\n\r"));
#endif

	if(ErrCode != DDI_CH_I2C_OK)
	{
		PrintError(("drv_Ch_i2c_Read() Fails[%x] Handle:[%d] SubAddr:[%x] NtR:[%d]\n\r", ErrCode, Handle, Buffer[0], NumberRead));
	}
	else
	{
#ifdef CH_PRINT_DATA
		int 	i=0;
		PrintDump(" drv_i2c_Read()");
		for(i = 0; i < NumberToRead; i++){
			PrintDump(("[0x%02X]", Buffer[i]));
		}
		PrintDump("\n");
#endif
	}
	return ( ErrCode );
} /* end of drv_i2c_Read */

/*=============================================================================
	Function	: drv_i2c_Read
	Description	: STI2C_Read
	Input		:
	Output		:
	Return		: TRUE if error, FALSE if success
=============================================================================*/
int DRV_Ch_Tuner_I2c_Read(unsigned char unitId, unsigned long Handle, unsigned char *Buffer, unsigned long NumberToRead )
{
	int			ErrCode;
	unsigned int			NumberRead;
	
#if defined(CHIPSET_ST)
	STI2C_Lock(Handle,TRUE);
	ErrCode = STI2C_Read(Handle, Buffer, NumberToRead, DDI_CH_I2C_READ_TIMEOUT, &NumberRead);
	STI2C_Unlock(Handle);

#elif defined(SUPPORT_NEC_CHIP)
	MMAC_IIC_READ_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)(NumberToRead);
	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 = MMAC_IIC_Read( &iopb ); 
#else	
		PrintError(("[DRV_Ch_I2c_Write()] UNKNOWN CHIP\n\r"));
#endif

	if(ErrCode != DDI_CH_I2C_OK)
	{
		PrintError(("DRV_Ch_Tuner_I2c_Read() Fails[%x] Handle:[%d] SubAddr:[%x] NtR:[%d]\n\r", ErrCode, Handle, Buffer[0], NumberRead));
	}
	else
	{
#ifdef CH_PRINT_DATA
		int 	i=0;
		PrintDump(" drv_i2c_Read()");
		for(i = 0; i < NumberToRead; i++){
			PrintDump(("[0x%02x]", Buffer[i]));
		}
		PrintDump("\n");
#endif
	}
	return ( ErrCode );
} /* end of drv_i2c_Read */


/*=============================================================================
	Function	: drv_ch_i2c_DEMODWrite
	Description	:
	Input		:
	Output		:
	Return		: TRUE if error, FALSE if success
=============================================================================*/
int drv_ch_i2c_DEMODWrite(
	unsigned char unitId,	
	unsigned char 		index, 	
	unsigned char 		*Buffer,  	
	unsigned int 	NumberToWrite )
{
	
	int				ErrCode;
	unsigned char	buf[DEMOD_NUM_OF_REG + 1];
	
	buf[0] = index;
	memcpy((void *)&buf[1], (const void *)Buffer, (size_t)NumberToWrite);
	
#if defined(CHIPSET_ST)

	ErrCode = DRV_Ch_I2c_Write(unitId, (unsigned long)g_hDEMOD_I2CHandle[unitId], buf, (NumberToWrite+1));

#elif defined(SUPPORT_NEC_CHIP)
	// emma does not need the i2c handle.
	ErrCode = DRV_Ch_I2c_Write(unitId, (unsigned long)unitId, buf, (NumberToWrite+1));	
#else	
		PrintError(("[DRV_Ch_I2c_Write()] UNKNOWN CHIP\n\r"));
#endif
	if(ErrCode != DDI_CH_I2C_OK)
	{
		PrintError(("[drv_ch_i2c_DEMODWrite] (Id:%x subAddr:%x) Error:0x%x \n", unitId, index, ErrCode));
	}
	return ( ErrCode );
} /* end of drv_ch_i2c_DEMODWrite */

/*=============================================================================
	Function	: drv_ch_i2c_DEMODRead
	Description	:
	Input		:
	Output		:
	Return		: TRUE if error, FALSE if success
=============================================================================*/
int drv_ch_i2c_DEMODRead(
	unsigned char unitId,	
	unsigned char 		index, 	
	unsigned char 		*Buffer,  	
	unsigned int 	NumberToRead )
{
	int				ErrCode , TotalError;
	unsigned char	buf[DEMOD_NUM_OF_REG + 1];

	TotalError = DDI_CH_I2C_OK;
	
	buf[0] = index;
	memcpy((void *)&buf[1], (const void *)Buffer, (size_t)NumberToRead);
	
#if defined(CHIPSET_ST)

	//  7710_T ErrCode = (int)DRV_Ch_I2c_Write(unitId, (unsigned long)g_hDEMOD_I2CHandle[unitId],&buf[0], 1 );
	ErrCode = (int)DRV_Ch_I2c_Write(unitId, I2C_GET_HANDLE(I2C_BACK,CH_I2C_DEMOD_HANDLEID_SAT),&buf[0], 1 );
	if(ErrCode != DDI_CH_I2C_OK)
	{
		PrintError(("drv_ch_i2c_DEMODRead> drv_i2c_Write Fails status:(%x)\n", ErrCode));
	}
	
	//  7710_T ErrCode= (int)DRV_Ch_I2c_Read(unitId, (unsigned long)g_hDEMOD_I2CHandle[unitId], Buffer, NumberToRead);
	ErrCode= (int)DRV_Ch_I2c_Read(unitId, I2C_GET_HANDLE(I2C_BACK,CH_I2C_DEMOD_HANDLEID_SAT), Buffer, NumberToRead);
	if(ErrCode != DDI_CH_I2C_OK)
	{
		PrintError(("drv_ch_i2c_DEMODRead> drv_i2c_Read Fails status:(%x)\n", ErrCode));
	}
#elif defined(SUPPORT_NEC_CHIP)
	ErrCode= (int)DRV_Ch_I2c_Read(unitId, (unsigned long)unitId, buf, (NumberToRead+1));
	if(ErrCode != DDI_CH_I2C_OK)
	{
		PrintError(("[drv_ch_i2c_DEMODRead] (Id:%x subAddr:%x) Error:0x%x \n", unitId, index, ErrCode));
	}
#else	
		PrintError(("[DRV_Ch_I2c_Write()] UNKNOWN CHIP\n\r"));
#endif
	return TotalError;
} /* end of drv_ch_i2c_DEMODRead */

int drv_ch_i2c_DEMODReadBytes(unsigned char unitId,	
	unsigned char 		index, 	
	unsigned char 		*Buffer,  	
	unsigned int 	NumberToRead )
{
	int				ErrCode , TotalError;
	unsigned char	buf[DEMOD_NUM_OF_REG + 1];


	TotalError = DDI_CH_I2C_OK;

	buf[0] = index;
	
	memcpy((void *)&buf[1], (const void *)Buffer, (size_t)NumberToRead);
	
#if defined(CHIPSET_ST)
#if 1 //  
	ErrCode = (int)DRV_Ch_I2c_WriteNoStopRead(unitId, I2C_GET_HANDLE(I2C_BACK,CH_I2C_DEMOD_HANDLEID_SAT),&buf[0], 1 ,Buffer, NumberToRead);
	if(ErrCode != DDI_CH_I2C_OK)
	{
		PrintError(("drv_ch_i2c_DEMODReadBytes> drv_i2c_Write Fails status:(%x)\n", ErrCode));
	}

#else

	//  7710_T ErrCode = (int)DRV_Ch_I2c_WriteNoStop(unitId, (unsigned long)g_hDEMOD_I2CHandle[unitId],&buf[0], 1 );
	STI2C_Lock(I2C_GET_HANDLE(I2C_BACK,CH_I2C_DEMOD_HANDLEID_SAT), TRUE);
	ErrCode = (int)DRV_Ch_I2c_WriteNoStop(unitId,I2C_GET_HANDLE(I2C_BACK,CH_I2C_DEMOD_HANDLEID_SAT),&buf[0], 1 );
	if(ErrCode != DDI_CH_I2C_OK)
	{
		PrintError(("drv_ch_i2c_DEMODReadBytes> drv_i2c_Write Fails status:(%x)\n", ErrCode));
	}
	
	//  7710_T ErrCode= (int)DRV_Ch_I2c_Read(unitId, (unsigned long)g_hDEMOD_I2CHandle[unitId], Buffer, NumberToRead);
	ErrCode= (int)DRV_Ch_I2c_Read(unitId, I2C_GET_HANDLE(I2C_BACK,CH_I2C_DEMOD_HANDLEID_SAT), Buffer, NumberToRead);
	if(ErrCode != DDI_CH_I2C_OK)
	{
		PrintError(("drv_ch_i2c_DEMODReadBytes> drv_i2c_Read Fails status:(%x)\n", ErrCode));
	}
				STI2C_Unlock(I2C_GET_HANDLE(I2C_BACK,CH_I2C_DEMOD_HANDLEID_SAT));
#endif
#elif defined(SUPPORT_NEC_CHIP)
	ErrCode= (int)DRV_Ch_I2c_Read(unitId, (unsigned long)unitId, buf, (NumberToRead+1));
	if(ErrCode != DDI_CH_I2C_OK)
	{
		PrintError(("[drv_ch_i2c_DEMODReadBytes] (Id:%x subAddr:%x) Error:0x%x \n", unitId, index, ErrCode));
	}

#else	
		PrintError(("[drv_ch_i2c_DEMODReadBytes()] UNKNOWN CHIP\n\r"));
#endif
	return TotalError;
} /* end of drv_ch_i2c_DEMODRead */

int drv_ch_i2c_DEMODWriteBytes(unsigned char unitId,	
	unsigned char 		index, 	
	unsigned char 		*Buffer,  	
	unsigned char 	NumberToWrite )
{
	int				ErrCode;

	
#if defined(CHIPSET_ST)
	//  7710_T ErrCode = DRV_Ch_I2c_Write(unitId, (unsigned long)g_hDEMOD_I2CHandle[unitId], Buffer, NumberToWrite);	
	ErrCode = DRV_Ch_I2c_Write(unitId,I2C_GET_HANDLE(I2C_BACK,CH_I2C_DEMOD_HANDLEID_SAT), Buffer, NumberToWrite);	
#elif defined(SUPPORT_NEC_CHIP)
	// emma does not need the i2c handle.
	ErrCode = DRV_Ch_I2c_Write(unitId, (unsigned long)unitId, Buffer, NumberToWrite);	
#else	
		PrintError(("[drv_ch_i2c_DEMODWriteBytes()] UNKNOWN CHIP\n\r"));
#endif
	if(ErrCode != DDI_CH_I2C_OK)
	{
		PrintError(("[drv_ch_i2c_DEMODWriteBytes] (Id:%x subAddr:%x) Error:0x%x \n", unitId, index, ErrCode));
	}
	return ( ErrCode );
}


/*=============================================================================
	Function	: drv_ch_i2c_TUNERWrite
	Description	:
	Input		:
	Output		:
	Return		: TRUE if error, FALSE if success
=============================================================================*/
int drv_ch_i2c_TUNERWrite(unsigned char unitId, unsigned char  *Buffer,  	unsigned int 	NumberToWrite)
{
	int		ErrCode;

	#if 0
		{
			int i;
			for(i=0;i<NumberToWrite;i++)
				PrintDump(("%x ",Buffer[i]));

			PrintDump(("\n\r"));
		}
	#endif
#if defined(CHIPSET_ST)
	
	//  7710_T ErrCode = DRV_Ch_I2c_Write(unitId, (unsigned long)g_hTUNER_I2CHandle[unitId], Buffer, NumberToWrite);
	ErrCode = DRV_Ch_I2c_Write(unitId, I2C_GET_HANDLE(I2C_BACK,CH_I2C_TUNER_HANDLEID_SAT), Buffer, NumberToWrite);
#elif defined(SUPPORT_NEC_CHIP)
	ErrCode = DRV_Ch_Tuner_I2c_Write(unitId, (unsigned long)unitId, Buffer, NumberToWrite);
#else	
		PrintError(("[DRV_Ch_I2c_Write()] UNKNOWN CHIP\n\r"));
#endif
	if(ErrCode != DDI_CH_I2C_OK){
		PrintError(("[drv_ch_i2c_DEMODWriteBytes] (Id:%x ) Error:0x%x \n", unitId, ErrCode));
	}

	return ErrCode;
} /* end of drv_ch_i2c_TUNERWrite */

/*=============================================================================
	Function	: drv_ch_i2c_TUNERRead
	Description	:
	Input		:
	Output		:
	Return		: TRUE if error, FALSE if success
=============================================================================*/
int drv_ch_i2c_NTunerRead(unsigned char unitId,	unsigned char 	*Buffer ,unsigned int NumberToWrite)
{
	int		ErrCode;
	
#if defined(CHIPSET_ST)

	//  7710_T ErrCode = DRV_Ch_I2c_Read(unitId, (unsigned long)g_hTUNER_I2CHandle[unitId], Buffer, NumberToWrite);
	ErrCode = DRV_Ch_I2c_Read(unitId, I2C_GET_HANDLE(I2C_BACK,CH_I2C_TUNER_HANDLEID_SAT), Buffer, NumberToWrite);
#elif defined(SUPPORT_NEC_CHIP)
	ErrCode = DRV_Ch_Tuner_I2c_Read(unitId, (unsigned long)unitId, Buffer, NumberToWrite);
#else	
		PrintError(("[DRV_Ch_I2c_Write()] UNKNOWN CHIP\n\r"));
#endif
	if(ErrCode != DDI_CH_I2C_OK){
		PrintError(("[sat] Tuner.drv_i2c_Read Fails [%d.%x]\n\r", unitId , ErrCode ));
	}

	return ErrCode;
} /* end of drv_ch_i2c_TUNERRead */

/*=============================================================================
	Function	: drv_ch_i2c_TUNERRead
	Description	:
	Input		:
	Output		:
	Return		: TRUE if error, FALSE if success
=============================================================================*/
int drv_ch_i2c_TUNERRead(unsigned char unitId,	unsigned char 	*buf )
{
	int		ErrCode , TotalError;
	unsigned char 					buffer[2];

	TotalError = DDI_CH_I2C_OK;

	buffer[0] = DEMOD_REG_CLEAR;
	buffer[1] = DEMOD_REG[unitId][DEMOD_REG_CLEAR] | DEMOD_REG_BIT_IICTRL; /* IICTRL : set */

#if defined(CHIPSET_ST)
	//  STI2C_TakeSemaphore();
	//  7710_T ErrCode = DRV_Ch_I2c_Write(unitId, (unsigned long)g_hDEMOD_I2CHandle[unitId], buffer, 2);
	ErrCode = DRV_Ch_I2c_Write(unitId, I2C_GET_HANDLE(I2C_BACK,CH_I2C_DEMOD_HANDLEID_SAT), buffer, 2);
	if(ErrCode != DDI_CH_I2C_OK){
		PrintError(("[sat]drv_ch_i2c_TUNERRead()'s drv_i2c_Write Fails [%d.%x.%x] \n\r", unitId,  I2C_GET_HANDLE(I2C_BACK,CH_I2C_DEMOD_HANDLEID_SAT), ErrCode ));
		TotalError |= ErrCode;
	}
	
	//  7710_T ErrCode =  DRV_Ch_I2c_Read(unitId, (unsigned long)g_hTUNER_I2CHandle[unitId], buf, 1);
	ErrCode =  DRV_Ch_I2c_Read(unitId,I2C_GET_HANDLE(I2C_BACK,CH_I2C_TUNER_HANDLEID_SAT), buf, 1);
	if(ErrCode != DDI_CH_I2C_OK){
		PrintError(("[sat]drv_ch_i2c_TUNERRead()'s drv_i2c_Read() Fails [%d.%x.%x] \n\r", unitId, I2C_GET_HANDLE(I2C_BACK,CH_I2C_TUNER_HANDLEID_SAT), ErrCode ));
		TotalError |= ErrCode;
	}
	
	buffer[1] = DEMOD_REG[unitId][DEMOD_REG_CLEAR] & ~(DEMOD_REG_BIT_IICTRL);/* IICTRL : clear */
	
	//  7710_T ErrCode = DRV_Ch_I2c_Write(unitId, (unsigned long)g_hDEMOD_I2CHandle[unitId], buffer, 2);
	ErrCode = DRV_Ch_I2c_Write(unitId,I2C_GET_HANDLE(I2C_BACK,CH_I2C_DEMOD_HANDLEID_SAT), buffer, 2);
	if(ErrCode != DDI_CH_I2C_OK){
		PrintError(("[sat]drv_ch_i2c_TUNERRead()'s drv_i2c_Write  Fails [%d.%x.%x] \n\r", unitId, I2C_GET_HANDLE(I2C_BACK,CH_I2C_DEMOD_HANDLEID_SAT),ErrCode));
		TotalError |= ErrCode;
	}
#elif defined(SUPPORT_NEC_CHIP)
	// ????????
#else
		PrintError(("[DRV_Ch_I2c_Write()] UNKNOWN CHIP\n\r"));
#endif
	return TotalError;
} /* end of drv_ch_i2c_TUNERRead */


⌨️ 快捷键说明

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