FreeCalypso > hg > freecalypso-sw
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();