blob: acfd360f32073a0ce3a3c29477b98136c9865bdb [file] [log] [blame]
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001#ifndef __LINUX_TAVARUA_H
2#define __LINUX_TAVARUA_H
3
4#ifdef __KERNEL__
5#include <linux/types.h>
6#include <asm/sizes.h>
7#else
8#include <stdint.h>
9#endif
10#include <linux/ioctl.h>
11#include <linux/videodev2.h>
12
13
14#undef FM_DEBUG
15
16/* constants */
17#define RDS_BLOCKS_NUM (4)
18#define BYTES_PER_BLOCK (3)
19#define MAX_PS_LENGTH (96)
20#define MAX_RT_LENGTH (64)
21
22#define XFRDAT0 (0x20)
23#define XFRDAT1 (0x21)
24#define XFRDAT2 (0x22)
25
26#define INTDET_PEEK_MSB (0x88)
27#define INTDET_PEEK_LSB (0x26)
28
29#define RMSSI_PEEK_MSB (0x88)
30#define RMSSI_PEEK_LSB (0xA8)
31
32#define MPX_DCC_BYPASS_POKE_MSB (0x88)
33#define MPX_DCC_BYPASS_POKE_LSB (0xC0)
34
35#define MPX_DCC_PEEK_MSB_REG1 (0x88)
36#define MPX_DCC_PEEK_LSB_REG1 (0xC2)
37
38#define MPX_DCC_PEEK_MSB_REG2 (0x88)
39#define MPX_DCC_PEEK_LSB_REG2 (0xC3)
40
41#define MPX_DCC_PEEK_MSB_REG3 (0x88)
42#define MPX_DCC_PEEK_LSB_REG3 (0xC4)
43
Anantha Krishnanbdb128c2011-11-21 17:51:26 +053044#define ON_CHANNEL_TH_MSB (0x0B)
45#define ON_CHANNEL_TH_LSB (0xA8)
46
47#define OFF_CHANNEL_TH_MSB (0x0B)
48#define OFF_CHANNEL_TH_LSB (0xAC)
49
Anantha Krishnana02ef212011-06-28 00:57:25 +053050#define ENF_200Khz (1)
51#define SRCH200KHZ_OFFSET (7)
52#define SRCH_MASK (1 << SRCH200KHZ_OFFSET)
53
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -070054/* Standard buffer size */
Ayaz Ahmad6a6514d2012-10-05 19:39:11 +053055#define STD_BUF_SIZE (256)
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -070056/* Search direction */
57#define SRCH_DIR_UP (0)
58#define SRCH_DIR_DOWN (1)
59
60/* control options */
61#define CTRL_ON (1)
62#define CTRL_OFF (0)
63
64#define US_LOW_BAND (87.5)
65#define US_HIGH_BAND (108)
66
67/* constant for Tx */
68
69#define MASK_PI (0x0000FFFF)
70#define MASK_PI_MSB (0x0000FF00)
71#define MASK_PI_LSB (0x000000FF)
72#define MASK_PTY (0x0000001F)
73#define MASK_TXREPCOUNT (0x0000000F)
74
75#undef FMDBG
76#ifdef FM_DEBUG
77 #define FMDBG(fmt, args...) printk(KERN_INFO "tavarua_radio: " fmt, ##args)
78#else
79 #define FMDBG(fmt, args...)
80#endif
81
82#undef FMDERR
83#define FMDERR(fmt, args...) printk(KERN_INFO "tavarua_radio: " fmt, ##args)
84
85#undef FMDBG_I2C
86#ifdef FM_DEBUG_I2C
87 #define FMDBG_I2C(fmt, args...) printk(KERN_INFO "fm_i2c: " fmt, ##args)
88#else
89 #define FMDBG_I2C(fmt, args...)
90#endif
91
92/* function declarations */
93/* FM Core audio paths. */
94#define TAVARUA_AUDIO_OUT_ANALOG_OFF (0)
95#define TAVARUA_AUDIO_OUT_ANALOG_ON (1)
96#define TAVARUA_AUDIO_OUT_DIGITAL_OFF (0)
97#define TAVARUA_AUDIO_OUT_DIGITAL_ON (1)
98
99int tavarua_set_audio_path(int digital_on, int analog_on);
100
101/* defines and enums*/
102
103#define MARIMBA_A0 0x01010013
104#define MARIMBA_2_1 0x02010204
105#define BAHAMA_1_0 0x0302010A
106#define BAHAMA_2_0 0x04020205
107#define WAIT_TIMEOUT 2000
108#define RADIO_INIT_TIME 15
109#define TAVARUA_DELAY 10
110/*
111 * The frequency is set in units of 62.5 Hz when using V4L2_TUNER_CAP_LOW,
112 * 62.5 kHz otherwise.
113 * The tuner is able to have a channel spacing of 50, 100 or 200 kHz.
114 * tuner->capability is therefore set to V4L2_TUNER_CAP_LOW
115 * The FREQ_MUL is then: 1 MHz / 62.5 Hz = 16000
116 */
117#define FREQ_MUL (1000000 / 62.5)
118
119enum v4l2_cid_private_tavarua_t {
120 V4L2_CID_PRIVATE_TAVARUA_SRCHMODE = (V4L2_CID_PRIVATE_BASE + 1),
121 V4L2_CID_PRIVATE_TAVARUA_SCANDWELL,
122 V4L2_CID_PRIVATE_TAVARUA_SRCHON,
123 V4L2_CID_PRIVATE_TAVARUA_STATE,
124 V4L2_CID_PRIVATE_TAVARUA_TRANSMIT_MODE,
125 V4L2_CID_PRIVATE_TAVARUA_RDSGROUP_MASK,
126 V4L2_CID_PRIVATE_TAVARUA_REGION,
127 V4L2_CID_PRIVATE_TAVARUA_SIGNAL_TH,
128 V4L2_CID_PRIVATE_TAVARUA_SRCH_PTY,
129 V4L2_CID_PRIVATE_TAVARUA_SRCH_PI,
130 V4L2_CID_PRIVATE_TAVARUA_SRCH_CNT,
131 V4L2_CID_PRIVATE_TAVARUA_EMPHASIS,
132 V4L2_CID_PRIVATE_TAVARUA_RDS_STD,
133 V4L2_CID_PRIVATE_TAVARUA_SPACING,
134 V4L2_CID_PRIVATE_TAVARUA_RDSON,
135 V4L2_CID_PRIVATE_TAVARUA_RDSGROUP_PROC,
136 V4L2_CID_PRIVATE_TAVARUA_LP_MODE,
137 V4L2_CID_PRIVATE_TAVARUA_ANTENNA,
138 V4L2_CID_PRIVATE_TAVARUA_RDSD_BUF,
139 V4L2_CID_PRIVATE_TAVARUA_PSALL,
140 /*v4l2 Tx controls*/
141 V4L2_CID_PRIVATE_TAVARUA_TX_SETPSREPEATCOUNT,
142 V4L2_CID_PRIVATE_TAVARUA_STOP_RDS_TX_PS_NAME,
143 V4L2_CID_PRIVATE_TAVARUA_STOP_RDS_TX_RT,
144 V4L2_CID_PRIVATE_TAVARUA_IOVERC,
145 V4L2_CID_PRIVATE_TAVARUA_INTDET,
146 V4L2_CID_PRIVATE_TAVARUA_MPX_DCC,
Anantha Krishnane46ef6f2011-06-29 23:56:03 +0530147 V4L2_CID_PRIVATE_TAVARUA_AF_JUMP,
Anantha Krishnanf2258602011-06-30 01:32:09 +0530148 V4L2_CID_PRIVATE_TAVARUA_RSSI_DELTA,
Srinivasa Rao Uppala4e38bfc2011-09-15 16:00:31 +0530149 V4L2_CID_PRIVATE_TAVARUA_HLSI,
Anantha Krishnan71d6fa62011-12-13 19:30:51 +0530150
Srinivasa Rao Uppala4e38bfc2011-09-15 16:00:31 +0530151 /*
Anantha Krishnan40bcd052011-12-05 15:28:29 +0530152 * Here we have IOCTl's that are specific to IRIS
Anantha Krishnan71d6fa62011-12-13 19:30:51 +0530153 * (V4L2_CID_PRIVATE_BASE + 0x1E to V4L2_CID_PRIVATE_BASE + 0x28)
Srinivasa Rao Uppala4e38bfc2011-09-15 16:00:31 +0530154 */
Anantha Krishnana3dcce42012-01-05 19:27:57 +0530155 V4L2_CID_PRIVATE_SOFT_MUTE,/* 0x800001E*/
Anantha Krishnan71d6fa62011-12-13 19:30:51 +0530156 V4L2_CID_PRIVATE_RIVA_ACCS_ADDR,
157 V4L2_CID_PRIVATE_RIVA_ACCS_LEN,
158 V4L2_CID_PRIVATE_RIVA_PEEK,
159 V4L2_CID_PRIVATE_RIVA_POKE,
160 V4L2_CID_PRIVATE_SSBI_ACCS_ADDR,
161 V4L2_CID_PRIVATE_SSBI_PEEK,
162 V4L2_CID_PRIVATE_SSBI_POKE,
163 V4L2_CID_PRIVATE_TX_TONE,
164 V4L2_CID_PRIVATE_RDS_GRP_COUNTERS,
Anantha Krishnana3dcce42012-01-05 19:27:57 +0530165 V4L2_CID_PRIVATE_SET_NOTCH_FILTER,/* 0x8000028 */
Anantha Krishnan71d6fa62011-12-13 19:30:51 +0530166
Anantha Krishnana3dcce42012-01-05 19:27:57 +0530167 V4L2_CID_PRIVATE_TAVARUA_SET_AUDIO_PATH,/* 0x8000029 */
168 V4L2_CID_PRIVATE_TAVARUA_DO_CALIBRATION,/* 0x800002A : IRIS */
169 V4L2_CID_PRIVATE_TAVARUA_SRCH_ALGORITHM,/* 0x800002B */
170 V4L2_CID_PRIVATE_IRIS_GET_SINR, /* 0x800002C : IRIS */
171 V4L2_CID_PRIVATE_INTF_LOW_THRESHOLD, /* 0x800002D */
172 V4L2_CID_PRIVATE_INTF_HIGH_THRESHOLD, /* 0x800002E */
173 V4L2_CID_PRIVATE_SINR_THRESHOLD, /* 0x800002F : IRIS */
174 V4L2_CID_PRIVATE_SINR_SAMPLES, /* 0x8000030 : IRIS */
Anantha Krishnan93eb1762012-06-04 13:41:07 +0530175 V4L2_CID_PRIVATE_SPUR_FREQ,
176 V4L2_CID_PRIVATE_SPUR_FREQ_RMSSI,
177 V4L2_CID_PRIVATE_SPUR_SELECTION,
178 V4L2_CID_PRIVATE_UPDATE_SPUR_TABLE,
Anantha Krishnan4c2dcd42012-06-25 14:09:14 +0530179 V4L2_CID_PRIVATE_VALID_CHANNEL,
Anantha Krishnanbdb128c2011-11-21 17:51:26 +0530180
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700181};
182
183enum tavarua_buf_t {
184 TAVARUA_BUF_SRCH_LIST,
185 TAVARUA_BUF_EVENTS,
186 TAVARUA_BUF_RT_RDS,
187 TAVARUA_BUF_PS_RDS,
188 TAVARUA_BUF_RAW_RDS,
189 TAVARUA_BUF_AF_LIST,
190 TAVARUA_BUF_MAX
191};
192
193enum tavarua_xfr_t {
194 TAVARUA_XFR_SYNC,
195 TAVARUA_XFR_ERROR,
196 TAVARUA_XFR_SRCH_LIST,
197 TAVARUA_XFR_RT_RDS,
198 TAVARUA_XFR_PS_RDS,
199 TAVARUA_XFR_AF_LIST,
200 TAVARUA_XFR_MAX
201};
202
Anantha Krishnana02ef212011-06-28 00:57:25 +0530203enum channel_spacing {
204 FM_CH_SPACE_200KHZ,
205 FM_CH_SPACE_100KHZ,
206 FM_CH_SPACE_50KHZ
207};
208
209enum step_size {
210 NO_SRCH200khz,
211 ENF_SRCH200khz
212};
213
214enum emphasis {
215 EMP_75,
216 EMP_50
217};
218
219enum rds_std {
220 RBDS_STD,
221 RDS_STD
222};
223
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700224/* offsets */
225#define RAW_RDS 0x0F
226#define RDS_BLOCK 3
227
228/* registers*/
229#define MARIMBA_XO_BUFF_CNTRL 0x07
230#define RADIO_REGISTERS 0x30
231#define XFR_REG_NUM 16
232#define STATUS_REG_NUM 3
233
234/* TX constants */
235#define HEADER_SIZE 4
236#define TX_ON 0x80
237#define TAVARUA_TX_RT RDS_RT_0
238#define TAVARUA_TX_PS RDS_PS_0
239
240enum register_t {
241 STATUS_REG1 = 0,
242 STATUS_REG2,
243 STATUS_REG3,
244 RDCTRL,
245 FREQ,
246 TUNECTRL,
247 SRCHRDS1,
248 SRCHRDS2,
249 SRCHCTRL,
250 IOCTRL,
251 RDSCTRL,
252 ADVCTRL,
253 AUDIOCTRL,
254 RMSSI,
255 IOVERC,
256 AUDIOIND = 0x1E,
257 XFRCTRL,
258 FM_CTL0 = 0xFF,
259 LEAKAGE_CNTRL = 0xFE,
260};
261#define BAHAMA_RBIAS_CTL1 0x07
262#define BAHAMA_FM_MODE_REG 0xFD
263#define BAHAMA_FM_CTL1_REG 0xFE
264#define BAHAMA_FM_CTL0_REG 0xFF
265#define BAHAMA_FM_MODE_NORMAL 0x00
266#define BAHAMA_LDO_DREG_CTL0 0xF0
267#define BAHAMA_LDO_AREG_CTL0 0xF4
268
269/* Radio Control */
270#define RDCTRL_STATE_OFFSET 0
271#define RDCTRL_STATE_MASK (3 << RDCTRL_STATE_OFFSET)
272#define RDCTRL_BAND_OFFSET 2
273#define RDCTRL_BAND_MASK (1 << RDCTRL_BAND_OFFSET)
274#define RDCTRL_CHSPACE_OFFSET 3
275#define RDCTRL_CHSPACE_MASK (3 << RDCTRL_CHSPACE_OFFSET)
276#define RDCTRL_DEEMPHASIS_OFFSET 5
277#define RDCTRL_DEEMPHASIS_MASK (1 << RDCTRL_DEEMPHASIS_OFFSET)
278#define RDCTRL_HLSI_OFFSET 6
279#define RDCTRL_HLSI_MASK (3 << RDCTRL_HLSI_OFFSET)
Anantha Krishnane46ef6f2011-06-29 23:56:03 +0530280#define RDSAF_OFFSET 6
281#define RDSAF_MASK (1 << RDSAF_OFFSET)
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700282
283/* Tune Control */
284#define TUNE_STATION 0x01
285#define ADD_OFFSET (1 << 1)
286#define SIGSTATE (1 << 5)
287#define MOSTSTATE (1 << 6)
288#define RDSSYNC (1 << 7)
289/* Search Control */
290#define SRCH_MODE_OFFSET 0
291#define SRCH_MODE_MASK (7 << SRCH_MODE_OFFSET)
292#define SRCH_DIR_OFFSET 3
293#define SRCH_DIR_MASK (1 << SRCH_DIR_OFFSET)
294#define SRCH_DWELL_OFFSET 4
295#define SRCH_DWELL_MASK (7 << SRCH_DWELL_OFFSET)
296#define SRCH_STATE_OFFSET 7
297#define SRCH_STATE_MASK (1 << SRCH_STATE_OFFSET)
298
299/* I/O Control */
300#define IOC_HRD_MUTE 0x03
301#define IOC_SFT_MUTE (1 << 2)
302#define IOC_MON_STR (1 << 3)
303#define IOC_SIG_BLND (1 << 4)
304#define IOC_INTF_BLND (1 << 5)
305#define IOC_ANTENNA (1 << 6)
306#define IOC_ANTENNA_OFFSET 6
307#define IOC_ANTENNA_MASK (1 << IOC_ANTENNA_OFFSET)
308
309/* RDS Control */
310#define RDS_ON 0x01
311#define RDSCTRL_STANDARD_OFFSET 1
312#define RDSCTRL_STANDARD_MASK (1 << RDSCTRL_STANDARD_OFFSET)
313
314/* Advanced features controls */
315#define RDSRTEN (1 << 3)
316#define RDSPSEN (1 << 4)
317
318/* Audio path control */
319#define AUDIORX_ANALOG_OFFSET 0
320#define AUDIORX_ANALOG_MASK (1 << AUDIORX_ANALOG_OFFSET)
321#define AUDIORX_DIGITAL_OFFSET 1
322#define AUDIORX_DIGITAL_MASK (1 << AUDIORX_DIGITAL_OFFSET)
323#define AUDIOTX_OFFSET 2
324#define AUDIOTX_MASK (1 << AUDIOTX_OFFSET)
325#define I2SCTRL_OFFSET 3
326#define I2SCTRL_MASK (1 << I2SCTRL_OFFSET)
327
328/* Search options */
329enum search_t {
330 SEEK,
331 SCAN,
332 SCAN_FOR_STRONG,
333 SCAN_FOR_WEAK,
334 RDS_SEEK_PTY,
335 RDS_SCAN_PTY,
336 RDS_SEEK_PI,
337 RDS_AF_JUMP,
338};
339
Anantha Krishnan4c2dcd42012-06-25 14:09:14 +0530340/* Band limits */
341#define REGION_US_EU_BAND_LOW 87500
342#define REGION_US_EU_BAND_HIGH 108000
343#define REGION_JAPAN_STANDARD_BAND_LOW 76000
344#define REGION_JAPAN_STANDARD_BAND_HIGH 90000
345#define REGION_JAPAN_WIDE_BAND_LOW 90000
346#define REGION_JAPAN_WIDE_BAND_HIGH 108000
347#define MPX_DCC_BYPASS_REG 0x88C0
348#define MPX_DCC_DATA_REG 0x88C2
349
Anantha Krishnanc72725a2011-09-06 09:28:22 +0530350enum audio_path {
351 FM_DIGITAL_PATH,
352 FM_ANALOG_PATH
353};
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700354#define SRCH_MODE 0x07
355#define SRCH_DIR 0x08 /* 0-up 1-down */
356#define SCAN_DWELL 0x70
357#define SRCH_ON 0x80
358
359/* RDS CONFIG */
360#define RDS_CONFIG_PSALL 0x01
361
362#define FM_ENABLE 0x22
363#define SET_REG_FIELD(reg, val, offset, mask) \
364 (reg = (reg & ~mask) | (((val) << offset) & mask))
365#define GET_REG_FIELD(reg, offset, mask) ((reg & mask) >> offset)
Anantha Krishnan29f1d932011-12-29 21:17:29 +0530366#define RSH_DATA(val, offset) ((val) >> (offset))
Anantha Krishnana3dcce42012-01-05 19:27:57 +0530367#define LSH_DATA(val, offset) ((val) << (offset))
Anantha Krishnan29f1d932011-12-29 21:17:29 +0530368#define GET_ABS_VAL(val) ((val) & (0xFF))
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700369
370enum radio_state_t {
371 FM_OFF,
372 FM_RECV,
373 FM_TRANS,
374 FM_RESET,
375};
376
377#define XFRCTRL_WRITE (1 << 7)
378
379/* Interrupt status */
380
381/* interrupt register 1 */
382#define READY (1 << 0) /* Radio ready after powerup or reset */
383#define TUNE (1 << 1) /* Tune completed */
384#define SEARCH (1 << 2) /* Search completed (read FREQ) */
385#define SCANNEXT (1 << 3) /* Scanning for next station */
386#define SIGNAL (1 << 4) /* Signal indicator change (read SIGSTATE) */
387#define INTF (1 << 5) /* Interference cnt has fallen outside range */
388#define SYNC (1 << 6) /* RDS sync state change (read RDSSYNC) */
389#define AUDIO (1 << 7) /* Audio Control indicator (read AUDIOIND) */
390
391/* interrupt register 2 */
392#define RDSDAT (1 << 0) /* New unread RDS data group available */
393#define BLOCKB (1 << 1) /* Block-B match condition exists */
394#define PROGID (1 << 2) /* Block-A or Block-C matched stored PI value*/
395#define RDSPS (1 << 3) /* New RDS Program Service Table available */
396#define RDSRT (1 << 4) /* New RDS Radio Text available */
397#define RDSAF (1 << 5) /* New RDS AF List available */
398#define TXRDSDAT (1 << 6) /* Transmitted an RDS group */
399#define TXRDSDONE (1 << 7) /* RDS raw group one-shot transmit completed */
400
401/* interrupt register 3 */
402#define TRANSFER (1 << 0) /* Data transfer (XFR) completed */
403#define RDSPROC (1 << 1) /* Dynamic RDS Processing complete */
404#define ERROR (1 << 7) /* Err occurred.Read code to determine cause */
405
406
407#define FM_TX_PWR_LVL_0 0 /* Lowest power lvl that can be set for Tx */
408#define FM_TX_PWR_LVL_MAX 7 /* Max power lvl for Tx */
Ayaz Ahmada0d56b52012-06-26 15:58:41 +0530409
410/* Tone Generator control value */
411#define TONE_GEN_CTRL_BYTE 0x00
412#define TONE_CHANNEL_EN_AND_SCALING_BYTE 0x01
413#define TONE_LEFT_FREQ_BYTE 0x02
414#define TONE_RIGHT_FREQ_BYTE 0x03
415#define TONE_LEFT_PHASE 0x04
416#define TONE_RIGHT_PHASE 0x05
417
418#define TONE_LEFT_CH_ENABLED 0x01
419#define TONE_RIGHT_CH_ENABLED 0x02
420#define TONE_LEFT_RIGHT_CH_ENABLED (TONE_LEFT_CH_ENABLED\
421 | TONE_RIGHT_CH_ENABLED)
422
423#define TONE_SCALING_SHIFT 0x02
424
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700425/* Transfer */
426enum tavarua_xfr_ctrl_t {
427 RDS_PS_0 = 0x01,
428 RDS_PS_1,
429 RDS_PS_2,
430 RDS_PS_3,
431 RDS_PS_4,
432 RDS_PS_5,
433 RDS_PS_6,
434 RDS_RT_0,
435 RDS_RT_1,
436 RDS_RT_2,
437 RDS_RT_3,
438 RDS_RT_4,
439 RDS_AF_0,
440 RDS_AF_1,
441 RDS_CONFIG,
442 RDS_TX_GROUPS,
443 RDS_COUNT_0,
444 RDS_COUNT_1,
445 RDS_COUNT_2,
446 RADIO_CONFIG,
447 RX_CONFIG,
448 RX_TIMERS,
449 RX_STATIONS_0,
450 RX_STATIONS_1,
451 INT_CTRL,
452 ERROR_CODE,
453 CHIPID,
454 CAL_DAT_0 = 0x20,
455 CAL_DAT_1,
456 CAL_DAT_2,
457 CAL_DAT_3,
458 CAL_CFG_0,
459 CAL_CFG_1,
460 DIG_INTF_0,
461 DIG_INTF_1,
462 DIG_AGC_0,
463 DIG_AGC_1,
464 DIG_AGC_2,
465 DIG_AUDIO_0,
466 DIG_AUDIO_1,
467 DIG_AUDIO_2,
468 DIG_AUDIO_3,
469 DIG_AUDIO_4,
470 DIG_RXRDS,
471 DIG_DCC,
472 DIG_SPUR,
473 DIG_MPXDCC,
474 DIG_PILOT,
475 DIG_DEMOD,
476 DIG_MOST,
477 DIG_TX_0,
478 DIG_TX_1,
479 PHY_TXGAIN = 0x3B,
480 PHY_CONFIG,
481 PHY_TXBLOCK,
482 PHY_TCB,
Ayaz Ahmada0d56b52012-06-26 15:58:41 +0530483 XFR_EXT,
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700484 XFR_PEEK_MODE = 0x40,
485 XFR_POKE_MODE = 0xC0,
486 TAVARUA_XFR_CTRL_MAX
487};
488
489enum tavarua_evt_t {
490 TAVARUA_EVT_RADIO_READY,
491 TAVARUA_EVT_TUNE_SUCC,
492 TAVARUA_EVT_SEEK_COMPLETE,
493 TAVARUA_EVT_SCAN_NEXT,
494 TAVARUA_EVT_NEW_RAW_RDS,
495 TAVARUA_EVT_NEW_RT_RDS,
496 TAVARUA_EVT_NEW_PS_RDS,
497 TAVARUA_EVT_ERROR,
498 TAVARUA_EVT_BELOW_TH,
499 TAVARUA_EVT_ABOVE_TH,
500 TAVARUA_EVT_STEREO,
501 TAVARUA_EVT_MONO,
502 TAVARUA_EVT_RDS_AVAIL,
503 TAVARUA_EVT_RDS_NOT_AVAIL,
504 TAVARUA_EVT_NEW_SRCH_LIST,
505 TAVARUA_EVT_NEW_AF_LIST,
506 TAVARUA_EVT_TXRDSDAT,
Ayaz Ahmad0fa19842012-03-14 22:54:53 +0530507 TAVARUA_EVT_TXRDSDONE,
508 TAVARUA_EVT_RADIO_DISABLED
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700509};
510
511enum tavarua_region_t {
512 TAVARUA_REGION_US,
513 TAVARUA_REGION_EU,
514 TAVARUA_REGION_JAPAN,
515 TAVARUA_REGION_JAPAN_WIDE,
516 TAVARUA_REGION_OTHER
517};
518
Anantha Krishnan93eb1762012-06-04 13:41:07 +0530519enum {
520 ONE_BYTE = 1,
521 TWO_BYTE,
522 THREE_BYTE,
523 FOUR_BYTE,
524 FIVE_BYTE,
525 SIX_BYTE,
526 SEVEN_BYTE,
527 EIGHT_BYTE,
528 NINE_BYTE,
529 TEN_BYTE,
530 ELEVEN_BYTE,
531 TWELVE_BYTE,
532 THIRTEEN_BYTE
533};
Ayaz Ahmada0d56b52012-06-26 15:58:41 +0530534
Anantha Krishnan93eb1762012-06-04 13:41:07 +0530535#define XFR_READ (0)
536#define XFR_WRITE (1)
537#define XFR_MODE_OFFSET (0)
538#define XFR_ADDR_MSB_OFFSET (1)
539#define XFR_ADDR_LSB_OFFSET (2)
540#define XFR_DATA_OFFSET (3)
541#define SPUR_DATA_SIZE (3)
542#define MAX_SPUR_FREQ_LIMIT (30)
543#define READ_COMPLETE (0x20)
544#define SPUR_TABLE_ADDR (0x0BB7)
545#define SPUR_TABLE_START_ADDR (SPUR_TABLE_ADDR + 1)
546#define XFR_PEEK_COMPLETE (XFR_PEEK_MODE | READ_COMPLETE)
547#define XFR_POKE_COMPLETE (XFR_POKE_MODE)
Anantha Krishnan4c2dcd42012-06-25 14:09:14 +0530548#define TUNE_MULT (16)
549#define ADJ_CHANNEL_KHZ (50)
550#define MPX_DCC_UPPER_LIMIT (20000)
551#define MPX_DCC_LIMIT (12566)
552#define INVALID_CHANNEL (0)
553#define VALID_CHANNEL (1)
Anantha Krishnan93eb1762012-06-04 13:41:07 +0530554
555#define COMPUTE_SPUR(val) ((((val) - (76000)) / (50)))
556#define GET_FREQ(val, bit) ((bit == 1) ? ((val) >> 8) : ((val) & 0xFF))
557
558struct fm_spur_data {
559 int freq[MAX_SPUR_FREQ_LIMIT];
560 __s8 rmssi[MAX_SPUR_FREQ_LIMIT];
561} __packed;
562
563struct fm_def_data_wr_req {
564 __u8 mode;
565 __u8 length;
566 __u8 data[XFR_REG_NUM];
567} __packed;
568
Ayaz Ahmada0d56b52012-06-26 15:58:41 +0530569enum Internal_tone_gen_vals {
570 ONE_KHZ_LR_EQUA_0DBFS = 1,
571 ONE_KHZ_LEFTONLY_EQUA_0DBFS,
572 ONE_KHZ_RIGHTONLY_EQUA_0DBFS,
573 ONE_KHZ_LR_EQUA_l8DBFS,
574 FIFTEEN_KHZ_LR_EQUA_l8DBFS
575};
576
577enum Tone_scaling_indexes {
578 TONE_SCALE_IND_0,
579 TONE_SCALE_IND_1,
580 TONE_SCALE_IND_2,
581 TONE_SCALE_IND_3,
582 TONE_SCALE_IND_4,
583 TONE_SCALE_IND_5,
584 TONE_SCALE_IND_6,
585 TONE_SCALE_IND_7,
586 TONE_SCALE_IND_8,
587 TONE_SCALE_IND_9,
588 TONE_SCALE_IND_10,
589 TONE_SCALE_IND_11,
590 TONE_SCALE_IND_12
591};
592
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -0700593#endif /* __LINUX_TAVARUA_H */