xref: /onnv-gate/usr/src/uts/common/io/rtw/sa2400reg.h (revision 10448:fe6b44e693c2)
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