static int viterbi_rt_ber_read(unsigned int* ber) { u32 vframe, esum; u8 vt_ctrl=0; int res = BBM_OK; BBM_READ(NULL, BBM_VT_CONTROL, &vt_ctrl); vt_ctrl |= 0x10; BBM_WRITE(NULL, BBM_VT_CONTROL, vt_ctrl); BBM_LONG_READ(NULL,BBM_VT_RT_BER_PERIOD, &vframe); BBM_LONG_READ(NULL,BBM_VT_RT_ERROR_SUM, &esum); vt_ctrl &= ~0x10; BBM_WRITE(NULL,BBM_VT_CONTROL, vt_ctrl); if(vframe == 0) { *ber = 0; return BBM_NOK; } // *ber = ((float)esum / (float)vframe) * 10000.0f; *ber = (esum * 10000 / vframe); return res; }
void mmi_bbm_lread(int argc, char *argv[]) { u16 length; u16 dest_addr, target_addr; u32 data; int i; if(argc == 2) { dest_addr = htoi(argv[1]); BBM_LONG_READ(hDevice, dest_addr, &data); print_log("[0x%04X] : 0x%08X\n", dest_addr, data); } else if(argc == 3) { dest_addr = htoi(argv[1]); length = htoi(argv[2]); for(i=0; i<length; i+=4) { target_addr = dest_addr + i; if((i % 2) == 0) print_log("\n[0x%04X] : ", target_addr); BBM_LONG_READ(hDevice, target_addr, &data); print_log("%08X\n", data); } print_log("\n"); } else { print_log("usage : %s [start addr] [length] ; long read command\n", argv[0]); } }
static uint32 tunerbb_drv_fc8050_get_viterbi_ber(void) //msc_ber { uint8 vt_ctrl; uint32 bper, tbe; uint32 ber; BBM_READ(0, BBM_VT_CONTROL, &vt_ctrl); vt_ctrl |= 0x10; BBM_WRITE(0, BBM_VT_CONTROL, vt_ctrl); BBM_LONG_READ(0, BBM_VT_RT_BER_PERIOD, &bper); BBM_LONG_READ(0, BBM_VT_RT_ERROR_SUM, &tbe); vt_ctrl &= ~0x10; BBM_WRITE(0, BBM_VT_CONTROL, vt_ctrl); if(bper == 0) { // LGE_INTG_090217 ber = MAX_MSC_BER; } else if(tbe == 0) { ber = 0; } else { //ber = ((tbe / bper) * 100000); //ber = (tbe * 100000) / bper; if(tbe > 42949) { ber = ((tbe * 1000)/bper)*100; } else { ber = (tbe*100000)/bper; } } ber = (ber >= MAX_MSC_BER) ? MAX_MSC_BER : ber; /* ber must bigger than 0 because FactoryTest issue */ if(ber == 0) { ber = 1; } return ber; }
static uint32 tunerbb_drv_fc8050_get_rs_ber(void) //va_ber { uint16 nframe, rserror; uint32 esum; uint32 ber; BBM_WORD_READ(0, BBM_RS_BER_PERIOD, &nframe); BBM_LONG_READ(0, BBM_RS_ERR_SUM, &esum); BBM_WORD_READ(0, BBM_RS_FAIL_COUNT, &rserror); if(nframe == 0) { ber = MAX_VA_BER; } else if((esum == 0) && (rserror == 0)) { ber = 0; } else { ber = esum; ber += rserror * 9; ber /= (nframe + 1) * 204 * 8; ber = ber * 100000; } ber = (ber >= MAX_VA_BER) ? MAX_VA_BER : ber; return ber; }
void tdmb_fc8050_spi_write_read_test(void) { uint16 i; uint32 wdata = 0; uint32 ldata = 0; uint32 data = 0; uint32 temp = 0; #define TEST_CNT 5 tdmb_fc8050_power_on(); for(i=0;i<TEST_CNT;i++) { BBM_WRITE(NULL, 0x05, i & 0xff); BBM_READ(NULL, 0x05, (fci_u8*)&data); printk("FC8000 byte test (0x%x,0x%x)\n", i & 0xff, data); if((i & 0xff) != data) printk("FC8000 byte test (0x%x,0x%x)\n", i & 0xff, data); } for(i=0;i<TEST_CNT;i++) { BBM_WORD_WRITE(NULL, 0x0210, i & 0xffff); BBM_WORD_READ(NULL, 0x0210, (fci_u16*)&wdata); printk("FC8000 word test (0x%x,0x%x)\n", i & 0xffff, wdata); if((i & 0xffff) != wdata) printk("FC8000 word test (0x%x,0x%x)\n", i & 0xffff, wdata); } for(i=0;i<TEST_CNT;i++) { BBM_LONG_WRITE(NULL, 0x0210, i & 0xffffffff); BBM_LONG_READ(NULL, 0x0210, (fci_u32*)&ldata); printk("FC8000 long test (0x%x,0x%x)\n", i & 0xffffffff, ldata); if((i & 0xffffffff) != ldata) printk("FC8000 long test (0x%x,0x%x)\n", i & 0xffffffff, ldata); } data = 0; for(i=0;i<TEST_CNT;i++) { temp = i&0xff; BBM_TUNER_WRITE(NULL, 0x12, 0x01, (fci_u8*)&temp, 0x01); BBM_TUNER_READ(NULL, 0x12, 0x01, (fci_u8*)&data, 0x01); printk("FC8000 tuner test (0x%x,0x%x)\n", i & 0xff, data); if((i & 0xff) != data) printk("FC8000 tuner test (0x%x,0x%x)\n", i & 0xff, data); } temp = 0x51; BBM_TUNER_WRITE(NULL, 0x12, 0x01, (fci_u8*)&temp, 0x01 ); tdmb_fc8050_power_off(); }
static uint32 tunerbb_drv_fc8050_get_rs_ber(void) //va_ber { uint16 nframe, rserror; uint32 esum; uint32 ber; #ifdef MON_BURST_MODE uint8 burst[12]; BBM_BULK_READ(0, BBM_RS_BER_PERIOD, &burst[0], 8); nframe = (uint16)(*(uint16*)burst); rserror = (uint16)(*((uint16*)burst+1)); esum = (uint32)(*((uint32*)burst+1)); #else BBM_WORD_READ(0, BBM_RS_BER_PERIOD, &nframe); BBM_LONG_READ(0, BBM_RS_ERR_SUM, &esum); BBM_WORD_READ(0, BBM_RS_FAIL_COUNT, &rserror); #endif if(nframe == 0) { // LGE_INTG_090217 ber = MAX_VA_BER; } else if((esum == 0) && (rserror == 0)) { ber = 0; } else { //LGE_INTG_090217 #if (1) //include corrected bit ber = esum; #else //not include ber = 0; #endif ber += rserror * 9; ber /= (nframe + 1) * 204 * 8; ber = ber * 100000; } ber = (ber >= MAX_VA_BER) ? MAX_VA_BER : ber; return ber; }
static fci_u16 tunerbb_drv_fc8050_rserror_count(void) { fci_u32 rt_esum; fci_u16 rt_nframe, rt_rserror; fci_u8 rs_ctrl=0; BBM_READ(0, BBM_RS_CONTROL, &rs_ctrl); rs_ctrl |= 0x20; BBM_WRITE(0, BBM_RS_CONTROL, rs_ctrl); BBM_WORD_READ(0, BBM_RS_RT_BER_PER, &rt_nframe); BBM_LONG_READ(0, BBM_RS_RT_ERR_SUM, &rt_esum); BBM_WORD_READ(0, BBM_RS_RT_FAIL_CNT, &rt_rserror); rs_ctrl &= ~0x20; BBM_WRITE(0, BBM_RS_CONTROL, rs_ctrl); return rt_rserror; }
static uint32 tunerbb_drv_fc8050_get_rs_ber(void) //va_ber { uint16 nframe, rserror; uint32 esum; uint32 ber; BBM_WORD_READ(0, BBM_RS_BER_PERIOD, &nframe); BBM_LONG_READ(0, BBM_RS_ERR_SUM, &esum); BBM_WORD_READ(0, BBM_RS_FAIL_COUNT, &rserror); if(nframe == 0) { // LGE_INTG_090217 ber = MAX_VA_BER; } else if((esum == 0) && (rserror == 0)) { ber = 0; } else { //LGE_INTG_090217 #if (1) //include corrected bit ber = esum; #else //not include ber = 0; #endif ber += rserror * 9; ber /= (nframe + 1) * 204 * 8; ber = ber * 100000; } ber = (ber >= MAX_VA_BER) ? MAX_VA_BER : ber; return ber; }
/*======================================================= Function : tunerbb_drv_fc8050_init Description : Initializing the FC8050 Chip after power on Parameter : VOID Return Value : SUCCESS : 1 FAIL : 0 or negative interger (If there is error code) when model who edit history ------------------------------------------------------- 2010/05/17 MOBIT prajuna EBI2 configuration 2010/05/31 MOBIT prajuna Removed test code 2010/06/09 MOBIT prajuna TDMB porting(KB3 Rev. A patch) 2010/07/15 MOBIT prajuna TDMB tuning for QSC 2010/07/16 MOBIT somesoo TDMB tuning for QSC with FCI 최규원 과장 2010/07/17 MOBIT somesoo TDMB porting(VG) 2010/08/19 MOBIT prajuna Code review 2010/09/10 MOBIT prajuna TDMB porting(Aloe) ======================================================== */ int8 tunerbb_drv_fc8050_init(void) { uint8 res; /*test*/ /* uint16 i; uint32 wdata = 0; uint32 ldata = 0; uint32 data = 0; uint32 temp = 0; */ /* Common Code */ #if defined(STREAM_SLAVE_PARALLEL_UPLOAD) /* EBI2 Specific Code */ BBM_HOSTIF_SELECT(NULL, BBM_PPI); #elif defined(STREAM_TS_UPLOAD) /* TSIF Specific Code */ BBM_HOSTIF_SELECT(NULL, BBM_I2C); #elif defined(STREAM_SPI_UPLOAD) /* SPI Specific. Code */ BBM_HOSTIF_SELECT(NULL, BBM_SPI); #else #error code not present #endif BBM_FIC_CALLBACK_REGISTER((fci_u32)NULL, tunerbb_drv_fc8050_fic_cb); BBM_MSC_CALLBACK_REGISTER((fci_u32)NULL, tunerbb_drv_fc8050_msc_cb); res = BBM_INIT(NULL); if(res) return FC8050_RESULT_ERROR; else { #if !defined(STREAM_TS_UPLOAD) memset((void*)&g_chinfo, 0xff, sizeof(g_chinfo)); memset((void*)&msc_buffer, 0x00, sizeof(DATA_BUFFER)); memset((void*)&fic_buffer, 0x00, sizeof(DATA_BUFFER)); #endif } res = BBM_TUNER_SELECT(0, FC8050_TUNER, BAND3_TYPE); // res = BBM_PROBE(0); // printk("tunerbb_drv_fc8050_init probe RES = %d\n", res); #if 0 //fc8050 <-> Host(MSM) 간의 Interface TEST를 위한 code /* test */ for(i=0;i<5000;i++) { // dog_kick(); BBM_WRITE(NULL, 0x05, i & 0xff); BBM_READ(NULL, 0x05, &data); if((i & 0xff) != data) printk("FC8000 byte test (0x%x,0x%x)\n", i & 0xff, data); } for(i=0;i<5000;i++) { BBM_WORD_WRITE(NULL, 0x0210, i & 0xffff); BBM_WORD_READ(NULL, 0x0210, &wdata); if((i & 0xffff) != wdata) printk("FC8000 word test (0x%x,0x%x)\n", i & 0xffff, wdata); } for(i=0;i<5000;i++) { BBM_LONG_WRITE(NULL, 0x0210, i & 0xffffffff); BBM_LONG_READ(NULL, 0x0210, &ldata); if((i & 0xffffffff) != ldata) printk("FC8000 long test (0x%x,0x%x)\n", i & 0xffffffff, ldata); } data = 0; for(i=0;i<5000;i++) { temp = i&0xff; BBM_TUNER_WRITE(NULL, 0x12, 0x01, &temp, 0x01); BBM_TUNER_READ(NULL, 0x12, 0x01, &data, 0x01); if((i & 0xff) != data) printk("FC8000 tuner test (0x%x,0x%x)\n", i & 0xff, data); } temp = 0x51; BBM_TUNER_WRITE(NULL, 0x12, 0x01, &temp, 0x01 ); /* test */ #endif if(res) return FC8050_RESULT_ERROR; else return FC8050_RESULT_SUCCESS; }
static uint32 tunerbb_drv_fc8050_get_viterbi_ber(void) //msc_ber { uint8 vt_ctrl; uint32 bper, tbe; uint32 ber; #ifdef MON_BURST_MODE uint8 burst[12]; #ifdef FEATURE_FIC_BER if(serviceType[0]==FC8050_ENSQUERY) vt_ctrl = 0x11; else vt_ctrl = 0x13; #else vt_ctrl = 0x13; #endif BBM_WRITE(0, BBM_VT_CONTROL, vt_ctrl); BBM_BULK_READ(0, BBM_VT_RT_BER_PERIOD, &burst[0], 8); bper = (uint32)(*(uint32*)burst); tbe = (uint32)(*((uint32*)burst+1)); #ifdef FEATURE_FIC_BER if(serviceType[0]==FC8050_ENSQUERY) vt_ctrl = 0x1; else vt_ctrl = 0x3; #else vt_ctrl = 0x3; #endif BBM_WRITE(0, BBM_VT_CONTROL, vt_ctrl); #else BBM_READ(0, BBM_VT_CONTROL, &vt_ctrl); vt_ctrl |= 0x10; BBM_WRITE(0, BBM_VT_CONTROL, vt_ctrl); BBM_LONG_READ(0, BBM_VT_RT_BER_PERIOD, &bper); BBM_LONG_READ(0, BBM_VT_RT_ERROR_SUM, &tbe); vt_ctrl &= ~0x10; BBM_WRITE(0, BBM_VT_CONTROL, vt_ctrl); #endif if(bper == 0) { // LGE_INTG_090217 ber = MAX_MSC_BER; } else if(tbe == 0) { ber = 0; } else { //ber = ((tbe / bper) * 100000); //ber = (tbe * 100000) / bper; if(tbe > 42949) { ber = ((tbe * 1000)/bper)*100; } else { ber = (tbe*100000)/bper; } } ber = (ber >= MAX_MSC_BER) ? MAX_MSC_BER : ber; /* ber must bigger than 0 because FactoryTest issue */ if(ber == 0) { ber = 1; } return ber; }
unsigned char DMBDrv_init(void) { u8 data; u16 wdata; u32 ldata; int i; u8 temp = 0x1e; #ifdef CONFIG_TDMB_SPI if(BBM_HOSTIF_SELECT(NULL, BBM_SPI)) return TDMB_FAIL; #elif defined(CONFIG_TDMB_EBI) if(BBM_HOSTIF_SELECT(NULL, BBM_PPI)) return TDMB_FAIL; #endif if(BBM_PROBE(NULL) != BBM_OK) // check for factory chip interface test { return TDMB_FAIL; } BBM_FIC_CALLBACK_REGISTER(NULL, TDMBDrv_FIC_CALLBACK); BBM_MSC_CALLBACK_REGISTER(NULL, TDMBDrv_MSC_CALLBACK); BBM_INIT(NULL); BBM_TUNER_SELECT(NULL, FC8050_TUNER, BAND3_TYPE); #if 0 BBM_WRITE(NULL, 0x05, 0xa7); BBM_READ(NULL, 0x05, &data); BBM_READ(NULL, 0x12, &data); BBM_WORD_READ(NULL, 0x12, &wdata); BBM_WORD_WRITE(NULL, 0x310, 0x0b); BBM_WORD_READ(NULL, 0x310, &wdata); BBM_WRITE(NULL, 0x312, 0xc0); BBM_READ(NULL, 0x312, &data); BBM_TUNER_READ(NULL, 0x01, 0x01, &data, 0x01); #endif #if 0 for(i=0;i<1000;i++) { // dog_kick(); BBM_WRITE(NULL, 0x05, i & 0xff); BBM_READ(NULL, 0x05, &data); if((i & 0xff) != data) DPRINTK("FC8000 byte test (0x%x,0x%x)\r\n", i & 0xff, data); } for(i=0;i<1000;i++) { BBM_WORD_WRITE(NULL, 0x0210, i & 0xffff); BBM_WORD_READ(NULL, 0x0210, &wdata); if((i & 0xffff) != wdata) DPRINTK("FC8000 word test (0x%x,0x%x)\r\n", i & 0xffff, wdata); } for(i=0;i<1000;i++) { BBM_LONG_WRITE(NULL, 0x0210, i & 0xffffffff); BBM_LONG_READ(NULL, 0x0210, &ldata); if((i & 0xffffffff) != ldata) DPRINTK("FC8000 long test (0x%x,0x%x)\r\n", i & 0xffffffff, ldata); } for(i=0;i<1000;i++) { temp = i&0xff; BBM_TUNER_WRITE(NULL, 0x12, 0x01, &temp, 0x01); BBM_TUNER_READ(NULL, 0x12, 0x01, &data, 0x01); if((i & 0xff) != data) DPRINTK("FC8000 tuner test (0x%x,0x%x)\r\n", i & 0xff, data); } temp = 0x51; BBM_TUNER_WRITE(NULL, 0x12, 0x01, &temp, 0x01 ); #endif gBer = 3000; gInitFlag = 1; return TDMB_SUCCESS; }