Пример #1
0
static void DMBDrv_Check_Overrun(u8 reset)
{
	u16 mfoverStatus;
	u16 veri_val=0;

	BBM_WORD_READ(NULL, BBM_BUF_OVERRUN, &mfoverStatus);		

	if(mfoverStatus & gDmbMode)
	{
		//overrun clear
		BBM_WORD_WRITE(NULL, BBM_BUF_OVERRUN, mfoverStatus);
		BBM_WORD_WRITE(NULL, BBM_BUF_OVERRUN, 0x0000);

		if(reset)
		{
			//buffer restore
			BBM_WORD_READ(NULL, BBM_BUF_ENABLE, &veri_val);
			veri_val &= ~gDmbMode;
			BBM_WORD_WRITE(NULL, BBM_BUF_ENABLE, veri_val);
			veri_val |= gDmbMode; 
			BBM_WORD_WRITE(NULL, BBM_BUF_ENABLE, veri_val);

			//external interrupt restore
			fc8050_isr_interruptclear();
		}
		
		DPRINTK("FC8050 Overrun occured %s MODE , Restoration : %s performed\n", (gDmbMode&0x01)?"DMB":"DAB", (reset)?" ":"Not");          		
	}

}
Пример #2
0
void dmb_drv_check_overrun(u8 reset)
{
	u16 overrun;
	u16 temp = 0;

	bbm_com_word_read(NULL, BBM_BUF_OVERRUN, &overrun);

	if (overrun & dmb_mode) {
		/* overrun clear */
		bbm_com_word_write(NULL, BBM_BUF_OVERRUN, overrun);
		bbm_com_word_write(NULL, BBM_BUF_OVERRUN, 0x0000);

		if (reset) {
			/* buffer restore */
			bbm_com_word_read(NULL, BBM_BUF_ENABLE, &temp);
			temp &= ~dmb_mode;
			bbm_com_word_write(NULL, BBM_BUF_ENABLE, temp);
			temp |= dmb_mode;
			bbm_com_word_write(NULL, BBM_BUF_ENABLE, temp);

			/* external interrupt restore */
			fc8050_isr_interruptclear();
		}

		DPRINTK("FC8050 Overrun occured\n");
	}

}
static int8 tunerbb_drv_fc8050_check_overrun(uint8 op_mode)
{
	uint16 mfoverStatus;

	// Patch for BER monitoring 20111115
	//uint16 buf_set=0;

	uint16 veri_val=0;
	uint8 mask;

	if(op_mode == FC8050_DAB)
	{
		mask = 0x08;
	}
	else if(op_mode == FC8050_DMB || op_mode == FC8050_VISUAL)
	{
		mask = 0x01;
	}
	else
	{
		printk("fc8050 invaild op_mode %d\n", op_mode);
		return FC8050_RESULT_ERROR; /* invaild op_mode */
	}
	
	// Patch for BER monitoring 20111115
	//BBM_WORD_READ(NULL, BBM_BUF_ENABLE, &buf_set);

	// Patch for BER monitoring 20111115
	//if(buf_set & mask)
	{	
		BBM_WORD_READ(NULL, BBM_BUF_OVERRUN, &mfoverStatus);		

		if(mfoverStatus & mask)
		{
			BBM_WORD_WRITE(NULL, BBM_BUF_OVERRUN, mfoverStatus);
			BBM_WORD_WRITE(NULL, BBM_BUF_OVERRUN, 0x0000);
			
			BBM_WORD_READ(NULL, BBM_BUF_ENABLE, &veri_val);
			veri_val &= ~mask;
			BBM_WORD_WRITE(NULL, BBM_BUF_ENABLE, veri_val);
			veri_val |= mask; 
			BBM_WORD_WRITE(NULL, BBM_BUF_ENABLE, veri_val);

			fc8050_isr_interruptclear();

			printk("++++++++++++++++++++++ fc8050 overrun occured!!! ++++++++++++++++++++++++++\n");
			printk("fc8050 overrun and buffer reset done!! mask %x, over %x\n", mask, mfoverStatus);
		}
	}

	return FC8050_RESULT_SUCCESS;
}