/*==================================================================== FUNCTION mtv319_subch_start DESCRIPTION DEPENDENCIES RETURN VALUE SIDE EFFECTS ======================================================================*/ int mtv319_subch_start(uint8 *regs, uint32 data_rate) { int res; uint16 uiSubChID, uiServiceType; uint32 ulRFNum; uiSubChID = g_stEnsembleInfo.astSubChInfo[0].uiSubChID; uiServiceType = (g_stEnsembleInfo.astSubChInfo[0].uiServiceType) == TDMB_BB_SVC_DMB ? RTV_SERVICE_DMB : RTV_SERVICE_DAB; ulRFNum = g_stEnsembleInfo.astSubChInfo[0].ulRFNum; TDMB_MSG_RTV_BB("[%s] uiSubChID[%d] uiServiceType[%d] ulRFNum[%d]\n", __func__, uiSubChID, uiServiceType, (int)ulRFNum); #ifdef FEATURE_TDMB_MULTI_CHANNEL_ENABLE// PJSIN 20110223 add-- [ 1 rtvTDMB_CloseFIC(); #endif// ]-- end res = rtvTDMB_OpenSubChannel(ulRFNum, uiSubChID, uiServiceType, RTV_SPI_CIF_MODE_INTERRUPT_SIZE); prev_subch_id = uiSubChID; #ifdef FEATURE_TDMB_MULTI_CHANNEL_ENABLE// PJSIN 20110223 add-- [ 1 rtvTDMB_OpenFIC(); #endif// ]-- end if(res != RTV_SUCCESS) { if (res != RTV_ALREADY_OPENED_SUBCHANNEL_ID) TDMB_MSG_RTV_BB("[%s] rtvTDMB_OpenSubChannel error [%d]\n", __func__, res); return 0; } return 1; }
static bool mtv318_set_ch(unsigned long freq , unsigned char subchid , bool factory_test) { bool ret = false; enum E_RTV_TDMB_SERVICE_TYPE eServiceType; DPRINTK("%s : %ld %d\n", __func__, freq, subchid); if (mtv318_pwr_on) { if (subchid >= 64) { subchid -= 64; eServiceType = RTV_TDMB_SERVICE_VIDEO; } else { eServiceType = RTV_TDMB_SERVICE_AUDIO; } ret = rtvTDMB_OpenSubChannel((freq/1000), subchid, eServiceType, MTV318_INTERRUPT_SIZE); if (ret == RTV_SUCCESS || ret == RTV_NO_MORE_SUB_CHANNEL) { mtv318_on_air = true; ret = TRUE; DPRINTK("mtv318_set_ch Success\n"); } else { DPRINTK("mtv318_set_ch Fail\n"); } } return ret; }
static bool mtv319_set_ch(unsigned long freq , unsigned char subchid , bool factory_test) { bool ret = false; enum E_RTV_SERVICE_TYPE svc_type; DPRINTK("%s : %ld %d\n", __func__, freq, subchid); if (mtv319_pwr_on) { int ch_ret; rtvTDMB_CloseAllSubChannels(); if (subchid >= 64) { subchid -= 64; svc_type = RTV_SERVICE_DMB; } else svc_type = RTV_SERVICE_DAB; ch_ret = rtvTDMB_OpenSubChannel((freq/1000), subchid, svc_type, MTV319_INTERRUPT_SIZE); if (ch_ret == RTV_SUCCESS || ch_ret == RTV_ALREADY_OPENED_SUBCHANNEL_ID) { mtv319_on_air = true; ret = TRUE; DPRINTK("mtv319_set_ch Success\n"); } else { DPRINTK("mtv319_set_ch Fail (%d)\n", ch_ret); } } return ret; }
/*==================================================================== FUNCTION mtv350_subch_start DESCRIPTION DEPENDENCIES RETURN VALUE SIDE EFFECTS ======================================================================*/ int mtv350_subch_start(uint8 *regs, uint32 data_rate) { int res; uint16 uiSubChID, uiServiceType; uint32 ulRFNum; uiSubChID = g_stEnsembleInfo.astSubChInfo[0].uiSubChID; uiServiceType = (g_stEnsembleInfo.astSubChInfo[0].uiServiceType) == TDMB_BB_SVC_DMB ? RTV_SERVICE_VIDEO : RTV_SERVICE_AUDIO; ulRFNum = g_stEnsembleInfo.astSubChInfo[0].ulRFNum; #ifdef FEATURE_TDMB_MULTI_CHANNEL_ENABLE// PJSIN 20110223 add-- [ 1 rtvTDMB_CloseFIC(); #endif// ]-- end res = rtvTDMB_OpenSubChannel(ulRFNum, uiSubChID, uiServiceType, 188*8); prev_subch_id = uiSubChID; #ifdef FEATURE_TDMB_MULTI_CHANNEL_ENABLE// PJSIN 20110223 add-- [ 1 rtvTDMB_OpenFIC(); #endif// ]-- end TDMB_MSG_RTV_BB("[%s] uiSubChID[%d] uiServiceType[%d] ulRFNum[%d]\n", __func__, uiSubChID, uiServiceType, (int)ulRFNum); if(res != RTV_SUCCESS) { if (res == RTV_ALREADY_OPENED_SUB_CHANNEL) TDMB_MSG_RTV_BB("[%s] Already opened %d\n", __func__, res); else { TDMB_MSG_RTV_BB("[%s] RTV_IOCTL_TDMB_SET_SUBCHANNEL error %d\n", __func__, res); return 0; } } return 1; }
/*------------------------------------------------------------------------------------- int8 tunerbb_drv_mtv319_multi_set_channel(int32 freq_num, uint8 subch_cnt, uint8 subch_id[ ], uint8 op_mode[ ]) (1) Setting the frequency , subch_id and op_mode. This function is used in Single Service and Mulitiple Service (2) Return Value Sucess : 1 Fail : 0 or negative interger (If there is error code) (3) Argument int32 freq_num (IN) - TDMB Frequency index(e.g 7A(71), 13C(133) etc). Convert frequency if needed uint8 subch_cnt (IN) - The number of multiple service. This value is 1 in case of Single Service uint8 subch_id[ ] (IN) - Service Componet Sub-Channel ID uint8 op_mode[ ] (IN) - Service Operation Mode DAB = 1; DMB = 2; VISUAL = 3; DATA = 4; TPEG = 5; ENSQUERY = 6 <notice> The size of subch_cnt[ ] and op_mode[ ] is the maximum number being supported by MTV319 --------------------------------------------------------------------------------------- */ int8 tunerbb_drv_mtv319_multi_set_channel(int32 freq_num, uint8 subch_cnt, uint8 subch_id[ ], uint8 op_mode[ ]) { uint8 i; uint32 freq_khz; enum E_RTV_SERVICE_TYPE svc_type; int ret; UINT intr_size; /* TS interrupt size. */ bool fic_open_in_play = FALSE; freq_khz = get_freq_from_table(freq_num); //printk("tunerbb_drv_mtv319_multi_set_channel, freq_khz = %d, freq_num = %d\n",freq_khz, freq_num); if (op_mode[0] == MTV319_ENSQUERY) { fic_timeout_retry_cnt = 0; rtvTDMB_CloseFIC(); rtvTDMB_CloseAllSubChannels(); ret = rtvTDMB_ScanFrequency(freq_khz); if (ret == RTV_SUCCESS) return MTV319_RESULT_SUCCESS; /* Channel found and FIC opened */ else { if(ret != RTV_CHANNEL_NOT_DETECTED) DMBERR("Device error: %d\n", ret); return MTV319_RESULT_ERROR; } } for (i = 0; i < subch_cnt; i++) { opened_subch_info[i].svc_type = op_mode[i]; opened_subch_info[i].subch_id = subch_id[i]; switch (op_mode[i]) { case MTV319_DMB: case MTV319_VISUAL: case MTV319_BLT_TEST: svc_type = RTV_SERVICE_DMB; intr_size = MTV319_DMB_INTERRUPT_SIZE; opened_subch_info[i].data_type = TDMB_BB_DATA_TS; break; case MTV319_DAB: svc_type = RTV_SERVICE_DAB; intr_size = 10 * 188;//MTV319_DMB_INTERRUPT_SIZE; opened_subch_info[i].data_type = TDMB_BB_DATA_DAB; break; case MTV319_DATA: svc_type = RTV_SERVICE_DAB; intr_size = 10 * 188;//MTV319_DMB_INTERRUPT_SIZE; opened_subch_info[i].data_type = TDMB_BB_DATA_PACK; break; case MTV319_ENSQUERY: fic_open_in_play = TRUE; opened_subch_info[i].data_type = TDMB_BB_DATA_FIC; break; default: DMBERR("Invalid op mode (%d)\n", op_mode[i]); goto svc_open_err; } if (op_mode[i] != MTV319_ENSQUERY) { ret = rtvTDMB_OpenSubChannel(freq_khz, subch_id[i], svc_type, intr_size); if (ret != RTV_SUCCESS) { if (ret != RTV_ALREADY_OPENED_SUBCHANNEL_ID) { DMBERR("Sub channel open failed: %d\n", ret); goto svc_open_err; } } } } if (fic_open_in_play) { /* Must open fic after sub channel in play state. */ ret = rtvTDMB_OpenFIC(); if (ret != RTV_SUCCESS) { DMBERR("FIC open failed: %d\n", ret); goto svc_open_err; } } return MTV319_RESULT_SUCCESS; svc_open_err: rtvTDMB_CloseAllSubChannels(); return MTV319_RESULT_ERROR; }
/*==================================================================== FUNCTION mtv350_test DESCRIPTION DEPENDENCIES RETURN VALUE SIDE EFFECTS ======================================================================*/ void mtv350_test(int servicetype) { static boolean powered = FALSE; st_subch_info *stInfo; int res; if(!powered) { if(!tdmb_power_on) mtv319_power_on(); else TDMB_MSG_RTV_BB("[%s] skip mtv319_power_on [%d]\n", __func__, tdmb_power_on); powered = TRUE; } TDMB_MSG_RTV_BB("[%s] mtv319_init\n", __func__); mtv319_init(); #ifdef FEATURE_DMB_I2C_CMD mtv319_i2c_write(0x03, 0x07); //24.576Mhz 경우 res = mtv319_i2c_read(0x00); //0x8A ?˜ì???? TDMB_MSG_RTV_BB("[%s] RW test Reg. 0x00 val[0x%x]==0x8a\n", __func__, res); #endif stInfo = kmalloc(sizeof(st_subch_info), GFP_KERNEL); memset(stInfo, 0, sizeof(st_subch_info)); tdmb_get_fixed_chan_info((service_t)servicetype, &stInfo->astSubChInfo[stInfo->nSetCnt]); stInfo->nSetCnt++; // 2012/04/26: RAONTECH stInfo->astSubChInfo[0].uiServiceType = (stInfo->astSubChInfo[0].uiServiceType==0x18) ? RTV_SERVICE_DMB : RTV_SERVICE_DAB; TDMB_MSG_RTV_BB("[%s] TEST start freq [%d] dmb_mode [%d]\n", __func__, (int)stInfo->astSubChInfo[0].ulRFNum, (int)dmb_mode); TDMB_MSG_RTV_BB("[%s] TEST start service type [0x%x] schsize[0x%x]\n", __func__, stInfo->astSubChInfo[0].uiServiceType, stInfo->astSubChInfo[0].uiSchSize); TDMB_MSG_RTV_BB("[%s] TEST start subch id [0x%x]\n", __func__, stInfo->astSubChInfo[0].uiSubChID); res = rtvTDMB_ScanFrequency(stInfo->astSubChInfo[0].ulRFNum); TDMB_MSG_RTV_BB("rtvTDMB_ScanFrequency %d\n", res); if(res == RTV_SUCCESS) { TDMB_MSG_RTV_BB("rtvTDMB_ScanFrequency OK %d\n", res); } g_sync_status = rtvTDMB_GetLockStatus(); TDMB_MSG_RTV_BB("RTV GetLockStatus g_sync_status[%d] [%d]\n", g_sync_status,RTV_TDMB_CHANNEL_LOCK_OK); rtvTDMB_CloseFIC(); //wgon test add rtvTDMB_CloseSubChannel(prev_subch_id); // for single res = rtvTDMB_OpenSubChannel(stInfo->astSubChInfo[0].ulRFNum, stInfo->astSubChInfo[0].uiSubChID, stInfo->astSubChInfo[0].uiServiceType, RTV_SPI_CIF_MODE_INTERRUPT_SIZE); prev_subch_id = stInfo->astSubChInfo[0].uiSubChID; if(res != RTV_SUCCESS) { TDMB_MSG_RTV_BB("[%s] rtvTDMB_OpenSubChannel error [%d]\n", __func__, res); } kfree(stInfo); }
/*================================================================== */ void mtv350_test(int servicetype) { static boolean powered = FALSE; st_subch_info *stInfo; int res; if(!powered) { if(!tdmb_power_on) mtv350_power_on(); else TDMB_MSG_RTV_BB("[%s] skip mtv350_power_on [%d]\n", __func__, tdmb_power_on); powered = TRUE; } TDMB_MSG_RTV_BB("[%s] mtv350_init\n", __func__); mtv350_init(); mtv350_i2c_write(0x03, 0x07); //24.576Mhz 경우 res = mtv350_i2c_read(0x00); //0x8A ?˜ì???? TDMB_MSG_RTV_BB("[%s] RW test Reg. 0x00 val[0x%x]==0x8a\n", __func__, res); stInfo = kmalloc(sizeof(st_subch_info), GFP_KERNEL); memset(stInfo, 0, sizeof(st_subch_info)); tdmb_get_fixed_chan_info((service_t)servicetype, &stInfo->astSubChInfo[stInfo->nSetCnt]); stInfo->nSetCnt++; // 2012/04/26: RAONTECH stInfo->astSubChInfo[0].uiServiceType = (stInfo->astSubChInfo[0].uiServiceType==0x18) ? 0x01 : 0x02; //VIDEO 1, AUDIO 2 TDMB_MSG_RTV_BB("[%s] TEST start freq [%d] dmb_mode [%d]\n", __func__, (int)stInfo->astSubChInfo[0].ulRFNum, (int)dmb_mode); TDMB_MSG_RTV_BB("[%s] TEST start service type [0x%x] schsize[0x%x]\n", __func__, stInfo->astSubChInfo[0].uiServiceType, stInfo->astSubChInfo[0].uiSchSize); TDMB_MSG_RTV_BB("[%s] TEST start subch id [0x%x]\n", __func__, stInfo->astSubChInfo[0].uiSubChID); res = rtvTDMB_ScanFrequency(stInfo->astSubChInfo[0].ulRFNum); TDMB_MSG_RTV_BB("rtvTDMB_ScanFrequency %d\n", res); if(res == RTV_SUCCESS) { TDMB_MSG_RTV_BB("rtvTDMB_ScanFrequency OK %d\n", res); } g_sync_status = rtvTDMB_GetLockStatus(); TDMB_MSG_RTV_BB("RTV GetLockStatus g_sync_status[%d] [%d]\n", g_sync_status,RTV_TDMB_CHANNEL_LOCK_OK); rtvTDMB_CloseSubChannel(prev_subch_id); // for single res = rtvTDMB_OpenSubChannel(stInfo->astSubChInfo[0].ulRFNum, stInfo->astSubChInfo[0].uiSubChID, stInfo->astSubChInfo[0].uiServiceType, 188*8); prev_subch_id = stInfo->astSubChInfo[0].uiSubChID; if(res != RTV_SUCCESS) { if (res == RTV_ALREADY_OPENED_SUB_CHANNEL) TDMB_MSG_RTV_BB("[%s] Already opened %d\n", __func__, res); else TDMB_MSG_RTV_BB("[%s] RTV_IOCTL_TDMB_SET_SUBCHANNEL error %d\n", __func__, res); } kfree(stInfo); }