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; }
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); }
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); }
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; }