• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * This file is auto-generated. Modifications will be lost.
3  *
4  * See https://android.googlesource.com/platform/bionic/+/master/libc/kernel/
5  * for more information.
6  */
7 #ifndef __UAPI_RADIO_IRIS_H
8 #define __UAPI_RADIO_IRIS_H
9 #include <linux/types.h>
10 #include <media/radio-iris-commands.h>
11 #define MIN_TX_TONE_VAL 0x00
12 #define MAX_TX_TONE_VAL 0x07
13 #define MIN_HARD_MUTE_VAL 0x00
14 #define MAX_HARD_MUTE_VAL 0x03
15 #define MIN_SRCH_MODE 0x00
16 #define MAX_SRCH_MODE 0x09
17 #define MIN_SCAN_DWELL 0x00
18 #define MAX_SCAN_DWELL 0x0F
19 #define MIN_SIG_TH 0x00
20 #define MAX_SIG_TH 0x03
21 #define MIN_PTY 0X00
22 #define MAX_PTY 0x1F
23 #define MIN_PI 0x0000
24 #define MAX_PI 0xFFFF
25 #define MIN_SRCH_STATIONS_CNT 0x00
26 #define MAX_SRCH_STATIONS_CNT 0x14
27 #define MIN_CHAN_SPACING 0x00
28 #define MAX_CHAN_SPACING 0x02
29 #define MIN_EMPHASIS 0x00
30 #define MAX_EMPHASIS 0x01
31 #define MIN_RDS_STD 0x00
32 #define MAX_RDS_STD 0x02
33 #define MIN_ANTENNA_VAL 0x00
34 #define MAX_ANTENNA_VAL 0x01
35 #define MIN_TX_PS_REPEAT_CNT 0x01
36 #define MAX_TX_PS_REPEAT_CNT 0x0F
37 #define MIN_SOFT_MUTE 0x00
38 #define MAX_SOFT_MUTE 0x01
39 #define MIN_PEEK_ACCESS_LEN 0x01
40 #define MAX_PEEK_ACCESS_LEN 0xF9
41 #define MIN_RESET_CNTR 0x00
42 #define MAX_RESET_CNTR 0x01
43 #define MIN_HLSI 0x00
44 #define MAX_HLSI 0x02
45 #define MIN_NOTCH_FILTER 0x00
46 #define MAX_NOTCH_FILTER 0x02
47 #define MIN_INTF_DET_OUT_LW_TH 0x00
48 #define MAX_INTF_DET_OUT_LW_TH 0xFF
49 #define MIN_INTF_DET_OUT_HG_TH 0x00
50 #define MAX_INTF_DET_OUT_HG_TH 0xFF
51 #define MIN_SINR_TH - 128
52 #define MAX_SINR_TH 127
53 #define MIN_SINR_SAMPLES 0x01
54 #define MAX_SINR_SAMPLES 0xFF
55 #define MIN_BLEND_HI - 128
56 #define MAX_BLEND_HI 127
57 #define RADIO_HCI_COMMAND_HDR_SIZE sizeof(struct radio_hci_command_hdr)
58 #define RADIO_HCI_EVENT_HDR_SIZE sizeof(struct radio_hci_event_hdr)
59 #define RADIO_HCI_COMMAND_PKT 0x11
60 #define RADIO_HCI_EVENT_PKT 0x14
61 #define MAX_RIVA_PEEK_RSP_SIZE 251
62 #define DEFAULT_DATA_OFFSET 2
63 #define DEFAULT_DATA_SIZE 249
64 #define FM_TX_PWR_LVL_STEP_SIZE 36
65 #define FM_TX_PWR_LVL_0 0
66 #define FM_TX_PWR_LVL_MAX 7
67 #define FM_TX_PHY_CFG_MODE 0x3c
68 #define FM_TX_PHY_CFG_LEN 0x10
69 #define FM_TX_PWR_GAIN_OFFSET 14
70 #define FM_RDS_CNFG_MODE 0x0f
71 #define FM_RDS_CNFG_LEN 0x10
72 #define AF_RMSSI_TH_LSB_OFFSET 10
73 #define AF_RMSSI_TH_MSB_OFFSET 11
74 #define AF_RMSSI_SAMPLES_OFFSET 15
75 #define FM_RX_CONFG_MODE 0x15
76 #define FM_RX_CNFG_LEN 0x20
77 #define GD_CH_RMSSI_TH_OFFSET 12
78 #define MAX_GD_CH_RMSSI_TH 127
79 #define SRCH_ALGO_TYPE_OFFSET 25
80 #define SINRFIRSTSTAGE_OFFSET 26
81 #define RMSSIFIRSTSTAGE_OFFSET 27
82 #define CF0TH12_BYTE1_OFFSET 8
83 #define CF0TH12_BYTE2_OFFSET 9
84 #define CF0TH12_BYTE3_OFFSET 10
85 #define CF0TH12_BYTE4_OFFSET 11
86 #define MAX_SINR_FIRSTSTAGE 127
87 #define MAX_RMSSI_FIRSTSTAGE 127
88 #define RDS_PS0_XFR_MODE 0x01
89 #define RDS_PS0_LEN 6
90 #define RX_REPEATE_BYTE_OFFSET 5
91 #define FM_SPUR_TBL_SIZE 240
92 #define SPUR_DATA_LEN 16
93 #define ENTRIES_EACH_CMD 15
94 #define SPUR_DATA_INDEX 2
95 #define FM_AF_LIST_MAX_SIZE 200
96 #define AF_LIST_MAX (FM_AF_LIST_MAX_SIZE / 4)
97 #define MAX_BLEND_INDEX 49
98 #define TUNE_PARAM 16
99 #define FM_RDS_3A_GRP (0x40)
100 struct radio_hci_command_hdr {
101   __le16 opcode;
102   __u8 plen;
103 } __attribute__((packed));
104 struct radio_hci_event_hdr {
105   __u8 evt;
106   __u8 plen;
107 } __attribute__((packed));
108 #define HCI_OCF_FM_ENABLE_RECV_REQ 0x0001
109 #define HCI_OCF_FM_DISABLE_RECV_REQ 0x0002
110 #define HCI_OCF_FM_GET_RECV_CONF_REQ 0x0003
111 #define HCI_OCF_FM_SET_RECV_CONF_REQ 0x0004
112 #define HCI_OCF_FM_SET_MUTE_MODE_REQ 0x0005
113 #define HCI_OCF_FM_SET_STEREO_MODE_REQ 0x0006
114 #define HCI_OCF_FM_SET_ANTENNA 0x0007
115 #define HCI_OCF_FM_SET_SIGNAL_THRESHOLD 0x0008
116 #define HCI_OCF_FM_GET_SIGNAL_THRESHOLD 0x0009
117 #define HCI_OCF_FM_GET_STATION_PARAM_REQ 0x000A
118 #define HCI_OCF_FM_GET_PROGRAM_SERVICE_REQ 0x000B
119 #define HCI_OCF_FM_GET_RADIO_TEXT_REQ 0x000C
120 #define HCI_OCF_FM_GET_AF_LIST_REQ 0x000D
121 #define HCI_OCF_FM_SEARCH_STATIONS 0x000E
122 #define HCI_OCF_FM_SEARCH_RDS_STATIONS 0x000F
123 #define HCI_OCF_FM_SEARCH_STATIONS_LIST 0x0010
124 #define HCI_OCF_FM_CANCEL_SEARCH 0x0011
125 #define HCI_OCF_FM_RDS_GRP 0x0012
126 #define HCI_OCF_FM_RDS_GRP_PROCESS 0x0013
127 #define HCI_OCF_FM_EN_WAN_AVD_CTRL 0x0014
128 #define HCI_OCF_FM_EN_NOTCH_CTRL 0x0015
129 #define HCI_OCF_FM_SET_EVENT_MASK 0x0016
130 #define HCI_OCF_FM_SET_CH_DET_THRESHOLD 0x0017
131 #define HCI_OCF_FM_GET_CH_DET_THRESHOLD 0x0018
132 #define HCI_OCF_FM_SET_BLND_TBL 0x001B
133 #define HCI_OCF_FM_GET_BLND_TBL 0x001C
134 #define HCI_OCF_FM_ENABLE_TRANS_REQ 0x0001
135 #define HCI_OCF_FM_DISABLE_TRANS_REQ 0x0002
136 #define HCI_OCF_FM_GET_TRANS_CONF_REQ 0x0003
137 #define HCI_OCF_FM_SET_TRANS_CONF_REQ 0x0004
138 #define HCI_OCF_FM_RDS_RT_REQ 0x0008
139 #define HCI_OCF_FM_RDS_PS_REQ 0x0009
140 #define HCI_OCF_FM_TUNE_STATION_REQ 0x0001
141 #define HCI_OCF_FM_DEFAULT_DATA_READ 0x0002
142 #define HCI_OCF_FM_DEFAULT_DATA_WRITE 0x0003
143 #define HCI_OCF_FM_RESET 0x0004
144 #define HCI_OCF_FM_GET_FEATURE_LIST 0x0005
145 #define HCI_OCF_FM_DO_CALIBRATION 0x0006
146 #define HCI_OCF_FM_SET_CALIBRATION 0x0007
147 #define HCI_OCF_FM_SET_SPUR_TABLE 0x0008
148 #define HCI_OCF_FM_GET_SPUR_TABLE 0x0009
149 #define HCI_OCF_FM_READ_GRP_COUNTERS 0x0001
150 #define HCI_OCF_FM_PEEK_DATA 0x0002
151 #define HCI_OCF_FM_POKE_DATA 0x0003
152 #define HCI_OCF_FM_SSBI_PEEK_REG 0x0004
153 #define HCI_OCF_FM_SSBI_POKE_REG 0x0005
154 #define HCI_OCF_FM_STATION_DBG_PARAM 0x0007
155 #define HCI_FM_SET_INTERNAL_TONE_GENRATOR 0x0008
156 #define HCI_OGF_FM_RECV_CTRL_CMD_REQ 0x0013
157 #define HCI_OGF_FM_TRANS_CTRL_CMD_REQ 0x0014
158 #define HCI_OGF_FM_COMMON_CTRL_CMD_REQ 0x0015
159 #define HCI_OGF_FM_STATUS_PARAMETERS_CMD_REQ 0x0016
160 #define HCI_OGF_FM_TEST_CMD_REQ 0x0017
161 #define HCI_OGF_FM_DIAGNOSTIC_CMD_REQ 0x003F
162 #define hci_opcode_pack(ogf,ocf) ((__u16) ((ocf & 0x03ff) | (ogf << 10)))
163 #define hci_opcode_ogf(op) (op >> 10)
164 #define hci_opcode_ocf(op) (op & 0x03ff)
165 #define hci_recv_ctrl_cmd_op_pack(ocf) ((__u16) hci_opcode_pack(HCI_OGF_FM_RECV_CTRL_CMD_REQ, ocf))
166 #define hci_trans_ctrl_cmd_op_pack(ocf) ((__u16) hci_opcode_pack(HCI_OGF_FM_TRANS_CTRL_CMD_REQ, ocf))
167 #define hci_common_cmd_op_pack(ocf) ((__u16) hci_opcode_pack(HCI_OGF_FM_COMMON_CTRL_CMD_REQ, ocf))
168 #define hci_status_param_op_pack(ocf) ((__u16) hci_opcode_pack(HCI_OGF_FM_STATUS_PARAMETERS_CMD_REQ, ocf))
169 #define hci_diagnostic_cmd_op_pack(ocf) ((__u16) hci_opcode_pack(HCI_OGF_FM_DIAGNOSTIC_CMD_REQ, ocf))
170 #define HCI_FM_ENABLE_RECV_CMD 1
171 #define HCI_FM_DISABLE_RECV_CMD 2
172 #define HCI_FM_GET_RECV_CONF_CMD 3
173 #define HCI_FM_GET_STATION_PARAM_CMD 4
174 #define HCI_FM_GET_SIGNAL_TH_CMD 5
175 #define HCI_FM_GET_PROGRAM_SERVICE_CMD 6
176 #define HCI_FM_GET_RADIO_TEXT_CMD 7
177 #define HCI_FM_GET_AF_LIST_CMD 8
178 #define HCI_FM_CANCEL_SEARCH_CMD 9
179 #define HCI_FM_RESET_CMD 10
180 #define HCI_FM_GET_FEATURES_CMD 11
181 #define HCI_FM_STATION_DBG_PARAM_CMD 12
182 #define HCI_FM_ENABLE_TRANS_CMD 13
183 #define HCI_FM_DISABLE_TRANS_CMD 14
184 #define HCI_FM_GET_TX_CONFIG 15
185 #define HCI_FM_GET_DET_CH_TH_CMD 16
186 #define HCI_FM_GET_BLND_TBL_CMD 17
187 #define TX_PS_DATA_LENGTH 108
188 #define TX_RT_DATA_LENGTH 64
189 #define PS_STRING_LEN 9
190 struct hci_fm_recv_conf_req {
191   __u8 emphasis;
192   __u8 ch_spacing;
193   __u8 rds_std;
194   __u8 hlsi;
195   __u32 band_low_limit;
196   __u32 band_high_limit;
197 } __attribute__((packed));
198 struct hci_fm_trans_conf_req_struct {
199   __u8 emphasis;
200   __u8 rds_std;
201   __u32 band_low_limit;
202   __u32 band_high_limit;
203 } __attribute__((packed));
204 struct hci_fm_tx_ps {
205   __u8 ps_control;
206   __u16 pi;
207   __u8 pty;
208   __u8 ps_repeatcount;
209   __u8 ps_num;
210   __u8 ps_data[TX_PS_DATA_LENGTH];
211 } __attribute__((packed));
212 struct hci_fm_tx_rt {
213   __u8 rt_control;
214   __u16 pi;
215   __u8 pty;
216   __u8 rt_len;
217   __u8 rt_data[TX_RT_DATA_LENGTH];
218 } __attribute__((packed));
219 struct hci_fm_mute_mode_req {
220   __u8 hard_mute;
221   __u8 soft_mute;
222 } __attribute__((packed));
223 struct hci_fm_stereo_mode_req {
224   __u8 stereo_mode;
225   __u8 sig_blend;
226   __u8 intf_blend;
227   __u8 most_switch;
228 } __attribute__((packed));
229 struct hci_fm_search_station_req {
230   __u8 srch_mode;
231   __u8 scan_time;
232   __u8 srch_dir;
233 } __attribute__((packed));
234 struct hci_fm_search_rds_station_req {
235   struct hci_fm_search_station_req srch_station;
236   __u8 srch_pty;
237   __u16 srch_pi;
238 } __attribute__((packed));
239 struct hci_fm_search_station_list_req {
240   __u8 srch_list_mode;
241   __u8 srch_list_dir;
242   __u32 srch_list_max;
243   __u8 srch_pty;
244 } __attribute__((packed));
245 struct hci_fm_rds_grp_req {
246   __u32 rds_grp_enable_mask;
247   __u32 rds_buf_size;
248   __u8 en_rds_change_filter;
249 } __attribute__((packed));
250 struct hci_fm_en_avd_ctrl_req {
251   __u8 no_freqs;
252   __u8 freq_index;
253   __u8 lo_shft;
254   __u16 freq_min;
255   __u16 freq_max;
256 } __attribute__((packed));
257 struct hci_fm_def_data_rd_req {
258   __u8 mode;
259   __u8 length;
260   __u8 param_len;
261   __u8 param;
262 } __attribute__((packed));
263 struct hci_fm_def_data_wr_req {
264   __u8 mode;
265   __u8 length;
266   __u8 data[DEFAULT_DATA_SIZE];
267 } __attribute__((packed));
268 struct hci_fm_riva_data {
269   __u8 subopcode;
270   __u32 start_addr;
271   __u8 length;
272 } __attribute__((packed));
273 struct hci_fm_riva_poke {
274   struct hci_fm_riva_data cmd_params;
275   __u8 data[MAX_RIVA_PEEK_RSP_SIZE];
276 } __attribute__((packed));
277 struct hci_fm_ssbi_req {
278   __u16 start_addr;
279   __u8 data;
280 } __attribute__((packed));
281 struct hci_fm_ssbi_peek {
282   __u16 start_address;
283 } __attribute__((packed));
284 struct hci_fm_ch_det_threshold {
285   char sinr;
286   __u8 sinr_samples;
287   __u8 low_th;
288   __u8 high_th;
289 } __attribute__((packed));
290 struct hci_fm_blend_table {
291   __u8 ucBlendType;
292   __u8 ucBlendRampRateUp;
293   __u8 ucBlendDebounceNumSampleUp;
294   __u8 ucBlendDebounceIdxUp;
295   __u8 ucBlendSinrIdxSkipStep;
296   __u8 scBlendSinrHi;
297   __u8 scBlendRmssiHi;
298   __u8 ucBlendIndexHi;
299   __u8 ucBlendIndex[MAX_BLEND_INDEX];
300 } __attribute__((packed));
301 #define HCI_EV_TUNE_STATUS 0x01
302 #define HCI_EV_RDS_LOCK_STATUS 0x02
303 #define HCI_EV_STEREO_STATUS 0x03
304 #define HCI_EV_SERVICE_AVAILABLE 0x04
305 #define HCI_EV_SEARCH_PROGRESS 0x05
306 #define HCI_EV_SEARCH_RDS_PROGRESS 0x06
307 #define HCI_EV_SEARCH_LIST_PROGRESS 0x07
308 #define HCI_EV_RDS_RX_DATA 0x08
309 #define HCI_EV_PROGRAM_SERVICE 0x09
310 #define HCI_EV_RADIO_TEXT 0x0A
311 #define HCI_EV_FM_AF_LIST 0x0B
312 #define HCI_EV_TX_RDS_GRP_AVBLE 0x0C
313 #define HCI_EV_TX_RDS_GRP_COMPL 0x0D
314 #define HCI_EV_TX_RDS_CONT_GRP_COMPL 0x0E
315 #define HCI_EV_CMD_COMPLETE 0x0F
316 #define HCI_EV_CMD_STATUS 0x10
317 #define HCI_EV_TUNE_COMPLETE 0x11
318 #define HCI_EV_SEARCH_COMPLETE 0x12
319 #define HCI_EV_SEARCH_RDS_COMPLETE 0x13
320 #define HCI_EV_SEARCH_LIST_COMPLETE 0x14
321 #define HCI_REQ_DONE 0
322 #define HCI_REQ_PEND 1
323 #define HCI_REQ_CANCELED 2
324 #define HCI_REQ_STATUS 3
325 #define MAX_RAW_RDS_GRPS 21
326 #define RDSGRP_DATA_OFFSET 0x1
327 #define DUMMY_CLASS 0
328 #define RT_PLUS_LEN_1_TAG 3
329 #define RT_ERT_FLAG_BIT 5
330 #define TAG1_MSB_OFFSET 3
331 #define TAG1_MSB_MASK 7
332 #define TAG1_LSB_OFFSET 5
333 #define TAG1_POS_MSB_MASK 31
334 #define TAG1_POS_MSB_OFFSET 1
335 #define TAG1_POS_LSB_OFFSET 7
336 #define TAG1_LEN_OFFSET 1
337 #define TAG1_LEN_MASK 63
338 #define TAG2_MSB_OFFSET 5
339 #define TAG2_MSB_MASK 1
340 #define TAG2_LSB_OFFSET 3
341 #define TAG2_POS_MSB_MASK 7
342 #define TAG2_POS_MSB_OFFSET 3
343 #define TAG2_POS_LSB_OFFSET 5
344 #define TAG2_LEN_MASK 31
345 #define AGT_MASK 31
346 #define AGT(x) (x & AGT_MASK)
347 #define AID(lsb,msb) ((msb << 8) | (lsb))
348 #define GTC(blk2msb) (blk2msb >> 3)
349 #define GRP_3A 0x6
350 #define RT_PLUS_AID 0x4bd7
351 #define ERT_AID 0x6552
352 #define CARRIAGE_RETURN 0x000D
353 #define MAX_ERT_SEGMENT 31
354 #define ERT_FORMAT_DIR_BIT 1
355 #define EXTRACT_BIT(data,bit_pos) ((data & (1 << bit_pos)) >> bit_pos)
356 struct hci_ev_tune_status {
357   __u8 sub_event;
358   __le32 station_freq;
359   __u8 serv_avble;
360   char rssi;
361   __u8 stereo_prg;
362   __u8 rds_sync_status;
363   __u8 mute_mode;
364   char sinr;
365   __u8 intf_det_th;
366 } __attribute__((packed));
367 struct rds_blk_data {
368   __u8 rdsMsb;
369   __u8 rdsLsb;
370   __u8 blockStatus;
371 } __attribute__((packed));
372 struct rds_grp_data {
373   struct rds_blk_data rdsBlk[4];
374 } __attribute__((packed));
375 struct hci_ev_rds_rx_data {
376   __u8 num_rds_grps;
377   struct rds_grp_data rds_grp_data[MAX_RAW_RDS_GRPS];
378 } __attribute__((packed));
379 struct hci_ev_prg_service {
380   __le16 pi_prg_id;
381   __u8 pty_prg_type;
382   __u8 ta_prg_code_type;
383   __u8 ta_ann_code_flag;
384   __u8 ms_switch_code_flag;
385   __u8 dec_id_ctrl_code_flag;
386   __u8 ps_num;
387   __u8 prg_service_name[119];
388 } __attribute__((packed));
389 struct hci_ev_radio_text {
390   __le16 pi_prg_id;
391   __u8 pty_prg_type;
392   __u8 ta_prg_code_type;
393   __u8 txt_ab_flag;
394   __u8 radio_txt[64];
395 } __attribute__((packed));
396 struct hci_ev_af_list {
397   __le32 tune_freq;
398   __le16 pi_code;
399   __u8 af_size;
400   __u8 af_list[FM_AF_LIST_MAX_SIZE];
401 } __attribute__((packed));
402 struct hci_ev_cmd_complete {
403   __u8 num_hci_cmd_pkts;
404   __le16 cmd_opcode;
405 } __attribute__((packed));
406 struct hci_ev_cmd_status {
407   __u8 status;
408   __u8 num_hci_cmd_pkts;
409   __le16 status_opcode;
410 } __attribute__((packed));
411 struct hci_ev_srch_st {
412   __le32 station_freq;
413   __u8 rds_cap;
414   __u8 pty;
415   __le16 status_opcode;
416 } __attribute__((packed));
417 struct hci_ev_rel_freq {
418   __u8 rel_freq_msb;
419   __u8 rel_freq_lsb;
420 } __attribute__((packed));
421 struct hci_ev_srch_list_compl {
422   __u8 num_stations_found;
423   struct hci_ev_rel_freq rel_freq[20];
424 } __attribute__((packed));
425 struct hci_fm_conf_rsp {
426   __u8 status;
427   struct hci_fm_recv_conf_req recv_conf_rsp;
428 } __attribute__((packed));
429 struct hci_fm_get_trans_conf_rsp {
430   __u8 status;
431   struct hci_fm_trans_conf_req_struct trans_conf_rsp;
432 } __attribute__((packed));
433 struct hci_fm_sig_threshold_rsp {
434   __u8 status;
435   __u8 sig_threshold;
436 } __attribute__((packed));
437 struct hci_fm_station_rsp {
438   struct hci_ev_tune_status station_rsp;
439 } __attribute__((packed));
440 struct hci_fm_prgm_srv_rsp {
441   __u8 status;
442   struct hci_ev_prg_service prg_srv;
443 } __attribute__((packed));
444 struct hci_fm_radio_txt_rsp {
445   __u8 status;
446   struct hci_ev_radio_text rd_txt;
447 } __attribute__((packed));
448 struct hci_fm_af_list_rsp {
449   __u8 status;
450   struct hci_ev_af_list rd_txt;
451 } __attribute__((packed));
452 struct hci_fm_data_rd_rsp {
453   __u8 status;
454   __u8 ret_data_len;
455   __u8 data[DEFAULT_DATA_SIZE];
456 } __attribute__((packed));
457 struct hci_fm_feature_list_rsp {
458   __u8 status;
459   __u8 feature_mask;
460 } __attribute__((packed));
461 struct hci_fm_dbg_param_rsp {
462   __u8 status;
463   __u8 blend;
464   __u8 soft_mute;
465   __u8 inf_blend;
466   __u8 inf_soft_mute;
467   __u8 pilot_pil;
468   __u8 io_verc;
469   __u8 in_det_out;
470 } __attribute__((packed));
471 #define CLKSPURID_INDEX0 0
472 #define CLKSPURID_INDEX1 5
473 #define CLKSPURID_INDEX2 10
474 #define CLKSPURID_INDEX3 15
475 #define CLKSPURID_INDEX4 20
476 #define CLKSPURID_INDEX5 25
477 #define MAX_SPUR_FREQ_LIMIT 30
478 #define CKK_SPUR 0x3B
479 #define SPUR_DATA_SIZE 0x4
480 #define SPUR_ENTRIES_PER_ID 0x5
481 #define COMPUTE_SPUR(val) ((((val) - (76000)) / (50)))
482 #define GET_FREQ(val,bit) ((bit == 1) ? ((val) >> 8) : ((val) & 0xFF))
483 #define GET_SPUR_ENTRY_LEVEL(val) ((val) / (5))
484 struct hci_fm_spur_data {
485   __u32 freq[MAX_SPUR_FREQ_LIMIT];
486   __s8 rmssi[MAX_SPUR_FREQ_LIMIT];
487   __u8 enable[MAX_SPUR_FREQ_LIMIT];
488 } __attribute__((packed));
489 #define RADIO_HCI_DEV_REG 1
490 #define RADIO_HCI_DEV_WRITE 2
491 #define RDS_PTYPE 2
492 #define RDS_PID_LOWER 1
493 #define RDS_PID_HIGHER 0
494 #define RDS_OFFSET 5
495 #define RDS_PS_LENGTH_OFFSET 7
496 #define RDS_STRING 8
497 #define RDS_PS_DATA_OFFSET 8
498 #define RDS_CONFIG_OFFSET 3
499 #define RDS_AF_JUMP_OFFSET 4
500 #define PI_CODE_OFFSET 4
501 #define AF_SIZE_OFFSET 6
502 #define AF_LIST_OFFSET 7
503 #define RT_A_B_FLAG_OFFSET 4
504 enum radio_state_t {
505   FM_OFF,
506   FM_RECV,
507   FM_TRANS,
508   FM_RESET,
509   FM_CALIB,
510   FM_TURNING_OFF,
511   FM_RECV_TURNING_ON,
512   FM_TRANS_TURNING_ON,
513   FM_MAX_NO_STATES,
514 };
515 enum emphasis_type {
516   FM_RX_EMP75 = 0x0,
517   FM_RX_EMP50 = 0x1
518 };
519 enum channel_space_type {
520   FM_RX_SPACE_200KHZ = 0x0,
521   FM_RX_SPACE_100KHZ = 0x1,
522   FM_RX_SPACE_50KHZ = 0x2
523 };
524 enum high_low_injection {
525   AUTO_HI_LO_INJECTION = 0x0,
526   LOW_SIDE_INJECTION = 0x1,
527   HIGH_SIDE_INJECTION = 0x2
528 };
529 enum fm_rds_type {
530   FM_RX_RDBS_SYSTEM = 0x0,
531   FM_RX_RDS_SYSTEM = 0x1
532 };
533 enum iris_region_t {
534   IRIS_REGION_US,
535   IRIS_REGION_EU,
536   IRIS_REGION_JAPAN,
537   IRIS_REGION_JAPAN_WIDE,
538   IRIS_REGION_OTHER
539 };
540 #define STD_BUF_SIZE (256)
541 enum iris_buf_t {
542   IRIS_BUF_SRCH_LIST,
543   IRIS_BUF_EVENTS,
544   IRIS_BUF_RT_RDS,
545   IRIS_BUF_PS_RDS,
546   IRIS_BUF_RAW_RDS,
547   IRIS_BUF_AF_LIST,
548   IRIS_BUF_PEEK,
549   IRIS_BUF_SSBI_PEEK,
550   IRIS_BUF_RDS_CNTRS,
551   IRIS_BUF_RD_DEFAULT,
552   IRIS_BUF_CAL_DATA,
553   IRIS_BUF_RT_PLUS,
554   IRIS_BUF_ERT,
555   IRIS_BUF_SPUR,
556   IRIS_BUF_MAX,
557 };
558 enum iris_xfr_t {
559   IRIS_XFR_SYNC,
560   IRIS_XFR_ERROR,
561   IRIS_XFR_SRCH_LIST,
562   IRIS_XFR_RT_RDS,
563   IRIS_XFR_PS_RDS,
564   IRIS_XFR_AF_LIST,
565   IRIS_XFR_MAX
566 };
567 enum search_t {
568   SEEK,
569   SCAN,
570   SCAN_FOR_STRONG,
571   SCAN_FOR_WEAK,
572   RDS_SEEK_PTY,
573   RDS_SCAN_PTY,
574   RDS_SEEK_PI,
575   RDS_AF_JUMP,
576 };
577 enum spur_entry_levels {
578   ENTRY_0,
579   ENTRY_1,
580   ENTRY_2,
581   ENTRY_3,
582   ENTRY_4,
583   ENTRY_5,
584 };
585 #define REGION_US_EU_BAND_LOW 87500
586 #define REGION_US_EU_BAND_HIGH 108000
587 #define REGION_JAPAN_STANDARD_BAND_LOW 76000
588 #define REGION_JAPAN_STANDARD_BAND_HIGH 90000
589 #define REGION_JAPAN_WIDE_BAND_LOW 90000
590 #define REGION_JAPAN_WIDE_BAND_HIGH 108000
591 #define SRCH_MODE 0x07
592 #define SRCH_DIR 0x08
593 #define SCAN_DWELL 0x70
594 #define SRCH_ON 0x80
595 #define IOC_HRD_MUTE 0x03
596 #define IOC_SFT_MUTE 0x01
597 #define IOC_MON_STR 0x01
598 #define IOC_SIG_BLND 0x01
599 #define IOC_INTF_BLND 0x01
600 #define IOC_ANTENNA 0x01
601 #define RDS_ON 0x01
602 #define RDS_BUF_SZ 100
603 #define RDS_BLOCKS_NUM (4)
604 #define BYTES_PER_BLOCK (3)
605 #define MAX_PS_LENGTH (108)
606 #define MAX_RT_LENGTH (64)
607 #define RDS_GRP_CNTR_LEN (36)
608 #define RX_RT_DATA_LENGTH (63)
609 #define SRCH_DIR_UP (0)
610 #define SRCH_DIR_DOWN (1)
611 #define SEARCH_RDS_STNS_MODE_OFFSET 4
612 #define PARAMS_PER_STATION 0x08
613 #define STN_NUM_OFFSET 0x01
614 #define STN_FREQ_OFFSET 0x02
615 #define KHZ_TO_MHZ 1000
616 #define GET_MSB(x) ((x >> 8) & 0xFF)
617 #define GET_LSB(x) ((x) & 0xFF)
618 #define CTRL_ON (1)
619 #define CTRL_OFF (0)
620 #define RIVA_PEEK_OPCODE 0x0D
621 #define RIVA_POKE_OPCODE 0x0C
622 #define PEEK_DATA_OFSET 0x1
623 #define RIVA_PEEK_PARAM 0x6
624 #define RIVA_PEEK_LEN_OFSET 0x6
625 #define SSBI_PEEK_LEN 0x01
626 #define PROCS_CALIB_MODE 1
627 #define PROCS_CALIB_SIZE 23
628 #define DC_CALIB_MODE 2
629 #define DC_CALIB_SIZE 48
630 #define RSB_CALIB_MODE 3
631 #define RSB_CALIB_SIZE 4
632 #define CALIB_DATA_OFSET 2
633 #define CALIB_MODE_OFSET 1
634 #define MAX_CALIB_SIZE 75
635 #define INVALID_CHANNEL (0)
636 #define VALID_CHANNEL (1)
637 struct hci_fm_set_cal_req_proc {
638   __u8 mode;
639   __u8 data[PROCS_CALIB_SIZE];
640 } __attribute__((packed));
641 struct hci_fm_set_cal_req_dc {
642   __u8 mode;
643   __u8 data[DC_CALIB_SIZE];
644 } __attribute__((packed));
645 struct hci_cc_do_calibration_rsp {
646   __u8 status;
647   __u8 mode;
648   __u8 data[MAX_CALIB_SIZE];
649 } __attribute__((packed));
650 struct hci_fm_set_spur_table_req {
651   __u8 mode;
652   __u8 no_of_freqs_entries;
653   __u8 spur_data[FM_SPUR_TBL_SIZE];
654 } __attribute__((packed));
655 #define SIG_LEVEL_INTR (1 << 0)
656 #define RDS_SYNC_INTR (1 << 1)
657 #define AUDIO_CTRL_INTR (1 << 2)
658 #define AF_JUMP_ENABLE (1 << 4)
659 #endif
660