コード例 #1
0
I32S Tcc353xI2cOpen(I32S _moduleIndex)
{
	I32S ret;
	ret = TCC353X_RETURN_FAIL;
	
	/* exception handling */
	if (_moduleIndex == 0) {
		if (gI2cHanleInit0 != 0 && gI2cHanleInit1 == 0)
			Tcc353xI2cClose(_moduleIndex);
	} else {
		if (gI2cHanleInit1 != 0 && gI2cHanleInit0 == 0)
			Tcc353xI2cClose(_moduleIndex);
	}

	/* normal process */
	if (_moduleIndex == 0)
		gI2cHanleInit0 = 1;
	else
		gI2cHanleInit1 = 1;

	if (gI2cHanleInited != 0) {
		return TCC353X_RETURN_SUCCESS;
	}

	gI2cHanleInited = 1;

	TcpalMemset(&gI2cChipAddr[_moduleIndex], 0x00, 4);
	ret = Tcc353xI2cSetup(_moduleIndex);

	/* need reset */

	return ret;
}
コード例 #2
0
I32S Tcc353xAdaptI2CWriteEx(I08U raddr, I08U* txdata, I32S length)
{
#if !defined (_TCSPI_ONLY_)

	I32S rc;
	I32S cMax, remain;
	I32S i;
	struct i2c_msg msg;

	TcpalMemset (&msg, 0x00, sizeof(struct i2c_msg));

	cMax = length / MAX_I2C_BURST;
	remain = length % MAX_I2C_BURST;

	msg.addr = TcpalI2cClient->addr;
	msg.flags = 0;
	msg.len = MAX_I2C_BURST+1;
	msg.buf = (unsigned char*)I2cBuffer;

	I2cBuffer[0] = (unsigned char) (raddr);

	for (i = 0; i < cMax; i++) {
		TcpalMemcpy(&I2cBuffer[1], &txdata[i * MAX_I2C_BURST],
			    MAX_I2C_BURST);

		msg.len = MAX_I2C_BURST+1;
		msg.buf = (unsigned char*)I2cBuffer;

		rc = i2c_transfer(TcpalI2cClient->adapter, &msg, 1);
		if(rc < 0)
		{
			TcpalPrintErr((I08S *)"[dtv][tcc3536][error] fail rc=%d, addr=0x%X, data=0x%02x\n", 
				(int)rc, (unsigned int)TcpalI2cClient->addr, (unsigned int)txdata[1]);
		
			return TCC353X_RETURN_FAIL;
		}
	}

	if (remain) {
		TcpalMemcpy(&I2cBuffer[1],
			    &txdata[cMax * MAX_I2C_BURST], remain);

		msg.len = remain+1;
		msg.buf = (unsigned char*)I2cBuffer;

		rc = i2c_transfer(TcpalI2cClient->adapter, &msg, 1);
		if(rc < 0)
		{
			TcpalPrintErr((I08S *)"[dtv][tcc3536][error] fail rc=%d, addr=0x%X, data=0x%02x\n", 
				(int)rc, (unsigned int)TcpalI2cClient->addr, (unsigned int)txdata[1]);
		
			return TCC353X_RETURN_FAIL;
		}
	}
#endif
	return TCC353X_RETURN_SUCCESS;
}
コード例 #3
0
I32S Tcc353xAdaptI2CReadEx(I08U raddr, I08U *rxdata, I32S length)
{
#if !defined (_TCSPI_ONLY_)

	I32S rc;
	I32S cMax, remain;
	I32S i;
	struct i2c_msg msgs[2];

	TcpalMemset (&msgs[0], 0x00, sizeof(struct i2c_msg)*2);

	cMax = length / MAX_I2C_BURST;
	remain = length % MAX_I2C_BURST;

	msgs[0].addr	= TcpalI2cClient->addr;
	msgs[0].flags = 0;
	msgs[0].len   = 1;
	msgs[0].buf   = (unsigned char*)&raddr;

	msgs[1].addr	= TcpalI2cClient->addr;
	msgs[1].flags = I2C_M_RD;
	msgs[1].len   = length;
	msgs[1].buf   = (unsigned char*)rxdata;

	for (i = 0; i < cMax; i++) {
		msgs[1].len   = MAX_I2C_BURST;
		msgs[1].buf   = (unsigned char*)rxdata + i*MAX_I2C_BURST;

		rc = i2c_transfer(TcpalI2cClient->adapter, msgs, 2);
		if(rc < 0)
		{
			TcpalPrintErr((I08S *)"[dtv][tcc3536][error] failed! rc=%d, addr=0x%x\n", 
				(int)rc, (unsigned int)TcpalI2cClient->addr);
		
			return TCC353X_RETURN_FAIL;
		}
	}

	if (remain) {
		msgs[1].len   = remain;
		msgs[1].buf   = (unsigned char*)rxdata + cMax*MAX_I2C_BURST;

		rc = i2c_transfer(TcpalI2cClient->adapter, msgs, 2);
		if(rc < 0)
		{
			TcpalPrintErr((I08S *)"[dtv][tcc3536][error] failed! rc=%d, addr=0x%x\n", 
				(int)rc, (unsigned int)TcpalI2cClient->addr);
		
			return TCC353X_RETURN_FAIL;
		}
	}
#endif
	return TCC353X_RETURN_SUCCESS;
};
コード例 #4
0
/*---------------------------------------------------------------------
 * Function name
 * 	Tcc353xMonitoringApiInit
 * Description
 * 	Initializing monitoring status
 * Parameters
 * 	_moduleIndex : Index of module
 *		0 : BaseBand#0 (Single : default, Dual : BaseBand#0)
 * 		1 : BaseBand#1 (Single : Not use, Dual : BaseBand#1)
 *	_diversityIndex : Index of diversity
 *		0 : Diversity master
 *		1 : Diversity slave#1
 *		2 : Diversity slave#2
 *		3 : Diversity slave#3
 * Return value
 * 	Refer EnumReturn
 * Remark
 * 	please apply this function when channel tuned.
 ---------------------------------------------------------------------*/
I32S Tcc353xMonitoringApiInit(I32S _moduleIndex, I32S _diversityIndex)
{
	TcpalMemset(&Tcc353xStatus[_moduleIndex][_diversityIndex], 0x00,
		    sizeof(Tcc353xStatus_t));
	return TCC353X_RETURN_SUCCESS;
}
コード例 #5
0
int	broadcast_drv_if_set_channel(struct broadcast_dmb_set_ch_info *udata)
{	
	Tcc353xTuneOptions tuneOption;
	signed long frequency = 214714; /*tmm*/
	int ret;
	int needLockCheck = 0;

	TcpalSemaphoreLock(&Tcc353xDrvSem);

	if(OnAir == 0 || udata == NULL) {
		TcpalPrintErr((I08S *)"[1seg] broadcast_drv_if_set_channel error [!OnAir]\n");
		TcpalSemaphoreUnLock(&Tcc353xDrvSem);
		return ERROR;
	}

	TcpalMemset (&tuneOption, 0x00, sizeof(tuneOption));

	if(udata->subchannel == 22 && udata->rf_band==0) {
		/* uhf 1segment */
		currentBroadCast = UHF_1SEG;
		currentSelectedChannel = udata->channel;
		tuneOption.rfIfType = TCC353X_LOW_IF;
		tuneOption.segmentType = TCC353X_ISDBT_1_OF_13SEG;
		tuneOption.userFifothr = _1_SEG_FIFO_THR_;

		needLockCheck = 1;

		if(udata->channel<13 || udata->channel>62) {
			TcpalPrintErr((I08S *)"[1seg] channel information error\n");
			TcpalSemaphoreUnLock(&Tcc353xDrvSem);
			return ERROR;
		}
		frequency = frequencyTable[udata->channel-13];
	} else if (udata->subchannel == 22) {
		/* tmm 13seg */

		if(udata->channel==0 || udata->channel>33) {
			TcpalPrintErr((I08S *)"[1seg] channel information error [%d]\n", udata->channel);
			TcpalSemaphoreUnLock(&Tcc353xDrvSem);
			return ERROR;
		}

		currentBroadCast = TMM_13SEG;
		currentSelectedChannel = udata->channel;
		tuneOption.rfIfType = TCC353X_ZERO_IF;
		tuneOption.segmentType = TCC353X_ISDBTMM;
		tuneOption.userFifothr = _13_SEG_FIFO_THR_;

		if(udata->channel == 7)
			tuneOption.tmmSet = C_1st_13Seg;
		else if(udata->channel == 20)
			tuneOption.tmmSet = C_2nd_13Seg;
		else if(udata->channel == 27)
			tuneOption.tmmSet = B_2nd_13Seg;
		else if(udata->channel == 14)
			tuneOption.tmmSet = A_1st_13Seg;
		else {
			tuneOption.tmmSet = UserDefine_Tmm13Seg;
			frequency = MMBI_FREQ_TABLE[udata->channel-1];
		}
	} else {
		/* tmm 1seg */

		if(udata->channel==0 || udata->channel>33) {
			TcpalPrintErr((I08S *)"[1seg] channel information error [%d]\n", udata->channel);
			TcpalSemaphoreUnLock(&Tcc353xDrvSem);
			return ERROR;
		}

		currentBroadCast = TMM_1SEG;
		currentSelectedChannel = udata->channel;
		tuneOption.rfIfType = TCC353X_LOW_IF;
		tuneOption.segmentType = TCC353X_ISDBTMM;
		tuneOption.userFifothr = _1_SEG_FIFO_THR_;

		if(udata->channel < 8 && udata->channel > 0)
			tuneOption.tmmSet = A_1st_1Seg+udata->channel-1;
		else if(udata->channel < 21 && udata->channel > 13)
			tuneOption.tmmSet = B_1st_1Seg+udata->channel-14;
		else if(udata->channel < 34 && udata->channel > 26)
			tuneOption.tmmSet = C_1st_1Seg+udata->channel-27;
		else {
			tuneOption.tmmSet = UserDefine_Tmm1Seg;
			frequency = MMBI_FREQ_TABLE[udata->channel-1];
		}
	}

	TcpalIrqDisable();
	gOverflowcnt = 0;

	if(needLockCheck && udata->mode == 1)	/* Scan mode & need lock check */
		ret = Tcc353xApiChannelSearch(0, frequency, &tuneOption);
	else				/* normal mode */
		ret = Tcc353xApiChannelSelect(0, frequency, &tuneOption);
	Tcc353xStreamBufferReset(0);
	Tcc353xMonitoringApiInit(0, 0);
	TcpalIrqEnable();

	if(ret!=TCC353X_RETURN_SUCCESS) {
		TcpalSemaphoreUnLock(&Tcc353xDrvSem);
		return ERROR;
	}

	TcpalSemaphoreUnLock(&Tcc353xDrvSem);
	return OK;
}
コード例 #6
0
int	broadcast_drv_if_set_channel(struct broadcast_dmb_set_ch_info *udata)
{	
	Tcc353xTuneOptions tuneOption;
	signed long frequency = 214714; /*tmm*/
	int ret;
	int needLockCheck = 0;

	TcpalSemaphoreLock(&Tcc353xDrvSem);

	if(OnAir == 0 || udata == NULL) {
		TcpalPrintErr((I08S *)"[1seg] broadcast_drv_if_set_channel error [!OnAir]\n");
		TcpalSemaphoreUnLock(&Tcc353xDrvSem);
		return ERROR;
	}

	TcpalMemset (&tuneOption, 0x00, sizeof(tuneOption));

	/* uhf 1segment */
	currentSelectedChannel = udata->channel;

	if(udata->segment == 13) {
		currentBroadCast = UHF_13SEG;
		tuneOption.rfIfType = TCC353X_ZERO_IF;
		tuneOption.segmentType = TCC353X_ISDBT_13SEG;
	} else {
		currentBroadCast = UHF_1SEG;
		tuneOption.rfIfType = TCC353X_LOW_IF;
		tuneOption.segmentType = TCC353X_ISDBT_1_OF_13SEG;
	}
	
	tuneOption.userFifothr = 0;
	needLockCheck = 1;

	if(udata->channel<13 || udata->channel>62) {
		TcpalPrintErr((I08S *)"[1seg] channel information error\n");
		TcpalSemaphoreUnLock(&Tcc353xDrvSem);
		return ERROR;
	}
	frequency = frequencyTable[udata->channel-13];

	/* lna control - high gain */
	/* high gain : PON 1, EN 0   low gain : PON 0, EN 1 */
	Tcc353xApiSetGpioControl(0, 0, GPIO_LNA_PON, 1);
	Tcc353xApiSetGpioControl(0, 0, GPIO_MMBI_ELNA_EN, 0);

	if(needLockCheck && udata->mode == 1)	/* Scan mode & need lock check */
		ret = Tcc353xApiChannelSearch(0, frequency, &tuneOption);
	else				/* normal mode */
		ret = Tcc353xApiChannelSelect(0, frequency, &tuneOption);

#if defined (_USE_SEND_GOOD_SIGNAL_INFO_CHANGING_)
	Time_channel_tune = TcpalGetCurrentTimeCount_ms();
	Need_send_good_signal = 1;
#endif

	Tcc353xMonitoringApiInit(0, 0);
	CurrentMonitoringTime = 0;

	if(ret!=TCC353X_RETURN_SUCCESS) {
		TcpalSemaphoreUnLock(&Tcc353xDrvSem);
		return ERROR;
	}

	TcpalSemaphoreUnLock(&Tcc353xDrvSem);
	return OK;
}