1 1.8 rmind /* $NetBSD: sa2400reg.h,v 1.8 2009/10/19 23:19:39 rmind Exp $ */ 2 1.1 dyoung 3 1.1 dyoung /* 4 1.1 dyoung * Copyright (c) 2005 David Young. All rights reserved. 5 1.1 dyoung * 6 1.1 dyoung * This code was written by David Young. 7 1.1 dyoung * 8 1.1 dyoung * Redistribution and use in source and binary forms, with or without 9 1.1 dyoung * modification, are permitted provided that the following conditions 10 1.1 dyoung * are met: 11 1.1 dyoung * 1. Redistributions of source code must retain the above copyright 12 1.1 dyoung * notice, this list of conditions and the following disclaimer. 13 1.1 dyoung * 2. Redistributions in binary form must reproduce the above copyright 14 1.1 dyoung * notice, this list of conditions and the following disclaimer in the 15 1.1 dyoung * documentation and/or other materials provided with the distribution. 16 1.1 dyoung * 17 1.1 dyoung * THIS SOFTWARE IS PROVIDED BY David Young ``AS IS'' AND ANY 18 1.1 dyoung * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 19 1.1 dyoung * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A 20 1.1 dyoung * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL David 21 1.1 dyoung * Young BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 22 1.1 dyoung * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED 23 1.1 dyoung * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 24 1.1 dyoung * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 25 1.1 dyoung * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 26 1.1 dyoung * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 27 1.1 dyoung * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY 28 1.1 dyoung * OF SUCH DAMAGE. 29 1.1 dyoung */ 30 1.1 dyoung 31 1.1 dyoung #ifndef _DEV_IC_SA2400REG_H_ 32 1.1 dyoung #define _DEV_IC_SA2400REG_H_ 33 1.1 dyoung 34 1.1 dyoung /* 35 1.1 dyoung * Serial bus format for Philips SA2400 Single-chip Transceiver. 36 1.1 dyoung */ 37 1.6 dyoung #define SA2400_TWI_DATA_MASK __BITS(31,8) 38 1.6 dyoung #define SA2400_TWI_WREN __BIT(7) /* enable write */ 39 1.6 dyoung #define SA2400_TWI_ADDR_MASK __BITS(6,0) 40 1.1 dyoung 41 1.1 dyoung /* 42 1.1 dyoung * Registers for Philips SA2400 Single-chip Transceiver. 43 1.1 dyoung */ 44 1.1 dyoung #define SA2400_SYNA 0 /* Synthesizer Register A */ 45 1.6 dyoung #define SA2400_SYNA_FM __BIT(21) /* fractional modulus select, 46 1.1 dyoung * 0: /8 (default) 47 1.1 dyoung * 1: /5 48 1.1 dyoung */ 49 1.6 dyoung #define SA2400_SYNA_NF_MASK __BITS(20,18) /* fractional increment value, 50 1.1 dyoung * 0 to 7, default 4 51 1.1 dyoung */ 52 1.6 dyoung #define SA2400_SYNA_N_MASK __BITS(17,2) /* main divider division ratio, 53 1.1 dyoung * 512 to 65535, default 615 54 1.1 dyoung */ 55 1.1 dyoung 56 1.1 dyoung #define SA2400_SYNB 1 /* Synthesizer Register B */ 57 1.6 dyoung #define SA2400_SYNB_R_MASK __BITS(21,12) /* reference divider ratio, 58 1.1 dyoung * 4 to 1023, default 11 59 1.1 dyoung */ 60 1.6 dyoung #define SA2400_SYNB_L_MASK __BITS(11,10) /* lock detect mode */ 61 1.7 dyoung #define SA2400_SYNB_L_INACTIVE0 __SHIFTIN(0, SA2400_SYNB_L_MASK) 62 1.7 dyoung #define SA2400_SYNB_L_INACTIVE1 __SHIFTIN(1, SA2400_SYNB_L_MASK) 63 1.7 dyoung #define SA2400_SYNB_L_NORMAL __SHIFTIN(2, SA2400_SYNB_L_MASK) 64 1.7 dyoung #define SA2400_SYNB_L_INACTIVE2 __SHIFTIN(3, SA2400_SYNB_L_MASK) 65 1.1 dyoung 66 1.6 dyoung #define SA2400_SYNB_ON __BIT(9) /* power on/off, 67 1.1 dyoung * 0: inverted chip mode control 68 1.1 dyoung * 1: as defined by chip mode 69 1.1 dyoung * (see SA2400_OPMODE) 70 1.1 dyoung */ 71 1.6 dyoung #define SA2400_SYNB_ONE __BIT(8) /* always 1 */ 72 1.6 dyoung #define SA2400_SYNB_FC_MASK __BITS(7,0) /* fractional compensation 73 1.1 dyoung * charge pump current DAC, 74 1.1 dyoung * 0 to 255, default 80. 75 1.1 dyoung */ 76 1.1 dyoung 77 1.1 dyoung #define SA2400_SYNC 2 /* Synthesizer Register C */ 78 1.6 dyoung #define SA2400_SYNC_CP_MASK __BITS(7,6) /* charge pump current 79 1.1 dyoung * setting 80 1.1 dyoung */ 81 1.7 dyoung #define SA2400_SYNC_CP_NORMAL_ __SHIFTIN(0, SA2400_SYNC_CP_MASK) 82 1.7 dyoung #define SA2400_SYNC_CP_THIRD_ __SHIFTIN(1, SA2400_SYNC_CP_MASK) 83 1.7 dyoung #define SA2400_SYNC_CP_NORMAL __SHIFTIN(2, SA2400_SYNC_CP_MASK) /* recommended */ 84 1.7 dyoung #define SA2400_SYNC_CP_THIRD __SHIFTIN(3, SA2400_SYNC_CP_MASK) 85 1.1 dyoung 86 1.6 dyoung #define SA2400_SYNC_SM_MASK __BITS(5,3) /* comparison divider select, 87 1.1 dyoung * 0 to 4, extra division 88 1.1 dyoung * ratio is 2**SM. 89 1.1 dyoung */ 90 1.6 dyoung #define SA2400_SYNC_ZERO __BIT(2) /* always 0 */ 91 1.1 dyoung 92 1.1 dyoung #define SA2400_SYND 3 /* Synthesizer Register D */ 93 1.6 dyoung #define SA2400_SYND_ZERO1_MASK __BITS(21,17) /* always 0 */ 94 1.6 dyoung #define SA2400_SYND_TPHPSU __BIT(16) /* T[phpsu], 1: disable 95 1.1 dyoung * PHP speedup pump, 96 1.1 dyoung * overrides SA2400_SYND_TSPU 97 1.1 dyoung */ 98 1.6 dyoung #define SA2400_SYND_TPSU __BIT(15) /* T[spu], 1: speedup on, 99 1.1 dyoung * 0: speedup off 100 1.1 dyoung */ 101 1.6 dyoung #define SA2400_SYND_ZERO2_MASK __BITS(14,3) /* always 0 */ 102 1.1 dyoung 103 1.1 dyoung #define SA2400_OPMODE 4 /* Operating mode, filter tuner, 104 1.1 dyoung * other controls 105 1.1 dyoung */ 106 1.6 dyoung /* 1: in Rx mode, RSSI-ADC always on 0: RSSI-ADC only on during AGC */ 107 1.6 dyoung #define SA2400_OPMODE_ADC __BIT(19) 108 1.6 dyoung /* read-only filter tuner error: 1 if tuner out of range */ 109 1.6 dyoung #define SA2400_OPMODE_FTERR __BIT(18) 110 1.1 dyoung /* Rx & Tx filter tuning, write tuning value (test mode only) or 111 1.1 dyoung * read tuner setting (in normal mode). 112 1.1 dyoung */ 113 1.6 dyoung #define SA2400_OPMODE_FILTTUNE_MASK __BITS(17,15) 114 1.1 dyoung 115 1.6 dyoung /* external reference voltage (pad v2p5) on */ 116 1.6 dyoung #define SA2400_OPMODE_V2P5 __BIT(14) 117 1.6 dyoung /* external reference current ... */ 118 1.6 dyoung #define SA2400_OPMODE_I1M __BIT(13) 119 1.6 dyoung /* external reference current ... */ 120 1.6 dyoung #define SA2400_OPMODE_I0P3 __BIT(12) 121 1.6 dyoung #define SA2400_OPMODE_IN22 __BIT(10) /* xtal input frequency, 122 1.6 dyoung * 0: 44 MHz 123 1.6 dyoung * 1: 22 MHz 124 1.6 dyoung */ 125 1.6 dyoung #define SA2400_OPMODE_CLK __BIT(9) /* reference clock output on */ 126 1.6 dyoung #define SA2400_OPMODE_XO __BIT(8) /* xtal oscillator on */ 127 1.6 dyoung #define SA2400_OPMODE_DIGIN __BIT(7) /* use digital Tx inputs 128 1.6 dyoung * (FIRDAC) 129 1.6 dyoung */ 130 1.6 dyoung #define SA2400_OPMODE_RXLV __BIT(6) /* Rx output common mode 131 1.6 dyoung * voltage, 132 1.6 dyoung * 0: V[DD]/2 133 1.6 dyoung * 1: 1.25V 134 1.6 dyoung */ 135 1.6 dyoung #define SA2400_OPMODE_VEO __BIT(5) /* make internal vco 136 1.6 dyoung * available at vco pads 137 1.6 dyoung * (vcoextout) 138 1.6 dyoung */ 139 1.6 dyoung #define SA2400_OPMODE_VEI __BIT(4) /* use external vco input 140 1.6 dyoung * (vcoextin) 141 1.6 dyoung */ 142 1.1 dyoung /* main operating mode */ 143 1.6 dyoung #define SA2400_OPMODE_MODE_MASK __BITS(3,0) 144 1.7 dyoung #define SA2400_OPMODE_MODE_SLEEP __SHIFTIN(0, SA2400_OPMODE_MODE_MASK) 145 1.7 dyoung #define SA2400_OPMODE_MODE_TXRX __SHIFTIN(1, SA2400_OPMODE_MODE_MASK) 146 1.7 dyoung #define SA2400_OPMODE_MODE_WAIT __SHIFTIN(2, SA2400_OPMODE_MODE_MASK) 147 1.7 dyoung #define SA2400_OPMODE_MODE_RXMGC __SHIFTIN(3, SA2400_OPMODE_MODE_MASK) 148 1.7 dyoung #define SA2400_OPMODE_MODE_FCALIB __SHIFTIN(4, SA2400_OPMODE_MODE_MASK) 149 1.7 dyoung #define SA2400_OPMODE_MODE_DCALIB __SHIFTIN(5, SA2400_OPMODE_MODE_MASK) 150 1.7 dyoung #define SA2400_OPMODE_MODE_FASTTXRXMGC __SHIFTIN(6, SA2400_OPMODE_MODE_MASK) 151 1.7 dyoung #define SA2400_OPMODE_MODE_RESET __SHIFTIN(7, SA2400_OPMODE_MODE_MASK) 152 1.7 dyoung #define SA2400_OPMODE_MODE_VCOCALIB __SHIFTIN(8, SA2400_OPMODE_MODE_MASK) 153 1.1 dyoung 154 1.2 dyoung #define SA2400_OPMODE_DEFAULTS \ 155 1.2 dyoung (SA2400_OPMODE_XO | SA2400_OPMODE_RXLV | SA2400_OPMODE_CLK | \ 156 1.7 dyoung SA2400_OPMODE_I0P3 | __SHIFTIN(3, SA2400_OPMODE_FILTTUNE_MASK)) 157 1.2 dyoung 158 1.1 dyoung #define SA2400_AGC 5 /* AGC adjustment */ 159 1.6 dyoung #define SA2400_AGC_TARGETSIGN __BIT(23) /* fine-tune AGC target: 160 1.1 dyoung * -7dB to 7dB, sign bit ... */ 161 1.6 dyoung #define SA2400_AGC_TARGET_MASK __BITS(22,20) /* ... plus 0dB - 7dB */ 162 1.6 dyoung #define SA2400_AGC_MAXGAIN_MASK __BITS(19,15) /* maximum AGC gain, 0 to 31, 163 1.1 dyoung * (yields 54dB to 85dB) 164 1.1 dyoung */ 165 1.1 dyoung /* write: settling time after baseband gain switching, units of 166 1.1 dyoung * 182 nanoseconds. 167 1.1 dyoung * read: output of RSSI/Tx-peak detector's ADC in 5-bit Gray code. 168 1.1 dyoung */ 169 1.6 dyoung #define SA2400_AGC_BBPDELAY_MASK __BITS(14,10) 170 1.1 dyoung #define SA2400_AGC_ADCVAL_MASK SA2400_AGC_BBPDELAY_MASK 171 1.1 dyoung 172 1.1 dyoung /* write: settling time after LNA gain switching, units of 173 1.1 dyoung * 182 nanoseconds 174 1.1 dyoung * read: 2nd sample of RSSI in AGC cycle 175 1.1 dyoung */ 176 1.6 dyoung #define SA2400_AGC_LNADELAY_MASK __BITS(9,5) 177 1.1 dyoung #define SA2400_AGC_SAMPLE2_MASK SA2400_AGC_LNADELAY_MASK 178 1.1 dyoung 179 1.1 dyoung /* write: time between turning on Rx and AGCSET, units of 180 1.1 dyoung * 182 nanoseconds 181 1.1 dyoung * read: 1st sample of RSSI in AGC cycle 182 1.1 dyoung */ 183 1.6 dyoung #define SA2400_AGC_RXONDELAY_MASK __BITS(4,0) 184 1.1 dyoung #define SA2400_AGC_SAMPLE1_MASK SA2400_AGC_RXONDELAY_MASK 185 1.1 dyoung 186 1.1 dyoung #define SA2400_MANRX 6 /* Manual receiver control settings */ 187 1.6 dyoung #define SA2400_MANRX_AHSN __BIT(23) /* 1: AGC w/ high S/N---switch 188 1.6 dyoung * LNA at step 52 189 1.6 dyoung * (recommended) 190 1.6 dyoung * 0: switch LNA at step 60 191 1.6 dyoung */ 192 1.1 dyoung 193 1.1 dyoung /* If _RXOSQON, Q offset is 194 1.1 dyoung * (_RXOSQSIGN ? -1 : 1) * (1 + _RXOSQ_MASK) * 8 millivolts, 195 1.1 dyoung * otherwise, Q offset is 0. 196 1.1 dyoung * 197 1.1 dyoung * Ditto I offset. 198 1.1 dyoung */ 199 1.6 dyoung #define SA2400_MANRX_RXOSQON __BIT(22) /* Rx Q-channel correction. */ 200 1.6 dyoung #define SA2400_MANRX_RXOSQSIGN __BIT(21) 201 1.6 dyoung #define SA2400_MANRX_RXOSQ_MASK __BITS(20,18) 202 1.6 dyoung 203 1.6 dyoung #define SA2400_MANRX_RXOSION __BIT(17) /* Rx I-channel correction. */ 204 1.6 dyoung #define SA2400_MANRX_RXOSISIGN __BIT(16) 205 1.6 dyoung #define SA2400_MANRX_RXOSI_MASK __BITS(15,13) 206 1.6 dyoung #define SA2400_MANRX_TEN __BIT(12) /* use 10MHz offset cancellation 207 1.1 dyoung * cornerpoint for brief period 208 1.1 dyoung * after each gain change 209 1.1 dyoung */ 210 1.1 dyoung 211 1.1 dyoung /* DC offset cancellation cornerpoint select 212 1.1 dyoung * write: in RXMGC, set the cornerpoint 213 1.1 dyoung * read: in other modes, read AGC-controlled cornerpoint 214 1.1 dyoung */ 215 1.6 dyoung #define SA2400_MANRX_CORNERFREQ_MASK __BITS(11,10) 216 1.1 dyoung 217 1.1 dyoung /* write: in RXMGC mode, sets receiver gain 218 1.1 dyoung * read: in other modes, read AGC-controlled gain 219 1.1 dyoung */ 220 1.6 dyoung #define SA2400_MANRX_RXGAIN_MASK __BITS(9,0) 221 1.1 dyoung 222 1.1 dyoung #define SA2400_TX 7 /* Transmitter settings */ 223 1.1 dyoung /* Tx offsets 224 1.1 dyoung * 225 1.1 dyoung * write: in test mode, sets the offsets 226 1.1 dyoung * read: in normal mode, returns automatic settings 227 1.1 dyoung */ 228 1.6 dyoung #define SA2400_TX_TXOSQON __BIT(19) 229 1.6 dyoung #define SA2400_TX_TXOSQSIGN __BIT(18) 230 1.6 dyoung #define SA2400_TX_TXOSQ_MASK __BITS(17,15) 231 1.6 dyoung #define SA2400_TX_TXOSION __BIT(14) 232 1.6 dyoung #define SA2400_TX_TXOSISIGN __BIT(13) 233 1.6 dyoung #define SA2400_TX_TXOSI_MASK __BITS(12,10) 234 1.1 dyoung 235 1.6 dyoung #define SA2400_TX_RAMP_MASK __BITS(9,8) /* Ramp-up delay, 236 1.1 dyoung * 0: 1us 237 1.1 dyoung * 1: 2us 238 1.1 dyoung * 2: 3us 239 1.1 dyoung * 3: 4us 240 1.1 dyoung * datasheet says, "ramp-up 241 1.1 dyoung * time always 1us". huh? 242 1.1 dyoung */ 243 1.6 dyoung #define SA2400_TX_HIGAIN_MASK __BITS(7,4) /* Transmitter gain settings 244 1.1 dyoung * for TXHI output 245 1.1 dyoung */ 246 1.6 dyoung #define SA2400_TX_LOGAIN_MASK __BITS(3,0) /* Transmitter gain settings 247 1.1 dyoung * for TXLO output 248 1.1 dyoung */ 249 1.1 dyoung 250 1.1 dyoung #define SA2400_VCO 8 /* VCO settings */ 251 1.6 dyoung #define SA2400_VCO_ZERO __BITS(6,5) /* always zero */ 252 1.6 dyoung #define SA2400_VCO_VCERR __BIT(4)/* VCO calibration error flag---no 253 1.1 dyoung * band with low enough frequency 254 1.1 dyoung * could be found 255 1.1 dyoung */ 256 1.6 dyoung #define SA2400_VCO_VCOBAND_MASK __BITS(3,0) /* VCO band, 257 1.1 dyoung * write: in test mode, sets 258 1.1 dyoung * VCO band 259 1.1 dyoung * read: in normal mode, 260 1.1 dyoung * the result of 261 1.1 dyoung * calibration (VCOCAL). 262 1.1 dyoung * 0 = highest 263 1.3 perry * frequencies 264 1.1 dyoung */ 265 1.1 dyoung #endif /* _DEV_IC_SA2400REG_H_ */ 266