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; }
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; }
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; };
/*--------------------------------------------------------------------- * 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; }
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; }
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; }