summaryrefslogtreecommitdiff
path: root/sys/dev/ic/al2210reg.h
blob: c7f802a84a2dc495c5f7a685eac6bf466ffc7c3e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
/* $NetBSD: al2210reg.h,v 1.5 2009/10/19 23:19:39 rmind Exp $ */

/*
 * Copyright (c) 2004 David Young.  All rights reserved.
 *
 * This code was written by David Young.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 *
 * THIS SOFTWARE IS PROVIDED BY David Young ``AS IS'' AND ANY
 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
 * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL David
 * Young BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
 * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
 * OF SUCH DAMAGE.
 */

#ifndef _DEV_IC_AL2210REG_H_
#define	_DEV_IC_AL2210REG_H_

/*
 * Register definitions for the Airoha AL2210 2.4GHz 802.11b
 * transceiver.
 */

/* NOTE WELL: These register definitions, in spite of being derived
 * from an "official" Airoha AL2210 datasheet, contain a lot of
 * "magic." Comparing with the magic in this header file with a
 * reference driver that also contains AL2210 magic, the magic does
 * not match!
 */

/*
 * Serial bus format for Airoha AL2210 2.4GHz transceiver.
 */
#define	AL2210_TWI_DATA_MASK	__BITS(23, 4)
#define	AL2210_TWI_ADDR_MASK	__BITS(3, 0)

/*
 * Registers for Airoha AL2210.
 */

/* The synthesizer magic should be decipherable, but I'm not going
 * to waste my time right now.
 */
#define AL2210_CHANNEL		0x0
#define		AL2210_CHANNEL_B_MASK		__BITS(10, 5)	/* Counter B */
#define		AL2210_CHANNEL_B_2412MHZ	0x396
#define		AL2210_CHANNEL_B_2417MHZ	0x396
#define		AL2210_CHANNEL_B_2422MHZ	0x396
#define		AL2210_CHANNEL_B_2427MHZ	0x396
#define		AL2210_CHANNEL_B_2432MHZ	0x398
#define		AL2210_CHANNEL_B_2437MHZ	0x398
#define		AL2210_CHANNEL_B_2442MHZ	0x398
#define		AL2210_CHANNEL_B_2447MHZ	0x398
#define		AL2210_CHANNEL_B_2452MHZ	0x398
#define		AL2210_CHANNEL_B_2457MHZ	0x398
#define		AL2210_CHANNEL_B_2462MHZ	0x398
#define		AL2210_CHANNEL_B_2467MHZ	0x39a
#define		AL2210_CHANNEL_B_2472MHZ	0x39a
#define		AL2210_CHANNEL_B_2484MHZ	0x39b
#define		AL2210_CHANNEL_A_MASK		__BITS(4, 0)	/* Counter A */
#define		AL2210_CHANNEL_A_2412MHZ	0x0c
#define		AL2210_CHANNEL_A_2417MHZ	0x11
#define		AL2210_CHANNEL_A_2422MHZ	0x16
#define		AL2210_CHANNEL_A_2427MHZ	0x1b
#define		AL2210_CHANNEL_A_2432MHZ	0x00
#define		AL2210_CHANNEL_A_2437MHZ	0x05
#define		AL2210_CHANNEL_A_2442MHZ	0x0a
#define		AL2210_CHANNEL_A_2447MHZ	0x0f
#define		AL2210_CHANNEL_A_2452MHZ	0x14
#define		AL2210_CHANNEL_A_2457MHZ	0x10
#define		AL2210_CHANNEL_A_2462MHZ	0x1e
#define		AL2210_CHANNEL_A_2467MHZ	0x03
#define		AL2210_CHANNEL_A_2472MHZ	0x08
#define		AL2210_CHANNEL_A_2484MHZ	0x14

#define AL2210_SYNTHESIZER	0x1
#define		AL2210_SYNTHESIZER_R_MASK	__BITS(4, 0)	/* Reference
								 * divider
								 */
#define AL2210_RECEIVER		0x2
/* Rx VAGC Detector Negative Edge Threshold */
#define		AL2210_RECEIVER_AGCDET_P_MASK	__BITS(16, 15)
#define		AL2210_RECEIVER_AGCDET_P_0_4V	0	/* 0.4V */
#define		AL2210_RECEIVER_AGCDET_P_0_3V	1	/* 0.3V */
#define		AL2210_RECEIVER_AGCDET_P_0_2V	2	/* 0.2V */
#define		AL2210_RECEIVER_AGCDET_P_RSVD	3	/* reserved */
/* Rx VAGC Detector Negative Edge Threshold */
#define		AL2210_RECEIVER_AGCDET_N_MASK	__BITS(14, 13)
#define		AL2210_RECEIVER_AGCDET_N_0_4V	0	/* 0.4V */
#define		AL2210_RECEIVER_AGCDET_N_0_3V	1	/* 0.3V */
#define		AL2210_RECEIVER_AGCDET_N_0_2V	2	/* 0.2V */
#define		AL2210_RECEIVER_AGCDET_N_RSVD	3	/* reserved */
/* AGC detector control, 1: enable, 0: disable. */
#define		AL2210_RECEIVER_AGCDETENA	__BIT(11)
/* Rx filter bandwidth select */
#define		AL2210_RECEIVER_BW_SEL_MASK	__BITS(4, 2)
#define		AL2210_RECEIVER_BW_SEL_9_5MHZ	0
#define		AL2210_RECEIVER_BW_SEL_9MHZ	1
#define		AL2210_RECEIVER_BW_SEL_8_5MHZ	2
#define		AL2210_RECEIVER_BW_SEL_8MHZ	3
#define		AL2210_RECEIVER_BW_SEL_7_5MHZ	4
#define		AL2210_RECEIVER_BW_SEL_7MHZ	5
#define		AL2210_RECEIVER_BW_SEL_6_5MHZ	6
#define		AL2210_RECEIVER_BW_SEL_6MHZ	7

#define AL2210_TRANSMITTER	0x3
/* 2nd-stage power amplifier current control.  Units of 20uA.
 * "Full scale" current is 300uA.  (Is full-scale at PABIAS2 = 0 or
 * at PABIAS2 = 15?)
 */
#define		AL2210_TRANSMITTER_PABIAS2_MASK	__BITS(7, 4)
/* 1st-stage power amplifier current control.  Units of 20uA.
 * "Full scale" current is 300uA.  (Is full-scale at PABIAS2 = 0 or
 * at PABIAS2 = 15?)
 */
#define		AL2210_TRANSMITTER_PABIAS1_MASK	__BITS(3, 0)

#define AL2210_CONFIG1		0x4

#define AL2210_CONFIG2		0x5
/* Regulator power.  0: on, 1: off. */
#define		AL2210_CONFIG2_REGPD_MASK	__BIT(19)
/* XO clock setting.   0: 44MHz, 1: 22MHz. */
#define		AL2210_CONFIG2_XTAL_SC_MASK	__BIT(10)

/* DC Offset Calibration (DCOC) */
#define AL2210_CONFIG3		0x6
/* Select 1MHz DCOC timing. */
#define		AL2210_CONFIG3_AGC_DET_PATT_1MHZ	__BIT(17)
/* Select 100kHz DCOC timing. */
#define		AL2210_CONFIG3_AGC_DET_PATT_100KHZ	__BIT(16)
#define		AL2210_CONFIG3_LNA_GAIN_PATT_1MHZ	__BITS(15)
#define		AL2210_CONFIG3_LNA_GAIN_PATT_100KHZ	__BITS(14)
#define		AL2210_CONFIG3_RXON_PATT_1MHZ		__BITS(13)
#define		AL2210_CONFIG3_RXON_PATT_1OOKHZ		__BITS(12)
/* 1MHz DCOC duration?  Microseconds. */
#define		AL2210_CONFIG3_CNT_1M_AGC_MASK		__BITS(11, 8)
#define		AL2210_CONFIG3_CNT_1M_LNA_MASK		__BITS(7, 4)
#define		AL2210_CONFIG3_CNT_1M_RXON_MASK		__BITS(3, 0)

#define AL2210_CONFIG4		0x7
/* 100kHz DCOC duration?  Microseconds. */
#define		AL2210_CONFIG4_CNT_100K_AGC_MASK	__BITS(11, 8)
#define		AL2210_CONFIG4_CNT_100K_LNA_MASK	__BITS(7, 4)
#define		AL2210_CONFIG4_CNT_100K_RXON_MASK	__BITS(3, 0)

#define AL2210_CONFIG5		0x8
#define		AL2210_CONFIG5_TXF_BW_MASK		__BITS(9, 8)
#define		AL2210_CONFIG5_TXF_BW_12MHZ		3
#define		AL2210_CONFIG5_TXF_BW_11MHZ		2
#define		AL2210_CONFIG5_TXF_BW_10MHZ		1
#define		AL2210_CONFIG5_TXF_BW_9MHZ		0

#define AL2210_CONFIG6		0x9
#define	AL2210_CONFIG6_DEFAULT	0x2c0009	/* magic */

#define AL2210_CONFIG7		0xa
#define	AL2210_CONFIG7_DEFAULT	0x001c0a	/* magic */

#define AL2210_CONFIG8		0xb
#define	AL2210_CONFIG8_DEFAULT	0x01000b	/* magic */

#endif /* _DEV_IC_AL2210REG_H_ */