/* * mt6628_pwrdown - Wholechip FM Power down: Digital Modem Power Down * @buf - target buf * @buf_size - buffer size * return package size */ fm_s32 mt6628_pwrdown(fm_u8 *buf, fm_s32 buf_size) { fm_s32 pkt_size = 0; if (buf_size < TX_BUF_SIZE) { return (-1); } buf[0] = FM_TASK_COMMAND_PKT_TYPE; buf[1] = FM_ENABLE_OPCODE; pkt_size = 4; //Disable HW clock control pkt_size += fm_bop_write(0x60, 0x330F, &buf[pkt_size], buf_size - pkt_size);//wr 60 330F //Reset ASIP pkt_size += fm_bop_write(0x61, 0x0001, &buf[pkt_size], buf_size - pkt_size);//wr 61 0001 //digital core + digital rgf reset pkt_size += fm_bop_modify(0x6E, 0xFFF8, 0x0000, &buf[pkt_size], buf_size - pkt_size);//wr 6E[0~2] 0 pkt_size += fm_bop_modify(0x6E, 0xFFF8, 0x0000, &buf[pkt_size], buf_size - pkt_size);//wr 6E[0~2] 0 pkt_size += fm_bop_modify(0x6E, 0xFFF8, 0x0000, &buf[pkt_size], buf_size - pkt_size);//wr 6E[0~2] 0 pkt_size += fm_bop_modify(0x6E, 0xFFF8, 0x0000, &buf[pkt_size], buf_size - pkt_size);//wr 6E[0~2] 0 //Disable all clock pkt_size += fm_bop_write(0x60, 0x0000, &buf[pkt_size], buf_size - pkt_size);//wr 60 0000 //Reset rgfrf pkt_size += fm_bop_write(0x60, 0x4000, &buf[pkt_size], buf_size - pkt_size);//wr 60 4000 pkt_size += fm_bop_write(0x60, 0x0000, &buf[pkt_size], buf_size - pkt_size);//wr 60 0000 buf[2] = (fm_u8)((pkt_size - 4) & 0x00FF); buf[3] = (fm_u8)(((pkt_size - 4) >> 8) & 0x00FF); return pkt_size; }
/* * mt6628_pwrup_digital_init - Wholechip FM Power Up: step 4, FM Digital Init: fm_rgf_maincon * @buf - target buf * @buf_size - buffer size * return package size */ fm_s32 mt6628_pwrup_digital_init(fm_u8 *buf, fm_s32 buf_size) { fm_s32 pkt_size = 0; if (buf_size < TX_BUF_SIZE) { return (-1); } buf[0] = FM_TASK_COMMAND_PKT_TYPE; buf[1] = FM_ENABLE_OPCODE; pkt_size = 4; //Wholechip FM Power Up: FM Digital Init: fm_rgf_maincon pkt_size += fm_bop_write(0x6A, 0x2100, &buf[pkt_size], buf_size - pkt_size);//wr 6A 2100 pkt_size += fm_bop_write(0x6B, 0x2100, &buf[pkt_size], buf_size - pkt_size);//wr 6B 2100 pkt_size += fm_bop_modify(0x60, 0xFFF7, 0x0008, &buf[pkt_size], buf_size - pkt_size);//wr 60 D3=1 pkt_size += fm_bop_modify(0x61, 0xFFFD, 0x0002, &buf[pkt_size], buf_size - pkt_size);//wr 61 D1=1 pkt_size += fm_bop_modify(0x61, 0xFFFE, 0x0000, &buf[pkt_size], buf_size - pkt_size);//wr 61 D0=0 pkt_size += fm_bop_udelay(200000, &buf[pkt_size], buf_size - pkt_size);//delay 200ms pkt_size += fm_bop_rd_until(0x64, 0x001F, 0x0002, &buf[pkt_size], buf_size - pkt_size);//Poll 64[0~4] = 2 buf[2] = (fm_u8)((pkt_size - 4) & 0x00FF); buf[3] = (fm_u8)(((pkt_size - 4) >> 8) & 0x00FF); return pkt_size; }
/* * mt6627_pwrup_fine_tune - Wholechip FM Power Up: step 5, FM RF fine tune setting * @buf - target buf * @buf_size - buffer size * return package size */ fm_s32 mt6627_pwrup_fine_tune(fm_u8 *buf, fm_s32 buf_size) { fm_s32 pkt_size = 0; if (buf_size < TX_BUF_SIZE) { return (-1); } buf[0] = FM_TASK_COMMAND_PKT_TYPE; buf[1] = FM_ENABLE_OPCODE; pkt_size = 4; //F1 set host control RF register pkt_size += fm_bop_top_write(0x50, 0x00000007, &buf[pkt_size], buf_size - pkt_size);//wr 50 7 //F2 fine tune RF setting pkt_size += fm_bop_write(0x01, 0xBEE8, &buf[pkt_size], buf_size - pkt_size);//wr 01 0xBEE8 pkt_size += fm_bop_write(0x03, 0xF6ED, &buf[pkt_size], buf_size - pkt_size);//wr 03 0xF6ED mdy 0315 version pkt_size += fm_bop_write(0x15, 0x0D80, &buf[pkt_size], buf_size - pkt_size);//wr 15 0x0D80 pkt_size += fm_bop_write(0x16, 0x0068, &buf[pkt_size], buf_size - pkt_size);//wr 16 0x0068 pkt_size += fm_bop_write(0x17, 0x092A, &buf[pkt_size], buf_size - pkt_size);//wr 17 0x092A pkt_size += fm_bop_write(0x34, 0x807F, &buf[pkt_size], buf_size - pkt_size);//wr 34 0x807F pkt_size += fm_bop_write(0x35, 0x311E, &buf[pkt_size], buf_size - pkt_size);//wr 35 0x311E //F1 set DSP control RF register pkt_size += fm_bop_top_write(0x50, 0x0000000F, &buf[pkt_size], buf_size - pkt_size);//wr 50 F buf[2] = (fm_u8)((pkt_size - 4) & 0x00FF); buf[3] = (fm_u8)(((pkt_size - 4) >> 8) & 0x00FF); return pkt_size; }
/* * mt6627_pwrup_clock_on - Wholechip FM Power Up: step 1, FM Digital Clock enable * @buf - target buf * @buf_size - buffer size * return package size */ fm_s32 mt6627_pwrup_clock_on(fm_u8 *buf, fm_s32 buf_size) { fm_s32 pkt_size = 0; fm_u16 de_emphasis; //fm_u16 osc_freq; if (buf_size < TX_BUF_SIZE) { return (-1); } de_emphasis = mt6627_fm_config.rx_cfg.deemphasis;//MT6627fm_cust_config_fetch(FM_CFG_RX_DEEMPHASIS); de_emphasis &= 0x0001; //rang 0~1 //osc_freq = mt6627_fm_config.rx_cfg.osc_freq;//MT6628fm_cust_config_fetch(FM_CFG_RX_OSC_FREQ); //osc_freq &= 0x0007; //rang 0~5 buf[0] = FM_TASK_COMMAND_PKT_TYPE; buf[1] = FM_ENABLE_OPCODE; pkt_size = 4; //2,turn on top clock pkt_size += fm_bop_top_write(0xA10, 0xFFFFFFFF, &buf[pkt_size], buf_size - pkt_size);//wr a10 ffffffff //3,enable MTCMOS pkt_size += fm_bop_top_write(0x60, 0x00000030, &buf[pkt_size], buf_size - pkt_size);//wr 60 30 pkt_size += fm_bop_top_write(0x60, 0x00000035, &buf[pkt_size], buf_size - pkt_size);//wr 60 35 pkt_size += fm_bop_top_rd_until(0x60, 0x0000000A, 0xA, &buf[pkt_size], buf_size - pkt_size);//Poll 60[1]=1,[3]= 1 pkt_size += fm_bop_top_write(0x60, 0x00000015, &buf[pkt_size], buf_size - pkt_size);//wr 60 15 pkt_size += fm_bop_top_write(0x60, 0x00000005, &buf[pkt_size], buf_size - pkt_size);//wr 60 5 pkt_size += fm_bop_udelay(10, &buf[pkt_size], buf_size - pkt_size);//delay 10us pkt_size += fm_bop_top_write(0x60, 0x00000045, &buf[pkt_size], buf_size - pkt_size);//wr 60 45 //4,set CSPI fm slave dummy count pkt_size += fm_bop_top_write(0x68, 0x0000003F, &buf[pkt_size], buf_size - pkt_size);//wr 68 3F //a1 enable digital OSC pkt_size += fm_bop_top_write(0x50, 0x00000001, &buf[pkt_size], buf_size - pkt_size);//wr 50 1 pkt_size += fm_bop_udelay(3000, &buf[pkt_size], buf_size - pkt_size);//delay 3ms //a3 set OSC clock output to fm pkt_size += fm_bop_top_write(0x50, 0x00000003, &buf[pkt_size], buf_size - pkt_size);//wr 50 3 //a4 release HW clock gating pkt_size += fm_bop_top_write(0x50, 0x00000007, &buf[pkt_size], buf_size - pkt_size);//wr 50 7 //set I2S current driving pkt_size += fm_bop_top_write(0x000, 0x00000000, &buf[pkt_size], buf_size - pkt_size);//wr 0 0 //a5 enable DSP auto clock gating pkt_size += fm_bop_write(0x70, 0x0040, &buf[pkt_size], buf_size - pkt_size);//wr 70 0040 //a7 deemphasis setting pkt_size += fm_bop_modify(0x61, ~DE_EMPHASIS, (de_emphasis << 12), &buf[pkt_size], buf_size - pkt_size); //pkt_size += fm_bop_modify(0x60, OSC_FREQ_MASK, (osc_freq << 4), &buf[pkt_size], buf_size - pkt_size); buf[2] = (fm_u8)((pkt_size - 4) & 0x00FF); buf[3] = (fm_u8)(((pkt_size - 4) >> 8) & 0x00FF); return pkt_size; }
/* * mt6628_tune - execute tune action, * @buf - target buf * @buf_size - buffer size * @freq - 760 ~ 1080, 100KHz unit * return package size */ fm_s32 mt6628_tune(fm_u8 *buf, fm_s32 buf_size, fm_u16 freq, fm_u16 chan_para) { //#define FM_TUNE_USE_POLL fm_s32 pkt_size = 0; if (buf_size < TX_BUF_SIZE) { return (-1); } if (0 == fm_get_channel_space(freq)) { freq *= 10; } freq = (freq - 6400) * 2 / 10; buf[0] = FM_TASK_COMMAND_PKT_TYPE; buf[1] = FM_TUNE_OPCODE; pkt_size = 4; //Set desired channel & channel parameter #ifdef FM_TUNE_USE_POLL pkt_size += fm_bop_write(0x6A, 0x0000, &buf[pkt_size], buf_size - pkt_size); pkt_size += fm_bop_write(0x6B, 0x0000, &buf[pkt_size], buf_size - pkt_size); #endif pkt_size += fm_bop_modify(FM_CHANNEL_SET, 0xFC00, freq, &buf[pkt_size], buf_size - pkt_size);// set 0x65[9:0] = 0x029e, => ((97.5 - 64) * 20) //channel para setting, D15~D12, D15: ATJ, D13: HL, D12: FA pkt_size += fm_bop_modify(FM_CHANNEL_SET, 0x0FFF, (chan_para << 12), &buf[pkt_size], buf_size - pkt_size); //Enable hardware controlled tuning sequence pkt_size += fm_bop_modify(FM_MAIN_CTRL, 0xFFF8, TUNE, &buf[pkt_size], buf_size - pkt_size);// set 0x63[0] = 1 //Wait for STC_DONE interrupt #ifdef FM_TUNE_USE_POLL pkt_size += fm_bop_rd_until(FM_MAIN_INTR, FM_INTR_STC_DONE, FM_INTR_STC_DONE, &buf[pkt_size], buf_size - pkt_size);//Poll 69[0] = b'1 //Write 1 clear the STC_DONE interrupt status flag pkt_size += fm_bop_modify(FM_MAIN_INTR, 0xFFFF, FM_INTR_STC_DONE, &buf[pkt_size], buf_size - pkt_size);//wr 69[0] = 1 #endif buf[2] = (fm_u8)((pkt_size - 4) & 0x00FF); buf[3] = (fm_u8)(((pkt_size - 4) >> 8) & 0x00FF); return pkt_size; }
/* * mt6627_pwrup_digital_init - Wholechip FM Power Up: step 4, FM Digital Init: fm_rgf_maincon * @buf - target buf * @buf_size - buffer size * return package size */ fm_s32 mt6627_pwrup_digital_init(fm_u8 *buf, fm_s32 buf_size) { fm_s32 pkt_size = 0; if (buf_size < TX_BUF_SIZE) { return (-1); } buf[0] = FM_TASK_COMMAND_PKT_TYPE; buf[1] = FM_ENABLE_OPCODE; pkt_size = 4; //FM RF&ADPLL divider setting //D2.1 set cell mode //wr 30 D3:D2 00:FDD(default),01:both.10: TDD, 11 FDD pkt_size += fm_bop_modify(0x30, 0xFFF3, 0x0000, &buf[pkt_size], buf_size - pkt_size); //D2.2 set ADPLL divider pkt_size += fm_bop_write(0x21, 0xE000, &buf[pkt_size], buf_size - pkt_size);//wr 21 E000 //D2.3 set SDM coeff0_H pkt_size += fm_bop_write(0xD8, 0x03F0, &buf[pkt_size], buf_size - pkt_size);//wr D8 0x03F0 //D2.4 set SDM coeff0_L pkt_size += fm_bop_write(0xD9, 0x3F04, &buf[pkt_size], buf_size - pkt_size);//wr D9 0x3F04 //D2.5 set SDM coeff1_H pkt_size += fm_bop_write(0xDA, 0x0014, &buf[pkt_size], buf_size - pkt_size);//wr DA 0x0014 //D2.6 set SDM coeff1_L pkt_size += fm_bop_write(0xDB, 0x2A38, &buf[pkt_size], buf_size - pkt_size);//wr DB 0x2A38 //D2.7 set 26M clock pkt_size += fm_bop_write(0x23, 0x4000, &buf[pkt_size], buf_size - pkt_size);//wr 23 4000 //FM Digital Init: fm_rgf_maincon //E4 pkt_size += fm_bop_write(0x6A, 0x0021, &buf[pkt_size], buf_size - pkt_size);//wr 6A 0021 pkt_size += fm_bop_write(0x6B, 0x0021, &buf[pkt_size], buf_size - pkt_size);//wr 6B 0021 //E5 pkt_size += fm_bop_top_write(0x50, 0x0000000F, &buf[pkt_size], buf_size - pkt_size);//wr 50 f //E6 pkt_size += fm_bop_modify(0x61, 0xFFFD, 0x0002, &buf[pkt_size], buf_size - pkt_size);//wr 61 D1=1 //E7 pkt_size += fm_bop_modify(0x61, 0xFFFE, 0x0000, &buf[pkt_size], buf_size - pkt_size);//wr 61 D0=0 //E8 pkt_size += fm_bop_udelay(100000, &buf[pkt_size], buf_size - pkt_size);//delay 100ms //E9 pkt_size += fm_bop_rd_until(0x64, 0x001F, 0x0002, &buf[pkt_size], buf_size - pkt_size);//Poll 64[0~4] = 2 buf[2] = (fm_u8)((pkt_size - 4) & 0x00FF); buf[3] = (fm_u8)(((pkt_size - 4) >> 8) & 0x00FF); return pkt_size; }
/* * mt6628_pwrup_clock_on - Wholechip FM Power Up: step 1, FM Digital Clock enable * @buf - target buf * @buf_size - buffer size * return package size */ fm_s32 mt6628_pwrup_clock_on(fm_u8 *buf, fm_s32 buf_size) { fm_s32 pkt_size = 0; fm_u16 de_emphasis; fm_u16 osc_freq; if (buf_size < TX_BUF_SIZE) { return (-1); } de_emphasis = mt6628_fm_config.rx_cfg.deemphasis;//MT6628fm_cust_config_fetch(FM_CFG_RX_DEEMPHASIS); de_emphasis &= 0x0001; //rang 0~1 osc_freq = mt6628_fm_config.rx_cfg.osc_freq;//MT6628fm_cust_config_fetch(FM_CFG_RX_OSC_FREQ); osc_freq &= 0x0007; //rang 0~5 buf[0] = FM_TASK_COMMAND_PKT_TYPE; buf[1] = FM_ENABLE_OPCODE; pkt_size = 4; //FM Digital Clock enable pkt_size += fm_bop_write(0x60, 0x0000, &buf[pkt_size], buf_size - pkt_size);//wr 60 0000 pkt_size += fm_bop_write(0x60, 0x0001, &buf[pkt_size], buf_size - pkt_size);//wr 60 0001 pkt_size += fm_bop_udelay(3000, &buf[pkt_size], buf_size - pkt_size);//delay 3ms pkt_size += fm_bop_write(0x60, 0x0003, &buf[pkt_size], buf_size - pkt_size);//wr 60 0003 pkt_size += fm_bop_write(0x60, 0x0007, &buf[pkt_size], buf_size - pkt_size);//wr 60 0007 pkt_size += fm_bop_modify(0x70, 0xFFBF, 0x0040, &buf[pkt_size], buf_size - pkt_size); // wr 70 D6 = 1 //no low power mode, analog line in, long antenna pkt_size += fm_bop_modify(0x61, 0xFF63, 0x0000, &buf[pkt_size], buf_size - pkt_size); pkt_size += fm_bop_modify(0x61, ~DE_EMPHASIS, (de_emphasis << 12), &buf[pkt_size], buf_size - pkt_size); pkt_size += fm_bop_modify(0x60, OSC_FREQ_MASK, (osc_freq << 4), &buf[pkt_size], buf_size - pkt_size); buf[2] = (fm_u8)((pkt_size - 4) & 0x00FF); buf[3] = (fm_u8)(((pkt_size - 4) >> 8) & 0x00FF); return pkt_size; }
/* * mt6627_pwrdown - Wholechip FM Power down: Digital Modem Power Down * @buf - target buf * @buf_size - buffer size * return package size */ fm_s32 mt6627_pwrdown(fm_u8 *buf, fm_s32 buf_size) { fm_s32 pkt_size = 0; if (buf_size < TX_BUF_SIZE) { return (-1); } buf[0] = FM_TASK_COMMAND_PKT_TYPE; buf[1] = FM_ENABLE_OPCODE; pkt_size = 4; //A1:set audio output I2S Tx mode: pkt_size += fm_bop_modify(0x9B, 0xFFF8, 0x0000, &buf[pkt_size], buf_size - pkt_size);//wr 9B[0~2] 0 //B0:Disable HW clock control pkt_size += fm_bop_top_write(0x50, 0x330F, &buf[pkt_size], buf_size - pkt_size);//wr top50 330F //B1:Reset ASIP pkt_size += fm_bop_write(0x61, 0x0001, &buf[pkt_size], buf_size - pkt_size);//wr 61 0001 //B2:digital core + digital rgf reset pkt_size += fm_bop_modify(0x6E, 0xFFF8, 0x0000, &buf[pkt_size], buf_size - pkt_size);//wr 6E[0~2] 0 pkt_size += fm_bop_modify(0x6E, 0xFFF8, 0x0000, &buf[pkt_size], buf_size - pkt_size);//wr 6E[0~2] 0 pkt_size += fm_bop_modify(0x6E, 0xFFF8, 0x0000, &buf[pkt_size], buf_size - pkt_size);//wr 6E[0~2] 0 pkt_size += fm_bop_modify(0x6E, 0xFFF8, 0x0000, &buf[pkt_size], buf_size - pkt_size);//wr 6E[0~2] 0 //B3:Disable all clock pkt_size += fm_bop_top_write(0x50, 0x0000, &buf[pkt_size], buf_size - pkt_size);//wr top50 0000 //B4:Reset rgfrf pkt_size += fm_bop_top_write(0x50, 0x4000, &buf[pkt_size], buf_size - pkt_size);//wr top50 4000 pkt_size += fm_bop_top_write(0x50, 0x0000, &buf[pkt_size], buf_size - pkt_size);//wr top50 0000 //MTCMOS power off //C0:disable MTCMOS pkt_size += fm_bop_top_write(0x60, 0x0005, &buf[pkt_size], buf_size - pkt_size);//wr top60 0005 pkt_size += fm_bop_top_write(0x60, 0x0015, &buf[pkt_size], buf_size - pkt_size);//wr top60 0015 pkt_size += fm_bop_top_write(0x60, 0x0035, &buf[pkt_size], buf_size - pkt_size);//wr top60 0035 pkt_size += fm_bop_top_write(0x60, 0x0030, &buf[pkt_size], buf_size - pkt_size);//wr top60 0030 pkt_size += fm_bop_top_rd_until(0x60, 0x0000000A, 0x0, &buf[pkt_size], buf_size - pkt_size);//Poll 60[1]=0,[3]= 0 buf[2] = (fm_u8)((pkt_size - 4) & 0x00FF); buf[3] = (fm_u8)(((pkt_size - 4) >> 8) & 0x00FF); return pkt_size; }
fm_s32 mt6628_pwrup_fpga_on(fm_u8 *buf, fm_s32 buf_size) { fm_s32 pkt_size = 0; if (buf_size < TX_BUF_SIZE) { return (-1); } buf[0] = FM_TASK_COMMAND_PKT_TYPE; buf[1] = FM_ENABLE_OPCODE; pkt_size = 4; //Turn on Central Bias + FC pkt_size += fm_bop_write(0x01, 0x4A00, &buf[pkt_size], buf_size - pkt_size); pkt_size += fm_bop_udelay(30000, &buf[pkt_size], buf_size - pkt_size);//delay 30ms pkt_size += fm_bop_write(0x01, 0x6A00, &buf[pkt_size], buf_size - pkt_size); pkt_size += fm_bop_udelay(50000, &buf[pkt_size], buf_size - pkt_size);//delay 50ms pkt_size += fm_bop_write(0x02, 0x099C, &buf[pkt_size], buf_size - pkt_size); pkt_size += fm_bop_write(0x01, 0x6B82, &buf[pkt_size], buf_size - pkt_size); pkt_size += fm_bop_write(0x04, 0x0142, &buf[pkt_size], buf_size - pkt_size); pkt_size += fm_bop_write(0x05, 0x00E7, &buf[pkt_size], buf_size - pkt_size); pkt_size += fm_bop_write(0x0A, 0x0060, &buf[pkt_size], buf_size - pkt_size); pkt_size += fm_bop_write(0x0C, 0xAF8F, &buf[pkt_size], buf_size - pkt_size); pkt_size += fm_bop_write(0x0D, 0x0888, &buf[pkt_size], buf_size - pkt_size); pkt_size += fm_bop_write(0x10, 0x0E8D, &buf[pkt_size], buf_size - pkt_size); pkt_size += fm_bop_write(0x27, 0x0104, &buf[pkt_size], buf_size - pkt_size); pkt_size += fm_bop_write(0x0e, 0x0040, &buf[pkt_size], buf_size - pkt_size); pkt_size += fm_bop_write(0x03, 0x9860, &buf[pkt_size], buf_size - pkt_size); pkt_size += fm_bop_write(0x3F, 0xAD16, &buf[pkt_size], buf_size - pkt_size); pkt_size += fm_bop_write(0x3E, 0x3280, &buf[pkt_size], buf_size - pkt_size); pkt_size += fm_bop_write(0x06, 0x0125, &buf[pkt_size], buf_size - pkt_size); pkt_size += fm_bop_write(0x08, 0x15B8, &buf[pkt_size], buf_size - pkt_size); pkt_size += fm_bop_write(0x28, 0x0000, &buf[pkt_size], buf_size - pkt_size); pkt_size += fm_bop_write(0x00, 0x0167, &buf[pkt_size], buf_size - pkt_size); pkt_size += fm_bop_write(0x3A, 0x0004, &buf[pkt_size], buf_size - pkt_size); pkt_size += fm_bop_write(0x25, 0x0403, &buf[pkt_size], buf_size - pkt_size); pkt_size += fm_bop_write(0x20, 0x2720, &buf[pkt_size], buf_size - pkt_size); pkt_size += fm_bop_write(0x22, 0x9980, &buf[pkt_size], buf_size - pkt_size); pkt_size += fm_bop_write(0x25, 0x0803, &buf[pkt_size], buf_size - pkt_size); pkt_size += fm_bop_write(0x1E, 0x0863, &buf[pkt_size], buf_size - pkt_size); pkt_size += fm_bop_udelay(50000, &buf[pkt_size], buf_size - pkt_size);//delay 50ms pkt_size += fm_bop_write(0x1E, 0x0865, &buf[pkt_size], buf_size - pkt_size); pkt_size += fm_bop_udelay(50000, &buf[pkt_size], buf_size - pkt_size);//delay 50ms pkt_size += fm_bop_write(0x1E, 0x0871, &buf[pkt_size], buf_size - pkt_size); pkt_size += fm_bop_write(0x2A, 0x1020, &buf[pkt_size], buf_size - pkt_size); pkt_size += fm_bop_udelay(100000, &buf[pkt_size], buf_size - pkt_size);//delay 100ms pkt_size += fm_bop_write(0x00, 0x01E7, &buf[pkt_size], buf_size - pkt_size); pkt_size += fm_bop_udelay(1000, &buf[pkt_size], buf_size - pkt_size);//delay 1ms pkt_size += fm_bop_write(0x1B, 0x0094, &buf[pkt_size], buf_size - pkt_size); pkt_size += fm_bop_write(0x1B, 0x0095, &buf[pkt_size], buf_size - pkt_size); pkt_size += fm_bop_udelay(200000, &buf[pkt_size], buf_size - pkt_size);//delay 100ms pkt_size += fm_bop_write(0x1B, 0x0094, &buf[pkt_size], buf_size - pkt_size); pkt_size += fm_bop_write(0x00, 0x0167, &buf[pkt_size], buf_size - pkt_size); pkt_size += fm_bop_write(0x01, 0x6B8A, &buf[pkt_size], buf_size - pkt_size); pkt_size += fm_bop_udelay(1000, &buf[pkt_size], buf_size - pkt_size);//delay 1ms pkt_size += fm_bop_write(0x00, 0xC167, &buf[pkt_size], buf_size - pkt_size); pkt_size += fm_bop_write(0x0C, 0xAF8F, &buf[pkt_size], buf_size - pkt_size); pkt_size += fm_bop_udelay(30000, &buf[pkt_size], buf_size - pkt_size);//delay 1ms pkt_size += fm_bop_write(0x00, 0xF167, &buf[pkt_size], buf_size - pkt_size); pkt_size += fm_bop_write(0x37, 0x2590, &buf[pkt_size], buf_size - pkt_size); pkt_size += fm_bop_write(0x09, 0x2964, &buf[pkt_size], buf_size - pkt_size); pkt_size += fm_bop_write(0x2E, 0x0008, &buf[pkt_size], buf_size - pkt_size); pkt_size += fm_bop_write(0x11, 0x37D4, &buf[pkt_size], buf_size - pkt_size); pkt_size += fm_bop_write(0x2B, 0x0032, &buf[pkt_size], buf_size - pkt_size); pkt_size += fm_bop_write(0x2C, 0x0019, &buf[pkt_size], buf_size - pkt_size); pkt_size += fm_bop_write(0x71, 0x607F, &buf[pkt_size], buf_size - pkt_size); pkt_size += fm_bop_write(0x72, 0x878F, &buf[pkt_size], buf_size - pkt_size); pkt_size += fm_bop_write(0x73, 0x07C3, &buf[pkt_size], buf_size - pkt_size); pkt_size += fm_bop_write(0x28, 0x0000, &buf[pkt_size], buf_size - pkt_size); pkt_size += fm_bop_write(0x64, 0x0001, &buf[pkt_size], buf_size - pkt_size); pkt_size += fm_bop_write(0x6D, 0x1AB2, &buf[pkt_size], buf_size - pkt_size); pkt_size += fm_bop_write(0x9C, 0x0040, &buf[pkt_size], buf_size - pkt_size); pkt_size += fm_bop_write(0x9F, 0x0000, &buf[pkt_size], buf_size - pkt_size); pkt_size += fm_bop_write(0xB4, 0x8810, &buf[pkt_size], buf_size - pkt_size); pkt_size += fm_bop_write(0xB8, 0x006A, &buf[pkt_size], buf_size - pkt_size); pkt_size += fm_bop_write(0xBB, 0x006B, &buf[pkt_size], buf_size - pkt_size); pkt_size += fm_bop_write(0xCB, 0x00B3, &buf[pkt_size], buf_size - pkt_size); pkt_size += fm_bop_write(0xE0, 0xA301, &buf[pkt_size], buf_size - pkt_size); pkt_size += fm_bop_write(0xE4, 0x008F, &buf[pkt_size], buf_size - pkt_size); pkt_size += fm_bop_write(0x9E, 0x2B24, &buf[pkt_size], buf_size - pkt_size); pkt_size += fm_bop_write(0xCC, 0x0886, &buf[pkt_size], buf_size - pkt_size); pkt_size += fm_bop_write(0xDC, 0x036A, &buf[pkt_size], buf_size - pkt_size); pkt_size += fm_bop_write(0xDD, 0x836A, &buf[pkt_size], buf_size - pkt_size); pkt_size += fm_bop_write(0x0F, 0x1AA8, &buf[pkt_size], buf_size - pkt_size); pkt_size += fm_bop_write(0x9F, 0x0000, &buf[pkt_size], buf_size - pkt_size); pkt_size += fm_bop_udelay(100000, &buf[pkt_size], buf_size - pkt_size);//delay 100ms pkt_size += fm_bop_write(0x63, 0x0480, &buf[pkt_size], buf_size - pkt_size); pkt_size += fm_bop_udelay(100000, &buf[pkt_size], buf_size - pkt_size);//delay 100ms pkt_size += fm_bop_write(0x63, 0x0481, &buf[pkt_size], buf_size - pkt_size); pkt_size += fm_bop_write(0x6C, 0x0020, &buf[pkt_size], buf_size - pkt_size); pkt_size += fm_bop_write(0x45, 0x1FFF, &buf[pkt_size], buf_size - pkt_size); pkt_size += fm_bop_write(0x25, 0x040F, &buf[pkt_size], buf_size - pkt_size); pkt_size += fm_bop_write(0x28, 0x7E57, &buf[pkt_size], buf_size - pkt_size); pkt_size += fm_bop_write(0x11, 0x37DC, &buf[pkt_size], buf_size - pkt_size); pkt_size += fm_bop_write(0x07, 0x1140, &buf[pkt_size], buf_size - pkt_size); pkt_size += fm_bop_write(0x27, 0x005C, &buf[pkt_size], buf_size - pkt_size); pkt_size += fm_bop_write(0x42, 0x0016, &buf[pkt_size], buf_size - pkt_size); pkt_size += fm_bop_write(0x44, 0x006F, &buf[pkt_size], buf_size - pkt_size); pkt_size += fm_bop_write(0x46, 0x1DEF, &buf[pkt_size], buf_size - pkt_size); pkt_size += fm_bop_write(0x47, 0x0210, &buf[pkt_size], buf_size - pkt_size); pkt_size += fm_bop_write(0x55, 0x0001, &buf[pkt_size], buf_size - pkt_size); pkt_size += fm_bop_write(0x54, 0x8001, &buf[pkt_size], buf_size - pkt_size); pkt_size += fm_bop_write(0xA0, 0xD0B2, &buf[pkt_size], buf_size - pkt_size); buf[2] = (fm_u8)((pkt_size - 4) & 0x00FF); buf[3] = (fm_u8)(((pkt_size - 4) >> 8) & 0x00FF); return pkt_size; }