/* * 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_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_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; }
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; }