diff gsm-fw/L1/tpudrv/tpudrv12.c @ 887:7f305eb3c530

gsm-fw: tpudrv12.[ch] extended to support Pirelli DP-L10 target Pirelli ramImage compiles, not tested on hw yet compiled code unchanged in the gtamodem configuration (verified)
author Space Falcon <falcon@ivan.Harhan.ORG>
date Sun, 28 Jun 2015 08:15:10 +0000
parents d42078e35ac9
children a714522c925b
line wrap: on
line diff
--- a/gsm-fw/L1/tpudrv/tpudrv12.c	Sun Jun 28 04:37:13 2015 +0000
+++ b/gsm-fw/L1/tpudrv/tpudrv12.c	Sun Jun 28 08:15:10 2015 +0000
@@ -14,6 +14,9 @@
  * The present reconstruction has been made by copying tpudrv61.c and
  * tweaking it to match the disassembly of the reference binary object
  * named above.
+ *
+ * The ugly hacks to support Pirelli DP-L10 in addition to classic
+ * TI/Openmoko target devices are original to FreeCalypso.
  */
 
 #define TPUDRV12_C
@@ -104,8 +107,8 @@
 	{\
 	*TP_Ptr++ = TPU_MOVE(TSP_TX_REG_1, ((rf_data) >> 8) & 0xFF);	\
 	*TP_Ptr++ = TPU_MOVE(TSP_TX_REG_2, (rf_data) & 0xFF);		\
-	*TP_Ptr++ = TPU_MOVE(TSP_CTRL1, 0x4F);				\
-	*TP_Ptr++ = TPU_MOVE(TSP_CTRL2, 0x02);				\
+	*TP_Ptr++ = TPU_MOVE(TSP_CTRL1, TC1_DEVICE_RF | 0x0F);		\
+	*TP_Ptr++ = TPU_MOVE(TSP_CTRL2, TC2_WR);			\
 	}
 
 /*------------------------------------------*/
@@ -114,8 +117,8 @@
 #define TSP_TO_ABB(data)\
 	{\
 	*TP_Ptr++ = TPU_MOVE(TSP_TX_REG_1, (data) & 0xFF);		\
-	*TP_Ptr++ = TPU_MOVE(TSP_CTRL1, 0x06);				\
-	*TP_Ptr++ = TPU_MOVE(TSP_CTRL2, 0x02);				\
+	*TP_Ptr++ = TPU_MOVE(TSP_CTRL1, TC1_DEVICE_ABB | 0x06);		\
+	*TP_Ptr++ = TPU_MOVE(TSP_CTRL2, TC2_WR);			\
 	}
 
 /*------------------------------------------*/
@@ -166,11 +169,17 @@
     T_TX_RX tx_rx[2];
 };
 
+#if CONFIG_TARGET_PIRELLI
+typedef UWORD16 T_RXTX_UPDOWN;
+#else
+typedef UWORD8  T_RXTX_UPDOWN;
+#endif
+
 struct rf_path_s {
-  UWORD8 rx_up;
-  UWORD8 rx_down;
-  UWORD8 tx_up;
-  UWORD8 tx_down;
+  T_RXTX_UPDOWN rx_up;
+  T_RXTX_UPDOWN rx_down;
+  T_RXTX_UPDOWN tx_up;
+  T_RXTX_UPDOWN tx_down;
   struct synth_s *synth;
 };
 
@@ -331,10 +340,10 @@
 	*TP_Ptr++ = TPU_MOVE(TSP_CTRL1, 0x47);
 	t += 5;
 	*TP_Ptr++ = TPU_AT(t);
-	*TP_Ptr++ = TPU_MOVE(TSP_ACT, 0x00);
+	*TP_Ptr++ = TPU_MOVE(TSP_ACT, RF_SER_OFF);
 	t += 8;
 	*TP_Ptr++ = TPU_AT(t);
-	*TP_Ptr++ = TPU_MOVE(TSP_ACT, 0x01);
+	*TP_Ptr++ = TPU_MOVE(TSP_ACT, RF_SER_ON);
 	t += 5;
 	*TP_Ptr++ = TPU_AT(t);
 	TSP_TO_RF(0x0012);
@@ -515,7 +524,7 @@
 	*TP_Ptr++ = TPU_FAT(0x1383);
 	TSP_TO_ABB(0x18);
 	*TP_Ptr++ = TPU_FAT(58);
-	*TP_Ptr++ = TPU_MOVE(TSP_ACT, rf_path[rf_index].rx_up | 0x01);
+	*TP_Ptr++ = TPU_MOVE(TSP_ACT, rf_path[rf_index].rx_up | RF_SER_ON);
 	*TP_Ptr++ = TPU_FAT(62);
 	TSP_TO_ABB(0x14);
 }
@@ -532,7 +541,7 @@
 {
 	*TP_Ptr++ = TPU_FAT(t - 37);
 	TSP_TO_RF(0x003A);
-	*TP_Ptr++ = TPU_MOVE(TSP_ACT, rf_path[rf_index].rx_down | 0x01);
+	*TP_Ptr++ = TPU_MOVE(TSP_ACT, rf_path[rf_index].rx_down | RF_SER_ON);
 	*TP_Ptr++ = TPU_FAT(t - 4);
 	TSP_TO_ABB(0x00);
 }
@@ -571,9 +580,15 @@
 	*TP_Ptr++ = TPU_FAT(0x1384);
 	TSP_TO_ABB(0xA0);
 	*TP_Ptr++ = TPU_FAT(16);
-	*TP_Ptr++ = TPU_MOVE(TSP_ACT, rf_path[rf_index].tx_up | 0x01);
+#if CONFIG_TARGET_PIRELLI
+	*TP_Ptr++ = TPU_MOVE(TSP_ACTX, rf_path[rf_index].tx_up >> 8);
+	*TP_Ptr++ = TPU_FAT(21);
+	*TP_Ptr++ = TPU_MOVE(TSP_ACT, PA_ENABLE | RF_SER_ON);
+#else
+	*TP_Ptr++ = TPU_MOVE(TSP_ACT, rf_path[rf_index].tx_up | RF_SER_ON);
 	*TP_Ptr++ = TPU_FAT(21);
 	*TP_Ptr++ = TPU_MOVE(TSP_ACTX, 0x0F);
+#endif
 }
 
 /*-------------------------------------------*/
@@ -592,7 +607,7 @@
 	TSP_TO_ABB(0x80);
 	*TP_Ptr++ = TPU_FAT(t + 22);
 	*TP_Ptr++ = TPU_MOVE(TSP_ACTX, 0x00);
-	*TP_Ptr++ = TPU_MOVE(TSP_ACT, rf_path[rf_index].tx_down | 0x01);
+	*TP_Ptr++ = TPU_MOVE(TSP_ACT, rf_path[rf_index].tx_down | RF_SER_ON);
 	*TP_Ptr++ = TPU_FAT(t + 25);
 	TSP_TO_RF(0x003A);
 	*TP_Ptr++ = TPU_FAT(t + 31);
@@ -739,8 +754,8 @@
    TPU_Reset(0);
    TP_Ptr = (UWORD16 *) TPU_RAM;
 
-   *TP_Ptr++ = TPU_MOVE(TSP_ACT, 0x01);
-   *TP_Ptr++ = TPU_MOVE(TSP_ACT, 0x17);
+   *TP_Ptr++ = TPU_MOVE(TSP_ACT, RF_SER_ON);
+   *TP_Ptr++ = TPU_MOVE(TSP_ACT, RF_SER_ON | FEM_OFF);
 
    *TP_Ptr++ = TPU_OFFSET(servingCellOffset);
 }
@@ -753,12 +768,12 @@
 void l1dmacro_RF_sleep  (void)
 {
 	TSP_TO_RF(0x0002);
-	*TP_Ptr++ = TPU_MOVE(TSP_ACT, 0x01);
+	*TP_Ptr++ = TPU_MOVE(TSP_ACT, RF_SER_ON);
 	*TP_Ptr++ = TPU_WAIT(1);
 	*TP_Ptr++ = TPU_MOVE(TSP_SPI_SET1, 0x21);
 	*TP_Ptr++ = TPU_MOVE(TSP_SPI_SET2, 0x02);
-	*TP_Ptr++ = TPU_MOVE(TSP_CTRL1, 0x41);
-	*TP_Ptr++ = TPU_MOVE(TSP_CTRL2, 0x02);
+	*TP_Ptr++ = TPU_MOVE(TSP_CTRL1, TC1_DEVICE_RF | 0x01);
+	*TP_Ptr++ = TPU_MOVE(TSP_CTRL2, TC2_WR);
 	*TP_Ptr++ = TPU_WAIT(100);
 	/* code from tpudrv61.c follows, same for Rita and LoCosto */
 	*TP_Ptr++ = TPU_SLEEP;
@@ -783,14 +798,14 @@
 	TP_Ptr = (SYS_UWORD16 *) TPU_RAM;
 	*TP_Ptr++ = TPU_MOVE(TSP_SPI_SET1, 0x01);
 	*TP_Ptr++ = TPU_MOVE(TSP_SPI_SET2, 0x06);
-	*TP_Ptr++ = TPU_MOVE(TSP_CTRL1, 0x41);
-	*TP_Ptr++ = TPU_MOVE(TSP_CTRL2, 0x02);
+	*TP_Ptr++ = TPU_MOVE(TSP_CTRL1, TC1_DEVICE_RF | 0x01);
+	*TP_Ptr++ = TPU_MOVE(TSP_CTRL2, TC2_WR);
 	*TP_Ptr++ = TPU_WAIT(100);
-	*TP_Ptr++ = TPU_MOVE(TSP_ACT, rf_path[rf_index].rx_down | 0x01);
+	*TP_Ptr++ = TPU_MOVE(TSP_ACT, rf_path[rf_index].rx_down | RF_SER_ON);
 	*TP_Ptr++ = TPU_WAIT(1);
-	*TP_Ptr++ = TPU_MOVE(TSP_ACT, rf_path[rf_index].rx_down);
+	*TP_Ptr++ = TPU_MOVE(TSP_ACT, rf_path[rf_index].rx_down | RF_SER_OFF);
 	*TP_Ptr++ = TPU_WAIT(8);
-	*TP_Ptr++ = TPU_MOVE(TSP_ACT, rf_path[rf_index].rx_down | 0x01);
+	*TP_Ptr++ = TPU_MOVE(TSP_ACT, rf_path[rf_index].rx_down | RF_SER_ON);
 	*TP_Ptr++ = TPU_WAIT(5);
 	TSP_TO_RF(0x0012);
 	*TP_Ptr++ = TPU_FAT(0);
@@ -841,7 +856,7 @@
    // Set FEM to inactive state before turning ON the RF Board
    // At this point the RF regulators are still OFF. Thus the
    // FEM command is not inverted yet => Must use the FEM "SLEEP programming"
-   *TP_Ptr++ = TPU_MOVE(TSP_ACT, 0x01);
+   *TP_Ptr++ = TPU_MOVE(TSP_ACT, FEM_SLEEP | RF_SER_ON);
 
    // TPU_SLEEP
    l1dmacro_idle();