14689Sql147931 /* 2*10448SMikore.Li@Sun.COM * Copyright 2009 Sun Microsystems, Inc. All rights reserved. 34689Sql147931 * Use is subject to license terms. 44689Sql147931 */ 54689Sql147931 /* 64689Sql147931 * Copyright (c) 2005 David Young. All rights reserved. 74689Sql147931 * 84689Sql147931 * This code was written by David Young. 94689Sql147931 * 104689Sql147931 * Redistribution and use in source and binary forms, with or without 114689Sql147931 * modification, are permitted provided that the following conditions 124689Sql147931 * are met: 134689Sql147931 * 1. Redistributions of source code must retain the above copyright 144689Sql147931 * notice, this list of conditions and the following disclaimer. 154689Sql147931 * 2. Redistributions in binary form must reproduce the above copyright 164689Sql147931 * notice, this list of conditions and the following disclaimer in the 174689Sql147931 * documentation and/or other materials provided with the distribution. 184689Sql147931 * 3. Neither the name of the author nor the names of any co-contributors 194689Sql147931 * may be used to endorse or promote products derived from this software 204689Sql147931 * without specific prior written permission. 214689Sql147931 * 224689Sql147931 * THIS SOFTWARE IS PROVIDED BY David Young ``AS IS'' AND ANY 234689Sql147931 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 244689Sql147931 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A 254689Sql147931 * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL David 264689Sql147931 * Young BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 274689Sql147931 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED 284689Sql147931 * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 294689Sql147931 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 304689Sql147931 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 314689Sql147931 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 324689Sql147931 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY 334689Sql147931 * OF SUCH DAMAGE. 344689Sql147931 */ 354689Sql147931 #ifndef _SA2400REG_H_ 364689Sql147931 #define _SA2400REG_H_ 374689Sql147931 38*10448SMikore.Li@Sun.COM #ifdef __cplusplus 39*10448SMikore.Li@Sun.COM extern "C" { 40*10448SMikore.Li@Sun.COM #endif 41*10448SMikore.Li@Sun.COM 424689Sql147931 /* 434689Sql147931 * Serial bus format for Philips SA2400 Single-chip Transceiver. 444689Sql147931 */ 454689Sql147931 #define SA2400_TWI_DATA_MASK BITS(31, 8) 464689Sql147931 #define SA2400_TWI_WREN BIT(7) /* enable write */ 474689Sql147931 #define SA2400_TWI_ADDR_MASK BITS(6, 0) 484689Sql147931 494689Sql147931 /* 504689Sql147931 * Registers for Philips SA2400 Single-chip Transceiver. 514689Sql147931 */ 524689Sql147931 #define SA2400_SYNA 0 /* Synthesizer Register A */ 534689Sql147931 /* 544689Sql147931 * fractional modulus select, 554689Sql147931 * 0: /8 (default) 564689Sql147931 * 1: /5 574689Sql147931 */ 584689Sql147931 #define SA2400_SYNA_FM BIT(21) 594689Sql147931 /* 604689Sql147931 * fractional increment value, 614689Sql147931 * 0 to 7, default 4 624689Sql147931 */ 634689Sql147931 #define SA2400_SYNA_NF_MASK BITS(20, 18) 644689Sql147931 /* 654689Sql147931 * main divider division ratio, 664689Sql147931 * 512 to 65535, default 615 674689Sql147931 */ 684689Sql147931 #define SA2400_SYNA_N_MASK BITS(17, 2) 694689Sql147931 704689Sql147931 #define SA2400_SYNB 1 /* Synthesizer Register B */ 714689Sql147931 /* 724689Sql147931 * reference divider ratio, 734689Sql147931 * 4 to 1023, default 11 744689Sql147931 */ 754689Sql147931 764689Sql147931 #define SA2400_SYNB_R_MASK BITS(21, 12) 774689Sql147931 #define SA2400_SYNB_L_MASK BITS(11, 10) /* lock detect mode */ 784689Sql147931 #define SA2400_SYNB_L_INACTIVE0 LSHIFT(0, SA2400_SYNB_L_MASK) 794689Sql147931 #define SA2400_SYNB_L_INACTIVE1 LSHIFT(1, SA2400_SYNB_L_MASK) 804689Sql147931 #define SA2400_SYNB_L_NORMAL LSHIFT(2, SA2400_SYNB_L_MASK) 814689Sql147931 #define SA2400_SYNB_L_INACTIVE2 LSHIFT(3, SA2400_SYNB_L_MASK) 824689Sql147931 834689Sql147931 /* 844689Sql147931 * power on/off, 854689Sql147931 * 0: inverted chip mode control 864689Sql147931 * 1: as defined by chip mode (see SA2400_OPMODE) 874689Sql147931 */ 884689Sql147931 894689Sql147931 #define SA2400_SYNB_ON BIT(9) 904689Sql147931 #define SA2400_SYNB_ONE BIT(8) /* always 1 */ 914689Sql147931 /* 924689Sql147931 * fractional compensation 934689Sql147931 * charge pump current DAC, 944689Sql147931 * 0 to 255, default 80. 954689Sql147931 */ 964689Sql147931 974689Sql147931 #define SA2400_SYNB_FC_MASK BITS(7, 0) 984689Sql147931 #define SA2400_SYNC 2 /* Synthesizer Register C */ 994689Sql147931 #define SA2400_SYNC_CP_MASK BITS(7, 6) /* charge pump current setting */ 1004689Sql147931 #define SA2400_SYNC_CP_NORMAL_ LSHIFT(0, SA2400_SYNC_CP_MASK) 1014689Sql147931 #define SA2400_SYNC_CP_THIRD_ LSHIFT(1, SA2400_SYNC_CP_MASK) 1024689Sql147931 #define SA2400_SYNC_CP_NORMAL LSHIFT(2, SA2400_SYNC_CP_MASK) /* recommended */ 1034689Sql147931 #define SA2400_SYNC_CP_THIRD LSHIFT(3, SA2400_SYNC_CP_MASK) 1044689Sql147931 1054689Sql147931 /* 1064689Sql147931 * comparison divider select, 1074689Sql147931 * 0 to 4, extra division 1084689Sql147931 * ratio is 2**SM. 1094689Sql147931 */ 1104689Sql147931 #define SA2400_SYNC_SM_MASK BITS(5, 3) 1114689Sql147931 #define SA2400_SYNC_ZERO BIT(2) /* always 0 */ 1124689Sql147931 1134689Sql147931 #define SA2400_SYND 3 /* Synthesizer Register D */ 1144689Sql147931 #define SA2400_SYND_ZERO1_MASK BITS(21, 17) /* always 0 */ 1154689Sql147931 /* 1164689Sql147931 * T[phpsu], 1: disable 1174689Sql147931 * PHP speedup pump, 1184689Sql147931 * overrides SA2400_SYND_TSPU 1194689Sql147931 */ 1204689Sql147931 #define SA2400_SYND_TPHPSU BIT(16) 1214689Sql147931 /* 1224689Sql147931 * T[spu], 1: speedup on, 1234689Sql147931 * 0: speedup off 1244689Sql147931 */ 1254689Sql147931 #define SA2400_SYND_TPSU BIT(15) 1264689Sql147931 #define SA2400_SYND_ZERO2_MASK BITS(14, 3) /* always 0 */ 1274689Sql147931 /* 1284689Sql147931 * Operating mode, filter tuner, 1294689Sql147931 * other controls 1304689Sql147931 */ 1314689Sql147931 #define SA2400_OPMODE 4 1324689Sql147931 /* 1334689Sql147931 * 1: in Rx mode, RSSI-ADC always on 1344689Sql147931 * 0: RSSI-ADC only on during AGC 1354689Sql147931 */ 1364689Sql147931 #define SA2400_OPMODE_ADC BIT(19) 1374689Sql147931 /* 1384689Sql147931 * read-only filter tuner error: 1394689Sql147931 * 1 if tuner out of range 1404689Sql147931 */ 1414689Sql147931 #define SA2400_OPMODE_FTERR BIT(18) 1424689Sql147931 /* 1434689Sql147931 * Rx & Tx filter tuning, write tuning value (test mode only) or 1444689Sql147931 * read tuner setting (in normal mode). 1454689Sql147931 */ 1464689Sql147931 #define SA2400_OPMODE_FILTTUNE_MASK BITS(17, 15) 1474689Sql147931 /* 1484689Sql147931 * external reference voltage 1494689Sql147931 * (pad v2p5) on 1504689Sql147931 */ 1514689Sql147931 #define SA2400_OPMODE_V2P5 BIT(14) 1524689Sql147931 #define SA2400_OPMODE_I1M BIT(13) /* external reference current ... */ 1534689Sql147931 #define SA2400_OPMODE_I0P3 BIT(12) /* external reference current ... */ 1544689Sql147931 /* 1554689Sql147931 * xtal input frequency, 1564689Sql147931 * 0: 44 MHz 1574689Sql147931 * 1: 22 MHz 1584689Sql147931 */ 1594689Sql147931 #define SA2400_OPMODE_IN22 BIT(10) 1604689Sql147931 #define SA2400_OPMODE_CLK BIT(9) /* reference clock output on */ 1614689Sql147931 #define SA2400_OPMODE_XO BIT(8) /* xtal oscillator on */ 1624689Sql147931 #define SA2400_OPMODE_DIGIN BIT(7) /* use digital Tx inputs (FIRDAC) */ 1634689Sql147931 /* 1644689Sql147931 * Rx output common mode voltage, 1654689Sql147931 * 0: V[DD]/2 1664689Sql147931 * 1: 1.25V 1674689Sql147931 */ 1684689Sql147931 #define SA2400_OPMODE_RXLV BIT(6) 1694689Sql147931 /* 1704689Sql147931 * make internal vco 1714689Sql147931 * available at vco pads (vcoextout) 1724689Sql147931 */ 1734689Sql147931 #define SA2400_OPMODE_VEO BIT(5) 1744689Sql147931 #define SA2400_OPMODE_VEI BIT(4) /* use external vco input (vcoextin) */ 1754689Sql147931 /* main operating mode */ 1764689Sql147931 #define SA2400_OPMODE_MODE_MASK BITS(3, 0) 1774689Sql147931 #define SA2400_OPMODE_MODE_SLEEP LSHIFT(0, SA2400_OPMODE_MODE_MASK) 1784689Sql147931 #define SA2400_OPMODE_MODE_TXRX LSHIFT(1, SA2400_OPMODE_MODE_MASK) 1794689Sql147931 #define SA2400_OPMODE_MODE_WAIT LSHIFT(2, SA2400_OPMODE_MODE_MASK) 1804689Sql147931 #define SA2400_OPMODE_MODE_RXMGC LSHIFT(3, SA2400_OPMODE_MODE_MASK) 1814689Sql147931 #define SA2400_OPMODE_MODE_FCALIB LSHIFT(4, SA2400_OPMODE_MODE_MASK) 1824689Sql147931 #define SA2400_OPMODE_MODE_DCALIB LSHIFT(5, SA2400_OPMODE_MODE_MASK) 1834689Sql147931 #define SA2400_OPMODE_MODE_FASTTXRXMGC LSHIFT(6, SA2400_OPMODE_MODE_MASK) 1844689Sql147931 #define SA2400_OPMODE_MODE_RESET LSHIFT(7, SA2400_OPMODE_MODE_MASK) 1854689Sql147931 #define SA2400_OPMODE_MODE_VCOCALIB LSHIFT(8, SA2400_OPMODE_MODE_MASK) 1864689Sql147931 1874689Sql147931 #define SA2400_OPMODE_DEFAULTS \ 1884689Sql147931 (SA2400_OPMODE_XO | SA2400_OPMODE_RXLV | SA2400_OPMODE_CLK | \ 1894689Sql147931 SA2400_OPMODE_I0P3 | LSHIFT(3, SA2400_OPMODE_FILTTUNE_MASK)) 1904689Sql147931 1914689Sql147931 #define SA2400_AGC 5 /* AGC adjustment */ 1924689Sql147931 /* 1934689Sql147931 * fine-tune AGC target: 1944689Sql147931 * -7dB to 7dB, sign bit ... 1954689Sql147931 */ 1964689Sql147931 #define SA2400_AGC_TARGETSIGN BIT(23) 1974689Sql147931 #define SA2400_AGC_TARGET_MASK BITS(22, 20) /* ... plus 0dB - 7dB */ 1984689Sql147931 /* 1994689Sql147931 * maximum AGC gain, 0 to 31, (yields 54dB to 85dB) 2004689Sql147931 */ 2014689Sql147931 #define SA2400_AGC_MAXGAIN_MASK BITS(19, 15) 2024689Sql147931 /* 2034689Sql147931 * write: settling time after baseband gain switching, units of 2044689Sql147931 * 182 nanoseconds. 2054689Sql147931 * read: output of RSSI/Tx-peak detector's ADC in 5-bit Gray code. 2064689Sql147931 */ 2074689Sql147931 #define SA2400_AGC_BBPDELAY_MASK BITS(14, 10) 2084689Sql147931 #define SA2400_AGC_ADCVAL_MASK SA2400_AGC_BBPDELAY_MASK 2094689Sql147931 2104689Sql147931 /* 2114689Sql147931 * write: settling time after LNA gain switching, units of 2124689Sql147931 * 182 nanoseconds 2134689Sql147931 * read: 2nd sample of RSSI in AGC cycle 2144689Sql147931 */ 2154689Sql147931 #define SA2400_AGC_LNADELAY_MASK BITS(9, 5) 2164689Sql147931 #define SA2400_AGC_SAMPLE2_MASK SA2400_AGC_LNADELAY_MASK 2174689Sql147931 2184689Sql147931 /* 2194689Sql147931 * write: time between turning on Rx and AGCSET, units of 2204689Sql147931 * 182 nanoseconds 2214689Sql147931 * read: 1st sample of RSSI in AGC cycle 2224689Sql147931 */ 2234689Sql147931 #define SA2400_AGC_RXONDELAY_MASK BITS(4, 0) 2244689Sql147931 #define SA2400_AGC_SAMPLE1_MASK SA2400_AGC_RXONDELAY_MASK 2254689Sql147931 2264689Sql147931 #define SA2400_MANRX 6 /* Manual receiver control settings */ 2274689Sql147931 /* 2284689Sql147931 * 1: AGC w/ high S/N---switch LNA at 2294689Sql147931 * step 52 (recommended) 2304689Sql147931 * 0: switch LNA at step 60 2314689Sql147931 */ 2324689Sql147931 #define SA2400_MANRX_AHSN BIT(23) 2334689Sql147931 2344689Sql147931 /* 2354689Sql147931 * If _RXOSQON, Q offset is 2364689Sql147931 * (_RXOSQSIGN ? -1 : 1) * (1 + _RXOSQ_MASK) * 8 millivolts, 2374689Sql147931 * otherwise, Q offset is 0. 2384689Sql147931 * 2394689Sql147931 * Ditto I offset. 2404689Sql147931 */ 2414689Sql147931 #define SA2400_MANRX_RXOSQON BIT(22) /* Rx Q-channel correction. */ 2424689Sql147931 #define SA2400_MANRX_RXOSQSIGN BIT(21) 2434689Sql147931 #define SA2400_MANRX_RXOSQ_MASK BITS(20, 18) 2444689Sql147931 2454689Sql147931 #define SA2400_MANRX_RXOSION BIT(17) /* Rx I-channel correction. */ 2464689Sql147931 #define SA2400_MANRX_RXOSISIGN BIT(16) 2474689Sql147931 #define SA2400_MANRX_RXOSI_MASK BITS(15, 13) 2484689Sql147931 /* 2494689Sql147931 * use 10MHz offset cancellation cornerpoint for brief period 2504689Sql147931 * after each gain change 2514689Sql147931 */ 2524689Sql147931 #define SA2400_MANRX_TEN BIT(12) 2534689Sql147931 2544689Sql147931 /* 2554689Sql147931 * DC offset cancellation cornerpoint select 2564689Sql147931 * write: in RXMGC, set the cornerpoint 2574689Sql147931 * read: in other modes, read AGC-controlled cornerpoint 2584689Sql147931 */ 2594689Sql147931 #define SA2400_MANRX_CORNERFREQ_MASK BITS(11, 10) 2604689Sql147931 2614689Sql147931 /* 2624689Sql147931 * write: in RXMGC mode, sets receiver gain 2634689Sql147931 * read: in other modes, read AGC-controlled gain 2644689Sql147931 */ 2654689Sql147931 #define SA2400_MANRX_RXGAIN_MASK BITS(9, 0) 2664689Sql147931 2674689Sql147931 #define SA2400_TX 7 /* Transmitter settings */ 2684689Sql147931 /* 2694689Sql147931 * Tx offsets 2704689Sql147931 * write: in test mode, sets the offsets 2714689Sql147931 * read: in normal mode, returns automatic settings 2724689Sql147931 */ 2734689Sql147931 #define SA2400_TX_TXOSQON BIT(19) 2744689Sql147931 #define SA2400_TX_TXOSQSIGN BIT(18) 2754689Sql147931 #define SA2400_TX_TXOSQ_MASK BITS(17, 15) 2764689Sql147931 #define SA2400_TX_TXOSION BIT(14) 2774689Sql147931 #define SA2400_TX_TXOSISIGN BIT(13) 2784689Sql147931 #define SA2400_TX_TXOSI_MASK BITS(12, 10) 2794689Sql147931 2804689Sql147931 /* 2814689Sql147931 * Ramp-up delay, 2824689Sql147931 * 0: 1us 2834689Sql147931 * 1: 2us 2844689Sql147931 * 2: 3us 2854689Sql147931 * 3: 4us 2864689Sql147931 * datasheet says, "ramp-up 2874689Sql147931 * time always 1us". huh? 2884689Sql147931 */ 2894689Sql147931 #define SA2400_TX_RAMP_MASK BITS(9, 8) 2904689Sql147931 /* 2914689Sql147931 * Transmitter gain settings 2924689Sql147931 * for TXHI output 2934689Sql147931 */ 2944689Sql147931 #define SA2400_TX_HIGAIN_MASK BITS(7, 4) 2954689Sql147931 /* 2964689Sql147931 * Transmitter gain settings 2974689Sql147931 * for TXLO output 2984689Sql147931 */ 2994689Sql147931 #define SA2400_TX_LOGAIN_MASK BITS(3, 0) 3004689Sql147931 3014689Sql147931 #define SA2400_VCO 8 /* VCO settings */ 3024689Sql147931 #define SA2400_VCO_ZERO BITS(6, 5) /* always zero */ 3034689Sql147931 /* 3044689Sql147931 * VCO calibration error flag---no 3054689Sql147931 * band with low enough frequency 3064689Sql147931 * could be found 3074689Sql147931 */ 3084689Sql147931 #define SA2400_VCO_VCERR BIT(4) 3094689Sql147931 /* 3104689Sql147931 * VCO band, 3114689Sql147931 * write: in test mode, sets 3124689Sql147931 * VCO band 3134689Sql147931 * read: in normal mode, 3144689Sql147931 * the result of 3154689Sql147931 * calibration (VCOCAL). 3164689Sql147931 * 0 = highest 3174689Sql147931 * frequencies 3184689Sql147931 */ 3194689Sql147931 #define SA2400_VCO_VCOBAND_MASK BITS(3, 0) 320*10448SMikore.Li@Sun.COM #ifdef __cplusplus 321*10448SMikore.Li@Sun.COM } 322*10448SMikore.Li@Sun.COM #endif 323*10448SMikore.Li@Sun.COM 3244689Sql147931 #endif /* _SA2400REG_H_ */ 325