Beispiel #1
0
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;
}
Beispiel #2
0
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]);
    }
}
Beispiel #3
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;

}
Beispiel #4
0
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; 	

}
Beispiel #7
0
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;
}
Beispiel #8
0
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; 	

}
Beispiel #9
0
/*======================================================= 
    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;

}
Beispiel #11
0
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;
}