1 .cpu arm7tdmi 2 .arch armv4t 3 .fpu softvfp 4 .eabi_attribute 20, 1 5 .eabi_attribute 21, 1 6 .eabi_attribute 23, 3 7 .eabi_attribute 24, 1 8 .eabi_attribute 25, 1 9 .eabi_attribute 26, 1 10 .eabi_attribute 30, 4 11 .eabi_attribute 34, 0 12 .eabi_attribute 18, 4 13 .file "rffe_k2x0.c" 14 .text 15 .Ltext0: 16 .cfi_sections .debug_frame 17 .file 1 "board/se_k2x0/rffe_k2x0.c" 18 .section .text.rffe_mode,"ax",%progbits 19 .align 2 20 .global rffe_mode 21 .syntax unified 22 .arm 24 rffe_mode: 25 .LVL0: 26 .LFB3: 1:board/se_k2x0/rffe_k2x0.c **** /* RF frontend driver for Sony Ericsson K200i/K220i */ 2:board/se_k2x0/rffe_k2x0.c **** 3:board/se_k2x0/rffe_k2x0.c **** /* (C) 2022 by Steve Markgraf 4:board/se_k2x0/rffe_k2x0.c **** * 5:board/se_k2x0/rffe_k2x0.c **** * All Rights Reserved 6:board/se_k2x0/rffe_k2x0.c **** * 7:board/se_k2x0/rffe_k2x0.c **** * This program is free software; you can redistribute it and/or modify 8:board/se_k2x0/rffe_k2x0.c **** * it under the terms of the GNU General Public License as published by 9:board/se_k2x0/rffe_k2x0.c **** * the Free Software Foundation; either version 2 of the License, or 10:board/se_k2x0/rffe_k2x0.c **** * (at your option) any later version. 11:board/se_k2x0/rffe_k2x0.c **** * 12:board/se_k2x0/rffe_k2x0.c **** * This program is distributed in the hope that it will be useful, 13:board/se_k2x0/rffe_k2x0.c **** * but WITHOUT ANY WARRANTY; without even the implied warranty of 14:board/se_k2x0/rffe_k2x0.c **** * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15:board/se_k2x0/rffe_k2x0.c **** * GNU General Public License for more details. 16:board/se_k2x0/rffe_k2x0.c **** * 17:board/se_k2x0/rffe_k2x0.c **** * You should have received a copy of the GNU General Public License 18:board/se_k2x0/rffe_k2x0.c **** * along with this program. If not, see . 19:board/se_k2x0/rffe_k2x0.c **** * 20:board/se_k2x0/rffe_k2x0.c **** */ 21:board/se_k2x0/rffe_k2x0.c **** 22:board/se_k2x0/rffe_k2x0.c **** #include 23:board/se_k2x0/rffe_k2x0.c **** #include 24:board/se_k2x0/rffe_k2x0.c **** 25:board/se_k2x0/rffe_k2x0.c **** #include 26:board/se_k2x0/rffe_k2x0.c **** #include 27:board/se_k2x0/rffe_k2x0.c **** #include 28:board/se_k2x0/rffe_k2x0.c **** #include 29:board/se_k2x0/rffe_k2x0.c **** #include 30:board/se_k2x0/rffe_k2x0.c **** 31:board/se_k2x0/rffe_k2x0.c **** /* This is a value that has been measured on the C123 by Harald: 71dBm, 32:board/se_k2x0/rffe_k2x0.c **** it is the difference between the input level at the antenna and what 33:board/se_k2x0/rffe_k2x0.c **** the DSP reports, subtracted by the total gain of the TRF6151 */ 34:board/se_k2x0/rffe_k2x0.c **** #define SYSTEM_INHERENT_GAIN 71 35:board/se_k2x0/rffe_k2x0.c **** 36:board/se_k2x0/rffe_k2x0.c **** /* describe how the RF frontend is wired on the SE K200i/K220i */ 37:board/se_k2x0/rffe_k2x0.c **** #define RITA_RESET TSPACT(0) /* Reset of the Rita TRF6151, correct for K200i */ 38:board/se_k2x0/rffe_k2x0.c **** #define PA_ENABLE TSPACT(9) /* Enable the Power Amplifier */ 39:board/se_k2x0/rffe_k2x0.c **** #define DCS_TXEN TSPACT(3) /* DCS (as opposed to GSM) Transmit */ 40:board/se_k2x0/rffe_k2x0.c **** 41:board/se_k2x0/rffe_k2x0.c **** #define ASM_VC1 TSPACT(1) /* GSM1800 TX at antenna switch, inverted */ 42:board/se_k2x0/rffe_k2x0.c **** #define ASM_VC2 TSPACT(2) /* GSM900 TX at antenna switch, inverted */ 43:board/se_k2x0/rffe_k2x0.c **** 44:board/se_k2x0/rffe_k2x0.c **** #define IOTA_STROBE TSPEN(1) /* Strobe for the Iota TSP */ 45:board/se_k2x0/rffe_k2x0.c **** #define RITA_STROBE TSPEN(2) /* Strobe for the Rita TSP */ 46:board/se_k2x0/rffe_k2x0.c **** 47:board/se_k2x0/rffe_k2x0.c **** /* switch RF Frontend Mode */ 48:board/se_k2x0/rffe_k2x0.c **** void rffe_mode(enum gsm_band band, int tx) 49:board/se_k2x0/rffe_k2x0.c **** { 27 .loc 1 49 1 view -0 28 .cfi_startproc 29 @ Function supports interworking. 30 @ args = 0, pretend = 0, frame = 0 31 @ frame_needed = 0, uses_anonymous_args = 0 50:board/se_k2x0/rffe_k2x0.c **** uint16_t tspact = tsp_act_state(); 32 .loc 1 50 2 view .LVU1 49:board/se_k2x0/rffe_k2x0.c **** uint16_t tspact = tsp_act_state(); 33 .loc 1 49 1 is_stmt 0 view .LVU2 34 0000 10402DE9 push {r4, lr} 35 .LCFI0: 36 .cfi_def_cfa_offset 8 37 .cfi_offset 4, -8 38 .cfi_offset 14, -4 39 .loc 1 50 20 view .LVU3 40 0004 FEFFFFEB bl tsp_act_state 41 .LVL1: 51:board/se_k2x0/rffe_k2x0.c **** 52:board/se_k2x0/rffe_k2x0.c **** /* First we mask off all bits from the state cache */ 53:board/se_k2x0/rffe_k2x0.c **** tspact &= ~(PA_ENABLE | DCS_TXEN); 42 .loc 1 53 2 is_stmt 1 view .LVU4 43 .loc 1 53 9 is_stmt 0 view .LVU5 44 0008 10309FE5 ldr r3, .L3 45 000c 003003E0 and r3, r3, r0 46 .LVL2: 54:board/se_k2x0/rffe_k2x0.c **** tspact |= ASM_VC1 | ASM_VC2; 47 .loc 1 54 2 is_stmt 1 view .LVU6 55:board/se_k2x0/rffe_k2x0.c **** 56:board/se_k2x0/rffe_k2x0.c **** #ifdef CONFIG_TX_ENABLE 57:board/se_k2x0/rffe_k2x0.c **** /* Then we selectively set the bits on, if required */ 58:board/se_k2x0/rffe_k2x0.c **** if (tx) { 59:board/se_k2x0/rffe_k2x0.c **** if ((band == GSM_BAND_1800) || band == (GSM_BAND_1900)) { 60:board/se_k2x0/rffe_k2x0.c **** tspact |= DCS_TXEN; 61:board/se_k2x0/rffe_k2x0.c **** tspact &= ~ASM_VC1; 62:board/se_k2x0/rffe_k2x0.c **** } else 63:board/se_k2x0/rffe_k2x0.c **** tspact &= ~ASM_VC2; 64:board/se_k2x0/rffe_k2x0.c **** 65:board/se_k2x0/rffe_k2x0.c **** tspact |= PA_ENABLE; 66:board/se_k2x0/rffe_k2x0.c **** } 67:board/se_k2x0/rffe_k2x0.c **** #endif /* TRANSMIT_SUPPORT */ 68:board/se_k2x0/rffe_k2x0.c **** 69:board/se_k2x0/rffe_k2x0.c **** tsp_act_update(tspact); 48 .loc 1 69 2 view .LVU7 49 0010 060083E3 orr r0, r3, #6 50 0014 FEFFFFEB bl tsp_act_update 51 .LVL3: 70:board/se_k2x0/rffe_k2x0.c **** } 52 .loc 1 70 1 is_stmt 0 view .LVU8 53 0018 1040BDE8 pop {r4, lr} 54 .LCFI1: 55 .cfi_restore 14 56 .cfi_restore 4 57 .cfi_def_cfa_offset 0 58 001c 1EFF2FE1 bx lr 59 .L4: 60 .align 2 61 .L3: 62 0020 F7FD0000 .word 65015 63 .cfi_endproc 64 .LFE3: 66 .section .text.rffe_get_rx_ports,"ax",%progbits 67 .align 2 68 .global rffe_get_rx_ports 69 .syntax unified 70 .arm 72 rffe_get_rx_ports: 73 .LFB4: 71:board/se_k2x0/rffe_k2x0.c **** 72:board/se_k2x0/rffe_k2x0.c **** uint32_t rffe_get_rx_ports(void) 73:board/se_k2x0/rffe_k2x0.c **** { 74 .loc 1 73 1 is_stmt 1 view -0 75 .cfi_startproc 76 @ Function supports interworking. 77 @ args = 0, pretend = 0, frame = 0 78 @ frame_needed = 0, uses_anonymous_args = 0 79 @ link register save eliminated. 74:board/se_k2x0/rffe_k2x0.c **** return (1 << PORT_LO) | (1 << PORT_DCS1800) | (1 << PORT_PCS1900); 80 .loc 1 74 2 view .LVU10 75:board/se_k2x0/rffe_k2x0.c **** } 81 .loc 1 75 1 is_stmt 0 view .LVU11 82 0000 3100A0E3 mov r0, #49 83 0004 1EFF2FE1 bx lr 84 .cfi_endproc 85 .LFE4: 87 .section .text.rffe_get_tx_ports,"ax",%progbits 88 .align 2 89 .global rffe_get_tx_ports 90 .syntax unified 91 .arm 93 rffe_get_tx_ports: 94 .LFB5: 76:board/se_k2x0/rffe_k2x0.c **** 77:board/se_k2x0/rffe_k2x0.c **** uint32_t rffe_get_tx_ports(void) 78:board/se_k2x0/rffe_k2x0.c **** { 95 .loc 1 78 1 is_stmt 1 view -0 96 .cfi_startproc 97 @ Function supports interworking. 98 @ args = 0, pretend = 0, frame = 0 99 @ frame_needed = 0, uses_anonymous_args = 0 100 @ link register save eliminated. 79:board/se_k2x0/rffe_k2x0.c **** return (1 << PORT_LO) | (1 << PORT_HI); 101 .loc 1 79 2 view .LVU13 80:board/se_k2x0/rffe_k2x0.c **** } 102 .loc 1 80 1 is_stmt 0 view .LVU14 103 0000 0300A0E3 mov r0, #3 104 0004 1EFF2FE1 bx lr 105 .cfi_endproc 106 .LFE5: 108 .section .text.rffe_iq_swapped,"ax",%progbits 109 .align 2 110 .global rffe_iq_swapped 111 .syntax unified 112 .arm 114 rffe_iq_swapped: 115 .LVL4: 116 .LFB6: 81:board/se_k2x0/rffe_k2x0.c **** 82:board/se_k2x0/rffe_k2x0.c **** /* Returns need for IQ swap */ 83:board/se_k2x0/rffe_k2x0.c **** int rffe_iq_swapped(uint16_t band_arfcn, int tx) 84:board/se_k2x0/rffe_k2x0.c **** { 117 .loc 1 84 1 is_stmt 1 view -0 118 .cfi_startproc 119 @ Function supports interworking. 120 @ args = 0, pretend = 0, frame = 0 121 @ frame_needed = 0, uses_anonymous_args = 0 85:board/se_k2x0/rffe_k2x0.c **** return trf6151_iq_swapped(band_arfcn, tx); 122 .loc 1 85 2 view .LVU16 84:board/se_k2x0/rffe_k2x0.c **** return trf6151_iq_swapped(band_arfcn, tx); 123 .loc 1 84 1 is_stmt 0 view .LVU17 124 0000 10402DE9 push {r4, lr} 125 .LCFI2: 126 .cfi_def_cfa_offset 8 127 .cfi_offset 4, -8 128 .cfi_offset 14, -4 129 .loc 1 85 9 view .LVU18 130 0004 FEFFFFEB bl trf6151_iq_swapped 131 .LVL5: 86:board/se_k2x0/rffe_k2x0.c **** } 132 .loc 1 86 1 view .LVU19 133 0008 1040BDE8 pop {r4, lr} 134 .LCFI3: 135 .cfi_restore 14 136 .cfi_restore 4 137 .cfi_def_cfa_offset 0 138 000c 1EFF2FE1 bx lr 139 .cfi_endproc 140 .LFE6: 142 .section .text.rffe_init,"ax",%progbits 143 .align 2 144 .global rffe_init 145 .syntax unified 146 .arm 148 rffe_init: 149 .LFB7: 87:board/se_k2x0/rffe_k2x0.c **** 88:board/se_k2x0/rffe_k2x0.c **** #define MCU_SW_TRACE 0xfffef00e 89:board/se_k2x0/rffe_k2x0.c **** #define ARM_CONF_REG 0xfffef006 90:board/se_k2x0/rffe_k2x0.c **** #define ASIC_CONF_REG 0xfffef008 91:board/se_k2x0/rffe_k2x0.c **** 92:board/se_k2x0/rffe_k2x0.c **** void rffe_init(void) 93:board/se_k2x0/rffe_k2x0.c **** { 150 .loc 1 93 1 is_stmt 1 view -0 151 .cfi_startproc 152 @ Function supports interworking. 153 @ args = 0, pretend = 0, frame = 0 154 @ frame_needed = 0, uses_anonymous_args = 0 94:board/se_k2x0/rffe_k2x0.c **** /* Configure the TSPEN which is connected to the TWL3025 */ 95:board/se_k2x0/rffe_k2x0.c **** tsp_setup(IOTA_STROBE, 1, 0, 0); 155 .loc 1 95 2 view .LVU21 156 0000 0030A0E3 mov r3, #0 157 0004 0110A0E3 mov r1, #1 93:board/se_k2x0/rffe_k2x0.c **** /* Configure the TSPEN which is connected to the TWL3025 */ 158 .loc 1 93 1 is_stmt 0 view .LVU22 159 0008 10402DE9 push {r4, lr} 160 .LCFI4: 161 .cfi_def_cfa_offset 8 162 .cfi_offset 4, -8 163 .cfi_offset 14, -4 164 .loc 1 95 2 view .LVU23 165 000c 0100A0E1 mov r0, r1 166 0010 0320A0E1 mov r2, r3 167 0014 FEFFFFEB bl tsp_setup 168 .LVL6: 96:board/se_k2x0/rffe_k2x0.c **** 97:board/se_k2x0/rffe_k2x0.c **** trf6151_init(RITA_STROBE, RITA_RESET); 169 .loc 1 97 2 is_stmt 1 view .LVU24 170 0018 0110A0E3 mov r1, #1 171 001c 0200A0E3 mov r0, #2 172 0020 FEFFFFEB bl trf6151_init 173 .LVL7: 98:board/se_k2x0/rffe_k2x0.c **** } 174 .loc 1 98 1 is_stmt 0 view .LVU25 175 0024 1040BDE8 pop {r4, lr} 176 .LCFI5: 177 .cfi_restore 14 178 .cfi_restore 4 179 .cfi_def_cfa_offset 0 180 0028 1EFF2FE1 bx lr 181 .cfi_endproc 182 .LFE7: 184 .section .text.rffe_get_gain,"ax",%progbits 185 .align 2 186 .global rffe_get_gain 187 .syntax unified 188 .arm 190 rffe_get_gain: 191 .LFB8: 99:board/se_k2x0/rffe_k2x0.c **** 100:board/se_k2x0/rffe_k2x0.c **** uint8_t rffe_get_gain(void) 101:board/se_k2x0/rffe_k2x0.c **** { 192 .loc 1 101 1 is_stmt 1 view -0 193 .cfi_startproc 194 @ Function supports interworking. 195 @ args = 0, pretend = 0, frame = 0 196 @ frame_needed = 0, uses_anonymous_args = 0 102:board/se_k2x0/rffe_k2x0.c **** return trf6151_get_gain(); 197 .loc 1 102 2 view .LVU27 101:board/se_k2x0/rffe_k2x0.c **** return trf6151_get_gain(); 198 .loc 1 101 1 is_stmt 0 view .LVU28 199 0000 10402DE9 push {r4, lr} 200 .LCFI6: 201 .cfi_def_cfa_offset 8 202 .cfi_offset 4, -8 203 .cfi_offset 14, -4 204 .loc 1 102 9 view .LVU29 205 0004 FEFFFFEB bl trf6151_get_gain 206 .LVL8: 103:board/se_k2x0/rffe_k2x0.c **** } 207 .loc 1 103 1 view .LVU30 208 0008 1040BDE8 pop {r4, lr} 209 .LCFI7: 210 .cfi_restore 14 211 .cfi_restore 4 212 .cfi_def_cfa_offset 0 213 000c 1EFF2FE1 bx lr 214 .cfi_endproc 215 .LFE8: 217 .section .text.rffe_set_gain,"ax",%progbits 218 .align 2 219 .global rffe_set_gain 220 .syntax unified 221 .arm 223 rffe_set_gain: 224 .LVL9: 225 .LFB9: 104:board/se_k2x0/rffe_k2x0.c **** 105:board/se_k2x0/rffe_k2x0.c **** void rffe_set_gain(uint8_t dbm) 106:board/se_k2x0/rffe_k2x0.c **** { 226 .loc 1 106 1 is_stmt 1 view -0 227 .cfi_startproc 228 @ Function supports interworking. 229 @ args = 0, pretend = 0, frame = 0 230 @ frame_needed = 0, uses_anonymous_args = 0 107:board/se_k2x0/rffe_k2x0.c **** trf6151_set_gain(dbm); 231 .loc 1 107 2 view .LVU32 106:board/se_k2x0/rffe_k2x0.c **** trf6151_set_gain(dbm); 232 .loc 1 106 1 is_stmt 0 view .LVU33 233 0000 10402DE9 push {r4, lr} 234 .LCFI8: 235 .cfi_def_cfa_offset 8 236 .cfi_offset 4, -8 237 .cfi_offset 14, -4 238 .loc 1 107 2 view .LVU34 239 0004 FEFFFFEB bl trf6151_set_gain 240 .LVL10: 108:board/se_k2x0/rffe_k2x0.c **** } 241 .loc 1 108 1 view .LVU35 242 0008 1040BDE8 pop {r4, lr} 243 .LCFI9: 244 .cfi_restore 14 245 .cfi_restore 4 246 .cfi_def_cfa_offset 0 247 000c 1EFF2FE1 bx lr 248 .cfi_endproc 249 .LFE9: 251 .section .text.rffe_compute_gain,"ax",%progbits 252 .align 2 253 .global rffe_compute_gain 254 .syntax unified 255 .arm 257 rffe_compute_gain: 258 .LVL11: 259 .LFB10: 109:board/se_k2x0/rffe_k2x0.c **** 110:board/se_k2x0/rffe_k2x0.c **** const uint8_t system_inherent_gain = SYSTEM_INHERENT_GAIN; 111:board/se_k2x0/rffe_k2x0.c **** 112:board/se_k2x0/rffe_k2x0.c **** /* Given the expected input level of exp_inp dBm/8 and the target of target_bb 113:board/se_k2x0/rffe_k2x0.c **** * dBm8, configure the RF Frontend with the respective gain */ 114:board/se_k2x0/rffe_k2x0.c **** void rffe_compute_gain(int16_t exp_inp, int16_t target_bb) 115:board/se_k2x0/rffe_k2x0.c **** { 260 .loc 1 115 1 is_stmt 1 view -0 261 .cfi_startproc 262 @ Function supports interworking. 263 @ args = 0, pretend = 0, frame = 0 264 @ frame_needed = 0, uses_anonymous_args = 0 116:board/se_k2x0/rffe_k2x0.c **** trf6151_compute_gain(exp_inp, target_bb); 265 .loc 1 116 2 view .LVU37 115:board/se_k2x0/rffe_k2x0.c **** trf6151_compute_gain(exp_inp, target_bb); 266 .loc 1 115 1 is_stmt 0 view .LVU38 267 0000 10402DE9 push {r4, lr} 268 .LCFI10: 269 .cfi_def_cfa_offset 8 270 .cfi_offset 4, -8 271 .cfi_offset 14, -4 272 .loc 1 116 2 view .LVU39 273 0004 FEFFFFEB bl trf6151_compute_gain 274 .LVL12: 117:board/se_k2x0/rffe_k2x0.c **** } 275 .loc 1 117 1 view .LVU40 276 0008 1040BDE8 pop {r4, lr} 277 .LCFI11: 278 .cfi_restore 14 279 .cfi_restore 4 280 .cfi_def_cfa_offset 0 281 000c 1EFF2FE1 bx lr 282 .cfi_endproc 283 .LFE10: 285 .section .text.rffe_rx_win_ctrl,"ax",%progbits 286 .align 2 287 .global rffe_rx_win_ctrl 288 .syntax unified 289 .arm 291 rffe_rx_win_ctrl: 292 .LVL13: 293 .LFB11: 118:board/se_k2x0/rffe_k2x0.c **** 119:board/se_k2x0/rffe_k2x0.c **** void rffe_rx_win_ctrl(int16_t exp_inp, int16_t target_bb) 120:board/se_k2x0/rffe_k2x0.c **** { 294 .loc 1 120 1 is_stmt 1 view -0 295 .cfi_startproc 296 @ Function supports interworking. 297 @ args = 0, pretend = 0, frame = 0 298 @ frame_needed = 0, uses_anonymous_args = 0 299 @ link register save eliminated. 121:board/se_k2x0/rffe_k2x0.c **** /* FIXME */ 122:board/se_k2x0/rffe_k2x0.c **** } 300 .loc 1 122 1 view .LVU42 301 0000 1EFF2FE1 bx lr 302 .cfi_endproc 303 .LFE11: 305 .global system_inherent_gain 306 .section .rodata 309 system_inherent_gain: 310 0000 47 .byte 71 311 .text 312 .Letext0: 313 .file 2 "/usr/lib/gcc/arm-none-eabi/12.2.1/include/stdint.h" 314 .file 3 "../../shared/libosmocore/include/osmocom/gsm/gsm_utils.h" 315 .file 4 "include/rffe.h" 316 .file 5 "include/rf/trf6151.h" 317 .file 6 "include/calypso/tsp.h" DEFINED SYMBOLS *ABS*:00000000 rffe_k2x0.c /tmp/cc4XBgsw.s:19 .text.rffe_mode:00000000 $a /tmp/cc4XBgsw.s:24 .text.rffe_mode:00000000 rffe_mode /tmp/cc4XBgsw.s:62 .text.rffe_mode:00000020 $d /tmp/cc4XBgsw.s:67 .text.rffe_get_rx_ports:00000000 $a /tmp/cc4XBgsw.s:72 .text.rffe_get_rx_ports:00000000 rffe_get_rx_ports /tmp/cc4XBgsw.s:88 .text.rffe_get_tx_ports:00000000 $a /tmp/cc4XBgsw.s:93 .text.rffe_get_tx_ports:00000000 rffe_get_tx_ports /tmp/cc4XBgsw.s:109 .text.rffe_iq_swapped:00000000 $a /tmp/cc4XBgsw.s:114 .text.rffe_iq_swapped:00000000 rffe_iq_swapped /tmp/cc4XBgsw.s:143 .text.rffe_init:00000000 $a /tmp/cc4XBgsw.s:148 .text.rffe_init:00000000 rffe_init /tmp/cc4XBgsw.s:185 .text.rffe_get_gain:00000000 $a /tmp/cc4XBgsw.s:190 .text.rffe_get_gain:00000000 rffe_get_gain /tmp/cc4XBgsw.s:218 .text.rffe_set_gain:00000000 $a /tmp/cc4XBgsw.s:223 .text.rffe_set_gain:00000000 rffe_set_gain /tmp/cc4XBgsw.s:252 .text.rffe_compute_gain:00000000 $a /tmp/cc4XBgsw.s:257 .text.rffe_compute_gain:00000000 rffe_compute_gain /tmp/cc4XBgsw.s:286 .text.rffe_rx_win_ctrl:00000000 $a /tmp/cc4XBgsw.s:291 .text.rffe_rx_win_ctrl:00000000 rffe_rx_win_ctrl /tmp/cc4XBgsw.s:309 .rodata:00000000 system_inherent_gain UNDEFINED SYMBOLS tsp_act_state tsp_act_update trf6151_iq_swapped tsp_setup trf6151_init trf6151_get_gain trf6151_set_gain trf6151_compute_gain