int8 tunerbb_drv_t39fx_read_data(uint8* buffer, uint32* buffer_size)
{
	TDMB_BB_HEADER_TYPE dmb_header;
	uint8* r_buffer = NULL;

#if 0	
	dmb_header.data_type = (serviceType == T39FX_DAB?TDMB_BB_DATA_DAB:TDMB_BB_DATA_TS);
	dmb_header.size = INC_INTERRUPT_SIZE;
	dmb_header.subch_id = 0;
	dmb_header.reserved = 0;//0xDEAD;
			
	memcpy(buffer, &dmb_header, sizeof(TDMB_BB_HEADER_TYPE));
			
	if(INTERFACE_ISR(TDMB_RFBB_DEV_ADDR, buffer + sizeof(TDMB_BB_HEADER_TYPE))!=INC_SUCCESS)
	{
		*buffer_size = 0;
		printk(" ISR READ Error! \n");
		return INC_ERROR;
	}

	*buffer_size = INC_INTERRUPT_SIZE + sizeof(TDMB_BB_HEADER_TYPE);
	return INC_SUCCESS;
#else
	uint32 r_size = 0;
	r_buffer = (buffer + sizeof(TDMB_BB_HEADER_TYPE));
	r_size = INTERFACE_ISR(TDMB_RFBB_DEV_ADDR, r_buffer);

	if(r_size == (uint32)INC_ERROR) {
		*buffer_size = 0;
		printk("ISR READ Error!!\n");
		return INC_ERROR;
	}

	dmb_header.data_type = (serviceType == T39FX_DAB?TDMB_BB_DATA_DAB:TDMB_BB_DATA_TS);
	dmb_header.size = r_size;
	dmb_header.subch_id = 0;
	dmb_header.reserved =0; //0xDEAD;

	memcpy(buffer, &dmb_header, sizeof(TDMB_BB_HEADER_TYPE));
	*buffer_size = r_size + sizeof(TDMB_BB_HEADER_TYPE);
	return INC_SUCCESS;
#endif
}
int8 tunerbb_drv_t3900_read_data(uint8* buffer, uint32* buffer_size)
{
	if(INTERFACE_ISR(TDMB_RFBB_DEV_ADDR, buffer)!=INC_SUCCESS)
	{
		*buffer_size = 0;
		return INC_ERROR;
	}

	*buffer_size = INC_INTERRUPT_SIZE;
	return INC_SUCCESS;
}
int8 tunerbb_drv_lg2102_read_data(uint8* buffer, uint32* buffer_size)
{
	TDMB_BB_HEADER_TYPE dmb_header;

	dmb_header.data_type = (serviceType == LG2102_DAB?TDMB_BB_DATA_DAB:TDMB_BB_DATA_TS);
	dmb_header.size = LGD_INTERRUPT_SIZE;
	dmb_header.subch_id = g_subch_id;
	dmb_header.reserved = data_sequence_count++;//0xDEAD;
		
	memcpy(buffer , &dmb_header, sizeof(TDMB_BB_HEADER_TYPE));
	
	if(INTERFACE_ISR(TDMB_RFBB_DEV_ADDR, buffer + sizeof(TDMB_BB_HEADER_TYPE))!=LGD_SUCCESS)
	{
		*buffer_size = 0;
		return LGD_ERROR;
	}

	*buffer_size = LGD_INTERRUPT_SIZE + sizeof(TDMB_BB_HEADER_TYPE);
	
	return LGD_SUCCESS;
}
int8 tunerbb_drv_lg2102_multi_read_data(uint8 subch_cnt, uint8* buffer, uint32* read_size)
{
	LGD_UINT8*	IntBuff = &initBuff[0];
	ST_FIFO*	pMultiFF;
	int			nDataSize;
	int			i;
	LGD_UINT32	buf_size = 0;
	TDMB_BB_HEADER_TYPE dmb_header;
	LGD_UINT16	uFIBCnt;

	if(buffer == NULL || read_size == NULL)
	{
		return LGD_ERROR;
	}

	if(INTERFACE_ISR(TDMB_RFBB_DEV_ADDR, IntBuff)!=LGD_SUCCESS)
	{
		return LGD_ERROR;
	}

	if(subch_cnt>LGD_MULTI_MAX_CHANNEL) 
	{
		return LGD_ERROR;
	}
	
	if(LGD_MULTI_FIFO_PROCESS(IntBuff, LGD_INTERRUPT_SIZE))
	{

#ifdef LGD_MULTI_CHANNEL_FIC_UPLOAD
		// (i==1) => FIC_STREAM_DATA,
		pMultiFF = LGD_GET_CHANNEL_FIFO(FIC_STREAM_DATA);
		uFIBCnt = LGD_GET_FIB_CNT(m_ucTransMode);
		nDataSize = LGD_QFIFO_GET_SIZE(pMultiFF);
		if(nDataSize >= (uFIBCnt*FIB_SIZE))
		{
			wFicLen = (uFIBCnt*FIB_SIZE);
			LGD_QFIFO_BRING(pMultiFF, abyBuff, wFicLen);
#ifdef LGD_EWS_SOURCE_ENABLE  
			if(LGD_EWS_PARSING(abyBuff, wFicLen)==LGD_SUCCESS)
			{
				ST_OUTPUT_EWS*	pstEWSMsg;
				LGD_GET_EWS_DB(pstEWSMsg);
				///////////////////////////
				// TO-DO : process EWS Data
				///////////////////////////
			}
#endif			
		}
#endif

		for(i=0;i<subch_cnt;i++)
		{
			/************************************************
			(i==2) => CHANNEL1_STREAM_DATA,
			(i==3) => CHANNEL2_STREAM_DATA,
			(i==4) => CHANNEL3_STREAM_DATA,
			************************************************/
			pMultiFF = LGD_GET_CHANNEL_FIFO(i+2);
			nDataSize = LGD_QFIFO_GET_SIZE(pMultiFF);
			if(nDataSize>=LGD_INTERRUPT_SIZE)
			{
				dmb_header.reserved = 0xDEAD;
				dmb_header.data_type = g_datatype[i];
				dmb_header.size = nDataSize;
				dmb_header.subch_id = g_subch_id[i];
				memcpy(buffer,&dmb_header,sizeof(TDMB_BB_HEADER_TYPE));
				buffer += sizeof(TDMB_BB_HEADER_TYPE);
				buf_size += sizeof(TDMB_BB_HEADER_TYPE);
				LGD_QFIFO_BRING(pMultiFF, buffer, nDataSize);
				buffer += nDataSize;
				buf_size += nDataSize;
			}			
		}
	}

	*read_size = buf_size;

	return LGD_SUCCESS;
}