comparison L1/cust0/l1_rf12.c @ 0:75a11d740a02

initial import of gsm-fw from freecalypso-sw rev 1033:5ab737ac3ad7
author Mychaela Falconia <falcon@freecalypso.org>
date Thu, 09 Jun 2016 00:02:41 +0000
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:75a11d740a02
1 /*
2 * In TI's original code these l1_rfXX.c files were not compilation units
3 * in themselves, but were #included into l1_cust.c instead. I dislike
4 * that approach, so I decided to make this FreeCalypso version of l1_rf12.c
5 * into its own compilation unit.
6 *
7 * This FreeCalypso version of l1_rf12.c is based on MV100, Leonardo and
8 * Openmoko versions as explained in the comments for each struct.
9 */
10
11 #include "config.h"
12 #include "l1_confg.h"
13 #include "l1_const.h"
14 #include "l1_types.h"
15 #include "../../bsp/abb+spi/abb.h"
16 #include "l1_rf12.h"
17
18 /*
19 * The following definition of T_RF rf comes from mv100/l1_rf12.c.
20 * The elaborate initialization of the structure has been compared against
21 * the object blob in the Leonardo version and found to match.
22 */
23 T_RF rf =
24 {
25 RF_RITA_10, //RF revision
26 RF_HW_BAND_SUPPORT, // radio_band_support E-GSM/DCS + PCS
27
28 { //RX structure
29 { //AGC structure
30 140, // low_agc_noise_thr;
31 110, // high_agc_sat_thr;
32 6, // low_agc;
33 34, // high_agc;
34 //IL2AGC tables
35 { // below is: il2agc_pwr[121];
36 // il2agc_max[121];
37 // il2agc_av[121];
38 // il2agc_pwr
39 // Note this is shared between PCN and EGSM.
40 14, /* EGSM_MAX IL=0 */
41 14, /* EGSM_MAX IL=-1 */
42 14, /* EGSM_MAX IL=-2 */
43 14, /* EGSM_MAX IL=-3 */
44 14, /* EGSM_MAX IL=-4 */
45 14, /* EGSM_MAX IL=-5 */
46 14, /* EGSM_MAX IL=-6 */
47 14, /* EGSM_MAX IL=-7 */
48 14, /* EGSM_MAX IL=-8 */
49 14, /* EGSM_MAX IL=-9 */
50 14, /* EGSM_MAX IL=-10 */
51 14, /* EGSM_MAX IL=-11 */
52 14, /* EGSM_MAX IL=-12 */
53 14, /* EGSM_MAX IL=-13 */
54 14, /* EGSM_MAX IL=-14 */
55 14, /* EGSM_MAX IL=-15 */
56 14, /* EGSM_MAX IL=-16 */
57 14, /* EGSM_MAX IL=-17 */
58 14, /* EGSM_MAX IL=-18 */
59 14, /* EGSM_MAX IL=-19 */
60 14, /* EGSM_MAX IL=-20 */
61 14, /* EGSM_MAX IL=-21 */
62 14, /* EGSM_MAX IL=-22 */
63 14, /* EGSM_MAX IL=-23 */
64 14, /* EGSM_MAX IL=-24 */
65 14, /* EGSM_MAX IL=-25 */
66 14, /* EGSM_MAX IL=-26 */
67 14, /* EGSM_MAX IL=-27 */
68 14, /* EGSM_MAX IL=-28 */
69 14, /* EGSM_MAX IL=-29 */
70 14, /* EGSM_MAX IL=-30 */
71 14, /* EGSM_MAX IL=-31 */
72 14, /* EGSM_MAX IL=-32 */
73 14, /* EGSM_MAX IL=-33 */
74 14, /* EGSM_MAX IL=-34 */
75 14, /* EGSM_MAX IL=-35 */
76 14, /* EGSM_MAX IL=-36 */
77 14, /* EGSM_MAX IL=-37 */
78 14, /* EGSM_MAX IL=-38 */
79 14, /* EGSM_MAX IL=-39 */
80 14, /* EGSM_MAX IL=-40 */
81 14, /* EGSM_MAX IL=-41 */
82 14, /* EGSM_MAX IL=-42 */
83 14, /* EGSM_MAX IL=-43 */
84 14, /* EGSM_MAX IL=-44 */
85 14, /* EGSM_MAX IL=-45 */
86 14, /* EGSM_MAX IL=-46 */
87 14, /* EGSM_MAX IL=-47 */
88 14, /* EGSM_MAX IL=-48 */
89 14, /* EGSM_MAX IL=-49 */
90 14, /* EGSM_MAX IL=-50 */
91 14, /* EGSM_MAX IL=-51 */
92 14, /* EGSM_MAX IL=-52 */
93 14, /* EGSM_MAX IL=-53 */
94 14, /* EGSM_MAX IL=-54 */
95 16, /* EGSM_MAX IL=-55 */
96 16, /* EGSM_MAX IL=-56 */
97 18, /* EGSM_MAX IL=-57 */
98 18, /* EGSM_MAX IL=-58 */
99 20, /* EGSM_MAX IL=-59 */
100 20, /* EGSM_MAX IL=-60 */
101 22, /* EGSM_MAX IL=-61 */
102 22, /* EGSM_MAX IL=-62 */
103 24, /* EGSM_MAX IL=-63 */
104 24, /* EGSM_MAX IL=-64 */
105 26, /* EGSM_MAX IL=-65 */
106 26, /* EGSM_MAX IL=-66 */
107 28, /* EGSM_MAX IL=-67 */
108 28, /* EGSM_MAX IL=-68 */
109 30, /* EGSM_MAX IL=-69 */
110 30, /* EGSM_MAX IL=-70 */
111 32, /* EGSM_MAX IL=-71 */
112 32, /* EGSM_MAX IL=-72 */
113 34, /* EGSM_MAX IL=-73 */
114 34, /* EGSM_MAX IL=-74 */
115 36, /* EGSM_MAX IL=-75 */
116 36, /* EGSM_MAX IL=-76 */
117 38, /* EGSM_MAX IL=-77 */
118 38, /* EGSM_MAX IL=-78 */
119 40, /* EGSM_MAX IL=-79 */
120 40, /* EGSM_MAX IL=-80 */
121 40, /* EGSM_MAX IL=-81 */
122 40, /* EGSM_MAX IL=-82 */
123 40, /* EGSM_MAX IL=-83 */
124 40, /* EGSM_MAX IL=-84 */
125 40, /* EGSM_MAX IL=-85 */
126 40, /* EGSM_MAX IL=-86 */
127 40, /* EGSM_MAX IL=-87 */
128 40, /* EGSM_MAX IL=-88 */
129 40, /* EGSM_MAX IL=-89 */
130 40, /* EGSM_MAX IL=-90 */
131 40, /* EGSM_MAX IL=-91 */
132 40, /* EGSM_MAX IL=-92 */
133 40, /* EGSM_MAX IL=-93 */
134 40, /* EGSM_MAX IL=-94 */
135 40, /* EGSM_MAX IL=-95 */
136 40, /* EGSM_MAX IL=-96 */
137 40, /* EGSM_MAX IL=-97 */
138 40, /* EGSM_MAX IL=-98 */
139 40, /* EGSM_MAX IL=-99 */
140 40, /* EGSM_MAX IL=-100 */
141 40, /* EGSM_MAX IL=-101 */
142 40, /* EGSM_MAX IL=-102 */
143 40, /* EGSM_MAX IL=-103 */
144 40, /* EGSM_MAX IL=-104 */
145 40, /* EGSM_MAX IL=-105 */
146 40, /* EGSM_MAX IL=-106 */
147 40, /* EGSM_MAX IL=-107 */
148 40, /* EGSM_MAX IL=-108 */
149 40, /* EGSM_MAX IL=-109 */
150 40, /* EGSM_MAX IL=-110 */
151 40, /* EGSM_MAX IL=-111 */
152 40, /* EGSM_MAX IL=-112 */
153 40, /* EGSM_MAX IL=-113 */
154 40, /* EGSM_MAX IL=-114 */
155 40, /* EGSM_MAX IL=-115 */
156 40, /* EGSM_MAX IL=-116 */
157 40, /* EGSM_MAX IL=-117 */
158 40, /* EGSM_MAX IL=-118 */
159 40, /* EGSM_MAX IL=-119 */
160 40 /* EGSM_MAX IL=-120 */
161 },
162 { // il2agc_max
163 // Note this is shared between PCN and EGSM.
164 14, /* EGSM_MAX IL=0 */
165 14, /* EGSM_MAX IL=-1 */
166 14, /* EGSM_MAX IL=-2 */
167 14, /* EGSM_MAX IL=-3 */
168 14, /* EGSM_MAX IL=-4 */
169 14, /* EGSM_MAX IL=-5 */
170 14, /* EGSM_MAX IL=-6 */
171 14, /* EGSM_MAX IL=-7 */
172 14, /* EGSM_MAX IL=-8 */
173 14, /* EGSM_MAX IL=-9 */
174 14, /* EGSM_MAX IL=-10 */
175 14, /* EGSM_MAX IL=-11 */
176 14, /* EGSM_MAX IL=-12 */
177 14, /* EGSM_MAX IL=-13 */
178 14, /* EGSM_MAX IL=-14 */
179 14, /* EGSM_MAX IL=-15 */
180 14, /* EGSM_MAX IL=-16 */
181 14, /* EGSM_MAX IL=-17 */
182 14, /* EGSM_MAX IL=-18 */
183 14, /* EGSM_MAX IL=-19 */
184 14, /* EGSM_MAX IL=-20 */
185 14, /* EGSM_MAX IL=-21 */
186 14, /* EGSM_MAX IL=-22 */
187 14, /* EGSM_MAX IL=-23 */
188 14, /* EGSM_MAX IL=-24 */
189 14, /* EGSM_MAX IL=-25 */
190 14, /* EGSM_MAX IL=-26 */
191 14, /* EGSM_MAX IL=-27 */
192 14, /* EGSM_MAX IL=-28 */
193 14, /* EGSM_MAX IL=-29 */
194 14, /* EGSM_MAX IL=-30 */
195 14, /* EGSM_MAX IL=-31 */
196 14, /* EGSM_MAX IL=-32 */
197 14, /* EGSM_MAX IL=-33 */
198 14, /* EGSM_MAX IL=-34 */
199 14, /* EGSM_MAX IL=-35 */
200 14, /* EGSM_MAX IL=-36 */
201 14, /* EGSM_MAX IL=-37 */
202 14, /* EGSM_MAX IL=-38 */
203 14, /* EGSM_MAX IL=-39 */
204 14, /* EGSM_MAX IL=-40 */
205 14, /* EGSM_MAX IL=-41 */
206 14, /* EGSM_MAX IL=-42 */
207 14, /* EGSM_MAX IL=-43 */
208 14, /* EGSM_MAX IL=-44 */
209 14, /* EGSM_MAX IL=-45 */
210 14, /* EGSM_MAX IL=-46 */
211 14, /* EGSM_MAX IL=-47 */
212 14, /* EGSM_MAX IL=-48 */
213 14, /* EGSM_MAX IL=-49 */
214 14, /* EGSM_MAX IL=-50 */
215 14, /* EGSM_MAX IL=-51 */
216 14, /* EGSM_MAX IL=-52 */
217 14, /* EGSM_MAX IL=-53 */
218 14, /* EGSM_MAX IL=-54 */
219 16, /* EGSM_MAX IL=-55 */
220 16, /* EGSM_MAX IL=-56 */
221 18, /* EGSM_MAX IL=-57 */
222 18, /* EGSM_MAX IL=-58 */
223 20, /* EGSM_MAX IL=-59 */
224 20, /* EGSM_MAX IL=-60 */
225 22, /* EGSM_MAX IL=-61 */
226 22, /* EGSM_MAX IL=-62 */
227 24, /* EGSM_MAX IL=-63 */
228 24, /* EGSM_MAX IL=-64 */
229 26, /* EGSM_MAX IL=-65 */
230 26, /* EGSM_MAX IL=-66 */
231 28, /* EGSM_MAX IL=-67 */
232 28, /* EGSM_MAX IL=-68 */
233 30, /* EGSM_MAX IL=-69 */
234 30, /* EGSM_MAX IL=-70 */
235 32, /* EGSM_MAX IL=-71 */
236 32, /* EGSM_MAX IL=-72 */
237 34, /* EGSM_MAX IL=-73 */
238 34, /* EGSM_MAX IL=-74 */
239 36, /* EGSM_MAX IL=-75 */
240 36, /* EGSM_MAX IL=-76 */
241 38, /* EGSM_MAX IL=-77 */
242 38, /* EGSM_MAX IL=-78 */
243 40, /* EGSM_MAX IL=-79 */
244 40, /* EGSM_MAX IL=-80 */
245 40, /* EGSM_MAX IL=-81 */
246 40, /* EGSM_MAX IL=-82 */
247 40, /* EGSM_MAX IL=-83 */
248 40, /* EGSM_MAX IL=-84 */
249 40, /* EGSM_MAX IL=-85 */
250 40, /* EGSM_MAX IL=-86 */
251 40, /* EGSM_MAX IL=-87 */
252 40, /* EGSM_MAX IL=-88 */
253 40, /* EGSM_MAX IL=-89 */
254 40, /* EGSM_MAX IL=-90 */
255 40, /* EGSM_MAX IL=-91 */
256 40, /* EGSM_MAX IL=-92 */
257 40, /* EGSM_MAX IL=-93 */
258 40, /* EGSM_MAX IL=-94 */
259 40, /* EGSM_MAX IL=-95 */
260 40, /* EGSM_MAX IL=-96 */
261 40, /* EGSM_MAX IL=-97 */
262 40, /* EGSM_MAX IL=-98 */
263 40, /* EGSM_MAX IL=-99 */
264 40, /* EGSM_MAX IL=-100 */
265 40, /* EGSM_MAX IL=-101 */
266 40, /* EGSM_MAX IL=-102 */
267 40, /* EGSM_MAX IL=-103 */
268 40, /* EGSM_MAX IL=-104 */
269 40, /* EGSM_MAX IL=-105 */
270 40, /* EGSM_MAX IL=-106 */
271 40, /* EGSM_MAX IL=-107 */
272 40, /* EGSM_MAX IL=-108 */
273 40, /* EGSM_MAX IL=-109 */
274 40, /* EGSM_MAX IL=-110 */
275 40, /* EGSM_MAX IL=-111 */
276 40, /* EGSM_MAX IL=-112 */
277 40, /* EGSM_MAX IL=-113 */
278 40, /* EGSM_MAX IL=-114 */
279 40, /* EGSM_MAX IL=-115 */
280 40, /* EGSM_MAX IL=-116 */
281 40, /* EGSM_MAX IL=-117 */
282 40, /* EGSM_MAX IL=-118 */
283 40, /* EGSM_MAX IL=-119 */
284 40 /* EGSM_MAX IL=-120 */
285 },
286 { // il2agc_av
287 // Note this is shared between PCN and EGSM.
288 14, /* EGSM_MAX IL=0 */
289 14, /* EGSM_MAX IL=-1 */
290 14, /* EGSM_MAX IL=-2 */
291 14, /* EGSM_MAX IL=-3 */
292 14, /* EGSM_MAX IL=-4 */
293 14, /* EGSM_MAX IL=-5 */
294 14, /* EGSM_MAX IL=-6 */
295 14, /* EGSM_MAX IL=-7 */
296 14, /* EGSM_MAX IL=-8 */
297 14, /* EGSM_MAX IL=-9 */
298 14, /* EGSM_MAX IL=-10 */
299 14, /* EGSM_MAX IL=-11 */
300 14, /* EGSM_MAX IL=-12 */
301 14, /* EGSM_MAX IL=-13 */
302 14, /* EGSM_MAX IL=-14 */
303 14, /* EGSM_MAX IL=-15 */
304 14, /* EGSM_MAX IL=-16 */
305 14, /* EGSM_MAX IL=-17 */
306 14, /* EGSM_MAX IL=-18 */
307 14, /* EGSM_MAX IL=-19 */
308 14, /* EGSM_MAX IL=-20 */
309 14, /* EGSM_MAX IL=-21 */
310 14, /* EGSM_MAX IL=-22 */
311 14, /* EGSM_MAX IL=-23 */
312 14, /* EGSM_MAX IL=-24 */
313 14, /* EGSM_MAX IL=-25 */
314 14, /* EGSM_MAX IL=-26 */
315 14, /* EGSM_MAX IL=-27 */
316 14, /* EGSM_MAX IL=-28 */
317 14, /* EGSM_MAX IL=-29 */
318 14, /* EGSM_MAX IL=-30 */
319 14, /* EGSM_MAX IL=-31 */
320 14, /* EGSM_MAX IL=-32 */
321 14, /* EGSM_MAX IL=-33 */
322 14, /* EGSM_MAX IL=-34 */
323 14, /* EGSM_MAX IL=-35 */
324 14, /* EGSM_MAX IL=-36 */
325 14, /* EGSM_MAX IL=-37 */
326 14, /* EGSM_MAX IL=-38 */
327 14, /* EGSM_MAX IL=-39 */
328 14, /* EGSM_MAX IL=-40 */
329 14, /* EGSM_MAX IL=-41 */
330 14, /* EGSM_MAX IL=-42 */
331 14, /* EGSM_MAX IL=-43 */
332 14, /* EGSM_MAX IL=-44 */
333 14, /* EGSM_MAX IL=-45 */
334 14, /* EGSM_MAX IL=-46 */
335 14, /* EGSM_MAX IL=-47 */
336 14, /* EGSM_MAX IL=-48 */
337 14, /* EGSM_MAX IL=-49 */
338 14, /* EGSM_MAX IL=-50 */
339 14, /* EGSM_MAX IL=-51 */
340 14, /* EGSM_MAX IL=-52 */
341 14, /* EGSM_MAX IL=-53 */
342 14, /* EGSM_MAX IL=-54 */
343 16, /* EGSM_MAX IL=-55 */
344 16, /* EGSM_MAX IL=-56 */
345 18, /* EGSM_MAX IL=-57 */
346 18, /* EGSM_MAX IL=-58 */
347 20, /* EGSM_MAX IL=-59 */
348 20, /* EGSM_MAX IL=-60 */
349 22, /* EGSM_MAX IL=-61 */
350 22, /* EGSM_MAX IL=-62 */
351 24, /* EGSM_MAX IL=-63 */
352 24, /* EGSM_MAX IL=-64 */
353 26, /* EGSM_MAX IL=-65 */
354 26, /* EGSM_MAX IL=-66 */
355 28, /* EGSM_MAX IL=-67 */
356 28, /* EGSM_MAX IL=-68 */
357 30, /* EGSM_MAX IL=-69 */
358 30, /* EGSM_MAX IL=-70 */
359 32, /* EGSM_MAX IL=-71 */
360 32, /* EGSM_MAX IL=-72 */
361 34, /* EGSM_MAX IL=-73 */
362 34, /* EGSM_MAX IL=-74 */
363 36, /* EGSM_MAX IL=-75 */
364 36, /* EGSM_MAX IL=-76 */
365 38, /* EGSM_MAX IL=-77 */
366 38, /* EGSM_MAX IL=-78 */
367 40, /* EGSM_MAX IL=-79 */
368 40, /* EGSM_MAX IL=-80 */
369 40, /* EGSM_MAX IL=-81 */
370 40, /* EGSM_MAX IL=-82 */
371 40, /* EGSM_MAX IL=-83 */
372 40, /* EGSM_MAX IL=-84 */
373 40, /* EGSM_MAX IL=-85 */
374 40, /* EGSM_MAX IL=-86 */
375 40, /* EGSM_MAX IL=-87 */
376 40, /* EGSM_MAX IL=-88 */
377 40, /* EGSM_MAX IL=-89 */
378 40, /* EGSM_MAX IL=-90 */
379 40, /* EGSM_MAX IL=-91 */
380 40, /* EGSM_MAX IL=-92 */
381 40, /* EGSM_MAX IL=-93 */
382 40, /* EGSM_MAX IL=-94 */
383 40, /* EGSM_MAX IL=-95 */
384 40, /* EGSM_MAX IL=-96 */
385 40, /* EGSM_MAX IL=-97 */
386 40, /* EGSM_MAX IL=-98 */
387 40, /* EGSM_MAX IL=-99 */
388 40, /* EGSM_MAX IL=-100 */
389 40, /* EGSM_MAX IL=-101 */
390 40, /* EGSM_MAX IL=-102 */
391 40, /* EGSM_MAX IL=-103 */
392 40, /* EGSM_MAX IL=-104 */
393 40, /* EGSM_MAX IL=-105 */
394 40, /* EGSM_MAX IL=-106 */
395 40, /* EGSM_MAX IL=-107 */
396 40, /* EGSM_MAX IL=-108 */
397 40, /* EGSM_MAX IL=-109 */
398 40, /* EGSM_MAX IL=-110 */
399 40, /* EGSM_MAX IL=-111 */
400 40, /* EGSM_MAX IL=-112 */
401 40, /* EGSM_MAX IL=-113 */
402 40, /* EGSM_MAX IL=-114 */
403 40, /* EGSM_MAX IL=-115 */
404 40, /* EGSM_MAX IL=-116 */
405 40, /* EGSM_MAX IL=-117 */
406 40, /* EGSM_MAX IL=-118 */
407 40, /* EGSM_MAX IL=-119 */
408 40 /* EGSM_MAX IL=-120 */
409 }
410 },
411 },
412 {
413 {0, 0}, // ramp up and down delays
414 GUARD_BITS, // number of guard bits needed for ramp up
415 PRG_TX // propagation delay PRG_TX
416 },
417 { //AFC parameters
418 EEPROM_AFC,
419 C_Psi_sta_inv, // (1/C_Psi_sta)
420 C_Psi_st, // C_Psi_sta * 0.8 F0.16
421 C_Psi_st_32, // F0.32
422 C_Psi_st_inv // (1/C_Psi_st)
423
424 #if (VCXO_ALGO==1)
425 ,C_AFC_DAC_CENTER, // VCXO startup parameter - best guess
426 C_AFC_DAC_MIN, // VCXO startup parameter - 15ppm
427 C_AFC_DAC_MAX, // VCXO startup parameter + 15ppm
428 C_AFC_SNR_THR // snr - Default threshold value
429 #endif
430 }
431 };
432
433 /* uninitialised rf struct for bands */
434 T_RF_BAND rf_band[GSM_BANDS] __attribute__ ((section ("int.bss")));
435
436 /*
437 * The const T_RF_BAND rf_{900,1800,850,1900} structures that follow
438 * are the versions that appear in the .const section of l1_cust.obj
439 * in the l1_custom_int.lib Leonardo blob, used successfully in leo2moko.
440 * As revealed with objgrep, this .const section with these uncalibrated
441 * defaults in it also appears in the moko11 binary - I'm guessing that
442 * Openmoko probably had no source for this part either, and used TI's
443 * standard Leonardo binary lib. The pretty C formatting presented here
444 * is courtesy of the calextract utility.
445 *
446 * Please note that these hard-coded "calibration" values are mostly
447 * decorative: when running on an actual GSM device (at least on GTA0x
448 * and Pirelli targets; dunno how we'll handle Compal, if at all),
449 * almost everything in these tables will be overridden with the "real"
450 * calibration data read from MokoFFS or from Pirelli's factory data
451 * block. The only bits that remain from these hard-coded structs are
452 * the Rx and Tx temperature compensation tables, and these have been
453 * found to be identical between mv100/l1_rf12.c, the bits in the Leonardo
454 * object blob (and hence in moko11 too), and the hard-coded structs
455 * found in Pirelli's fw image.
456 */
457
458 #if (ORDER2_TX_TEMP_CAL != 1)
459 #error "Hard-coded T_RF_BAND structs expect ORDER2_TX_TEMP_CAL to be 1"
460 #endif
461
462 const T_RF_BAND rf_900 = {
463 { /* Rx structure */
464 { /* T_RX_CAL_PARAMS */
465 193,
466 40,
467 40,
468 44,
469 },
470 { /* T_RF_AGC_BANDs */
471 { 10, 0},
472 { 30, 0},
473 { 51, 0},
474 { 71, 0},
475 { 90, 0},
476 { 112, 0},
477 { 124, 0},
478 { 991, 0},
479 { 992, 0},
480 { 1023, 0},
481 },
482 { /* Rx temperature compensation */
483 { -15, 0},
484 { -5, 0},
485 { 6, 0},
486 { 16, 0},
487 { 25, 0},
488 { 35, 0},
489 { 45, 0},
490 { 56, 0},
491 { 66, 0},
492 { 75, 0},
493 { 100, 0},
494 },
495 },
496 { /* Tx structure */
497 { /* levels */
498 { 465, 0, 0}, /* 0 */
499 { 465, 0, 0}, /* 1 */
500 { 465, 0, 0}, /* 2 */
501 { 465, 0, 0}, /* 3 */
502 { 465, 0, 0}, /* 4 */
503 { 465, 0, 0}, /* 5 */
504 { 387, 1, 0}, /* 6 */
505 { 324, 2, 0}, /* 7 */
506 { 260, 3, 0}, /* 8 */
507 { 210, 4, 0}, /* 9 */
508 { 170, 5, 0}, /* 10 */
509 { 138, 6, 0}, /* 11 */
510 { 113, 7, 0}, /* 12 */
511 { 92, 8, 0}, /* 13 */
512 { 76, 9, 0}, /* 14 */
513 { 62, 10, 0}, /* 15 */
514 { 51, 11, 0}, /* 16 */
515 { 42, 12, 0}, /* 17 */
516 { 34, 13, 0}, /* 18 */
517 { 27, 14, 0}, /* 19 */
518 { 27, 14, 0}, /* 20 */
519 { 27, 14, 0}, /* 21 */
520 { 27, 14, 0}, /* 22 */
521 { 27, 14, 0}, /* 23 */
522 { 27, 14, 0}, /* 24 */
523 { 27, 14, 0}, /* 25 */
524 { 27, 14, 0}, /* 26 */
525 { 27, 14, 0}, /* 27 */
526 { 27, 14, 0}, /* 28 */
527 { 27, 14, 0}, /* 29 */
528 { 27, 14, 0}, /* 30 */
529 { 27, 14, 0}, /* 31 */
530 },
531 { /* channel calibration tables */
532 { /* calibration table 0 */
533 { 40, 128},
534 { 80, 128},
535 { 124, 128},
536 { 586, 128},
537 { 661, 128},
538 { 736, 128},
539 { 885, 128},
540 { 1023, 128},
541 },
542 { /* calibration table 1 */
543 { 40, 128},
544 { 80, 128},
545 { 124, 128},
546 { 586, 128},
547 { 661, 128},
548 { 736, 128},
549 { 885, 128},
550 { 1023, 128},
551 },
552 { /* calibration table 2 */
553 { 40, 128},
554 { 80, 128},
555 { 124, 128},
556 { 586, 128},
557 { 661, 128},
558 { 736, 128},
559 { 885, 128},
560 { 1023, 128},
561 },
562 { /* calibration table 3 */
563 { 40, 128},
564 { 80, 128},
565 { 124, 128},
566 { 586, 128},
567 { 661, 128},
568 { 736, 128},
569 { 885, 128},
570 { 1023, 128},
571 },
572 },
573 { /* ramps */
574 { /* profile 0 */
575 /* ramp-up */
576 { 0, 0, 0, 0, 0, 0, 0, 0, 9, 18, 25, 31, 30, 15, 0, 0},
577 /* ramp-down */
578 { 0, 11, 31, 31, 31, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
579 },
580 { /* profile 1 */
581 /* ramp-up */
582 { 0, 0, 0, 0, 0, 0, 1, 1, 7, 16, 28, 31, 31, 13, 0, 0},
583 /* ramp-down */
584 { 0, 8, 31, 31, 31, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
585 },
586 { /* profile 2 */
587 /* ramp-up */
588 { 0, 0, 0, 0, 0, 0, 1, 1, 8, 16, 29, 31, 31, 11, 0, 0},
589 /* ramp-down */
590 { 0, 8, 28, 31, 31, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
591 },
592 { /* profile 3 */
593 /* ramp-up */
594 { 0, 0, 0, 0, 0, 0, 2, 0, 6, 18, 28, 31, 31, 12, 0, 0},
595 /* ramp-down */
596 { 0, 9, 24, 31, 31, 31, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0},
597 },
598 { /* profile 4 */
599 /* ramp-up */
600 { 0, 0, 0, 0, 0, 0, 3, 0, 5, 19, 31, 31, 31, 8, 0, 0},
601 /* ramp-down */
602 { 0, 7, 31, 31, 31, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
603 },
604 { /* profile 5 */
605 /* ramp-up */
606 { 0, 0, 0, 0, 0, 0, 2, 0, 7, 18, 31, 31, 31, 8, 0, 0},
607 /* ramp-down */
608 { 0, 7, 31, 31, 31, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
609 },
610 { /* profile 6 */
611 /* ramp-up */
612 { 0, 0, 0, 0, 0, 0, 3, 0, 5, 20, 31, 31, 31, 7, 0, 0},
613 /* ramp-down */
614 { 0, 10, 21, 31, 31, 31, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0},
615 },
616 { /* profile 7 */
617 /* ramp-up */
618 { 0, 0, 0, 0, 0, 0, 4, 0, 9, 23, 22, 31, 31, 8, 0, 0},
619 /* ramp-down */
620 { 0, 9, 24, 30, 31, 30, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0},
621 },
622 { /* profile 8 */
623 /* ramp-up */
624 { 0, 0, 0, 0, 0, 0, 5, 0, 8, 21, 24, 31, 31, 8, 0, 0},
625 /* ramp-down */
626 { 0, 8, 23, 31, 31, 31, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0},
627 },
628 { /* profile 9 */
629 /* ramp-up */
630 { 0, 0, 0, 0, 0, 5, 0, 3, 1, 27, 22, 31, 31, 8, 0, 0},
631 /* ramp-down */
632 { 0, 8, 27, 25, 26, 31, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0},
633 },
634 { /* profile 10 */
635 /* ramp-up */
636 { 0, 0, 0, 0, 5, 0, 0, 2, 7, 22, 23, 31, 31, 7, 0, 0},
637 /* ramp-down */
638 { 0, 7, 25, 30, 31, 31, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0},
639 },
640 { /* profile 11 */
641 /* ramp-up */
642 { 0, 0, 0, 0, 0, 5, 0, 4, 8, 21, 21, 31, 31, 7, 0, 0},
643 /* ramp-down */
644 { 0, 8, 21, 31, 31, 31, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0},
645 },
646 { /* profile 12 */
647 /* ramp-up */
648 { 0, 0, 0, 0, 0, 7, 0, 0, 12, 22, 25, 31, 27, 4, 0, 0},
649 /* ramp-down */
650 { 0, 9, 12, 21, 31, 31, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0},
651 },
652 { /* profile 13 */
653 /* ramp-up */
654 { 0, 0, 0, 0, 0, 0, 7, 0, 8, 15, 31, 31, 31, 5, 0, 0},
655 /* ramp-down */
656 { 0, 6, 14, 23, 31, 31, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0},
657 },
658 { /* profile 14 */
659 /* ramp-up */
660 { 0, 0, 0, 0, 0, 20, 0, 0, 8, 15, 14, 31, 31, 9, 0, 0},
661 /* ramp-down */
662 { 0, 7, 31, 31, 31, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
663 },
664 { /* profile 15 */
665 /* ramp-up */
666 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
667 /* ramp-down */
668 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
669 },
670 },
671 { /* Tx temperature compensation */
672 { -11, 0, 0, 0},
673 { 9, 0, 0, 0},
674 { 39, 0, 0, 0},
675 { 59, 0, 0, 0},
676 { 127, 0, 0, 0},
677 },
678 },
679 //IQ swap
680 SWAP_IQ_GSM,
681 };
682
683 const T_RF_BAND rf_1800 = {
684 { /* Rx structure */
685 { /* T_RX_CAL_PARAMS */
686 188,
687 40,
688 40,
689 44,
690 },
691 { /* T_RF_AGC_BANDs */
692 { 548, 0},
693 { 622, 0},
694 { 680, 0},
695 { 745, 0},
696 { 812, 0},
697 { 860, 0},
698 { 885, 0},
699 { 991, 0},
700 { 992, 0},
701 { 1023, 0},
702 },
703 { /* Rx temperature compensation */
704 { -15, 0},
705 { -5, 0},
706 { 6, 0},
707 { 16, 0},
708 { 25, 0},
709 { 35, 0},
710 { 45, 0},
711 { 56, 0},
712 { 66, 0},
713 { 75, 0},
714 { 100, 0},
715 },
716 },
717 { /* Tx structure */
718 { /* levels */
719 { 436, 0, 0}, /* 0 */
720 { 363, 1, 0}, /* 1 */
721 { 310, 2, 0}, /* 2 */
722 { 253, 3, 0}, /* 3 */
723 { 205, 4, 0}, /* 4 */
724 { 168, 5, 0}, /* 5 */
725 { 138, 6, 0}, /* 6 */
726 { 113, 7, 0}, /* 7 */
727 { 93, 8, 0}, /* 8 */
728 { 76, 9, 0}, /* 9 */
729 { 61, 10, 0}, /* 10 */
730 { 50, 11, 0}, /* 11 */
731 { 40, 12, 0}, /* 12 */
732 { 32, 13, 0}, /* 13 */
733 { 26, 14, 0}, /* 14 */
734 { 20, 15, 0}, /* 15 */
735 { 20, 15, 0}, /* 16 */
736 { 20, 15, 0}, /* 17 */
737 { 20, 15, 0}, /* 18 */
738 { 20, 15, 0}, /* 19 */
739 { 20, 15, 0}, /* 20 */
740 { 20, 15, 0}, /* 21 */
741 { 20, 15, 0}, /* 22 */
742 { 20, 15, 0}, /* 23 */
743 { 20, 15, 0}, /* 24 */
744 { 20, 15, 0}, /* 25 */
745 { 20, 15, 0}, /* 26 */
746 { 20, 15, 0}, /* 27 */
747 { 20, 15, 0}, /* 28 */
748 { 20, 0, 0}, /* 29 */
749 { 20, 0, 0}, /* 30 */
750 { 20, 0, 0}, /* 31 */
751 },
752 { /* channel calibration tables */
753 { /* calibration table 0 */
754 { 554, 128},
755 { 722, 128},
756 { 746, 128},
757 { 774, 128},
758 { 808, 128},
759 { 851, 128},
760 { 870, 128},
761 { 885, 128},
762 },
763 { /* calibration table 1 */
764 { 554, 128},
765 { 722, 128},
766 { 746, 128},
767 { 774, 128},
768 { 808, 128},
769 { 851, 128},
770 { 870, 128},
771 { 885, 128},
772 },
773 { /* calibration table 2 */
774 { 554, 128},
775 { 722, 128},
776 { 746, 128},
777 { 774, 128},
778 { 808, 128},
779 { 851, 128},
780 { 870, 128},
781 { 885, 128},
782 },
783 { /* calibration table 3 */
784 { 554, 128},
785 { 722, 128},
786 { 746, 128},
787 { 774, 128},
788 { 808, 128},
789 { 851, 128},
790 { 870, 128},
791 { 885, 128},
792 },
793 },
794 { /* ramps */
795 { /* profile 0 */
796 /* ramp-up */
797 { 0, 0, 0, 0, 0, 0, 2, 3, 5, 16, 31, 31, 31, 9, 0, 0},
798 /* ramp-down */
799 { 0, 11, 31, 31, 31, 10, 11, 3, 0, 0, 0, 0, 0, 0, 0, 0},
800 },
801 { /* profile 1 */
802 /* ramp-up */
803 { 0, 0, 0, 0, 0, 0, 2, 3, 4, 17, 30, 31, 31, 10, 0, 0},
804 /* ramp-down */
805 { 0, 10, 31, 31, 31, 13, 9, 3, 0, 0, 0, 0, 0, 0, 0, 0},
806 },
807 { /* profile 2 */
808 /* ramp-up */
809 { 0, 0, 0, 0, 0, 0, 4, 2, 2, 18, 31, 31, 31, 9, 0, 0},
810 /* ramp-down */
811 { 0, 10, 26, 31, 31, 16, 10, 4, 0, 0, 0, 0, 0, 0, 0, 0},
812 },
813 { /* profile 3 */
814 /* ramp-up */
815 { 0, 0, 0, 0, 0, 0, 3, 4, 4, 15, 31, 31, 31, 9, 0, 0},
816 /* ramp-down */
817 { 0, 9, 31, 31, 31, 13, 6, 7, 0, 0, 0, 0, 0, 0, 0, 0},
818 },
819 { /* profile 4 */
820 /* ramp-up */
821 { 0, 0, 0, 0, 0, 0, 4, 3, 7, 11, 31, 31, 31, 10, 0, 0},
822 /* ramp-down */
823 { 0, 8, 31, 31, 31, 11, 9, 7, 0, 0, 0, 0, 0, 0, 0, 0},
824 },
825 { /* profile 5 */
826 /* ramp-up */
827 { 0, 0, 0, 0, 0, 4, 3, 2, 7, 14, 25, 31, 31, 11, 0, 0},
828 /* ramp-down */
829 { 0, 14, 31, 31, 31, 9, 8, 4, 0, 0, 0, 0, 0, 0, 0, 0},
830 },
831 { /* profile 6 */
832 /* ramp-up */
833 { 0, 0, 0, 0, 0, 7, 1, 3, 10, 12, 25, 31, 31, 8, 0, 0},
834 /* ramp-down */
835 { 0, 7, 30, 31, 31, 14, 4, 6, 5, 0, 0, 0, 0, 0, 0, 0},
836 },
837 { /* profile 7 */
838 /* ramp-up */
839 { 0, 0, 0, 0, 3, 5, 0, 5, 8, 12, 26, 31, 31, 7, 0, 0},
840 /* ramp-down */
841 { 0, 7, 31, 31, 31, 15, 0, 8, 5, 0, 0, 0, 0, 0, 0, 0},
842 },
843 { /* profile 8 */
844 /* ramp-up */
845 { 0, 0, 0, 0, 0, 9, 0, 3, 10, 16, 21, 31, 31, 7, 0, 0},
846 /* ramp-down */
847 { 0, 11, 28, 31, 27, 10, 11, 0, 10, 0, 0, 0, 0, 0, 0, 0},
848 },
849 { /* profile 9 */
850 /* ramp-up */
851 { 0, 0, 0, 0, 0, 10, 0, 6, 9, 15, 22, 29, 31, 6, 0, 0},
852 /* ramp-down */
853 { 0, 9, 22, 31, 31, 12, 5, 0, 18, 0, 0, 0, 0, 0, 0, 0},
854 },
855 { /* profile 10 */
856 /* ramp-up */
857 { 0, 0, 0, 0, 14, 0, 0, 8, 6, 20, 21, 29, 24, 6, 0, 0},
858 /* ramp-down */
859 { 0, 8, 28, 29, 26, 14, 6, 0, 17, 0, 0, 0, 0, 0, 0, 0},
860 },
861 { /* profile 11 */
862 /* ramp-up */
863 { 0, 0, 0, 0, 16, 0, 3, 5, 8, 16, 31, 28, 18, 3, 0, 0},
864 /* ramp-down */
865 { 0, 6, 18, 26, 31, 16, 9, 7, 0, 15, 0, 0, 0, 0, 0, 0},
866 },
867 { /* profile 12 */
868 /* ramp-up */
869 { 0, 0, 0, 0, 19, 0, 3, 6, 8, 21, 24, 31, 14, 2, 0, 0},
870 /* ramp-down */
871 { 0, 0, 12, 31, 31, 27, 4, 0, 23, 0, 0, 0, 0, 0, 0, 0},
872 },
873 { /* profile 13 */
874 /* ramp-up */
875 { 0, 0, 0, 0, 0, 14, 14, 0, 0, 24, 31, 31, 14, 0, 0, 0},
876 /* ramp-down */
877 { 0, 0, 11, 31, 31, 22, 11, 3, 19, 0, 0, 0, 0, 0, 0, 0},
878 },
879 { /* profile 14 */
880 /* ramp-up */
881 { 0, 0, 0, 0, 0, 30, 1, 4, 8, 18, 31, 31, 5, 0, 0, 0},
882 /* ramp-down */
883 { 0, 0, 8, 31, 31, 22, 5, 0, 31, 0, 0, 0, 0, 0, 0, 0},
884 },
885 { /* profile 15 */
886 /* ramp-up */
887 { 0, 0, 0, 0, 0, 31, 13, 0, 0, 14, 31, 31, 8, 0, 0, 0},
888 /* ramp-down */
889 { 0, 0, 4, 31, 31, 25, 5, 0, 5, 26, 1, 0, 0, 0, 0, 0},
890 },
891 },
892 { /* Tx temperature compensation */
893 { -11, 0, 0, 0},
894 { 9, 0, 0, 0},
895 { 39, 0, 0, 0},
896 { 59, 0, 0, 0},
897 { 127, 0, 0, 0},
898 },
899 },
900 //IQ swap
901 SWAP_IQ_DCS
902 };
903
904 const T_RF_BAND rf_850 = {
905 { /* Rx structure */
906 { /* T_RX_CAL_PARAMS */
907 181,
908 40,
909 40,
910 44,
911 },
912 { /* T_RF_AGC_BANDs */
913 { 10, 0},
914 { 30, 0},
915 { 51, 0},
916 { 71, 0},
917 { 90, 0},
918 { 112, 0},
919 { 124, 0},
920 { 991, 0},
921 { 992, 0},
922 { 1023, 0},
923 },
924 { /* Rx temperature compensation */
925 { -15, 0},
926 { -5, 0},
927 { 6, 0},
928 { 16, 0},
929 { 25, 0},
930 { 35, 0},
931 { 45, 0},
932 { 56, 0},
933 { 66, 0},
934 { 75, 0},
935 { 100, 0},
936 },
937 },
938 { /* Tx structure */
939 { /* levels */
940 { 507, 0, 0}, /* 0 */
941 { 507, 0, 0}, /* 1 */
942 { 507, 0, 0}, /* 2 */
943 { 507, 0, 0}, /* 3 */
944 { 507, 0, 0}, /* 4 */
945 { 507, 0, 0}, /* 5 */
946 { 417, 1, 0}, /* 6 */
947 { 350, 2, 0}, /* 7 */
948 { 282, 3, 0}, /* 8 */
949 { 226, 4, 0}, /* 9 */
950 { 183, 5, 0}, /* 10 */
951 { 148, 6, 0}, /* 11 */
952 { 121, 7, 0}, /* 12 */
953 { 98, 8, 0}, /* 13 */
954 { 80, 9, 0}, /* 14 */
955 { 66, 10, 0}, /* 15 */
956 { 54, 11, 0}, /* 16 */
957 { 44, 12, 0}, /* 17 */
958 { 36, 13, 0}, /* 18 */
959 { 29, 14, 0}, /* 19 */
960 { 29, 14, 0}, /* 20 */
961 { 29, 14, 0}, /* 21 */
962 { 29, 14, 0}, /* 22 */
963 { 29, 14, 0}, /* 23 */
964 { 29, 14, 0}, /* 24 */
965 { 29, 14, 0}, /* 25 */
966 { 29, 14, 0}, /* 26 */
967 { 29, 14, 0}, /* 27 */
968 { 29, 14, 0}, /* 28 */
969 { 29, 14, 0}, /* 29 */
970 { 29, 14, 0}, /* 30 */
971 { 29, 14, 0}, /* 31 */
972 },
973 { /* channel calibration tables */
974 { /* calibration table 0 */
975 { 40, 128},
976 { 80, 128},
977 { 124, 128},
978 { 586, 128},
979 { 661, 128},
980 { 736, 128},
981 { 885, 128},
982 { 1023, 128},
983 },
984 { /* calibration table 1 */
985 #if 0
986 /*
987 * This bogon appears in the l1_custom_int.lib Leonardo blob
988 * and in Openmoko's official firmwares, from which it has
989 * propagated into the /gsm/rf/tx/calchan.850 file programmed
990 * into every produced GTA02 unit, or at least the units
991 * without the 850 MHz band. It also appears in mv100/l1_rf12.c
992 * and in the "dead" rf_850 table in Pirelli's fw binary.
993 * Whew!
994 */
995 { 554, 130},
996 { 722, 128},
997 { 746, 129},
998 { 774, 131},
999 { 808, 132},
1000 { 851, 134},
1001 { 870, 138},
1002 { 885, 140},
1003 #else
1004 /* make it the same as the others */
1005 { 40, 128},
1006 { 80, 128},
1007 { 124, 128},
1008 { 586, 128},
1009 { 661, 128},
1010 { 736, 128},
1011 { 885, 128},
1012 { 1023, 128},
1013 #endif
1014 },
1015 { /* calibration table 2 */
1016 { 40, 128},
1017 { 80, 128},
1018 { 124, 128},
1019 { 586, 128},
1020 { 661, 128},
1021 { 736, 128},
1022 { 885, 128},
1023 { 1023, 128},
1024 },
1025 { /* calibration table 3 */
1026 { 40, 128},
1027 { 80, 128},
1028 { 124, 128},
1029 { 586, 128},
1030 { 661, 128},
1031 { 736, 128},
1032 { 885, 128},
1033 { 1023, 128},
1034 },
1035 },
1036 { /* ramps */
1037 { /* profile 0 */
1038 /* ramp-up */
1039 { 0, 0, 0, 0, 0, 0, 0, 0, 9, 18, 25, 31, 30, 15, 0, 0},
1040 /* ramp-down */
1041 { 0, 11, 31, 31, 31, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1042 },
1043 { /* profile 1 */
1044 /* ramp-up */
1045 { 0, 0, 0, 0, 0, 0, 1, 1, 7, 16, 28, 31, 31, 13, 0, 0},
1046 /* ramp-down */
1047 { 0, 8, 31, 31, 31, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1048 },
1049 { /* profile 2 */
1050 /* ramp-up */
1051 { 0, 0, 0, 0, 0, 0, 1, 1, 8, 16, 29, 31, 31, 11, 0, 0},
1052 /* ramp-down */
1053 { 0, 8, 28, 31, 31, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1054 },
1055 { /* profile 3 */
1056 /* ramp-up */
1057 { 0, 0, 0, 0, 0, 0, 2, 0, 6, 18, 28, 31, 31, 12, 0, 0},
1058 /* ramp-down */
1059 { 0, 9, 24, 31, 31, 31, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1060 },
1061 { /* profile 4 */
1062 /* ramp-up */
1063 { 0, 0, 0, 0, 0, 0, 3, 0, 5, 19, 31, 31, 31, 8, 0, 0},
1064 /* ramp-down */
1065 { 0, 7, 31, 31, 31, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1066 },
1067 { /* profile 5 */
1068 /* ramp-up */
1069 { 0, 0, 0, 0, 0, 0, 2, 0, 7, 18, 31, 31, 31, 8, 0, 0},
1070 /* ramp-down */
1071 { 0, 7, 31, 31, 31, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1072 },
1073 { /* profile 6 */
1074 /* ramp-up */
1075 { 0, 0, 0, 0, 0, 0, 3, 0, 5, 20, 31, 31, 31, 7, 0, 0},
1076 /* ramp-down */
1077 { 0, 10, 21, 31, 31, 31, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1078 },
1079 { /* profile 7 */
1080 /* ramp-up */
1081 { 0, 0, 0, 0, 0, 0, 4, 0, 9, 23, 22, 31, 31, 8, 0, 0},
1082 /* ramp-down */
1083 { 0, 9, 24, 30, 31, 30, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1084 },
1085 { /* profile 8 */
1086 /* ramp-up */
1087 { 0, 0, 0, 0, 0, 0, 5, 0, 8, 21, 24, 31, 31, 8, 0, 0},
1088 /* ramp-down */
1089 { 0, 8, 23, 31, 31, 31, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1090 },
1091 { /* profile 9 */
1092 /* ramp-up */
1093 { 0, 0, 0, 0, 0, 5, 0, 3, 1, 27, 22, 31, 31, 8, 0, 0},
1094 /* ramp-down */
1095 { 0, 8, 27, 25, 26, 31, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1096 },
1097 { /* profile 10 */
1098 /* ramp-up */
1099 { 0, 0, 0, 0, 5, 0, 0, 2, 7, 22, 23, 31, 31, 7, 0, 0},
1100 /* ramp-down */
1101 { 0, 7, 25, 30, 31, 31, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1102 },
1103 { /* profile 11 */
1104 /* ramp-up */
1105 { 0, 0, 0, 0, 0, 5, 0, 4, 8, 21, 21, 31, 31, 7, 0, 0},
1106 /* ramp-down */
1107 { 0, 8, 21, 31, 31, 31, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1108 },
1109 { /* profile 12 */
1110 /* ramp-up */
1111 { 0, 0, 0, 0, 0, 7, 0, 0, 12, 22, 25, 31, 27, 4, 0, 0},
1112 /* ramp-down */
1113 { 0, 9, 12, 21, 31, 31, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1114 },
1115 { /* profile 13 */
1116 /* ramp-up */
1117 { 0, 0, 0, 0, 0, 0, 7, 0, 8, 15, 31, 31, 31, 5, 0, 0},
1118 /* ramp-down */
1119 { 0, 6, 14, 23, 31, 31, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1120 },
1121 { /* profile 14 */
1122 /* ramp-up */
1123 { 0, 0, 0, 0, 0, 20, 0, 0, 8, 15, 14, 31, 31, 9, 0, 0},
1124 /* ramp-down */
1125 { 0, 7, 31, 31, 31, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1126 },
1127 { /* profile 15 */
1128 /* ramp-up */
1129 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1130 /* ramp-down */
1131 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
1132 },
1133 },
1134 { /* Tx temperature compensation */
1135 { -11, 0, 0, 0},
1136 { 9, 0, 0, 0},
1137 { 39, 0, 0, 0},
1138 { 59, 0, 0, 0},
1139 { 127, 0, 0, 0},
1140 },
1141 },
1142 //IQ swap
1143 SWAP_IQ_GSM850,
1144 };
1145
1146 const T_RF_BAND rf_1900 = {
1147 { /* Rx structure */
1148 { /* T_RX_CAL_PARAMS */
1149 188,
1150 40,
1151 40,
1152 44,
1153 },
1154 { /* T_RF_AGC_BANDs */
1155 { 548, 0},
1156 { 622, 0},
1157 { 680, 0},
1158 { 745, 0},
1159 { 812, 0},
1160 { 860, 0},
1161 { 885, 0},
1162 { 991, 0},
1163 { 992, 0},
1164 { 1023, 0},
1165 },
1166 { /* Rx temperature compensation */
1167 { -15, 0},
1168 { -5, 0},
1169 { 6, 0},
1170 { 16, 0},
1171 { 25, 0},
1172 { 35, 0},
1173 { 45, 0},
1174 { 56, 0},
1175 { 66, 0},
1176 { 75, 0},
1177 { 100, 0},
1178 },
1179 },
1180 { /* Tx structure */
1181 { /* levels */
1182 { 429, 0, 0}, /* 0 */
1183 { 353, 1, 0}, /* 1 */
1184 { 302, 2, 0}, /* 2 */
1185 { 246, 3, 0}, /* 3 */
1186 { 200, 4, 0}, /* 4 */
1187 { 164, 5, 0}, /* 5 */
1188 { 135, 6, 0}, /* 6 */
1189 { 111, 7, 0}, /* 7 */
1190 { 91, 8, 0}, /* 8 */
1191 { 75, 9, 0}, /* 9 */
1192 { 60, 10, 0}, /* 10 */
1193 { 49, 11, 0}, /* 11 */
1194 { 40, 12, 0}, /* 12 */
1195 { 33, 13, 0}, /* 13 */
1196 { 26, 14, 0}, /* 14 */
1197 { 26, 15, 0}, /* 15 */
1198 { 26, 15, 0}, /* 16 */
1199 { 26, 15, 0}, /* 17 */
1200 { 26, 15, 0}, /* 18 */
1201 { 26, 15, 0}, /* 19 */
1202 { 26, 15, 0}, /* 20 */
1203 { 26, 15, 0}, /* 21 */
1204 { 26, 15, 0}, /* 22 */
1205 { 26, 15, 0}, /* 23 */
1206 { 26, 15, 0}, /* 24 */
1207 { 26, 15, 0}, /* 25 */
1208 { 26, 15, 0}, /* 26 */
1209 { 26, 15, 0}, /* 27 */
1210 { 26, 15, 0}, /* 28 */
1211 { 26, 0, 0}, /* 29 */
1212 { 26, 0, 0}, /* 30 */
1213 { 26, 0, 0}, /* 31 */
1214 },
1215 { /* channel calibration tables */
1216 { /* calibration table 0 */
1217 { 554, 128},
1218 { 722, 128},
1219 { 746, 128},
1220 { 774, 128},
1221 { 808, 128},
1222 { 810, 128},
1223 { 810, 128},
1224 { 810, 128},
1225 },
1226 { /* calibration table 1 */
1227 { 554, 128},
1228 { 722, 128},
1229 { 746, 128},
1230 { 774, 128},
1231 { 808, 128},
1232 { 810, 128},
1233 { 810, 128},
1234 { 810, 128},
1235 },
1236 { /* calibration table 2 */
1237 { 554, 128},
1238 { 722, 128},
1239 { 746, 128},
1240 { 774, 128},
1241 { 808, 128},
1242 { 810, 128},
1243 { 810, 128},
1244 { 810, 128},
1245 },
1246 { /* calibration table 3 */
1247 { 554, 128},
1248 { 722, 128},
1249 { 746, 128},
1250 { 774, 128},
1251 { 808, 128},
1252 { 810, 128},
1253 { 810, 128},
1254 { 810, 128},
1255 },
1256 },
1257 { /* ramps */
1258 { /* profile 0 */
1259 /* ramp-up */
1260 { 0, 0, 0, 0, 0, 0, 7, 0, 0, 16, 31, 31, 31, 12, 0, 0},
1261 /* ramp-down */
1262 { 0, 13, 31, 31, 31, 18, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0},
1263 },
1264 { /* profile 1 */
1265 /* ramp-up */
1266 { 0, 0, 0, 0, 0, 0, 2, 3, 4, 17, 30, 31, 31, 10, 0, 0},
1267 /* ramp-down */
1268 { 0, 10, 31, 31, 31, 13, 9, 3, 0, 0, 0, 0, 0, 0, 0, 0},
1269 },
1270 { /* profile 2 */
1271 /* ramp-up */
1272 { 0, 0, 0, 0, 0, 0, 4, 2, 2, 18, 31, 31, 31, 9, 0, 0},
1273 /* ramp-down */
1274 { 0, 10, 26, 31, 31, 16, 10, 4, 0, 0, 0, 0, 0, 0, 0, 0},
1275 },
1276 { /* profile 3 */
1277 /* ramp-up */
1278 { 0, 0, 0, 0, 0, 0, 3, 4, 4, 15, 31, 31, 31, 9, 0, 0},
1279 /* ramp-down */
1280 { 0, 9, 31, 31, 31, 13, 6, 7, 0, 0, 0, 0, 0, 0, 0, 0},
1281 },
1282 { /* profile 4 */
1283 /* ramp-up */
1284 { 0, 0, 0, 0, 0, 0, 4, 3, 0, 18, 31, 31, 31, 10, 0, 0},
1285 /* ramp-down */
1286 { 0, 8, 31, 31, 31, 11, 9, 7, 0, 0, 0, 0, 0, 0, 0, 0},
1287 },
1288 { /* profile 5 */
1289 /* ramp-up */
1290 { 0, 0, 0, 0, 0, 4, 3, 2, 7, 14, 25, 31, 31, 11, 0, 0},
1291 /* ramp-down */
1292 { 0, 14, 31, 31, 31, 9, 8, 4, 0, 0, 0, 0, 0, 0, 0, 0},
1293 },
1294 { /* profile 6 */
1295 /* ramp-up */
1296 { 0, 0, 0, 0, 0, 7, 1, 3, 10, 12, 25, 31, 31, 8, 0, 0},
1297 /* ramp-down */
1298 { 0, 7, 30, 31, 31, 14, 4, 6, 5, 0, 0, 0, 0, 0, 0, 0},
1299 },
1300 { /* profile 7 */
1301 /* ramp-up */
1302 { 0, 0, 0, 0, 3, 5, 0, 5, 8, 12, 26, 31, 31, 7, 0, 0},
1303 /* ramp-down */
1304 { 0, 7, 31, 31, 31, 15, 0, 8, 5, 0, 0, 0, 0, 0, 0, 0},
1305 },
1306 { /* profile 8 */
1307 /* ramp-up */
1308 { 0, 0, 0, 0, 0, 9, 0, 3, 10, 16, 21, 31, 31, 7, 0, 0},
1309 /* ramp-down */
1310 { 0, 11, 28, 31, 27, 10, 11, 0, 10, 0, 0, 0, 0, 0, 0, 0},
1311 },
1312 { /* profile 9 */
1313 /* ramp-up */
1314 { 0, 0, 0, 0, 0, 10, 0, 6, 9, 15, 22, 29, 31, 6, 0, 0},
1315 /* ramp-down */
1316 { 0, 9, 22, 31, 31, 12, 5, 0, 18, 0, 0, 0, 0, 0, 0, 0},
1317 },
1318 { /* profile 10 */
1319 /* ramp-up */
1320 { 0, 0, 0, 0, 14, 0, 0, 4, 10, 20, 21, 29, 24, 6, 0, 0},
1321 /* ramp-down */
1322 { 0, 8, 28, 29, 26, 14, 6, 0, 17, 0, 0, 0, 0, 0, 0, 0},
1323 },
1324 { /* profile 11 */
1325 /* ramp-up */
1326 { 0, 0, 0, 0, 16, 0, 3, 5, 8, 16, 31, 28, 18, 3, 0, 0},
1327 /* ramp-down */
1328 { 0, 6, 18, 26, 31, 16, 9, 7, 0, 15, 0, 0, 0, 0, 0, 0},
1329 },
1330 { /* profile 12 */
1331 /* ramp-up */
1332 { 0, 0, 0, 0, 19, 0, 3, 6, 8, 21, 24, 31, 14, 2, 0, 0},
1333 /* ramp-down */
1334 { 0, 0, 12, 31, 31, 27, 4, 0, 23, 0, 0, 0, 0, 0, 0, 0},
1335 },
1336 { /* profile 13 */
1337 /* ramp-up */
1338 { 0, 0, 0, 0, 0, 14, 14, 0, 0, 24, 31, 31, 14, 0, 0, 0},
1339 /* ramp-down */
1340 { 0, 0, 11, 31, 31, 22, 11, 3, 19, 0, 0, 0, 0, 0, 0, 0},
1341 },
1342 { /* profile 14 */
1343 /* ramp-up */
1344 { 0, 0, 0, 0, 0, 30, 1, 4, 8, 18, 31, 31, 5, 0, 0, 0},
1345 /* ramp-down */
1346 { 0, 0, 8, 31, 31, 22, 5, 0, 31, 0, 0, 0, 0, 0, 0, 0},
1347 },
1348 { /* profile 15 */
1349 /* ramp-up */
1350 { 0, 0, 0, 0, 0, 30, 1, 4, 8, 18, 31, 31, 5, 0, 0, 0},
1351 /* ramp-down */
1352 { 0, 0, 8, 31, 31, 22, 5, 0, 31, 0, 0, 0, 0, 0, 0, 0},
1353 },
1354 },
1355 { /* Tx temperature compensation */
1356 { -11, 0, 0, 0},
1357 { 9, 0, 0, 0},
1358 { 39, 0, 0, 0},
1359 { 59, 0, 0, 0},
1360 { 127, 0, 0, 0},
1361 },
1362 },
1363 //IQ swap
1364 SWAP_IQ_PCS
1365 };
1366
1367 /*
1368 * The following part is unchanged from mv100/l1_rf12.c; the initialization
1369 * values come from l1_rf12.h, and we got that header from the Leonardo
1370 * version, so we trust it to be correct. Some of the constants got
1371 * renamed between the two versions, though.
1372 */
1373
1374 /*------------------------------------------*/
1375 /* ABB Initialization words
1376 /*------------------------------------------*/
1377 #if (ANALOG == 1)
1378 UWORD16 abb[ABB_TABLE_SIZE] =
1379 {
1380 C_AFCCTLADD, // Value at reset
1381 C_VBUCTRL, // Uplink gain amp 0dB, Sidetone gain to mute
1382 C_VBDCTRL, // Downlink gain amp 0dB, Volume control 0 dB
1383 C_BBCTRL, // value at reset
1384 C_APCOFF, // value at reset
1385 C_BULIOFF, // value at reset
1386 C_BULQOFF, // value at reset
1387 C_DAI_ON_OFF, // value at reset
1388 C_AUXDAC, // value at reset
1389 C_VBCTRL, // VULSWITCH=0, VDLAUX=1, VDLEAR=1
1390 C_APCDEL1 // value at reset
1391 };
1392 #elif (ANALOG == 2)
1393 UWORD16 abb[ABB_TABLE_SIZE] =
1394 {
1395 C_AFCCTLADD,
1396 C_VBUCTRL,
1397 C_VBDCTRL,
1398 C_BBCTRL,
1399 C_BULGCAL,
1400 C_APCOFF,
1401 C_BULIOFF,
1402 C_BULQOFF,
1403 C_DAI_ON_OFF,
1404 C_AUXDAC,
1405 C_VBCTRL1,
1406 C_VBCTRL2,
1407 C_APCDEL1,
1408 C_APCDEL2
1409 };
1410
1411 #elif (ANALOG == 3)
1412 UWORD16 abb[ABB_TABLE_SIZE] =
1413 {
1414 C_AFCCTLADD,
1415 C_VBUCTRL,
1416 C_VBDCTRL,
1417 C_BBCTRL,
1418 C_BULGCAL,
1419 C_APCOFF,
1420 C_BULIOFF,
1421 C_BULQOFF,
1422 C_DAI_ON_OFF,
1423 C_AUXDAC,
1424 C_VBCTRL1,
1425 C_VBCTRL2,
1426 C_APCDEL1,
1427 C_APCDEL2,
1428 C_VBPOP,
1429 C_VAUDINITD,
1430 C_VAUDCR,
1431 C_VAUOCR,
1432 C_VAUSCR,
1433 C_VAUDPLL
1434 };
1435
1436 #endif
1437
1438 /*------------------------------------------*/
1439 /* Gain table */
1440 /* specified in the TRF6053 spec */
1441 /* 2 dB steps - LNA always ON */
1442 /*------------------------------------------*/
1443 UWORD16 AGC_TABLE[AGC_TABLE_SIZE] =
1444 {
1445 0x00, //reserved
1446 0x01, //reserved
1447 0x02, //reserved
1448 0x03, //reserved
1449 0x04, //reserved
1450 0x05, //reserved
1451 0x06, //14 dB
1452 0x07, //16
1453 0x08, //18
1454 0x09, //20
1455 0x0a, //22
1456 0x0b, //24
1457 0x0c, //26
1458 0x0d, //28
1459 0x0e, //30
1460 0x0f, //32
1461 0x10, //34
1462 0x11, //36
1463 0x12, //38
1464 0x13, //40
1465 /*
1466 0x14, //reserved
1467 0x15, //reserved
1468 0x16, //reserved
1469 0x17, //reserved
1470 0x18, //reserved
1471 0x19, //reserved
1472 0x1a, //reserved
1473 0x1b, //reserved
1474 0x1c, //reserved
1475 0x1d, //reserved
1476 0x1e, //reserved
1477 0x1f, //reserved
1478 */
1479 };
1480
1481 // structure for ADC conversion (4 Internal channel + 5 Ext channels max.)
1482 T_ADC adc __attribute__ ((section ("int.bss")));
1483
1484 // MADC calibration structure
1485 T_ADCCAL adc_cal=
1486 { // a: 0,..,8
1487 // b, 0,..,8
1488 // cal_a = 4*1750 is the Typical value 1.75 V ref voltage , divide by 4
1489 7000, 8750, 7000, 7000, 7000, 7000, 7000, 256, 7000,
1490 0, 0, 0, 0, 0, 0, 0, 0, 0
1491 };
1492
1493 #if (BOARD == 41)
1494 // table which converts ADC value into RF temperature
1495 T_TEMP temperature[TEMP_TABLE_SIZE] =
1496 {
1497 // Temperature compensation for EVARITA - S.Glock, J.Demay 04/23/2003
1498 582, -40,
1499 640, -10,
1500 698, 25,
1501 756, 60,
1502 815, 90
1503 };
1504 #else
1505 // table which converts ADC value into RF temperature
1506 T_TEMP temperature[TEMP_TABLE_SIZE] =
1507 {
1508 7, -35,
1509 7, -34,
1510 8, -33,
1511 8, -32,
1512 9, -31,
1513 9, -30,
1514 10, -29,
1515 11, -28,
1516 11, -27,
1517 12, -26,
1518 13, -25,
1519 14, -24,
1520 14, -23,
1521 15, -22,
1522 16, -21,
1523 17, -20,
1524 18, -19,
1525 19, -18,
1526 21, -17,
1527 22, -16,
1528 23, -15,
1529 24, -14,
1530 26, -13,
1531 27, -12,
1532 29, -11,
1533 30, -10,
1534 32, -9,
1535 34, -8,
1536 36, -7,
1537 37, -6,
1538 39, -5,
1539 41, -4,
1540 44, -3,
1541 46, -2,
1542 48, -1,
1543 51, 0,
1544 53, 1,
1545 56, 2,
1546 59, 3,
1547 61, 4,
1548 64, 5,
1549 68, 6,
1550 71, 7,
1551 74, 8,
1552 78, 9,
1553 81, 10,
1554 85, 11,
1555 89, 12,
1556 93, 13,
1557 97, 14,
1558 101, 15,
1559 105, 16,
1560 110, 17,
1561 115, 18,
1562 119, 19,
1563 124, 20,
1564 130, 21,
1565 135, 22,
1566 140, 23,
1567 146, 24,
1568 152, 25,
1569 158, 26,
1570 164, 27,
1571 170, 28,
1572 176, 29,
1573 183, 30,
1574 190, 31,
1575 197, 32,
1576 204, 33,
1577 211, 34,
1578 219, 35,
1579 226, 36,
1580 234, 37,
1581 242, 38,
1582 250, 39,
1583 259, 40,
1584 267, 41,
1585 276, 42,
1586 285, 43,
1587 294, 44,
1588 303, 45,
1589 312, 46,
1590 322, 47,
1591 331, 48,
1592 341, 49,
1593 351, 50,
1594 361, 51,
1595 371, 52,
1596 382, 53,
1597 392, 54,
1598 403, 55,
1599 413, 56,
1600 424, 57,
1601 435, 58,
1602 446, 59,
1603 458, 60,
1604 469, 61,
1605 480, 62,
1606 492, 63,
1607 503, 64,
1608 515, 65,
1609 527, 66,
1610 539, 67,
1611 550, 68,
1612 562, 69,
1613 574, 70,
1614 586, 71,
1615 598, 72,
1616 611, 73,
1617 623, 74,
1618 635, 75,
1619 647, 76,
1620 659, 77,
1621 671, 78,
1622 683, 79,
1623 696, 80,
1624 708, 81,
1625 720, 82,
1626 732, 83,
1627 744, 84,
1628 756, 85,
1629 768, 86,
1630 780, 87,
1631 792, 88,
1632 804, 89,
1633 816, 90,
1634 827, 91,
1635 839, 92,
1636 851, 93,
1637 862, 94,
1638 873, 95
1639 };
1640 #endif