MXL_STATUS SemcoCtrl_WriteRegister(UINT8 I2cSlaveAddr, UINT8 RegAddr, UINT8 RegData)
{
	MXL_STATUS status = MXL_TRUE;
	AVL63X1_ErrorCode r = AVL63X1_EC_OK;

	// OEM should implement I2C write protocol that complies with MxL601 I2C
	// format.

	// 8 bit Register Write Protocol:
	// +------+-+-----+-+-+----------+-+----------+-+-+
	// |MASTER|S|SADDR|W| |RegAddr   | |RegData(L)| |P|
	// +------+-+-----+-+-+----------+-+----------+-+-+
	// |SLAVE |         |A|          |A|          |A| |
	// +------+---------+-+----------+-+----------+-+-+
	// Legends: SADDR (I2c slave address), S (Start condition), A (Ack), N(NACK), 
	// P(Stop condition)

	UINT8 i2c_addr;
	AVL_uchar buffer[2]={0};
	AVL_uint16 size=0;

	i2c_addr=0x60;//write
	buffer[0]=RegAddr;
	buffer[1]=RegData;
	size=2;
	r = AVL63X1_II2C_Repeater_WriteData(i2c_addr,buffer,size, pAVL_Semco_Chip);
	if (r != AVL63X1_EC_OK)
	{
		return MXL_FALSE;
	}
	
	return MXL_TRUE;
}
MXL_STATUS SemcoCtrl_ReadRegister(UINT8 I2cSlaveAddr, UINT8 RegAddr, UINT8 *DataPtr)
{
	MXL_STATUS status = MXL_TRUE;
	AVL63X1_ErrorCode r = AVL63X1_EC_OK;

	// OEM should implement I2C read protocol that complies with MxL601 I2C
	// format.

	// 8 bit Register Read Protocol:
	// +------+-+-----+-+-+----+-+----------+-+-+
	// |MASTER|S|SADDR|W| |0xFB| |RegAddr   | |P|
	// +------+-+-----+-+-+----+-+----------+-+-+
	// |SLAVE |         |A|    |A|          |A| |
	// +------+-+-----+-+-+----+-+----------+-+-+
	// +------+-+-----+-+-+-----+--+-+
	// |MASTER|S|SADDR|R| |     |MN|P|
	// +------+-+-----+-+-+-----+--+-+
	// |SLAVE |         |A|Data |  | |
	// +------+---------+-+-----+--+-+
	// Legends: SADDR(I2c slave address), S(Start condition), MA(Master Ack), MN(Master NACK), 
	// P(Stop condition)

	AVL_uchar buffer[3]={0};
	UINT8 i2c_addr;
	AVL_uint16 size=0;

	i2c_addr=I2cSlaveAddr+0x00;//write
	buffer[0]=0xFB;
	buffer[1]=RegAddr;
	size=2;

	//	pbiinfo("zxguan   [%s %d]-------------\n",__FUNCTION__,__LINE__);	
	r=AVL63X1_II2C_Repeater_WriteData(i2c_addr,buffer,size,pAVL_Semco_Chip);
	if(r!=AVL63X1_EC_OK)
	{
		pbiinfo("zxguan   [%s %d]-------------\n",__FUNCTION__,__LINE__);	
		return MXL_FALSE;
	}

	i2c_addr=I2cSlaveAddr;
	size=1;
//	pbiinfo("zxguan   [%s %d]-------------\n",__FUNCTION__,__LINE__);	
	r=AVL63X1_II2C_Repeater_ReadData(i2c_addr, DataPtr, size,pAVL_Semco_Chip);
	if (r != AVL63X1_EC_OK)
	{
		pbiinfo("zxguan   [%s %d]------r--%d-----\n",__FUNCTION__,__LINE__,r);	
		return MXL_FALSE;
	}

	return MXL_TRUE;
}
Beispiel #3
0
AVL63X1_ErrorCode AVL_Changhong_DTI7_Lock(struct AVL_Tuner *pTuner)
{
	AVL63X1_ErrorCode r;
	AVL_uchar ucTunerRegs[5] = { 0x00, 0x00, 0x98, 0x48, 0xD1 };
	AVL_uint16 uiNumBytes;

	if(pTuner->m_uiFrequency_Hz < 46000000 || pTuner->m_uiFrequency_Hz > 870000000)
	{
		return AVL63X1_EC_GENERAL_FAIL;
	}
	
	AVL_Changhong_DTI7_SetDividerBits(pTuner, ucTunerRegs);	
  
	AVL_Changhong_DTI7_SetChargePumpCurrentBits(pTuner, ucTunerRegs);
	uiNumBytes = 5;
	r = AVL63X1_II2C_Repeater_WriteData((AVL_uchar)(pTuner->m_uiSlaveAddress), ucTunerRegs, uiNumBytes, pTuner->m_pAVL_Chip);
	return(r);
}
Beispiel #4
0
AVL63X1_ErrorCode AVL_AlpsTDAC7D01A_Lock(struct AVL_Tuner *pTuner)
{
	AVL63X1_ErrorCode r;
	AVL_uchar ucTunerRegs[5] = { 0x00, 0x00, 0xA8, 0x00, 0xC2 };
	AVL_uint16 uiNumBytes;

	if((pTuner->m_uiFrequency_Hz < 47000000)||(pTuner->m_uiFrequency_Hz > 870000000))
	{
		return AVL63X1_EC_GENERAL_FAIL;
	}

	uiNumBytes = 5;

	AVL_AlpsTDAC7D01A_SetDividerBits(pTuner, ucTunerRegs);
	AVL_AlpsTDAC7D01A_SetChargePumpCurrentBits(pTuner, ucTunerRegs);
	AVL_AlpsTDAC7D01A_SetBandSelectBits(pTuner, ucTunerRegs);

	r =	AVL63X1_II2C_Repeater_WriteData((AVL_uchar)(pTuner->m_uiSlaveAddress), ucTunerRegs, uiNumBytes, pTuner->m_pAVL_Chip);

	return(r);
}
Beispiel #5
0
AVL_MxL603_MXL_STATUS AVL_MxLWare603_OEM_WriteRegister(UINT8 devId, UINT8 RegAddr, UINT8 RegData)
{
  // OEM should implement I2C write protocol that complies with MxL603 I2C
  // format.

  // 8 bit Register Write Protocol:
  // +------+-+-----+-+-+----------+-+----------+-+-+
  // |MASTER|S|SADDR|W| |RegAddr   | |RegData(L)| |P|
  // +------+-+-----+-+-+----------+-+----------+-+-+
  // |SLAVE |         |A|          |A|          |A| |
  // +------+---------+-+----------+-+----------+-+-+
  // Legends: SADDR (I2c slave address), S (Start condition), A (Ack), N(NACK), 
  // P(Stop condition)

  AVL_MxL603_MXL_STATUS status = MxL603_MXL_FALSE;
  AVL63X1_ErrorCode r = AVL63X1_EC_OK;


/* If OEM data is implemented, customer needs to use OEM data structure related operation 
   Following code should be used as a reference. 
   For more information refer to sections 2.5 & 2.6 of MxL603_mxLWare_API_UserGuide document.

  UINT8 i2cSlaveAddr;
  UINT8 i2c_bus;
  user_data_t * user_data = (user_data_t *) AVL_MxL603_OEM_DataPtr[devId];
 
  if (user_data)
  {
    i2cSlaveAddr = user_data->i2c_address;           // get device i2c address
    i2c_bus = user_data->i2c_bus;                   // get device i2c bus  
  
    sem_up(user_data->sem);                         // up semaphore if needed

    // I2C Write operation 
    status = USER_I2C_WRITE_FUNCTION(i2cSlaveAddr, i2c_bus, RegAddr, RegData);
    
    sem_down(user_data->sem);                       // down semaphore
    user_data->i2c_cnt++;                           // user statistics
  }

*/

  /* If OEM data is not required, customer should treat devId as I2C slave Address */

  //devId = devId;
  //RegAddr = RegAddr;
  //RegData = RegData;
  
  UINT8 i2c_addr;
  AVL_uchar buffer[2] = {0};
  AVL_uint16 size = 0;

  i2c_addr = devId;//write
  buffer[0] = RegAddr;
  buffer[1] = RegData;
  size = 2;
  r = AVL63X1_II2C_Repeater_WriteData(i2c_addr, buffer, size, pAVLChipForMxL603);
  if (r != AVL63X1_EC_OK)
  {
	  return MxL603_MXL_FALSE;
  }

  return MxL603_MXL_TRUE;
  //return status;
}