4 #include "fm_typedef.h"
8 FM_TASK_RX_PARSER_PKT_TYPE = 0,
9 FM_TASK_RX_PARSER_OPCODE,
10 FM_TASK_RX_PARSER_PKT_LEN_1,
11 FM_TASK_RX_PARSER_PKT_LEN_2,
12 FM_TASK_RX_PARSER_PKT_PAYLOAD,
13 FM_TASK_RX_PARSER_BUFFER_CONGESTION
14 } fm_task_parser_state;
17 FM_TASK_COMMAND_PKT_TYPE = 0x01,
18 FM_TASK_EVENT_PKT_TYPE = 0x04
22 FM_STP_TEST_OPCODE = 0x00,
23 FSPI_ENABLE_OPCODE = 0x01,
24 FSPI_MUX_SEL_OPCODE = 0x02,
25 FSPI_READ_OPCODE = 0x03,
26 FSPI_WRITE_OPCODE = 0x04,
27 FI2C_READ_OPCODE = 0x05,
28 FI2C_WRITE_OPCODE = 0x06,
29 FM_ENABLE_OPCODE = 0x07,
30 FM_RESET_OPCODE = 0x08,
31 FM_TUNE_OPCODE = 0x09,
32 FM_SEEK_OPCODE = 0x0a,
33 FM_SCAN_OPCODE = 0x0b,
34 RDS_RX_ENABLE_OPCODE = 0x0c,
35 RDS_RX_DATA_OPCODE = 0x0d,
36 FM_RAMPDOWN_OPCODE = 0x0e,
37 FM_MCUCLK_SEL_OPCODE = 0x0f,
38 FM_MODEMCLK_SEL_OPCODE = 0x10,
40 FM_PATCH_DOWNLOAD_OPCODE = 0x12,
41 FM_COEFF_DOWNLOAD_OPCODE = 0x13,
42 FM_HWCOEFF_DOWNLOAD_OPCODE = 0x14,
43 FM_ROM_DOWNLOAD_OPCODE = 0x15,
44 FM_SOFT_MUTE_TUNE_OPCODE = 0x17,
48 FLAG_TEST = (1 << FM_STP_TEST_OPCODE),
49 FLAG_FSPI_EN = (1 << FSPI_ENABLE_OPCODE),
50 FLAG_FSPI_MUXSEL = (1 << FSPI_MUX_SEL_OPCODE),
51 FLAG_FSPI_RD = (1 << FSPI_READ_OPCODE),
52 FLAG_FSPI_WR = (1 << FSPI_WRITE_OPCODE),
53 FLAG_I2C_RD = (1 << FI2C_READ_OPCODE),
54 FLAG_I2C_WR = (1 << FI2C_WRITE_OPCODE),
55 FLAG_EN = (1 << FM_ENABLE_OPCODE),
56 FLAG_RST = (1 << FM_RESET_OPCODE),
57 FLAG_TUNE = (1 << FM_TUNE_OPCODE),
58 FLAG_SEEK = (1 << FM_SEEK_OPCODE),
59 FLAG_SCAN = (1 << FM_SCAN_OPCODE),
60 FLAG_RDS_RX_EN = (1 << RDS_RX_ENABLE_OPCODE),
61 FLAG_RDS_DATA = (1 << RDS_RX_DATA_OPCODE),
62 FLAG_RAMPDOWN = (1 << FM_RAMPDOWN_OPCODE),
63 FLAG_MCUCLK = (1 << FM_MCUCLK_SEL_OPCODE),
64 FLAG_MODEMCLK = (1 << FM_MODEMCLK_SEL_OPCODE),
65 FLAG_RDS_TX = (1 << RDS_TX_OPCODE),
66 FLAG_PATCH = (1 << FM_PATCH_DOWNLOAD_OPCODE),
67 FLAG_COEFF = (1 << FM_COEFF_DOWNLOAD_OPCODE),
68 FLAG_HWCOEFF = (1 << FM_HWCOEFF_DOWNLOAD_OPCODE),
69 FLAG_ROM = (1 << FM_ROM_DOWNLOAD_OPCODE),
70 FLAG_SM_TUNE = (1 << FM_SOFT_MUTE_TUNE_OPCODE), // 23
71 FLAG_CQI_DONE = (1 << 27),
72 FLAG_TUNE_DONE = (1 << 28),
73 FLAG_SEEK_DONE = (1 << 29),
74 FLAG_SCAN_DONE = (1 << 30),
75 FLAG_TERMINATE = (1 << 31)
78 #define FM_SCANTBL_SIZE 16
79 #define FM_CQI_BUF_SIZE 96
83 fm_u16 scan_result[FM_SCANTBL_SIZE];
84 fm_s8 cqi[FM_CQI_BUF_SIZE];
85 struct rds_rx_t rds_rx_result;
88 #define FM_TRACE_ENABLE
90 #define FM_TRACE_FIFO_SIZE 200
91 #define FM_TRACE_PKT_SIZE 60
96 fm_u8 pkt[FM_TRACE_PKT_SIZE]; // full packet
101 struct fm_trace_fifo_t {
103 struct fm_trace_t trace[FM_TRACE_FIFO_SIZE];
108 fm_s32 (*trace_in)(struct fm_trace_fifo_t *thiz, struct fm_trace_t *new_tra);
109 fm_s32 (*trace_out)(struct fm_trace_fifo_t *thiz, struct fm_trace_t *dst_tra);
110 fm_bool (*is_full)(struct fm_trace_fifo_t *thiz);
111 fm_bool (*is_empty)(struct fm_trace_fifo_t *thiz);
114 #define FM_TRACE_IN(fifop, tracep) \
116 fm_s32 __ret = (fm_s32)0; \
117 if(fifop && (fifop)->trace_in){ \
118 __ret = (fifop)->trace_in(fifop, tracep); \
123 #define FM_TRACE_OUT(fifop, tracep) \
125 fm_s32 __ret = (fm_s32)0; \
126 if(fifop && (fifop)->trace_out){ \
127 __ret = (fifop)->trace_out(fifop, tracep); \
132 #define FM_TRACE_FULL(fifop) \
134 fm_bool __ret = (fm_bool)fm_false; \
135 if(fifop && (fifop)->is_full){ \
136 __ret = (fifop)->is_full(fifop); \
141 #define FM_TRACE_EMPTY(fifop) \
143 fm_bool __ret = (fm_bool)fm_false; \
144 if(fifop && (fifop)->is_empty){ \
145 __ret = (fifop)->is_empty(fifop); \
150 #if (defined(MT6620_FM)||defined(MT6628_FM))
151 #include "fm_utils.h"
153 #define RX_BUF_SIZE 128
154 #define TX_BUF_SIZE 1024
156 #define SW_RETRY_CNT (1)
157 #define SW_RETRY_CNT_MAX (5)
158 #define SW_WAIT_TIMEOUT_MAX (100)
159 // FM operation timeout define for error handle
160 #define TEST_TIMEOUT (3)
161 #define FSPI_EN_TIMEOUT (3)
162 #define FSPI_MUXSEL_TIMEOUT (3)
163 #define FSPI_RD_TIMEOUT (3)
164 #define FSPI_WR_TIMEOUT (3)
165 #define I2C_RD_TIMEOUT (3)
166 #define I2C_WR_TIMEOUT (3)
167 #define EN_TIMEOUT (3)
168 #define RST_TIMEOUT (3)
169 #define TUNE_TIMEOUT (3)
170 #define SM_TUNE_TIMEOUT (6)
171 #define SEEK_TIMEOUT (15)
172 #define SCAN_TIMEOUT (15) //usualy scan will cost 10 seconds
173 #define RDS_RX_EN_TIMEOUT (3)
174 #define RDS_DATA_TIMEOUT (100)
175 #define RAMPDOWN_TIMEOUT (3)
176 #define MCUCLK_TIMEOUT (3)
177 #define MODEMCLK_TIMEOUT (3)
178 #define RDS_TX_TIMEOUT (3)
179 #define PATCH_TIMEOUT (3)
180 #define COEFF_TIMEOUT (3)
181 #define HWCOEFF_TIMEOUT (3)
182 #define ROM_TIMEOUT (3)
184 struct fm_link_event {
185 struct fm_flag_event *ln_event;
186 struct fm_res_ctx result; // seek/scan/read/RDS
191 * FM data and ctrl link APIs: platform related and bus related
193 extern fm_s32 fm_link_setup(void* data);
195 extern fm_s32 fm_link_release(void);
197 extern fm_s32 fm_cmd_tx(fm_u8* buf, fm_u16 len, fm_s32 mask, fm_s32 cnt, fm_s32 timeout, fm_s32(*callback)(struct fm_res_ctx* result));
199 extern fm_s32 fm_event_parser(fm_s32(*rds_parser)(struct rds_rx_t*, fm_s32));
201 extern fm_s32 fm_ctrl_rx(fm_u8 addr, fm_u16 *val);
203 extern fm_s32 fm_ctrl_tx(fm_u8 addr, fm_u16 val);
205 extern fm_s32 fm_force_active_event(fm_u32 mask);
207 extern fm_bool fm_wait_stc_done(fm_u32 sec);
209 extern struct fm_trace_fifo_t* fm_trace_fifo_create(const fm_s8 *name);
211 extern fm_s32 fm_trace_fifo_release(struct fm_trace_fifo_t *fifo);
213 extern fm_s32 fm_print_cmd_fifo(void);
215 extern fm_s32 fm_print_evt_fifo(void);
217 #endif //__FM_LINK_H__