From 5dff78f664a376fb21c4481d9867f7a00b335f4d Mon Sep 17 00:00:00 2001
From: Mychaela Falconia <falcon@freecalypso.org>
Date: Mon, 28 Sep 2020 21:00:57 +0000
Subject: [PATCH 1/2] calibration branch: split afcparams.c from rf_tables.c
 for gta0x

We have new hardware targets that have appeared since the original
OS#3582 patch was created, namely Huawei GTM900-B and the upcoming
FreeCalypso Caramel2 board.  These new targets need the same APC
offset as gta0x and fcdev3b (TI's original Leonardo value), they
have proper calibration records in their FFS (meaning that all
compiled-in numbers become no-effect placeholders), and their PA
tracts are similar enough to Openmoko/FCDEV3B to where even in the
absence of calibration OM/FC numbers are close enough.  Thus most
of the tables in board/gta0x/rf_tables.c should be reusable by
these new targets.

However, these new targets have quite different VCXOs from Openmoko
and FCDEV3B, thus they need different AFC parameters.  Thus we split
board/gta0x/afcparams.c from board/gta0x/rf_tables.c, making the
latter more reusable.
---
 src/target/firmware/Makefile                |  2 ++
 src/target/firmware/board/gta0x/afcparams.c | 53 +++++++++++++++++++++++++++++
 src/target/firmware/board/gta0x/rf_tables.c | 29 ----------------
 3 files changed, 55 insertions(+), 29 deletions(-)
 create mode 100644 src/target/firmware/board/gta0x/afcparams.c

diff --git a/src/target/firmware/Makefile b/src/target/firmware/Makefile
index 91525d7..4364d33 100644
--- a/src/target/firmware/Makefile
+++ b/src/target/firmware/Makefile
@@ -44,6 +44,7 @@ calypso_COMMON_OBJS=board/common/calypso_uart.o \
 # OpenMoko GTA0x
 BOARD_gta0x_OBJS=$(calypso_COMMON_OBJS) board/gta0x/init.o \
 	board/gta0x/rffe_gta0x_triband.o board/gta0x/rf_tables.o \
+	board/gta0x/afcparams.o \
 	board/common/readcal_tiffs.o battery/dummy.o $(FB_dummy_OBJS)
 BOARD_gta0x_ENVIRONMENTS=highram
 
@@ -56,6 +57,7 @@ BOARD_gtm900b_ENVIRONMENTS=highram
 # FreeCalypso FCDEV3B
 BOARD_fcdev3b_OBJS=$(calypso_COMMON_OBJS) board/fcdev3b/init.o \
 	board/gta0x/rffe_gta0x_triband.o board/gta0x/rf_tables.o \
+	board/gta0x/afcparams.o \
 	board/common/readcal_tiffs.o battery/dummy.o $(FB_dummy_OBJS)
 BOARD_fcdev3b_ENVIRONMENTS=highram
 
diff --git a/src/target/firmware/board/gta0x/afcparams.c b/src/target/firmware/board/gta0x/afcparams.c
new file mode 100644
index 0000000..ba48360
--- /dev/null
+++ b/src/target/firmware/board/gta0x/afcparams.c
@@ -0,0 +1,53 @@
+/*
+ * This code was written by Mychaela Falconia <falcon@freecalypso.org>
+ * who refuses to claim copyright on it and has released it as public domain
+ * instead. NO rights reserved, all rights relinquished.
+ *
+ * Tweaked (coding style changes) by Vadim Yanitskiy <axilirator@gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ */
+
+#include <stdint.h>
+#include <rf/vcxocal.h>
+
+/*
+ * Here is a typical set of AFC Psi parameters for an FCDEV3B modem board,
+ * computed by FreeCalypso fc-rfcal-vcxo calibration tool from frequency
+ * offset measurements made with a CMU200 RF tester:
+ *
+ * Psi_sta_inv: 3462
+ * Psi_st: 15
+ * Psi_st_32: 992326
+ * Psi_st_inv: 4328
+ *
+ * The following AFC slope number is the closest OsmocomBB-style afc_slope
+ * integer corresponding to these Psi numbers; the true value is somewhere
+ * between 454 and 455.
+ *
+ * This AFC slope setting is expected to be correct for both Openmoko and
+ * FreeCalypso hardware as we use the same VCXO components as were used
+ * by Openmoko.
+ */
+int16_t afc_slope = 454;
+
+/*
+ * The compiled-in AFC initial DAC value below is the same as was used by
+ * the old OsmocomBB code written for Mot C1xx phones, but it will normally
+ * be overridden by the per-unit factory calibration value read from the
+ * /gsm/rf/afcdac file in FFS.
+ */
+int16_t afc_initial_dac_value = -700;
diff --git a/src/target/firmware/board/gta0x/rf_tables.c b/src/target/firmware/board/gta0x/rf_tables.c
index fd33b16..9a08b3c 100644
--- a/src/target/firmware/board/gta0x/rf_tables.c
+++ b/src/target/firmware/board/gta0x/rf_tables.c
@@ -23,35 +23,6 @@
 
 #include <stdint.h>
 #include <rf/txcal.h>
-#include <rf/vcxocal.h>
-
-/*
- * Here is a typical set of AFC Psi parameters for an FCDEV3B modem board,
- * computed by FreeCalypso fc-rfcal-vcxo calibration tool from frequency
- * offset measurements made with a CMU200 RF tester:
- *
- * Psi_sta_inv: 3462
- * Psi_st: 15
- * Psi_st_32: 992326
- * Psi_st_inv: 4328
- *
- * The following AFC slope number is the closest OsmocomBB-style afc_slope
- * integer corresponding to these Psi numbers; the true value is somewhere
- * between 454 and 455.
- *
- * This AFC slope setting is expected to be correct for both Openmoko and
- * FreeCalypso hardware as we use the same VCXO components as were used
- * by Openmoko.
- */
-int16_t afc_slope = 454;
-
-/*
- * The compiled-in AFC initial DAC value below is the same as was used by
- * the old OsmocomBB code written for Mot C1xx phones, but it will normally
- * be overridden by the per-unit factory calibration value read from the
- * /gsm/rf/afcdac file in FFS.
- */
-int16_t afc_initial_dac_value = -700;
 
 /* APC offset (comes from the official firmware) for TI-classic targets */
 uint8_t apc_offset = 48;
-- 
2.9.0


From 093ec2348288cf99665c74624634268a9cbc44db Mon Sep 17 00:00:00 2001
From: Mychaela Falconia <falcon@freecalypso.org>
Date: Mon, 28 Sep 2020 21:42:10 +0000
Subject: [PATCH 2/2] calibration branch: proper support for gtm900b target

GTM900-B can share almost all calibration tables with GTA0x and FCDEV3B,
only the VCXO is significantly different.
---
 src/target/firmware/Makefile                  |   3 +-
 src/target/firmware/board/gtm900b/afcparams.c |  47 ++
 src/target/firmware/board/gtm900b/rf_tables.c | 595 --------------------------
 3 files changed, 49 insertions(+), 596 deletions(-)
 create mode 100644 src/target/firmware/board/gtm900b/afcparams.c
 delete mode 100644 src/target/firmware/board/gtm900b/rf_tables.c

diff --git a/src/target/firmware/Makefile b/src/target/firmware/Makefile
index 4364d33..4555fd8 100644
--- a/src/target/firmware/Makefile
+++ b/src/target/firmware/Makefile
@@ -50,7 +50,8 @@ BOARD_gta0x_ENVIRONMENTS=highram
 
 # Huawei GTM900-B
 BOARD_gtm900b_OBJS=$(calypso_COMMON_OBJS) board/gtm900b/init.o \
-	board/gtm900b/rffe_gtm900b.o board/gtm900b/rf_tables.o \
+	board/gtm900b/rffe_gtm900b.o board/gta0x/rf_tables.o \
+	board/gtm900b/afcparams.o \
 	board/common/readcal_tiffs.o battery/dummy.o $(FB_dummy_OBJS)
 BOARD_gtm900b_ENVIRONMENTS=highram
 
diff --git a/src/target/firmware/board/gtm900b/afcparams.c b/src/target/firmware/board/gtm900b/afcparams.c
new file mode 100644
index 0000000..ca8908d
--- /dev/null
+++ b/src/target/firmware/board/gtm900b/afcparams.c
@@ -0,0 +1,47 @@
+/*
+ * This code was written by Mychaela Falconia <falcon@freecalypso.org>
+ * who refuses to claim copyright on it and has released it as public domain
+ * instead. NO rights reserved, all rights relinquished.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ */
+
+#include <stdint.h>
+#include <rf/vcxocal.h>
+
+/*
+ * Here is a representative set of AFC Psi parameters that has been
+ * calibrated by Huawei on a GTM900-B MGC2GSMT module, as recorded
+ * in the /gsm/rf/afcparams file:
+ *
+ * Psi_sta_inv: 13626
+ * Psi_st: 4
+ * Psi_st_32: 252168
+ * Psi_st_inv: 17032
+ *
+ * The following AFC slope number is the closest OsmocomBB-style afc_slope
+ * integer corresponding to these Psi numbers; the true value is somewhere
+ * between 115 and 116.
+ */
+int16_t afc_slope = 115;
+
+/*
+ * The compiled-in AFC initial DAC value below is the same as was used by
+ * the old OsmocomBB code written for Mot C1xx phones, but it will normally
+ * be overridden by the per-unit factory calibration value read from the
+ * /gsm/rf/afcdac file in FFS.
+ */
+int16_t afc_initial_dac_value = -700;
diff --git a/src/target/firmware/board/gtm900b/rf_tables.c b/src/target/firmware/board/gtm900b/rf_tables.c
deleted file mode 100644
index 7f5b0fd..0000000
--- a/src/target/firmware/board/gtm900b/rf_tables.c
+++ /dev/null
@@ -1,595 +0,0 @@
-/*
- * This code was written by Mychaela Falconia <falcon@freecalypso.org>
- * who refuses to claim copyright on it and has released it as public domain
- * instead. NO rights reserved, all rights relinquished.
- *
- * Tweaked (coding style changes) by Vadim Yanitskiy <axilirator@gmail.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- *
- */
-
-#include <stdint.h>
-#include <rf/txcal.h>
-#include <rf/vcxocal.h>
-
-/* FIXME those are from the Compal phones, do measurements with the GTM900-B */
-
-/*
- * The following AFC initial DAC value and AFC slope settings are unchanged
- * from the old OsmocomBB code in which they were hard-coded in layer1/afc.c.
- * This AFC slope setting corresponds very closely to the original Leonardo
- * Psi values which are used by Motorola's official fw at least on the C139,
- * hence I have good reason to believe that they are indeed correct for the
- * Mot C1xx hardware target family.
- */
-int16_t afc_initial_dac_value = -700;
-int16_t afc_slope = 287;
-
-/* APC offset (comes from the official firmware) for TI-classic targets */
-uint8_t apc_offset = 48;
-
-/*
- * The following Tx levels tables are the ones compiled into Compal's
- * firmwares; more specifically, they were originally extracted out
- * of the one special Mot C11x fw version for which we got the linker
- * map file with symbols and subsequently confirmed to be unchanged in
- * Mot C139 and SE J100 firmwares.  In normal operation the APC DAC values
- * in these levels tables are replaced with the ones read from the per-unit
- * and per-band factory calibration records.
- *
- * It should be noted that these compiled-in numbers are approximately
- * correct for the C11x/12x/155/156 family (SKY77324 RF PA) but are totally
- * wrong for the newer C139/140 (SKY77325) and SE J100 (SKY77328) hardware;
- * it appears that Compal never bothered with changing these compiled-in
- * numbers in their fw for the newer designs because the expectation is
- * that these compiled-in numbers are just dummy placeholders to be
- * overridden by per-unit calibration.
- */
-struct txcal_tx_level rf_tx_levels_850[RF_TX_LEVELS_TABLE_SIZE] = {
-	{ 560,  0,  0 }, /* 0 */
-	{ 560,  0,  0 }, /* 1 */
-	{ 560,  0,  0 }, /* 2 */
-	{ 560,  0,  0 }, /* 3 */
-	{ 560,  0,  0 }, /* 4 */
-	{ 638,  0,  0 }, /* 5 */
-	{ 554,  1,  0 }, /* 6 */
-	{ 467,  2,  0 }, /* 7 */
-	{ 395,  3,  0 }, /* 8 */
-	{ 337,  4,  0 }, /* 9 */
-	{ 290,  5,  0 }, /* 10 */
-	{ 253,  6,  0 }, /* 11 */
-	{ 224,  7,  0 }, /* 12 */
-	{ 201,  8,  0 }, /* 13 */
-	{ 183,  9,  0 }, /* 14 */
-	{ 168, 10,  0 }, /* 15 */
-	{ 157, 11,  0 }, /* 16 */
-	{ 148, 12,  0 }, /* 17 */
-	{ 141, 13,  0 }, /* 18 */
-	{ 136, 14,  0 }, /* 19 */
-	{  46, 14,  0 }, /* 20 */
-	{  46, 14,  0 }, /* 21 */
-	{  46, 14,  0 }, /* 22 */
-	{  46, 14,  0 }, /* 23 */
-	{  46, 14,  0 }, /* 24 */
-	{  46, 14,  0 }, /* 25 */
-	{  46, 14,  0 }, /* 26 */
-	{  46, 14,  0 }, /* 27 */
-	{  46, 14,  0 }, /* 28 */
-	{  46, 14,  0 }, /* 29 */
-	{  46, 14,  0 }, /* 30 */
-	{  46, 14,  0 }, /* 31 */
-};
-
-struct txcal_tx_level rf_tx_levels_900[RF_TX_LEVELS_TABLE_SIZE] = {
-	{ 550,  0,  0 }, /* 0 */
-	{ 550,  0,  0 }, /* 1 */
-	{ 550,  0,  0 }, /* 2 */
-	{ 550,  0,  0 }, /* 3 */
-	{ 550,  0,  0 }, /* 4 */
-	{ 550,  0,  0 }, /* 5 */
-	{ 476,  1,  0 }, /* 6 */
-	{ 402,  2,  0 }, /* 7 */
-	{ 338,  3,  0 }, /* 8 */
-	{ 294,  4,  0 }, /* 9 */
-	{ 260,  5,  0 }, /* 10 */
-	{ 226,  6,  0 }, /* 11 */
-	{ 204,  7,  0 }, /* 12 */
-	{ 186,  8,  0 }, /* 13 */
-	{ 172,  9,  0 }, /* 14 */
-	{ 161, 10,  0 }, /* 15 */
-	{ 153, 11,  0 }, /* 16 */
-	{ 146, 12,  0 }, /* 17 */
-	{ 141, 13,  0 }, /* 18 */
-	{ 137, 14,  0 }, /* 19 */
-	{  43, 14,  0 }, /* 20 */
-	{  43, 14,  0 }, /* 21 */
-	{  43, 14,  0 }, /* 22 */
-	{  43, 14,  0 }, /* 23 */
-	{  43, 14,  0 }, /* 24 */
-	{  43, 14,  0 }, /* 25 */
-	{  43, 14,  0 }, /* 26 */
-	{  43, 14,  0 }, /* 27 */
-	{  43, 14,  0 }, /* 28 */
-	{  43, 14,  0 }, /* 29 */
-	{  43, 14,  0 }, /* 30 */
-	{  43, 14,  0 }, /* 31 */
-};
-
-struct txcal_tx_level rf_tx_levels_1800[RF_TX_LEVELS_TABLE_SIZE] = {
-	{ 480,  0,  0 }, /* 0 */
-	{ 416,  1,  0 }, /* 1 */
-	{ 352,  2,  0 }, /* 2 */
-	{ 308,  3,  0 }, /* 3 */
-	{ 266,  4,  0 }, /* 4 */
-	{ 242,  5,  0 }, /* 5 */
-	{ 218,  6,  0 }, /* 6 */
-	{ 200,  7,  0 }, /* 7 */
-	{ 186,  8,  0 }, /* 8 */
-	{ 175,  9,  0 }, /* 9 */
-	{ 167, 10,  0 }, /* 10 */
-	{ 160, 11,  0 }, /* 11 */
-	{ 156, 12,  0 }, /* 12 */
-	{ 152, 13,  0 }, /* 13 */
-	{ 145, 14,  0 }, /* 14 */
-	{ 142, 15,  0 }, /* 15 */
-	{  61, 15,  0 }, /* 16 */
-	{  61, 15,  0 }, /* 17 */
-	{  61, 15,  0 }, /* 18 */
-	{  61, 15,  0 }, /* 19 */
-	{  61, 15,  0 }, /* 20 */
-	{  61, 15,  0 }, /* 21 */
-	{  61, 15,  0 }, /* 22 */
-	{  61, 15,  0 }, /* 23 */
-	{  61, 15,  0 }, /* 24 */
-	{  61, 15,  0 }, /* 25 */
-	{  61, 15,  0 }, /* 26 */
-	{  61, 15,  0 }, /* 27 */
-	{  61, 15,  0 }, /* 28 */
-	{ 750,  0,  0 }, /* 29 */
-	{ 750,  0,  0 }, /* 30 */
-	{ 750,  0,  0 }, /* 31 */
-};
-
-struct txcal_tx_level rf_tx_levels_1900[RF_TX_LEVELS_TABLE_SIZE] = {
-	{ 520,  0,  0 }, /* 0 */
-	{ 465,  1,  0 }, /* 1 */
-	{ 390,  2,  0 }, /* 2 */
-	{ 330,  3,  0 }, /* 3 */
-	{ 285,  4,  0 }, /* 4 */
-	{ 250,  5,  0 }, /* 5 */
-	{ 225,  6,  0 }, /* 6 */
-	{ 205,  7,  0 }, /* 7 */
-	{ 190,  8,  0 }, /* 8 */
-	{ 177,  9,  0 }, /* 9 */
-	{ 168, 10,  0 }, /* 10 */
-	{ 161, 11,  0 }, /* 11 */
-	{ 155, 12,  0 }, /* 12 */
-	{ 150, 13,  0 }, /* 13 */
-	{ 147, 14,  0 }, /* 14 */
-	{ 143, 15,  0 }, /* 15 */
-	{  62, 15,  0 }, /* 16 */
-	{  62, 15,  0 }, /* 17 */
-	{  62, 15,  0 }, /* 18 */
-	{  62, 15,  0 }, /* 19 */
-	{  62, 15,  0 }, /* 20 */
-	{  62, 15,  0 }, /* 21 */
-	{  62, 15,  0 }, /* 22 */
-	{  62, 15,  0 }, /* 23 */
-	{  62, 15,  0 }, /* 24 */
-	{  62, 15,  0 }, /* 25 */
-	{  62, 15,  0 }, /* 26 */
-	{  62, 15,  0 }, /* 27 */
-	{  62, 15,  0 }, /* 28 */
-	{ 915,  0,  0 }, /* 29 */
-	{ 915,  0,  0 }, /* 30 */
-	{ 915,  0,  0 }, /* 31 */
-};
-
-struct txcal_ramp_def rf_tx_ramps_850[RF_TX_RAMP_SIZE] = {
-      { /* 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},
-      },
-};
-
-struct txcal_ramp_def rf_tx_ramps_900[RF_TX_RAMP_SIZE] = {
-      { /* 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},
-      },
-};
-
-struct txcal_ramp_def rf_tx_ramps_1800[RF_TX_RAMP_SIZE] = {
-      { /* 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},
-      },
-};
-
-struct txcal_ramp_def rf_tx_ramps_1900[RF_TX_RAMP_SIZE] = {
-      { /* 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},
-      },
-};
-- 
2.9.0

