view gsm-fw/L1/cust0/l1_rf12.c @ 992:a7b0b426f9ca

target-utils: boot ROM UART autodetection revamped The new implementation should work with both the familiar Calypso C035 boot ROM version found in our regular targets as well as the older Calypso F741979B version found on the vintage D-Sample board.
author Mychaela Falconia <falcon@ivan.Harhan.ORG>
date Wed, 30 Dec 2015 21:28:41 +0000
parents a6ff7b513bcf
children
line wrap: on
line source

/*
 * In TI's original code these l1_rfXX.c files were not compilation units
 * in themselves, but were #included into l1_cust.c instead.  I dislike
 * that approach, so I decided to make this FreeCalypso version of l1_rf12.c
 * into its own compilation unit.
 *
 * This FreeCalypso version of l1_rf12.c is based on MV100, Leonardo and
 * Openmoko versions as explained in the comments for each struct.
 */

#include "config.h"
#include "l1_confg.h"
#include "l1_const.h"
#include "l1_types.h"
#include "../../bsp/abb+spi/abb.h"
#include "l1_rf12.h"

/*
 * The following definition of T_RF rf comes from mv100/l1_rf12.c.
 * The elaborate initialization of the structure has been compared against
 * the object blob in the Leonardo version and found to match.
 */
T_RF rf =
{
  RF_RITA_10,           //RF revision
  RF_HW_BAND_SUPPORT,   // radio_band_support E-GSM/DCS + PCS

  { //RX structure
    { //AGC structure
      140,  // low_agc_noise_thr;
      110,  // high_agc_sat_thr;
        6,  // low_agc;
       34,  // high_agc;
      //IL2AGC tables
      {  // below is: il2agc_pwr[121];
        //           il2agc_max[121];
        //           il2agc_av[121];
        // il2agc_pwr
        // Note this is shared between PCN and EGSM.
    14,          /*  EGSM_MAX  IL=0 */
    14,          /*  EGSM_MAX  IL=-1 */
    14,          /*  EGSM_MAX  IL=-2 */
    14,          /*  EGSM_MAX  IL=-3 */
    14,          /*  EGSM_MAX  IL=-4 */
    14,          /*  EGSM_MAX  IL=-5 */
    14,          /*  EGSM_MAX  IL=-6 */
    14,          /*  EGSM_MAX  IL=-7 */
    14,          /*  EGSM_MAX  IL=-8 */
    14,          /*  EGSM_MAX  IL=-9 */
    14,          /*  EGSM_MAX  IL=-10 */
    14,          /*  EGSM_MAX  IL=-11 */
    14,          /*  EGSM_MAX  IL=-12 */
    14,          /*  EGSM_MAX  IL=-13 */
    14,          /*  EGSM_MAX  IL=-14 */
    14,          /*  EGSM_MAX  IL=-15 */
    14,          /*  EGSM_MAX  IL=-16 */
    14,          /*  EGSM_MAX  IL=-17 */
    14,          /*  EGSM_MAX  IL=-18 */
    14,          /*  EGSM_MAX  IL=-19 */
    14,          /*  EGSM_MAX  IL=-20 */
    14,          /*  EGSM_MAX  IL=-21 */
    14,          /*  EGSM_MAX  IL=-22 */
    14,          /*  EGSM_MAX  IL=-23 */
    14,          /*  EGSM_MAX  IL=-24 */
    14,          /*  EGSM_MAX  IL=-25 */
    14,          /*  EGSM_MAX  IL=-26 */
    14,          /*  EGSM_MAX  IL=-27 */
    14,          /*  EGSM_MAX  IL=-28 */
    14,          /*  EGSM_MAX  IL=-29 */
    14,          /*  EGSM_MAX  IL=-30 */
    14,          /*  EGSM_MAX  IL=-31 */
    14,          /*  EGSM_MAX  IL=-32 */
    14,          /*  EGSM_MAX  IL=-33 */
    14,          /*  EGSM_MAX  IL=-34 */
    14,          /*  EGSM_MAX  IL=-35 */
    14,          /*  EGSM_MAX  IL=-36 */
    14,          /*  EGSM_MAX  IL=-37 */
    14,          /*  EGSM_MAX  IL=-38 */
    14,          /*  EGSM_MAX  IL=-39 */
    14,          /*  EGSM_MAX  IL=-40 */
    14,          /*  EGSM_MAX  IL=-41 */
    14,          /*  EGSM_MAX  IL=-42 */
    14,          /*  EGSM_MAX  IL=-43 */
    14,          /*  EGSM_MAX  IL=-44 */
    14,          /*  EGSM_MAX  IL=-45 */
    14,          /*  EGSM_MAX  IL=-46 */
    14,          /*  EGSM_MAX  IL=-47 */
    14,          /*  EGSM_MAX  IL=-48 */
    14,          /*  EGSM_MAX  IL=-49 */
    14,          /*  EGSM_MAX  IL=-50 */
    14,          /*  EGSM_MAX  IL=-51 */
    14,          /*  EGSM_MAX  IL=-52 */
    14,          /*  EGSM_MAX  IL=-53 */
    14,          /*  EGSM_MAX  IL=-54 */
    16,          /*  EGSM_MAX  IL=-55 */
    16,          /*  EGSM_MAX  IL=-56 */
    18,          /*  EGSM_MAX  IL=-57 */
    18,          /*  EGSM_MAX  IL=-58 */
    20,          /*  EGSM_MAX  IL=-59 */
    20,          /*  EGSM_MAX  IL=-60 */
    22,          /*  EGSM_MAX  IL=-61 */
    22,          /*  EGSM_MAX  IL=-62 */
    24,          /*  EGSM_MAX  IL=-63 */
    24,          /*  EGSM_MAX  IL=-64 */
    26,          /*  EGSM_MAX  IL=-65 */
    26,          /*  EGSM_MAX  IL=-66 */
    28,          /*  EGSM_MAX  IL=-67 */
    28,          /*  EGSM_MAX  IL=-68 */
    30,          /*  EGSM_MAX  IL=-69 */
    30,          /*  EGSM_MAX  IL=-70 */
    32,          /*  EGSM_MAX  IL=-71 */
    32,          /*  EGSM_MAX  IL=-72 */
    34,          /*  EGSM_MAX  IL=-73 */
    34,          /*  EGSM_MAX  IL=-74 */
    36,          /*  EGSM_MAX  IL=-75 */
    36,          /*  EGSM_MAX  IL=-76 */
    38,          /*  EGSM_MAX  IL=-77 */
    38,          /*  EGSM_MAX  IL=-78 */
    40,          /*  EGSM_MAX  IL=-79 */
    40,          /*  EGSM_MAX  IL=-80 */
    40,          /*  EGSM_MAX  IL=-81 */
    40,          /*  EGSM_MAX  IL=-82 */
    40,          /*  EGSM_MAX  IL=-83 */
    40,          /*  EGSM_MAX  IL=-84 */
    40,          /*  EGSM_MAX  IL=-85 */
    40,          /*  EGSM_MAX  IL=-86 */
    40,          /*  EGSM_MAX  IL=-87 */
    40,          /*  EGSM_MAX  IL=-88 */
    40,          /*  EGSM_MAX  IL=-89 */
    40,          /*  EGSM_MAX  IL=-90 */
    40,          /*  EGSM_MAX  IL=-91 */
    40,          /*  EGSM_MAX  IL=-92 */
    40,          /*  EGSM_MAX  IL=-93 */
    40,          /*  EGSM_MAX  IL=-94 */
    40,          /*  EGSM_MAX  IL=-95 */
    40,          /*  EGSM_MAX  IL=-96 */
    40,          /*  EGSM_MAX  IL=-97 */
    40,          /*  EGSM_MAX  IL=-98 */
    40,          /*  EGSM_MAX  IL=-99 */
    40,          /*  EGSM_MAX  IL=-100 */
    40,          /*  EGSM_MAX  IL=-101 */
    40,          /*  EGSM_MAX  IL=-102 */
    40,          /*  EGSM_MAX  IL=-103 */
    40,          /*  EGSM_MAX  IL=-104 */
    40,          /*  EGSM_MAX  IL=-105 */
    40,          /*  EGSM_MAX  IL=-106 */
    40,          /*  EGSM_MAX  IL=-107 */
    40,          /*  EGSM_MAX  IL=-108 */
    40,          /*  EGSM_MAX  IL=-109 */
    40,          /*  EGSM_MAX  IL=-110 */
    40,          /*  EGSM_MAX  IL=-111 */
    40,          /*  EGSM_MAX  IL=-112 */
    40,          /*  EGSM_MAX  IL=-113 */
    40,          /*  EGSM_MAX  IL=-114 */
    40,          /*  EGSM_MAX  IL=-115 */
    40,          /*  EGSM_MAX  IL=-116 */
    40,          /*  EGSM_MAX  IL=-117 */
    40,          /*  EGSM_MAX  IL=-118 */
    40,          /*  EGSM_MAX  IL=-119 */
    40           /*  EGSM_MAX  IL=-120 */
      },
      { // il2agc_max
        // Note this is shared between PCN and EGSM.
    14,          /*  EGSM_MAX  IL=0 */
    14,          /*  EGSM_MAX  IL=-1 */
    14,          /*  EGSM_MAX  IL=-2 */
    14,          /*  EGSM_MAX  IL=-3 */
    14,          /*  EGSM_MAX  IL=-4 */
    14,          /*  EGSM_MAX  IL=-5 */
    14,          /*  EGSM_MAX  IL=-6 */
    14,          /*  EGSM_MAX  IL=-7 */
    14,          /*  EGSM_MAX  IL=-8 */
    14,          /*  EGSM_MAX  IL=-9 */
    14,          /*  EGSM_MAX  IL=-10 */
    14,          /*  EGSM_MAX  IL=-11 */
    14,          /*  EGSM_MAX  IL=-12 */
    14,          /*  EGSM_MAX  IL=-13 */
    14,          /*  EGSM_MAX  IL=-14 */
    14,          /*  EGSM_MAX  IL=-15 */
    14,          /*  EGSM_MAX  IL=-16 */
    14,          /*  EGSM_MAX  IL=-17 */
    14,          /*  EGSM_MAX  IL=-18 */
    14,          /*  EGSM_MAX  IL=-19 */
    14,          /*  EGSM_MAX  IL=-20 */
    14,          /*  EGSM_MAX  IL=-21 */
    14,          /*  EGSM_MAX  IL=-22 */
    14,          /*  EGSM_MAX  IL=-23 */
    14,          /*  EGSM_MAX  IL=-24 */
    14,          /*  EGSM_MAX  IL=-25 */
    14,          /*  EGSM_MAX  IL=-26 */
    14,          /*  EGSM_MAX  IL=-27 */
    14,          /*  EGSM_MAX  IL=-28 */
    14,          /*  EGSM_MAX  IL=-29 */
    14,          /*  EGSM_MAX  IL=-30 */
    14,          /*  EGSM_MAX  IL=-31 */
    14,          /*  EGSM_MAX  IL=-32 */
    14,          /*  EGSM_MAX  IL=-33 */
    14,          /*  EGSM_MAX  IL=-34 */
    14,          /*  EGSM_MAX  IL=-35 */
    14,          /*  EGSM_MAX  IL=-36 */
    14,          /*  EGSM_MAX  IL=-37 */
    14,          /*  EGSM_MAX  IL=-38 */
    14,          /*  EGSM_MAX  IL=-39 */
    14,          /*  EGSM_MAX  IL=-40 */
    14,          /*  EGSM_MAX  IL=-41 */
    14,          /*  EGSM_MAX  IL=-42 */
    14,          /*  EGSM_MAX  IL=-43 */
    14,          /*  EGSM_MAX  IL=-44 */
    14,          /*  EGSM_MAX  IL=-45 */
    14,          /*  EGSM_MAX  IL=-46 */
    14,          /*  EGSM_MAX  IL=-47 */
    14,          /*  EGSM_MAX  IL=-48 */
    14,          /*  EGSM_MAX  IL=-49 */
    14,          /*  EGSM_MAX  IL=-50 */
    14,          /*  EGSM_MAX  IL=-51 */
    14,          /*  EGSM_MAX  IL=-52 */
    14,          /*  EGSM_MAX  IL=-53 */
    14,          /*  EGSM_MAX  IL=-54 */
    16,          /*  EGSM_MAX  IL=-55 */
    16,          /*  EGSM_MAX  IL=-56 */
    18,          /*  EGSM_MAX  IL=-57 */
    18,          /*  EGSM_MAX  IL=-58 */
    20,          /*  EGSM_MAX  IL=-59 */
    20,          /*  EGSM_MAX  IL=-60 */
    22,          /*  EGSM_MAX  IL=-61 */
    22,          /*  EGSM_MAX  IL=-62 */
    24,          /*  EGSM_MAX  IL=-63 */
    24,          /*  EGSM_MAX  IL=-64 */
    26,          /*  EGSM_MAX  IL=-65 */
    26,          /*  EGSM_MAX  IL=-66 */
    28,          /*  EGSM_MAX  IL=-67 */
    28,          /*  EGSM_MAX  IL=-68 */
    30,          /*  EGSM_MAX  IL=-69 */
    30,          /*  EGSM_MAX  IL=-70 */
    32,          /*  EGSM_MAX  IL=-71 */
    32,          /*  EGSM_MAX  IL=-72 */
    34,          /*  EGSM_MAX  IL=-73 */
    34,          /*  EGSM_MAX  IL=-74 */
    36,          /*  EGSM_MAX  IL=-75 */
    36,          /*  EGSM_MAX  IL=-76 */
    38,          /*  EGSM_MAX  IL=-77 */
    38,          /*  EGSM_MAX  IL=-78 */
    40,          /*  EGSM_MAX  IL=-79 */
    40,          /*  EGSM_MAX  IL=-80 */
    40,          /*  EGSM_MAX  IL=-81 */
    40,          /*  EGSM_MAX  IL=-82 */
    40,          /*  EGSM_MAX  IL=-83 */
    40,          /*  EGSM_MAX  IL=-84 */
    40,          /*  EGSM_MAX  IL=-85 */
    40,          /*  EGSM_MAX  IL=-86 */
    40,          /*  EGSM_MAX  IL=-87 */
    40,          /*  EGSM_MAX  IL=-88 */
    40,          /*  EGSM_MAX  IL=-89 */
    40,          /*  EGSM_MAX  IL=-90 */
    40,          /*  EGSM_MAX  IL=-91 */
    40,          /*  EGSM_MAX  IL=-92 */
    40,          /*  EGSM_MAX  IL=-93 */
    40,          /*  EGSM_MAX  IL=-94 */
    40,          /*  EGSM_MAX  IL=-95 */
    40,          /*  EGSM_MAX  IL=-96 */
    40,          /*  EGSM_MAX  IL=-97 */
    40,          /*  EGSM_MAX  IL=-98 */
    40,          /*  EGSM_MAX  IL=-99 */
    40,          /*  EGSM_MAX  IL=-100 */
    40,          /*  EGSM_MAX  IL=-101 */
    40,          /*  EGSM_MAX  IL=-102 */
    40,          /*  EGSM_MAX  IL=-103 */
    40,          /*  EGSM_MAX  IL=-104 */
    40,          /*  EGSM_MAX  IL=-105 */
    40,          /*  EGSM_MAX  IL=-106 */
    40,          /*  EGSM_MAX  IL=-107 */
    40,          /*  EGSM_MAX  IL=-108 */
    40,          /*  EGSM_MAX  IL=-109 */
    40,          /*  EGSM_MAX  IL=-110 */
    40,          /*  EGSM_MAX  IL=-111 */
    40,          /*  EGSM_MAX  IL=-112 */
    40,          /*  EGSM_MAX  IL=-113 */
    40,          /*  EGSM_MAX  IL=-114 */
    40,          /*  EGSM_MAX  IL=-115 */
    40,          /*  EGSM_MAX  IL=-116 */
    40,          /*  EGSM_MAX  IL=-117 */
    40,          /*  EGSM_MAX  IL=-118 */
    40,          /*  EGSM_MAX  IL=-119 */
    40           /*  EGSM_MAX  IL=-120 */
        },
        { // il2agc_av
          // Note this is shared between PCN and EGSM.
    14,          /*  EGSM_MAX  IL=0 */
    14,          /*  EGSM_MAX  IL=-1 */
    14,          /*  EGSM_MAX  IL=-2 */
    14,          /*  EGSM_MAX  IL=-3 */
    14,          /*  EGSM_MAX  IL=-4 */
    14,          /*  EGSM_MAX  IL=-5 */
    14,          /*  EGSM_MAX  IL=-6 */
    14,          /*  EGSM_MAX  IL=-7 */
    14,          /*  EGSM_MAX  IL=-8 */
    14,          /*  EGSM_MAX  IL=-9 */
    14,          /*  EGSM_MAX  IL=-10 */
    14,          /*  EGSM_MAX  IL=-11 */
    14,          /*  EGSM_MAX  IL=-12 */
    14,          /*  EGSM_MAX  IL=-13 */
    14,          /*  EGSM_MAX  IL=-14 */
    14,          /*  EGSM_MAX  IL=-15 */
    14,          /*  EGSM_MAX  IL=-16 */
    14,          /*  EGSM_MAX  IL=-17 */
    14,          /*  EGSM_MAX  IL=-18 */
    14,          /*  EGSM_MAX  IL=-19 */
    14,          /*  EGSM_MAX  IL=-20 */
    14,          /*  EGSM_MAX  IL=-21 */
    14,          /*  EGSM_MAX  IL=-22 */
    14,          /*  EGSM_MAX  IL=-23 */
    14,          /*  EGSM_MAX  IL=-24 */
    14,          /*  EGSM_MAX  IL=-25 */
    14,          /*  EGSM_MAX  IL=-26 */
    14,          /*  EGSM_MAX  IL=-27 */
    14,          /*  EGSM_MAX  IL=-28 */
    14,          /*  EGSM_MAX  IL=-29 */
    14,          /*  EGSM_MAX  IL=-30 */
    14,          /*  EGSM_MAX  IL=-31 */
    14,          /*  EGSM_MAX  IL=-32 */
    14,          /*  EGSM_MAX  IL=-33 */
    14,          /*  EGSM_MAX  IL=-34 */
    14,          /*  EGSM_MAX  IL=-35 */
    14,          /*  EGSM_MAX  IL=-36 */
    14,          /*  EGSM_MAX  IL=-37 */
    14,          /*  EGSM_MAX  IL=-38 */
    14,          /*  EGSM_MAX  IL=-39 */
    14,          /*  EGSM_MAX  IL=-40 */
    14,          /*  EGSM_MAX  IL=-41 */
    14,          /*  EGSM_MAX  IL=-42 */
    14,          /*  EGSM_MAX  IL=-43 */
    14,          /*  EGSM_MAX  IL=-44 */
    14,          /*  EGSM_MAX  IL=-45 */
    14,          /*  EGSM_MAX  IL=-46 */
    14,          /*  EGSM_MAX  IL=-47 */
    14,          /*  EGSM_MAX  IL=-48 */
    14,          /*  EGSM_MAX  IL=-49 */
    14,          /*  EGSM_MAX  IL=-50 */
    14,          /*  EGSM_MAX  IL=-51 */
    14,          /*  EGSM_MAX  IL=-52 */
    14,          /*  EGSM_MAX  IL=-53 */
    14,          /*  EGSM_MAX  IL=-54 */
    16,          /*  EGSM_MAX  IL=-55 */
    16,          /*  EGSM_MAX  IL=-56 */
    18,          /*  EGSM_MAX  IL=-57 */
    18,          /*  EGSM_MAX  IL=-58 */
    20,          /*  EGSM_MAX  IL=-59 */
    20,          /*  EGSM_MAX  IL=-60 */
    22,          /*  EGSM_MAX  IL=-61 */
    22,          /*  EGSM_MAX  IL=-62 */
    24,          /*  EGSM_MAX  IL=-63 */
    24,          /*  EGSM_MAX  IL=-64 */
    26,          /*  EGSM_MAX  IL=-65 */
    26,          /*  EGSM_MAX  IL=-66 */
    28,          /*  EGSM_MAX  IL=-67 */
    28,          /*  EGSM_MAX  IL=-68 */
    30,          /*  EGSM_MAX  IL=-69 */
    30,          /*  EGSM_MAX  IL=-70 */
    32,          /*  EGSM_MAX  IL=-71 */
    32,          /*  EGSM_MAX  IL=-72 */
    34,          /*  EGSM_MAX  IL=-73 */
    34,          /*  EGSM_MAX  IL=-74 */
    36,          /*  EGSM_MAX  IL=-75 */
    36,          /*  EGSM_MAX  IL=-76 */
    38,          /*  EGSM_MAX  IL=-77 */
    38,          /*  EGSM_MAX  IL=-78 */
    40,          /*  EGSM_MAX  IL=-79 */
    40,          /*  EGSM_MAX  IL=-80 */
    40,          /*  EGSM_MAX  IL=-81 */
    40,          /*  EGSM_MAX  IL=-82 */
    40,          /*  EGSM_MAX  IL=-83 */
    40,          /*  EGSM_MAX  IL=-84 */
    40,          /*  EGSM_MAX  IL=-85 */
    40,          /*  EGSM_MAX  IL=-86 */
    40,          /*  EGSM_MAX  IL=-87 */
    40,          /*  EGSM_MAX  IL=-88 */
    40,          /*  EGSM_MAX  IL=-89 */
    40,          /*  EGSM_MAX  IL=-90 */
    40,          /*  EGSM_MAX  IL=-91 */
    40,          /*  EGSM_MAX  IL=-92 */
    40,          /*  EGSM_MAX  IL=-93 */
    40,          /*  EGSM_MAX  IL=-94 */
    40,          /*  EGSM_MAX  IL=-95 */
    40,          /*  EGSM_MAX  IL=-96 */
    40,          /*  EGSM_MAX  IL=-97 */
    40,          /*  EGSM_MAX  IL=-98 */
    40,          /*  EGSM_MAX  IL=-99 */
    40,          /*  EGSM_MAX  IL=-100 */
    40,          /*  EGSM_MAX  IL=-101 */
    40,          /*  EGSM_MAX  IL=-102 */
    40,          /*  EGSM_MAX  IL=-103 */
    40,          /*  EGSM_MAX  IL=-104 */
    40,          /*  EGSM_MAX  IL=-105 */
    40,          /*  EGSM_MAX  IL=-106 */
    40,          /*  EGSM_MAX  IL=-107 */
    40,          /*  EGSM_MAX  IL=-108 */
    40,          /*  EGSM_MAX  IL=-109 */
    40,          /*  EGSM_MAX  IL=-110 */
    40,          /*  EGSM_MAX  IL=-111 */
    40,          /*  EGSM_MAX  IL=-112 */
    40,          /*  EGSM_MAX  IL=-113 */
    40,          /*  EGSM_MAX  IL=-114 */
    40,          /*  EGSM_MAX  IL=-115 */
    40,          /*  EGSM_MAX  IL=-116 */
    40,          /*  EGSM_MAX  IL=-117 */
    40,          /*  EGSM_MAX  IL=-118 */
    40,          /*  EGSM_MAX  IL=-119 */
    40           /*  EGSM_MAX  IL=-120 */
      }
    },
  },
  {
    {0, 0},     // ramp up and down delays
    GUARD_BITS, // number of guard bits needed for ramp up
    PRG_TX      // propagation delay PRG_TX
  },
  { //AFC parameters
    EEPROM_AFC,
    C_Psi_sta_inv,     // (1/C_Psi_sta)
    C_Psi_st,          // C_Psi_sta * 0.8 F0.16
    C_Psi_st_32,       // F0.32
    C_Psi_st_inv       // (1/C_Psi_st)

#if (VCXO_ALGO==1)
     ,C_AFC_DAC_CENTER,      // VCXO startup parameter - best guess
      C_AFC_DAC_MIN,         // VCXO startup parameter - 15ppm
      C_AFC_DAC_MAX,         // VCXO startup parameter + 15ppm
      C_AFC_SNR_THR         // snr - Default threshold value
#endif
  }
};

/* uninitialised rf struct for bands */
T_RF_BAND rf_band[GSM_BANDS] __attribute__ ((section ("int.bss")));

/*
 * The const T_RF_BAND rf_{900,1800,850,1900} structures that follow
 * are the versions that appear in the .const section of l1_cust.obj
 * in the l1_custom_int.lib Leonardo blob, used successfully in leo2moko.
 * As revealed with objgrep, this .const section with these uncalibrated
 * defaults in it also appears in the moko11 binary - I'm guessing that
 * Openmoko probably had no source for this part either, and used TI's
 * standard Leonardo binary lib.  The pretty C formatting presented here
 * is courtesy of the calextract utility.
 *
 * Please note that these hard-coded "calibration" values are mostly
 * decorative: when running on an actual GSM device (at least on GTA0x
 * and Pirelli targets; dunno how we'll handle Compal, if at all),
 * almost everything in these tables will be overridden with the "real"
 * calibration data read from MokoFFS or from Pirelli's factory data
 * block.  The only bits that remain from these hard-coded structs are
 * the Rx and Tx temperature compensation tables, and these have been
 * found to be identical between mv100/l1_rf12.c, the bits in the Leonardo
 * object blob (and hence in moko11 too), and the hard-coded structs
 * found in Pirelli's fw image.
 */

#if (ORDER2_TX_TEMP_CAL != 1)
#error "Hard-coded T_RF_BAND structs expect ORDER2_TX_TEMP_CAL to be 1"
#endif

const T_RF_BAND rf_900 = {
  { /* Rx structure */
    { /* T_RX_CAL_PARAMS */
       193,
        40,
        40,
        44,
    },
    { /* T_RF_AGC_BANDs */
      {   10,     0},
      {   30,     0},
      {   51,     0},
      {   71,     0},
      {   90,     0},
      {  112,     0},
      {  124,     0},
      {  991,     0},
      {  992,     0},
      { 1023,     0},
    },
    { /* Rx temperature compensation */
      {   -15,     0},
      {    -5,     0},
      {     6,     0},
      {    16,     0},
      {    25,     0},
      {    35,     0},
      {    45,     0},
      {    56,     0},
      {    66,     0},
      {    75,     0},
      {   100,     0},
    },
  },
  { /* Tx structure */
    { /* levels */
      {  465,  0,  0}, /* 0 */
      {  465,  0,  0}, /* 1 */
      {  465,  0,  0}, /* 2 */
      {  465,  0,  0}, /* 3 */
      {  465,  0,  0}, /* 4 */
      {  465,  0,  0}, /* 5 */
      {  387,  1,  0}, /* 6 */
      {  324,  2,  0}, /* 7 */
      {  260,  3,  0}, /* 8 */
      {  210,  4,  0}, /* 9 */
      {  170,  5,  0}, /* 10 */
      {  138,  6,  0}, /* 11 */
      {  113,  7,  0}, /* 12 */
      {   92,  8,  0}, /* 13 */
      {   76,  9,  0}, /* 14 */
      {   62, 10,  0}, /* 15 */
      {   51, 11,  0}, /* 16 */
      {   42, 12,  0}, /* 17 */
      {   34, 13,  0}, /* 18 */
      {   27, 14,  0}, /* 19 */
      {   27, 14,  0}, /* 20 */
      {   27, 14,  0}, /* 21 */
      {   27, 14,  0}, /* 22 */
      {   27, 14,  0}, /* 23 */
      {   27, 14,  0}, /* 24 */
      {   27, 14,  0}, /* 25 */
      {   27, 14,  0}, /* 26 */
      {   27, 14,  0}, /* 27 */
      {   27, 14,  0}, /* 28 */
      {   27, 14,  0}, /* 29 */
      {   27, 14,  0}, /* 30 */
      {   27, 14,  0}, /* 31 */
    },
    { /* channel calibration tables */
      { /* calibration table 0 */
	{   40,   128},
	{   80,   128},
	{  124,   128},
	{  586,   128},
	{  661,   128},
	{  736,   128},
	{  885,   128},
	{ 1023,   128},
      },
      { /* calibration table 1 */
	{   40,   128},
	{   80,   128},
	{  124,   128},
	{  586,   128},
	{  661,   128},
	{  736,   128},
	{  885,   128},
	{ 1023,   128},
      },
      { /* calibration table 2 */
	{   40,   128},
	{   80,   128},
	{  124,   128},
	{  586,   128},
	{  661,   128},
	{  736,   128},
	{  885,   128},
	{ 1023,   128},
      },
      { /* calibration table 3 */
	{   40,   128},
	{   80,   128},
	{  124,   128},
	{  586,   128},
	{  661,   128},
	{  736,   128},
	{  885,   128},
	{ 1023,   128},
      },
    },
    { /* ramps */
      { /* profile 0 */
	/* ramp-up */
	{  0,  0,  0,  0,  0,  0,  0,  0,  9, 18, 25, 31, 30, 15,  0,  0},
	/* ramp-down */
	{  0, 11, 31, 31, 31, 24,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0},
      },
      { /* profile 1 */
	/* ramp-up */
	{  0,  0,  0,  0,  0,  0,  1,  1,  7, 16, 28, 31, 31, 13,  0,  0},
	/* ramp-down */
	{  0,  8, 31, 31, 31, 27,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0},
      },
      { /* profile 2 */
	/* ramp-up */
	{  0,  0,  0,  0,  0,  0,  1,  1,  8, 16, 29, 31, 31, 11,  0,  0},
	/* ramp-down */
	{  0,  8, 28, 31, 31, 30,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0},
      },
      { /* profile 3 */
	/* ramp-up */
	{  0,  0,  0,  0,  0,  0,  2,  0,  6, 18, 28, 31, 31, 12,  0,  0},
	/* ramp-down */
	{  0,  9, 24, 31, 31, 31,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0},
      },
      { /* profile 4 */
	/* ramp-up */
	{  0,  0,  0,  0,  0,  0,  3,  0,  5, 19, 31, 31, 31,  8,  0,  0},
	/* ramp-down */
	{  0,  7, 31, 31, 31, 28,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0},
      },
      { /* profile 5 */
	/* ramp-up */
	{  0,  0,  0,  0,  0,  0,  2,  0,  7, 18, 31, 31, 31,  8,  0,  0},
	/* ramp-down */
	{  0,  7, 31, 31, 31, 28,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0},
      },
      { /* profile 6 */
	/* ramp-up */
	{  0,  0,  0,  0,  0,  0,  3,  0,  5, 20, 31, 31, 31,  7,  0,  0},
	/* ramp-down */
	{  0, 10, 21, 31, 31, 31,  4,  0,  0,  0,  0,  0,  0,  0,  0,  0},
      },
      { /* profile 7 */
	/* ramp-up */
	{  0,  0,  0,  0,  0,  0,  4,  0,  9, 23, 22, 31, 31,  8,  0,  0},
	/* ramp-down */
	{  0,  9, 24, 30, 31, 30,  4,  0,  0,  0,  0,  0,  0,  0,  0,  0},
      },
      { /* profile 8 */
	/* ramp-up */
	{  0,  0,  0,  0,  0,  0,  5,  0,  8, 21, 24, 31, 31,  8,  0,  0},
	/* ramp-down */
	{  0,  8, 23, 31, 31, 31,  4,  0,  0,  0,  0,  0,  0,  0,  0,  0},
      },
      { /* profile 9 */
	/* ramp-up */
	{  0,  0,  0,  0,  0,  5,  0,  3,  1, 27, 22, 31, 31,  8,  0,  0},
	/* ramp-down */
	{  0,  8, 27, 25, 26, 31, 11,  0,  0,  0,  0,  0,  0,  0,  0,  0},
      },
      { /* profile 10 */
	/* ramp-up */
	{  0,  0,  0,  0,  5,  0,  0,  2,  7, 22, 23, 31, 31,  7,  0,  0},
	/* ramp-down */
	{  0,  7, 25, 30, 31, 31,  4,  0,  0,  0,  0,  0,  0,  0,  0,  0},
      },
      { /* profile 11 */
	/* ramp-up */
	{  0,  0,  0,  0,  0,  5,  0,  4,  8, 21, 21, 31, 31,  7,  0,  0},
	/* ramp-down */
	{  0,  8, 21, 31, 31, 31,  6,  0,  0,  0,  0,  0,  0,  0,  0,  0},
      },
      { /* profile 12 */
	/* ramp-up */
	{  0,  0,  0,  0,  0,  7,  0,  0, 12, 22, 25, 31, 27,  4,  0,  0},
	/* ramp-down */
	{  0,  9, 12, 21, 31, 31, 24,  0,  0,  0,  0,  0,  0,  0,  0,  0},
      },
      { /* profile 13 */
	/* ramp-up */
	{  0,  0,  0,  0,  0,  0,  7,  0,  8, 15, 31, 31, 31,  5,  0,  0},
	/* ramp-down */
	{  0,  6, 14, 23, 31, 31, 23,  0,  0,  0,  0,  0,  0,  0,  0,  0},
      },
      { /* profile 14 */
	/* ramp-up */
	{  0,  0,  0,  0,  0, 20,  0,  0,  8, 15, 14, 31, 31,  9,  0,  0},
	/* ramp-down */
	{  0,  7, 31, 31, 31, 28,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0},
      },
      { /* profile 15 */
	/* ramp-up */
	{  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0},
	/* ramp-down */
	{  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0},
      },
    },
    { /* Tx temperature compensation */
      {   -11,     0,     0,     0},
      {     9,     0,     0,     0},
      {    39,     0,     0,     0},
      {    59,     0,     0,     0},
      {   127,     0,     0,     0},
    },
  },
  //IQ swap
  SWAP_IQ_GSM,
};

const T_RF_BAND rf_1800 = {
  { /* Rx structure */
    { /* T_RX_CAL_PARAMS */
       188,
        40,
        40,
        44,
    },
    { /* T_RF_AGC_BANDs */
      {  548,     0},
      {  622,     0},
      {  680,     0},
      {  745,     0},
      {  812,     0},
      {  860,     0},
      {  885,     0},
      {  991,     0},
      {  992,     0},
      { 1023,     0},
    },
    { /* Rx temperature compensation */
      {   -15,     0},
      {    -5,     0},
      {     6,     0},
      {    16,     0},
      {    25,     0},
      {    35,     0},
      {    45,     0},
      {    56,     0},
      {    66,     0},
      {    75,     0},
      {   100,     0},
    },
  },
  { /* Tx structure */
    { /* levels */
      {  436,  0,  0}, /* 0 */
      {  363,  1,  0}, /* 1 */
      {  310,  2,  0}, /* 2 */
      {  253,  3,  0}, /* 3 */
      {  205,  4,  0}, /* 4 */
      {  168,  5,  0}, /* 5 */
      {  138,  6,  0}, /* 6 */
      {  113,  7,  0}, /* 7 */
      {   93,  8,  0}, /* 8 */
      {   76,  9,  0}, /* 9 */
      {   61, 10,  0}, /* 10 */
      {   50, 11,  0}, /* 11 */
      {   40, 12,  0}, /* 12 */
      {   32, 13,  0}, /* 13 */
      {   26, 14,  0}, /* 14 */
      {   20, 15,  0}, /* 15 */
      {   20, 15,  0}, /* 16 */
      {   20, 15,  0}, /* 17 */
      {   20, 15,  0}, /* 18 */
      {   20, 15,  0}, /* 19 */
      {   20, 15,  0}, /* 20 */
      {   20, 15,  0}, /* 21 */
      {   20, 15,  0}, /* 22 */
      {   20, 15,  0}, /* 23 */
      {   20, 15,  0}, /* 24 */
      {   20, 15,  0}, /* 25 */
      {   20, 15,  0}, /* 26 */
      {   20, 15,  0}, /* 27 */
      {   20, 15,  0}, /* 28 */
      {   20,  0,  0}, /* 29 */
      {   20,  0,  0}, /* 30 */
      {   20,  0,  0}, /* 31 */
    },
    { /* channel calibration tables */
      { /* calibration table 0 */
	{  554,   128},
	{  722,   128},
	{  746,   128},
	{  774,   128},
	{  808,   128},
	{  851,   128},
	{  870,   128},
	{  885,   128},
      },
      { /* calibration table 1 */
	{  554,   128},
	{  722,   128},
	{  746,   128},
	{  774,   128},
	{  808,   128},
	{  851,   128},
	{  870,   128},
	{  885,   128},
      },
      { /* calibration table 2 */
	{  554,   128},
	{  722,   128},
	{  746,   128},
	{  774,   128},
	{  808,   128},
	{  851,   128},
	{  870,   128},
	{  885,   128},
      },
      { /* calibration table 3 */
	{  554,   128},
	{  722,   128},
	{  746,   128},
	{  774,   128},
	{  808,   128},
	{  851,   128},
	{  870,   128},
	{  885,   128},
      },
    },
    { /* ramps */
      { /* profile 0 */
	/* ramp-up */
	{  0,  0,  0,  0,  0,  0,  2,  3,  5, 16, 31, 31, 31,  9,  0,  0},
	/* ramp-down */
	{  0, 11, 31, 31, 31, 10, 11,  3,  0,  0,  0,  0,  0,  0,  0,  0},
      },
      { /* profile 1 */
	/* ramp-up */
	{  0,  0,  0,  0,  0,  0,  2,  3,  4, 17, 30, 31, 31, 10,  0,  0},
	/* ramp-down */
	{  0, 10, 31, 31, 31, 13,  9,  3,  0,  0,  0,  0,  0,  0,  0,  0},
      },
      { /* profile 2 */
	/* ramp-up */
	{  0,  0,  0,  0,  0,  0,  4,  2,  2, 18, 31, 31, 31,  9,  0,  0},
	/* ramp-down */
	{  0, 10, 26, 31, 31, 16, 10,  4,  0,  0,  0,  0,  0,  0,  0,  0},
      },
      { /* profile 3 */
	/* ramp-up */
	{  0,  0,  0,  0,  0,  0,  3,  4,  4, 15, 31, 31, 31,  9,  0,  0},
	/* ramp-down */
	{  0,  9, 31, 31, 31, 13,  6,  7,  0,  0,  0,  0,  0,  0,  0,  0},
      },
      { /* profile 4 */
	/* ramp-up */
	{  0,  0,  0,  0,  0,  0,  4,  3,  7, 11, 31, 31, 31, 10,  0,  0},
	/* ramp-down */
	{  0,  8, 31, 31, 31, 11,  9,  7,  0,  0,  0,  0,  0,  0,  0,  0},
      },
      { /* profile 5 */
	/* ramp-up */
	{  0,  0,  0,  0,  0,  4,  3,  2,  7, 14, 25, 31, 31, 11,  0,  0},
	/* ramp-down */
	{  0, 14, 31, 31, 31,  9,  8,  4,  0,  0,  0,  0,  0,  0,  0,  0},
      },
      { /* profile 6 */
	/* ramp-up */
	{  0,  0,  0,  0,  0,  7,  1,  3, 10, 12, 25, 31, 31,  8,  0,  0},
	/* ramp-down */
	{  0,  7, 30, 31, 31, 14,  4,  6,  5,  0,  0,  0,  0,  0,  0,  0},
      },
      { /* profile 7 */
	/* ramp-up */
	{  0,  0,  0,  0,  3,  5,  0,  5,  8, 12, 26, 31, 31,  7,  0,  0},
	/* ramp-down */
	{  0,  7, 31, 31, 31, 15,  0,  8,  5,  0,  0,  0,  0,  0,  0,  0},
      },
      { /* profile 8 */
	/* ramp-up */
	{  0,  0,  0,  0,  0,  9,  0,  3, 10, 16, 21, 31, 31,  7,  0,  0},
	/* ramp-down */
	{  0, 11, 28, 31, 27, 10, 11,  0, 10,  0,  0,  0,  0,  0,  0,  0},
      },
      { /* profile 9 */
	/* ramp-up */
	{  0,  0,  0,  0,  0, 10,  0,  6,  9, 15, 22, 29, 31,  6,  0,  0},
	/* ramp-down */
	{  0,  9, 22, 31, 31, 12,  5,  0, 18,  0,  0,  0,  0,  0,  0,  0},
      },
      { /* profile 10 */
	/* ramp-up */
	{  0,  0,  0,  0, 14,  0,  0,  8,  6, 20, 21, 29, 24,  6,  0,  0},
	/* ramp-down */
	{  0,  8, 28, 29, 26, 14,  6,  0, 17,  0,  0,  0,  0,  0,  0,  0},
      },
      { /* profile 11 */
	/* ramp-up */
	{  0,  0,  0,  0, 16,  0,  3,  5,  8, 16, 31, 28, 18,  3,  0,  0},
	/* ramp-down */
	{  0,  6, 18, 26, 31, 16,  9,  7,  0, 15,  0,  0,  0,  0,  0,  0},
      },
      { /* profile 12 */
	/* ramp-up */
	{  0,  0,  0,  0, 19,  0,  3,  6,  8, 21, 24, 31, 14,  2,  0,  0},
	/* ramp-down */
	{  0,  0, 12, 31, 31, 27,  4,  0, 23,  0,  0,  0,  0,  0,  0,  0},
      },
      { /* profile 13 */
	/* ramp-up */
	{  0,  0,  0,  0,  0, 14, 14,  0,  0, 24, 31, 31, 14,  0,  0,  0},
	/* ramp-down */
	{  0,  0, 11, 31, 31, 22, 11,  3, 19,  0,  0,  0,  0,  0,  0,  0},
      },
      { /* profile 14 */
	/* ramp-up */
	{  0,  0,  0,  0,  0, 30,  1,  4,  8, 18, 31, 31,  5,  0,  0,  0},
	/* ramp-down */
	{  0,  0,  8, 31, 31, 22,  5,  0, 31,  0,  0,  0,  0,  0,  0,  0},
      },
      { /* profile 15 */
	/* ramp-up */
	{  0,  0,  0,  0,  0, 31, 13,  0,  0, 14, 31, 31,  8,  0,  0,  0},
	/* ramp-down */
	{  0,  0,  4, 31, 31, 25,  5,  0,  5, 26,  1,  0,  0,  0,  0,  0},
      },
    },
    { /* Tx temperature compensation */
      {   -11,     0,     0,     0},
      {     9,     0,     0,     0},
      {    39,     0,     0,     0},
      {    59,     0,     0,     0},
      {   127,     0,     0,     0},
    },
  },
  //IQ swap
  SWAP_IQ_DCS
};

const T_RF_BAND rf_850 = {
  { /* Rx structure */
    { /* T_RX_CAL_PARAMS */
       181,
        40,
        40,
        44,
    },
    { /* T_RF_AGC_BANDs */
      {   10,     0},
      {   30,     0},
      {   51,     0},
      {   71,     0},
      {   90,     0},
      {  112,     0},
      {  124,     0},
      {  991,     0},
      {  992,     0},
      { 1023,     0},
    },
    { /* Rx temperature compensation */
      {   -15,     0},
      {    -5,     0},
      {     6,     0},
      {    16,     0},
      {    25,     0},
      {    35,     0},
      {    45,     0},
      {    56,     0},
      {    66,     0},
      {    75,     0},
      {   100,     0},
    },
  },
  { /* Tx structure */
    { /* levels */
      {  507,  0,  0}, /* 0 */
      {  507,  0,  0}, /* 1 */
      {  507,  0,  0}, /* 2 */
      {  507,  0,  0}, /* 3 */
      {  507,  0,  0}, /* 4 */
      {  507,  0,  0}, /* 5 */
      {  417,  1,  0}, /* 6 */
      {  350,  2,  0}, /* 7 */
      {  282,  3,  0}, /* 8 */
      {  226,  4,  0}, /* 9 */
      {  183,  5,  0}, /* 10 */
      {  148,  6,  0}, /* 11 */
      {  121,  7,  0}, /* 12 */
      {   98,  8,  0}, /* 13 */
      {   80,  9,  0}, /* 14 */
      {   66, 10,  0}, /* 15 */
      {   54, 11,  0}, /* 16 */
      {   44, 12,  0}, /* 17 */
      {   36, 13,  0}, /* 18 */
      {   29, 14,  0}, /* 19 */
      {   29, 14,  0}, /* 20 */
      {   29, 14,  0}, /* 21 */
      {   29, 14,  0}, /* 22 */
      {   29, 14,  0}, /* 23 */
      {   29, 14,  0}, /* 24 */
      {   29, 14,  0}, /* 25 */
      {   29, 14,  0}, /* 26 */
      {   29, 14,  0}, /* 27 */
      {   29, 14,  0}, /* 28 */
      {   29, 14,  0}, /* 29 */
      {   29, 14,  0}, /* 30 */
      {   29, 14,  0}, /* 31 */
    },
    { /* channel calibration tables */
      { /* calibration table 0 */
	{   40,   128},
	{   80,   128},
	{  124,   128},
	{  586,   128},
	{  661,   128},
	{  736,   128},
	{  885,   128},
	{ 1023,   128},
      },
      { /* calibration table 1 */
#if 0
	/*
	 * This bogon appears in the l1_custom_int.lib Leonardo blob
	 * and in Openmoko's official firmwares, from which it has
	 * propagated into the /gsm/rf/tx/calchan.850 file programmed
	 * into every produced GTA02 unit, or at least the units
	 * without the 850 MHz band.  It also appears in mv100/l1_rf12.c
	 * and in the "dead" rf_850 table in Pirelli's fw binary.
	 * Whew!
	 */
	{  554,   130},
	{  722,   128},
	{  746,   129},
	{  774,   131},
	{  808,   132},
	{  851,   134},
	{  870,   138},
	{  885,   140},
#else
	/* make it the same as the others */
	{   40,   128},
	{   80,   128},
	{  124,   128},
	{  586,   128},
	{  661,   128},
	{  736,   128},
	{  885,   128},
	{ 1023,   128},
#endif
      },
      { /* calibration table 2 */
	{   40,   128},
	{   80,   128},
	{  124,   128},
	{  586,   128},
	{  661,   128},
	{  736,   128},
	{  885,   128},
	{ 1023,   128},
      },
      { /* calibration table 3 */
	{   40,   128},
	{   80,   128},
	{  124,   128},
	{  586,   128},
	{  661,   128},
	{  736,   128},
	{  885,   128},
	{ 1023,   128},
      },
    },
    { /* ramps */
      { /* profile 0 */
	/* ramp-up */
	{  0,  0,  0,  0,  0,  0,  0,  0,  9, 18, 25, 31, 30, 15,  0,  0},
	/* ramp-down */
	{  0, 11, 31, 31, 31, 24,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0},
      },
      { /* profile 1 */
	/* ramp-up */
	{  0,  0,  0,  0,  0,  0,  1,  1,  7, 16, 28, 31, 31, 13,  0,  0},
	/* ramp-down */
	{  0,  8, 31, 31, 31, 27,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0},
      },
      { /* profile 2 */
	/* ramp-up */
	{  0,  0,  0,  0,  0,  0,  1,  1,  8, 16, 29, 31, 31, 11,  0,  0},
	/* ramp-down */
	{  0,  8, 28, 31, 31, 30,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0},
      },
      { /* profile 3 */
	/* ramp-up */
	{  0,  0,  0,  0,  0,  0,  2,  0,  6, 18, 28, 31, 31, 12,  0,  0},
	/* ramp-down */
	{  0,  9, 24, 31, 31, 31,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0},
      },
      { /* profile 4 */
	/* ramp-up */
	{  0,  0,  0,  0,  0,  0,  3,  0,  5, 19, 31, 31, 31,  8,  0,  0},
	/* ramp-down */
	{  0,  7, 31, 31, 31, 28,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0},
      },
      { /* profile 5 */
	/* ramp-up */
	{  0,  0,  0,  0,  0,  0,  2,  0,  7, 18, 31, 31, 31,  8,  0,  0},
	/* ramp-down */
	{  0,  7, 31, 31, 31, 28,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0},
      },
      { /* profile 6 */
	/* ramp-up */
	{  0,  0,  0,  0,  0,  0,  3,  0,  5, 20, 31, 31, 31,  7,  0,  0},
	/* ramp-down */
	{  0, 10, 21, 31, 31, 31,  4,  0,  0,  0,  0,  0,  0,  0,  0,  0},
      },
      { /* profile 7 */
	/* ramp-up */
	{  0,  0,  0,  0,  0,  0,  4,  0,  9, 23, 22, 31, 31,  8,  0,  0},
	/* ramp-down */
	{  0,  9, 24, 30, 31, 30,  4,  0,  0,  0,  0,  0,  0,  0,  0,  0},
      },
      { /* profile 8 */
	/* ramp-up */
	{  0,  0,  0,  0,  0,  0,  5,  0,  8, 21, 24, 31, 31,  8,  0,  0},
	/* ramp-down */
	{  0,  8, 23, 31, 31, 31,  4,  0,  0,  0,  0,  0,  0,  0,  0,  0},
      },
      { /* profile 9 */
	/* ramp-up */
	{  0,  0,  0,  0,  0,  5,  0,  3,  1, 27, 22, 31, 31,  8,  0,  0},
	/* ramp-down */
	{  0,  8, 27, 25, 26, 31, 11,  0,  0,  0,  0,  0,  0,  0,  0,  0},
      },
      { /* profile 10 */
	/* ramp-up */
	{  0,  0,  0,  0,  5,  0,  0,  2,  7, 22, 23, 31, 31,  7,  0,  0},
	/* ramp-down */
	{  0,  7, 25, 30, 31, 31,  4,  0,  0,  0,  0,  0,  0,  0,  0,  0},
      },
      { /* profile 11 */
	/* ramp-up */
	{  0,  0,  0,  0,  0,  5,  0,  4,  8, 21, 21, 31, 31,  7,  0,  0},
	/* ramp-down */
	{  0,  8, 21, 31, 31, 31,  6,  0,  0,  0,  0,  0,  0,  0,  0,  0},
      },
      { /* profile 12 */
	/* ramp-up */
	{  0,  0,  0,  0,  0,  7,  0,  0, 12, 22, 25, 31, 27,  4,  0,  0},
	/* ramp-down */
	{  0,  9, 12, 21, 31, 31, 24,  0,  0,  0,  0,  0,  0,  0,  0,  0},
      },
      { /* profile 13 */
	/* ramp-up */
	{  0,  0,  0,  0,  0,  0,  7,  0,  8, 15, 31, 31, 31,  5,  0,  0},
	/* ramp-down */
	{  0,  6, 14, 23, 31, 31, 23,  0,  0,  0,  0,  0,  0,  0,  0,  0},
      },
      { /* profile 14 */
	/* ramp-up */
	{  0,  0,  0,  0,  0, 20,  0,  0,  8, 15, 14, 31, 31,  9,  0,  0},
	/* ramp-down */
	{  0,  7, 31, 31, 31, 28,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0},
      },
      { /* profile 15 */
	/* ramp-up */
	{  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0},
	/* ramp-down */
	{  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0},
      },
    },
    { /* Tx temperature compensation */
      {   -11,     0,     0,     0},
      {     9,     0,     0,     0},
      {    39,     0,     0,     0},
      {    59,     0,     0,     0},
      {   127,     0,     0,     0},
    },
  },
  //IQ swap
  SWAP_IQ_GSM850,
};

const T_RF_BAND rf_1900 = {
  { /* Rx structure */
    { /* T_RX_CAL_PARAMS */
       188,
        40,
        40,
        44,
    },
    { /* T_RF_AGC_BANDs */
      {  548,     0},
      {  622,     0},
      {  680,     0},
      {  745,     0},
      {  812,     0},
      {  860,     0},
      {  885,     0},
      {  991,     0},
      {  992,     0},
      { 1023,     0},
    },
    { /* Rx temperature compensation */
      {   -15,     0},
      {    -5,     0},
      {     6,     0},
      {    16,     0},
      {    25,     0},
      {    35,     0},
      {    45,     0},
      {    56,     0},
      {    66,     0},
      {    75,     0},
      {   100,     0},
    },
  },
  { /* Tx structure */
    { /* levels */
      {  429,  0,  0}, /* 0 */
      {  353,  1,  0}, /* 1 */
      {  302,  2,  0}, /* 2 */
      {  246,  3,  0}, /* 3 */
      {  200,  4,  0}, /* 4 */
      {  164,  5,  0}, /* 5 */
      {  135,  6,  0}, /* 6 */
      {  111,  7,  0}, /* 7 */
      {   91,  8,  0}, /* 8 */
      {   75,  9,  0}, /* 9 */
      {   60, 10,  0}, /* 10 */
      {   49, 11,  0}, /* 11 */
      {   40, 12,  0}, /* 12 */
      {   33, 13,  0}, /* 13 */
      {   26, 14,  0}, /* 14 */
      {   26, 15,  0}, /* 15 */
      {   26, 15,  0}, /* 16 */
      {   26, 15,  0}, /* 17 */
      {   26, 15,  0}, /* 18 */
      {   26, 15,  0}, /* 19 */
      {   26, 15,  0}, /* 20 */
      {   26, 15,  0}, /* 21 */
      {   26, 15,  0}, /* 22 */
      {   26, 15,  0}, /* 23 */
      {   26, 15,  0}, /* 24 */
      {   26, 15,  0}, /* 25 */
      {   26, 15,  0}, /* 26 */
      {   26, 15,  0}, /* 27 */
      {   26, 15,  0}, /* 28 */
      {   26,  0,  0}, /* 29 */
      {   26,  0,  0}, /* 30 */
      {   26,  0,  0}, /* 31 */
    },
    { /* channel calibration tables */
      { /* calibration table 0 */
	{  554,   128},
	{  722,   128},
	{  746,   128},
	{  774,   128},
	{  808,   128},
	{  810,   128},
	{  810,   128},
	{  810,   128},
      },
      { /* calibration table 1 */
	{  554,   128},
	{  722,   128},
	{  746,   128},
	{  774,   128},
	{  808,   128},
	{  810,   128},
	{  810,   128},
	{  810,   128},
      },
      { /* calibration table 2 */
	{  554,   128},
	{  722,   128},
	{  746,   128},
	{  774,   128},
	{  808,   128},
	{  810,   128},
	{  810,   128},
	{  810,   128},
      },
      { /* calibration table 3 */
	{  554,   128},
	{  722,   128},
	{  746,   128},
	{  774,   128},
	{  808,   128},
	{  810,   128},
	{  810,   128},
	{  810,   128},
      },
    },
    { /* ramps */
      { /* profile 0 */
	/* ramp-up */
	{  0,  0,  0,  0,  0,  0,  7,  0,  0, 16, 31, 31, 31, 12,  0,  0},
	/* ramp-down */
	{  0, 13, 31, 31, 31, 18,  0,  4,  0,  0,  0,  0,  0,  0,  0,  0},
      },
      { /* profile 1 */
	/* ramp-up */
	{  0,  0,  0,  0,  0,  0,  2,  3,  4, 17, 30, 31, 31, 10,  0,  0},
	/* ramp-down */
	{  0, 10, 31, 31, 31, 13,  9,  3,  0,  0,  0,  0,  0,  0,  0,  0},
      },
      { /* profile 2 */
	/* ramp-up */
	{  0,  0,  0,  0,  0,  0,  4,  2,  2, 18, 31, 31, 31,  9,  0,  0},
	/* ramp-down */
	{  0, 10, 26, 31, 31, 16, 10,  4,  0,  0,  0,  0,  0,  0,  0,  0},
      },
      { /* profile 3 */
	/* ramp-up */
	{  0,  0,  0,  0,  0,  0,  3,  4,  4, 15, 31, 31, 31,  9,  0,  0},
	/* ramp-down */
	{  0,  9, 31, 31, 31, 13,  6,  7,  0,  0,  0,  0,  0,  0,  0,  0},
      },
      { /* profile 4 */
	/* ramp-up */
	{  0,  0,  0,  0,  0,  0,  4,  3,  0, 18, 31, 31, 31, 10,  0,  0},
	/* ramp-down */
	{  0,  8, 31, 31, 31, 11,  9,  7,  0,  0,  0,  0,  0,  0,  0,  0},
      },
      { /* profile 5 */
	/* ramp-up */
	{  0,  0,  0,  0,  0,  4,  3,  2,  7, 14, 25, 31, 31, 11,  0,  0},
	/* ramp-down */
	{  0, 14, 31, 31, 31,  9,  8,  4,  0,  0,  0,  0,  0,  0,  0,  0},
      },
      { /* profile 6 */
	/* ramp-up */
	{  0,  0,  0,  0,  0,  7,  1,  3, 10, 12, 25, 31, 31,  8,  0,  0},
	/* ramp-down */
	{  0,  7, 30, 31, 31, 14,  4,  6,  5,  0,  0,  0,  0,  0,  0,  0},
      },
      { /* profile 7 */
	/* ramp-up */
	{  0,  0,  0,  0,  3,  5,  0,  5,  8, 12, 26, 31, 31,  7,  0,  0},
	/* ramp-down */
	{  0,  7, 31, 31, 31, 15,  0,  8,  5,  0,  0,  0,  0,  0,  0,  0},
      },
      { /* profile 8 */
	/* ramp-up */
	{  0,  0,  0,  0,  0,  9,  0,  3, 10, 16, 21, 31, 31,  7,  0,  0},
	/* ramp-down */
	{  0, 11, 28, 31, 27, 10, 11,  0, 10,  0,  0,  0,  0,  0,  0,  0},
      },
      { /* profile 9 */
	/* ramp-up */
	{  0,  0,  0,  0,  0, 10,  0,  6,  9, 15, 22, 29, 31,  6,  0,  0},
	/* ramp-down */
	{  0,  9, 22, 31, 31, 12,  5,  0, 18,  0,  0,  0,  0,  0,  0,  0},
      },
      { /* profile 10 */
	/* ramp-up */
	{  0,  0,  0,  0, 14,  0,  0,  4, 10, 20, 21, 29, 24,  6,  0,  0},
	/* ramp-down */
	{  0,  8, 28, 29, 26, 14,  6,  0, 17,  0,  0,  0,  0,  0,  0,  0},
      },
      { /* profile 11 */
	/* ramp-up */
	{  0,  0,  0,  0, 16,  0,  3,  5,  8, 16, 31, 28, 18,  3,  0,  0},
	/* ramp-down */
	{  0,  6, 18, 26, 31, 16,  9,  7,  0, 15,  0,  0,  0,  0,  0,  0},
      },
      { /* profile 12 */
	/* ramp-up */
	{  0,  0,  0,  0, 19,  0,  3,  6,  8, 21, 24, 31, 14,  2,  0,  0},
	/* ramp-down */
	{  0,  0, 12, 31, 31, 27,  4,  0, 23,  0,  0,  0,  0,  0,  0,  0},
      },
      { /* profile 13 */
	/* ramp-up */
	{  0,  0,  0,  0,  0, 14, 14,  0,  0, 24, 31, 31, 14,  0,  0,  0},
	/* ramp-down */
	{  0,  0, 11, 31, 31, 22, 11,  3, 19,  0,  0,  0,  0,  0,  0,  0},
      },
      { /* profile 14 */
	/* ramp-up */
	{  0,  0,  0,  0,  0, 30,  1,  4,  8, 18, 31, 31,  5,  0,  0,  0},
	/* ramp-down */
	{  0,  0,  8, 31, 31, 22,  5,  0, 31,  0,  0,  0,  0,  0,  0,  0},
      },
      { /* profile 15 */
	/* ramp-up */
	{  0,  0,  0,  0,  0, 30,  1,  4,  8, 18, 31, 31,  5,  0,  0,  0},
	/* ramp-down */
	{  0,  0,  8, 31, 31, 22,  5,  0, 31,  0,  0,  0,  0,  0,  0,  0},
      },
    },
    { /* Tx temperature compensation */
      {   -11,     0,     0,     0},
      {     9,     0,     0,     0},
      {    39,     0,     0,     0},
      {    59,     0,     0,     0},
      {   127,     0,     0,     0},
    },
  },
  //IQ swap
  SWAP_IQ_PCS
};

/*
 * The following part is unchanged from mv100/l1_rf12.c; the initialization
 * values come from l1_rf12.h, and we got that header from the Leonardo
 * version, so we trust it to be correct.  Some of the constants got
 * renamed between the two versions, though.
 */

/*------------------------------------------*/
/* ABB Initialization words
/*------------------------------------------*/
#if (ANALOG == 1)
  UWORD16 abb[ABB_TABLE_SIZE] =
  {
    C_AFCCTLADD,  // Value at reset
    C_VBUCTRL,    // Uplink gain amp 0dB, Sidetone gain to mute
    C_VBDCTRL,    // Downlink gain amp 0dB, Volume control 0 dB
    C_BBCTRL,     // value at reset
    C_APCOFF,     // value at reset
    C_BULIOFF,    // value at reset
    C_BULQOFF,    // value at reset
    C_DAI_ON_OFF, // value at reset
    C_AUXDAC,     // value at reset
    C_VBCTRL,     // VULSWITCH=0, VDLAUX=1, VDLEAR=1
    C_APCDEL1     // value at reset
};
#elif (ANALOG == 2)
  UWORD16 abb[ABB_TABLE_SIZE] =
  {
    C_AFCCTLADD,
    C_VBUCTRL,
    C_VBDCTRL,
    C_BBCTRL,
    C_BULGCAL,
    C_APCOFF,
    C_BULIOFF,
    C_BULQOFF,
    C_DAI_ON_OFF,
    C_AUXDAC,
    C_VBCTRL1,
    C_VBCTRL2,
    C_APCDEL1,
    C_APCDEL2
  };

#elif (ANALOG == 3)
  UWORD16 abb[ABB_TABLE_SIZE] =
  {
    C_AFCCTLADD,
    C_VBUCTRL,
    C_VBDCTRL,
    C_BBCTRL,
    C_BULGCAL,
    C_APCOFF,
    C_BULIOFF,
    C_BULQOFF,
    C_DAI_ON_OFF,
    C_AUXDAC,
    C_VBCTRL1,
    C_VBCTRL2,
    C_APCDEL1,
    C_APCDEL2,
    C_VBPOP,
    C_VAUDINITD,
    C_VAUDCR,
    C_VAUOCR,
    C_VAUSCR,
    C_VAUDPLL
  };

#endif

/*------------------------------------------*/
/*             Gain table                   */
/*  specified in the TRF6053 spec           */
/*     2 dB steps - LNA always ON       */
/*------------------------------------------*/
UWORD16 AGC_TABLE[AGC_TABLE_SIZE] =
{
  0x00,  //reserved
  0x01,  //reserved
  0x02,  //reserved
  0x03,  //reserved
  0x04,  //reserved
  0x05,  //reserved
  0x06,  //14 dB
  0x07,  //16
  0x08,  //18
  0x09,  //20
  0x0a,  //22
  0x0b,  //24
  0x0c,  //26
  0x0d,  //28
  0x0e,  //30
  0x0f,  //32
  0x10,  //34
  0x11,  //36
  0x12,  //38
  0x13,  //40
  /*
  0x14,  //reserved
  0x15,  //reserved
  0x16,  //reserved
  0x17,  //reserved
  0x18,  //reserved
  0x19,  //reserved
  0x1a,  //reserved
  0x1b,  //reserved
  0x1c,  //reserved
  0x1d,  //reserved
  0x1e,  //reserved
  0x1f,  //reserved
  */
};

// structure for ADC conversion (4 Internal channel + 5 Ext channels max.)
T_ADC adc __attribute__ ((section ("int.bss")));

// MADC calibration structure
T_ADCCAL adc_cal=
{ // a: 0,..,8
  // b, 0,..,8
  // cal_a = 4*1750 is the Typical value 1.75 V ref voltage , divide by 4
  7000, 8750, 7000, 7000, 7000, 7000, 7000, 256, 7000,
     0,    0,    0,    0,    0,    0,   0,    0,    0
};

#if (BOARD == 41)
// table which converts ADC value into RF temperature
T_TEMP temperature[TEMP_TABLE_SIZE] =
{
// Temperature compensation for EVARITA - S.Glock, J.Demay 04/23/2003
  582, -40,
  640, -10,
  698, 25,
  756, 60,
  815, 90
};
#else
// table which converts ADC value into RF temperature
T_TEMP temperature[TEMP_TABLE_SIZE] =
{
  7, -35,
  7, -34,
  8, -33,
  8, -32,
  9, -31,
  9, -30,
  10, -29,
  11, -28,
  11, -27,
  12, -26,
  13, -25,
  14, -24,
  14, -23,
  15, -22,
  16, -21,
  17, -20,
  18, -19,
  19, -18,
  21, -17,
  22, -16,
  23, -15,
  24, -14,
  26, -13,
  27, -12,
  29, -11,
  30, -10,
  32, -9,
  34, -8,
  36, -7,
  37, -6,
  39, -5,
  41, -4,
  44, -3,
  46, -2,
  48, -1,
  51, 0,
  53, 1,
  56, 2,
  59, 3,
  61, 4,
  64, 5,
  68, 6,
  71, 7,
  74, 8,
  78, 9,
  81, 10,
  85, 11,
  89, 12,
  93, 13,
  97, 14,
  101, 15,
  105, 16,
  110, 17,
  115, 18,
  119, 19,
  124, 20,
  130, 21,
  135, 22,
  140, 23,
  146, 24,
  152, 25,
  158, 26,
  164, 27,
  170, 28,
  176, 29,
  183, 30,
  190, 31,
  197, 32,
  204, 33,
  211, 34,
  219, 35,
  226, 36,
  234, 37,
  242, 38,
  250, 39,
  259, 40,
  267, 41,
  276, 42,
  285, 43,
  294, 44,
  303, 45,
  312, 46,
  322, 47,
  331, 48,
  341, 49,
  351, 50,
  361, 51,
  371, 52,
  382, 53,
  392, 54,
  403, 55,
  413, 56,
  424, 57,
  435, 58,
  446, 59,
  458, 60,
  469, 61,
  480, 62,
  492, 63,
  503, 64,
  515, 65,
  527, 66,
  539, 67,
  550, 68,
  562, 69,
  574, 70,
  586, 71,
  598, 72,
  611, 73,
  623, 74,
  635, 75,
  647, 76,
  659, 77,
  671, 78,
  683, 79,
  696, 80,
  708, 81,
  720, 82,
  732, 83,
  744, 84,
  756, 85,
  768, 86,
  780, 87,
  792, 88,
  804, 89,
  816, 90,
  827, 91,
  839, 92,
  851, 93,
  862, 94,
  873, 95
};
#endif