s32 tuner_set_freq(HANDLE handle, DEVICEID devid, u32 freq, u8 subch) { #ifdef BBM_I2C_TSIF u8 tsif_en = 0; #endif if (tuner == NULL) return BBM_E_TN_SELECT; #ifdef BBM_I2C_TSIF if (devid == DIV_MASTER || devid == DIV_BROADCAST) { bbm_byte_read(handle, DIV_MASTER, BBM_TS_SEL, &tsif_en); bbm_byte_write(handle, DIV_MASTER, BBM_TS_SEL, tsif_en & 0x7f); } #endif fc8300_set_core_clk(handle, devid, broadcast_type, freq); bbm_byte_write(handle, devid, BBM_CENTER_CH_NUM, subch); switch (broadcast_type) { case ISDBT_1SEG: case ISDBTMM_1SEG: case ISDBTSB_1SEG: case ISDBT_CATV_1SEG: freq -= 380; break; case ISDBTSB_3SEG: #if (BBM_BAND_WIDTH == 6) freq -= 1000; #elif (BBM_BAND_WIDTH == 7) freq -= 1170; #else /* BBM)BAND_WIDTH == 8 */ freq -= 1330; #endif break; case ISDBT_13SEG: case ISDBTMM_13SEG: case ISDBT_CATV_13SEG: break; } if (tuner->set_freq(handle, devid, freq)) return BBM_E_TN_SET_FREQ; fc8300_reset(handle, devid); #ifdef BBM_I2C_TSIF if (devid == DIV_MASTER || devid == DIV_BROADCAST) bbm_byte_write(handle, DIV_MASTER, BBM_TS_SEL, tsif_en); #endif return BBM_OK; }
void fc8180_isr(HANDLE handle) { #ifdef BBM_AUX_INT u8 aux_int_status = 0; #endif #ifndef BBM_I2C_TSIF u8 buf_int_status = 0; bbm_read(handle, BBM_BUF_STATUS, &buf_int_status); if (buf_int_status) { bbm_write(handle, BBM_BUF_STATUS, buf_int_status); fc8180_data(handle, buf_int_status); } /* Overrun */ buf_int_status = 0; bbm_read(handle, BBM_BUF_STATUS, &buf_int_status); if (buf_int_status) { bbm_write(handle, BBM_BUF_STATUS, buf_int_status); fc8180_data(handle, buf_int_status); } #endif #ifdef BBM_AUX_INT bbm_byte_read(handle, BBM_AUX_STATUS_CLEAR, &aux_int_status); if (aux_int_status) { bbm_byte_write(handle, BBM_AUX_STATUS_CLEAR, aux_int_status); fc8180_aux_int(handle, aux_int_status); } #endif }
int BBM_BYTE_WRITE(HANDLE hDevice, u16 addr, u8 data) { int res; res = bbm_byte_write(hDevice, addr, data); return res; }
fci_s32 bbm_com_byte_write(HANDLE handle, fci_u16 addr, fci_u8 data) { fci_s32 res; res = bbm_byte_write(handle, addr, data); return res; }
s32 bbm_com_byte_write(HANDLE handle, DEVICEID devid, u16 addr, u8 data) { s32 res; res = bbm_byte_write(handle, devid, addr, data); return res; }
int bbm_com_byte_write(HANDLE hDevice, u16 addr, u8 data) { int res; res = bbm_byte_write(hDevice, addr, data); return res; }
void fc8300_isr(HANDLE handle) { #ifndef BBM_I2C_TSIF u8 buf_int_status = 0; #endif #ifdef BBM_AUX_INT u8 aux_int_status = 0; #endif print_log(0,"%s \n",__func__); #ifndef BBM_I2C_TSIF bbm_byte_read(handle, DIV_MASTER, BBM_BUF_STATUS_CLEAR, &buf_int_status); if (buf_int_status) { bbm_byte_write(handle, DIV_MASTER, BBM_BUF_STATUS_CLEAR, buf_int_status); fc8300_data(handle, DIV_MASTER, buf_int_status); } buf_int_status = 0; bbm_byte_read(handle, DIV_MASTER, BBM_BUF_STATUS_CLEAR, &buf_int_status); if (buf_int_status) { bbm_byte_write(handle, DIV_MASTER, BBM_BUF_STATUS_CLEAR, buf_int_status); fc8300_data(handle, DIV_MASTER, buf_int_status); } #endif #ifdef BBM_AUX_INT bbm_byte_read(handle, DIV_MASTER, BBM_AUX_STATUS_CLEAR, &aux_int_status); if (aux_int_status) { bbm_byte_write(handle, DIV_MASTER, BBM_AUX_STATUS_CLEAR, aux_int_status); fc8300_aux_int(handle, DIV_MASTER, aux_int_status); } #endif }
s32 tuner_select(HANDLE handle, DEVICEID devid, enum PRODUCT_TYPE product, enum BROADCAST_TYPE broadcast) { switch (product) { case FC8300_TUNER: tuner = &fc8300_tuner; tuner_addr = FC8300_TUNER_ADDR; broadcast_type = broadcast; break; } if (tuner == NULL) { print_log(0,"ERROR tuner == NULL\n"); return BBM_E_TN_SELECT; } if (tuner->init(handle, devid, broadcast)) { print_log(0,"tuner->init\n"); return BBM_E_TN_INIT; } fc8300_set_broadcast_mode(handle, devid, broadcast); #ifdef BBM_ES if (product == FC8300_TUNER) { u8 chip_ver = 0x00; tuner_i2c_read(handle, devid, 0xff, 1, &chip_ver, 1); if (chip_ver == 0xc0) return BBM_OK; bbm_byte_write(handle, DIV_MASTER, BBM_RESYNC_ENABLE, 0xcf); bbm_long_write(handle, DIV_BROADCAST, BBM_MEMORY_RWM0, 0x05555555); bbm_byte_write(handle, DIV_BROADCAST, BBM_SFS_FTS_ERR_MAX_1SEG, 0x08); bbm_byte_write(handle, DIV_BROADCAST, BBM_SFS_FTS_ERR_MAX_3SEG, 0x08); bbm_byte_write(handle, DIV_BROADCAST, BBM_PGA_GAIN_MAX, 0x0c); bbm_byte_write(handle, DIV_BROADCAST, BBM_CSF_GAIN_MAX, 0x09); bbm_byte_write(handle, DIV_MASTER, BBM_FD_OUT_MODE, 0x03); bbm_byte_write(handle, DIV_MASTER, BBM_DIV_START_MODE, 0x17); bbm_byte_write(handle, DIV_BROADCAST, BBM_PSAT_ON_REF_1SEG_QPSK, 0x1a); bbm_byte_write(handle, DIV_BROADCAST, BBM_PSAT_ON_REF_1SEG_16QAM, 0x1b); switch (broadcast) { case ISDBT_1SEG: case ISDBTMM_1SEG: case ISDBTSB_1SEG: case ISDBT_CATV_1SEG: case ISDBTSB_3SEG: bbm_byte_write(handle, DIV_BROADCAST, BBM_SFS_MTH, 0x32); break; case ISDBT_13SEG: case ISDBTMM_13SEG: case ISDBT_CATV_13SEG: bbm_byte_write(handle, DIV_BROADCAST, BBM_SFS_MTH, 0x31); break; } #if defined(BBM_2_DIVERSITY) || defined(BBM_4_DIVERSITY) bbm_byte_write(handle, DIV_MASTER, BBM_XTAL_OUTBUF_EN, 0x00); bbm_byte_write(handle, DIV_MASTER, BBM_XTAL_OUTBUF_GAIN, 0x03); bbm_word_write(handle, DIV_BROADCAST, BBM_FD_RD_LATENCY_1SEG, 0x1840); bbm_byte_write(handle, DIV_BROADCAST, BBM_COMB_OFF, 0x80); #else /* SINGLE */ bbm_word_write(handle, DIV_BROADCAST, BBM_FD_RD_LATENCY_1SEG, 0x0002); #endif /* #if defined(BBM_2_DIVERSITY) || defined(BBM_4_DIVERSITY) */ } #endif /* #ifdef BBM_ES */ return BBM_OK; }
static s32 fc8080_set_xtal(HANDLE handle) { if (main_xtal_freq == 24576) { bbm_long_write(handle, BBM_NCO_OFFSET, 0x04000000); bbm_byte_write(handle, BBM_NCO_INV, 0x80); bbm_byte_write(handle, BBM_EZ_CONST, 0x80); bbm_byte_write(handle, BBM_CLK_MODE, 0x02); /* filter coefficient */ bbm_byte_write(handle, BBM_COEF00, 0x02); bbm_byte_write(handle, BBM_COEF01, 0x0f); bbm_byte_write(handle, BBM_COEF02, 0x0d); bbm_byte_write(handle, BBM_COEF03, 0x00); bbm_byte_write(handle, BBM_COEF04, 0x04); bbm_byte_write(handle, BBM_COEF05, 0x03); bbm_byte_write(handle, BBM_COEF06, 0x1c); bbm_byte_write(handle, BBM_COEF07, 0x19); bbm_byte_write(handle, BBM_COEF08, 0x02); bbm_byte_write(handle, BBM_COEF09, 0x0c); bbm_byte_write(handle, BBM_COEF0A, 0x04); bbm_byte_write(handle, BBM_COEF0B, 0x30); bbm_byte_write(handle, BBM_COEF0C, 0xed); bbm_byte_write(handle, BBM_COEF0D, 0x13); bbm_byte_write(handle, BBM_COEF0E, 0x4f); bbm_byte_write(handle, BBM_COEF0F, 0x6b); } else if (main_xtal_freq == 16384) { /* clock mode */ bbm_long_write(handle, BBM_NCO_OFFSET, 0x04000000); bbm_byte_write(handle, BBM_NCO_INV, 0x80); bbm_byte_write(handle, BBM_EZ_CONST, 0x80); bbm_byte_write(handle, BBM_CLK_MODE, 0x00); /* filter coefficient */ bbm_byte_write(handle, BBM_COEF00, 0x02); bbm_byte_write(handle, BBM_COEF01, 0x0f); bbm_byte_write(handle, BBM_COEF02, 0x0d); bbm_byte_write(handle, BBM_COEF03, 0x00); bbm_byte_write(handle, BBM_COEF04, 0x04); bbm_byte_write(handle, BBM_COEF05, 0x03); bbm_byte_write(handle, BBM_COEF06, 0x1c); bbm_byte_write(handle, BBM_COEF07, 0x19); bbm_byte_write(handle, BBM_COEF08, 0x02); bbm_byte_write(handle, BBM_COEF09, 0x0c); bbm_byte_write(handle, BBM_COEF0A, 0x04); bbm_byte_write(handle, BBM_COEF0B, 0x30); bbm_byte_write(handle, BBM_COEF0C, 0xed); bbm_byte_write(handle, BBM_COEF0D, 0x13); bbm_byte_write(handle, BBM_COEF0E, 0x4f); bbm_byte_write(handle, BBM_COEF0F, 0x6b); } else if (main_xtal_freq == 19200) { bbm_long_write(handle, BBM_NCO_OFFSET, 0x0369d037); bbm_byte_write(handle, BBM_NCO_INV, 0x96); bbm_byte_write(handle, BBM_EZ_CONST, 0x6d); bbm_byte_write(handle, BBM_CLK_MODE, 0x00); /* filter coefficient */ bbm_byte_write(handle, BBM_COEF00, 0x0e); bbm_byte_write(handle, BBM_COEF01, 0x00); bbm_byte_write(handle, BBM_COEF02, 0x03); bbm_byte_write(handle, BBM_COEF03, 0x03); bbm_byte_write(handle, BBM_COEF04, 0x1f); bbm_byte_write(handle, BBM_COEF05, 0x1a); bbm_byte_write(handle, BBM_COEF06, 0x1b); bbm_byte_write(handle, BBM_COEF07, 0x03); bbm_byte_write(handle, BBM_COEF08, 0x0a); bbm_byte_write(handle, BBM_COEF09, 0x05); bbm_byte_write(handle, BBM_COEF0A, 0x37); bbm_byte_write(handle, BBM_COEF0B, 0x2d); bbm_byte_write(handle, BBM_COEF0C, 0xfa); bbm_byte_write(handle, BBM_COEF0D, 0x1f); bbm_byte_write(handle, BBM_COEF0E, 0x49); bbm_byte_write(handle, BBM_COEF0F, 0x5c); } else if (main_xtal_freq == 24000) { bbm_long_write(handle, BBM_NCO_OFFSET, 0x02bb0cf8); bbm_byte_write(handle, BBM_NCO_INV, 0xbc); bbm_byte_write(handle, BBM_EZ_CONST, 0x57); bbm_byte_write(handle, BBM_CLK_MODE, 0x00); /* filter coefficient */ bbm_byte_write(handle, BBM_COEF00, 0x02); bbm_byte_write(handle, BBM_COEF01, 0x02); bbm_byte_write(handle, BBM_COEF02, 0x00); bbm_byte_write(handle, BBM_COEF03, 0x0c); bbm_byte_write(handle, BBM_COEF04, 0x1c); bbm_byte_write(handle, BBM_COEF05, 0x1f); bbm_byte_write(handle, BBM_COEF06, 0x05); bbm_byte_write(handle, BBM_COEF07, 0x08); bbm_byte_write(handle, BBM_COEF08, 0x04); bbm_byte_write(handle, BBM_COEF09, 0x3a); bbm_byte_write(handle, BBM_COEF0A, 0x31); bbm_byte_write(handle, BBM_COEF0B, 0x34); bbm_byte_write(handle, BBM_COEF0C, 0x07); bbm_byte_write(handle, BBM_COEF0D, 0x26); bbm_byte_write(handle, BBM_COEF0E, 0x42); bbm_byte_write(handle, BBM_COEF0F, 0x4e); } else if (main_xtal_freq == 26000) { bbm_long_write(handle, BBM_NCO_OFFSET, 0x03c7ea98); bbm_byte_write(handle, BBM_NCO_INV, 0x87); bbm_byte_write(handle, BBM_EZ_CONST, 0x79); bbm_byte_write(handle, BBM_CLK_MODE, 0x02); /* filter coefficient */ bbm_byte_write(handle, BBM_COEF00, 0x0f); bbm_byte_write(handle, BBM_COEF01, 0x0d); bbm_byte_write(handle, BBM_COEF02, 0x0f); bbm_byte_write(handle, BBM_COEF03, 0x03); bbm_byte_write(handle, BBM_COEF04, 0x04); bbm_byte_write(handle, BBM_COEF05, 0x1f); bbm_byte_write(handle, BBM_COEF06, 0x19); bbm_byte_write(handle, BBM_COEF07, 0x1c); bbm_byte_write(handle, BBM_COEF08, 0x07); bbm_byte_write(handle, BBM_COEF09, 0x0b); bbm_byte_write(handle, BBM_COEF0A, 0x3f); bbm_byte_write(handle, BBM_COEF0B, 0x2d); bbm_byte_write(handle, BBM_COEF0C, 0xf2); bbm_byte_write(handle, BBM_COEF0D, 0x19); bbm_byte_write(handle, BBM_COEF0E, 0x4d); bbm_byte_write(handle, BBM_COEF0F, 0x65); } else if (main_xtal_freq == 27000) { bbm_long_write(handle, BBM_NCO_OFFSET, 0x03a4114b); bbm_byte_write(handle, BBM_NCO_INV, 0x8d); bbm_byte_write(handle, BBM_EZ_CONST, 0x75); bbm_byte_write(handle, BBM_CLK_MODE, 0x02); /* filter coefficient */ bbm_byte_write(handle, BBM_COEF00, 0x0e); bbm_byte_write(handle, BBM_COEF01, 0x0e); bbm_byte_write(handle, BBM_COEF02, 0x01); bbm_byte_write(handle, BBM_COEF03, 0x04); bbm_byte_write(handle, BBM_COEF04, 0x03); bbm_byte_write(handle, BBM_COEF05, 0x1d); bbm_byte_write(handle, BBM_COEF06, 0x19); bbm_byte_write(handle, BBM_COEF07, 0x1f); bbm_byte_write(handle, BBM_COEF08, 0x09); bbm_byte_write(handle, BBM_COEF09, 0x09); bbm_byte_write(handle, BBM_COEF0A, 0x3b); bbm_byte_write(handle, BBM_COEF0B, 0x2d); bbm_byte_write(handle, BBM_COEF0C, 0xf5); bbm_byte_write(handle, BBM_COEF0D, 0x1c); bbm_byte_write(handle, BBM_COEF0E, 0x4b); bbm_byte_write(handle, BBM_COEF0F, 0x61); } else if (main_xtal_freq == 27120) { bbm_long_write(handle, BBM_NCO_OFFSET, 0x039ff180); bbm_byte_write(handle, BBM_NCO_INV, 0x8d); bbm_byte_write(handle, BBM_EZ_CONST, 0x74); bbm_byte_write(handle, BBM_CLK_MODE, 0x02); /* filter coefficient */ bbm_byte_write(handle, BBM_COEF00, 0x0e); bbm_byte_write(handle, BBM_COEF01, 0x0e); bbm_byte_write(handle, BBM_COEF02, 0x01); bbm_byte_write(handle, BBM_COEF03, 0x04); bbm_byte_write(handle, BBM_COEF04, 0x03); bbm_byte_write(handle, BBM_COEF05, 0x1d); bbm_byte_write(handle, BBM_COEF06, 0x19); bbm_byte_write(handle, BBM_COEF07, 0x1f); bbm_byte_write(handle, BBM_COEF08, 0x09); bbm_byte_write(handle, BBM_COEF09, 0x09); bbm_byte_write(handle, BBM_COEF0A, 0x3b); bbm_byte_write(handle, BBM_COEF0B, 0x2d); bbm_byte_write(handle, BBM_COEF0C, 0xf5); bbm_byte_write(handle, BBM_COEF0D, 0x1c); bbm_byte_write(handle, BBM_COEF0E, 0x4b); bbm_byte_write(handle, BBM_COEF0F, 0x61); } else if (main_xtal_freq == 32000) { bbm_long_write(handle, BBM_NCO_OFFSET, 0x03126eb8); bbm_byte_write(handle, BBM_NCO_INV, 0xa7); bbm_byte_write(handle, BBM_EZ_CONST, 0x62); bbm_byte_write(handle, BBM_CLK_MODE, 0x02); /* filter coefficient */ bbm_byte_write(handle, BBM_COEF00, 0x0e); bbm_byte_write(handle, BBM_COEF01, 0x0e); bbm_byte_write(handle, BBM_COEF02, 0x01); bbm_byte_write(handle, BBM_COEF03, 0x04); bbm_byte_write(handle, BBM_COEF04, 0x03); bbm_byte_write(handle, BBM_COEF05, 0x1d); bbm_byte_write(handle, BBM_COEF06, 0x19); bbm_byte_write(handle, BBM_COEF07, 0x1f); bbm_byte_write(handle, BBM_COEF08, 0x09); bbm_byte_write(handle, BBM_COEF09, 0x09); bbm_byte_write(handle, BBM_COEF0A, 0x3b); bbm_byte_write(handle, BBM_COEF0B, 0x3d); bbm_byte_write(handle, BBM_COEF0C, 0xf5); bbm_byte_write(handle, BBM_COEF0D, 0x1c); bbm_byte_write(handle, BBM_COEF0E, 0x4b); bbm_byte_write(handle, BBM_COEF0F, 0x61); } else if (main_xtal_freq == 38400) { bbm_long_write(handle, BBM_NCO_OFFSET, 0x0369d037); bbm_byte_write(handle, BBM_NCO_INV, 0x96); bbm_byte_write(handle, BBM_EZ_CONST, 0x6d); bbm_byte_write(handle, BBM_CLK_MODE, 0x01); /* filter coefficient */ bbm_byte_write(handle, BBM_COEF00, 0x0e); bbm_byte_write(handle, BBM_COEF01, 0x00); bbm_byte_write(handle, BBM_COEF02, 0x03); bbm_byte_write(handle, BBM_COEF03, 0x03); bbm_byte_write(handle, BBM_COEF04, 0x1f); bbm_byte_write(handle, BBM_COEF05, 0x1a); bbm_byte_write(handle, BBM_COEF06, 0x1b); bbm_byte_write(handle, BBM_COEF07, 0x03); bbm_byte_write(handle, BBM_COEF08, 0x0a); bbm_byte_write(handle, BBM_COEF09, 0x05); bbm_byte_write(handle, BBM_COEF0A, 0x37); bbm_byte_write(handle, BBM_COEF0B, 0x2d); bbm_byte_write(handle, BBM_COEF0C, 0xfa); bbm_byte_write(handle, BBM_COEF0D, 0x1f); bbm_byte_write(handle, BBM_COEF0E, 0x49); bbm_byte_write(handle, BBM_COEF0F, 0x5c); } return BBM_OK; }
static void fc8300_aux_int(HANDLE handle, DEVICEID devid, u8 aux_int_status) { if (aux_int_status & AUX_INT_TMCC_INT_SRC) ; if (aux_int_status & AUX_INT_TMCC_INDTPS_SRC) ; if (aux_int_status & AUX_INT_AC_PREFRM_SRC) ; if (aux_int_status & AUX_INT_AC_EWISTAFLAG_SRC) ; if (aux_int_status & AUX_INT_SYNC_RELATED_INT) { u8 sync = 0; bbm_byte_read(handle, DIV_MASTER, BBM_SYS_MD_INT_CLR, &sync); if (sync) { bbm_byte_write(handle, DIV_MASTER, BBM_SYS_MD_INT_CLR, sync); if (sync & SYS_MD_NO_OFDM_DETECT) ; if (sync & SYS_MD_RESYNC_OCCUR) ; if (sync & SYS_MD_TMCC_LOCK) ; if (sync & SYS_MD_A_LAYER_BER_UPDATE) ; if (sync & SYS_MD_B_LAYER_BER_UPDATE) ; if (sync & SYS_MD_C_LAYER_BER_UPDATE) ; if (sync & SYS_MD_BER_UPDATE) ; } } if (aux_int_status & AUX_INT_GPIO_INT_CLEAR) ; if (aux_int_status & AUX_INT_FEC_RELATED_INT) { u8 fec = 0; bbm_byte_read(handle, DIV_MASTER, BBM_FEC_INT_CLR, &fec); if (fec) { bbm_byte_write(handle, DIV_MASTER, BBM_FEC_INT_CLR, fec); if (fec & FEC_INT_IRQ_A_TS_ERROR) ; if (fec & FEC_INT_IRQ_B_TS_ERROR) ; if (fec & FEC_INT_IRQ_C_TS_ERROR) ; } } if (aux_int_status & AUX_INT_AUTO_SWITCH) { u8 auto_switch = 0; bbm_byte_read(handle, DIV_MASTER, BBM_OSS_MNT, &auto_switch); if (auto_switch & AUTO_SWITCH_1_SEG) /* 1-SEG */ ; else /* 12-SEG */ ; } }