summaryrefslogtreecommitdiff
path: root/drivers/media/radio/stfm1000/gen-precalc.c
diff options
context:
space:
mode:
authorRob Herring <r.herring@freescale.com>2009-10-19 14:43:19 -0500
committerAlejandro Gonzalez <alex.gonzalez@digi.com>2010-02-12 17:19:16 +0100
commitcdde68e3a7d4cbf4701005ab6032366e76009419 (patch)
tree5690552665f0b7843e6552e4d5fe7b63cbc78f51 /drivers/media/radio/stfm1000/gen-precalc.c
parent57d1417ea543b83760b3fd76a46b9d29deb2e444 (diff)
ENGR00117389 Port 5.0.0 release to 2.6.31
This is i.MX BSP 5.0.0 release ported to 2.6.31 Signed-off-by: Rob Herring <r.herring@freescale.com> Signed-off-by: Alan Tull <r80115@freescale.com> Signed-off-by: Xinyu Chen <xinyu.chen@freescale.com>
Diffstat (limited to 'drivers/media/radio/stfm1000/gen-precalc.c')
-rw-r--r--drivers/media/radio/stfm1000/gen-precalc.c62
1 files changed, 62 insertions, 0 deletions
diff --git a/drivers/media/radio/stfm1000/gen-precalc.c b/drivers/media/radio/stfm1000/gen-precalc.c
new file mode 100644
index 000000000000..d3797dbef815
--- /dev/null
+++ b/drivers/media/radio/stfm1000/gen-precalc.c
@@ -0,0 +1,62 @@
+/*
+ * Copyright 2008-2009 Freescale Semiconductor, Inc. All Rights Reserved.
+ */
+
+/*
+ * The code contained herein is licensed under the GNU General Public
+ * License. You may obtain a copy of the GNU General Public License
+ * Version 2 or later at the following locations:
+ *
+ * http://www.opensource.org/licenses/gpl-license.html
+ * http://www.gnu.org/copyleft/gpl.html
+ */
+/* generate precalculated tables */
+#include <stddef.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "stfm1000-regs.h"
+
+static void generate_tune1(void)
+{
+ int start, end;
+ int ndiv; // N Divider in PLL
+ int incr; // Increment in PLL
+ int cicosr; // CIC oversampling ratio
+ int sdnominal; // value to serve pilot/interpolator loop in SD
+ int i, temp; // used in tuning table construction
+
+ start = STFM1000_FREQUENCY_100KHZ_MIN;
+ end = start + STFM1000_FREQUENCY_100KHZ_RANGE;
+
+ printf("const struct stfm1000_tune1\n"
+ "stfm1000_tune1_table[STFM1000_FREQUENCY_100KHZ_RANGE] = {\n");
+
+ for (i = start; i < end; i++) {
+
+ ndiv = (int)((i+14)/15) - 48;
+ incr = i - (int)(i/15)*15;
+ cicosr = (int)(i*2/3.0/16.0 + 0.5);
+ sdnominal = (int)(i*100.0e3/1.5/(double)cicosr/2.0/2.0*2.0*8.0*256.0/228.0e3*65536);
+
+ temp = 0x00000000; // clear
+ temp = temp | ((cicosr<<9) & STFM1000_TUNE1_CICOSR); // bits[14:9] 0x00007E00
+ temp = temp | ((ndiv<<4) & STFM1000_TUNE1_PLL_DIV); // bits[8:4] 0x000001F0
+ temp = temp | ((incr) & STFM1000_TUNE1_PLL_DIV); // bits[3:0] 0x0000000F
+
+ printf("\t[%d - STFM1000_FREQUENCY_100KHZ_MIN] = "
+ "{ .tune1 = 0x%08x, .sdnom = 0x%08x },\n",
+ i, temp, sdnominal);
+ }
+ printf("};\n");
+
+}
+
+int main(int argc, char *argv[])
+{
+ printf("#include \"stfm1000-regs.h\"\n\n");
+
+ generate_tune1();
+
+ return 0;
+}