icE1usb fw/gpsdo: Use a struct for VCTXO dependent params

Not that useful for now, but prep for PID loop

Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
Change-Id: Iffea8992130eccd98a2952b08277e3d0d2568a1f
diff --git a/firmware/ice40-riscv/icE1usb/gpsdo.c b/firmware/ice40-riscv/icE1usb/gpsdo.c
index 477d2e7..5975100 100644
--- a/firmware/ice40-riscv/icE1usb/gpsdo.c
+++ b/firmware/ice40-riscv/icE1usb/gpsdo.c
@@ -17,6 +17,9 @@
 
 
 struct {
+	/* Configuration */
+	enum gpsdo_vctxo_model vctxo;
+
 	/* Current tuning */
 	struct {
 		uint16_t coarse;
@@ -41,7 +44,6 @@
 
 	/* Coarse tuning */
 	struct {
-		int vctxo_sensitivity;
 		int step;
 	} coarse;
 
@@ -54,19 +56,25 @@
 } g_gpsdo;
 
 
-/* VCXTO sensitivity vs 'coarse' count for fast initial acquisition */
-	/*
-	 * Note that the spec if often a guaranteed minimum range and goes
-	 * from ~0.1V to 3.2V instead of 0-3.3V so actual sensitivity is
-	 * higher than the "theoritical value". We boost it by ~ 10% here.
-	 */
-static const int
-vctxo_sensitivity[] = {
-	/* +-  50 ppm pull range => ~ 0.75 Hz / hi-count (set to 0.85) */
-	[VCTXO_TAITIEN_VT40]     = 300,
+/*
+ * VCXTO parameters
+ *
+ * - iKv is reciprocal sensitivity vs 'coarse' count for fast initial acquisition
+ *
+ * Note that the spec if often a guaranteed minimum range and goes
+ * from ~0.1V to 3.2V instead of 0-3.3V so actual sensitivity is
+ * higher than the "theoritical value". We boost it by ~ 10% here.
+ */
+static const struct {
+	int iKv;  /* hi-count / Hz         (.8  fixed point) */
+} vctxo_params[] = {
+	[VCTXO_TAITIEN_VT40] = {
+		.iKv =   300, /* +-  50 ppm pull range => ~ 0.75 Hz / hi-count (set to 0.85) */
+	},
 
-	/* +- 100 ppm pull range => ~ 1.50 Hz / hi-count (set to 1.6) */
-	[VCTXO_SITIME_SIT3808_E] = 160,
+	[VCTXO_SITIME_SIT3808_E] = {
+		.iKv =   160, /* +- 100 ppm pull range => ~ 1.50 Hz / hi-count (set to 1.6) */
+	},
 };
 
 /* Tuning params */
@@ -195,7 +203,7 @@
 	}
 
 	/* Estimate correction and apply it */
-	g_gpsdo.tune.coarse -= (freq_diff * g_gpsdo.coarse.vctxo_sensitivity) >> 8;
+	g_gpsdo.tune.coarse -= (freq_diff * vctxo_params[g_gpsdo.vctxo].iKv) >> 8;
 	pdm_set(PDM_CLK_HI, true, g_gpsdo.tune.coarse, false);
 
 	/* Skip next measurement */
@@ -357,5 +365,5 @@
 
 	/* Initial state and config */
 	g_gpsdo.state = STATE_HOLD_OVER;
-	g_gpsdo.coarse.vctxo_sensitivity = vctxo_sensitivity[vctxo];
+	g_gpsdo.vctxo = vctxo;
 }