]> err.no Git - linux-2.6/blob - drivers/net/wireless/b43/tables_nphy.c
b43: Add NPHY radio init code
[linux-2.6] / drivers / net / wireless / b43 / tables_nphy.c
1 /*
2
3   Broadcom B43 wireless driver
4   IEEE 802.11n PHY and radio device data tables
5
6   Copyright (c) 2008 Michael Buesch <mb@bu3sch.de>
7
8   This program is free software; you can redistribute it and/or modify
9   it under the terms of the GNU General Public License as published by
10   the Free Software Foundation; either version 2 of the License, or
11   (at your option) any later version.
12
13   This program is distributed in the hope that it will be useful,
14   but WITHOUT ANY WARRANTY; without even the implied warranty of
15   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16   GNU General Public License for more details.
17
18   You should have received a copy of the GNU General Public License
19   along with this program; see the file COPYING.  If not, write to
20   the Free Software Foundation, Inc., 51 Franklin Steet, Fifth Floor,
21   Boston, MA 02110-1301, USA.
22
23 */
24
25 #include "b43.h"
26 #include "tables_nphy.h"
27 #include "phy.h"
28 #include "nphy.h"
29
30
31 struct b2055_inittab_entry {
32         /* Value to write if we use the 5GHz band. */
33         u16 ghz5;
34         /* Value to write if we use the 2.4GHz band. */
35         u16 ghz2;
36         /* Flags */
37         u8 flags;
38 #define B2055_INITTAB_ENTRY_OK  0x01
39 #define B2055_INITTAB_UPLOAD    0x02
40 };
41 #define UPLOAD          .flags = B2055_INITTAB_ENTRY_OK | B2055_INITTAB_UPLOAD
42 #define NOUPLOAD        .flags = B2055_INITTAB_ENTRY_OK
43
44 static struct b2055_inittab_entry b2055_inittab [] = {
45   [B2055_SP_PINPD]              = { .ghz5 = 0x0080, .ghz2 = 0x0080, NOUPLOAD, },
46   [B2055_C1_SP_RSSI]            = { .ghz5 = 0x0000, .ghz2 = 0x0000, NOUPLOAD, },
47   [B2055_C1_SP_PDMISC]          = { .ghz5 = 0x0027, .ghz2 = 0x0027, NOUPLOAD, },
48   [B2055_C2_SP_RSSI]            = { .ghz5 = 0x0000, .ghz2 = 0x0000, NOUPLOAD, },
49   [B2055_C2_SP_PDMISC]          = { .ghz5 = 0x0027, .ghz2 = 0x0027, NOUPLOAD, },
50   [B2055_C1_SP_RXGC1]           = { .ghz5 = 0x007F, .ghz2 = 0x007F, UPLOAD, },
51   [B2055_C1_SP_RXGC2]           = { .ghz5 = 0x0007, .ghz2 = 0x0007, UPLOAD, },
52   [B2055_C2_SP_RXGC1]           = { .ghz5 = 0x007F, .ghz2 = 0x007F, UPLOAD, },
53   [B2055_C2_SP_RXGC2]           = { .ghz5 = 0x0007, .ghz2 = 0x0007, UPLOAD, },
54   [B2055_C1_SP_LPFBWSEL]        = { .ghz5 = 0x0015, .ghz2 = 0x0015, NOUPLOAD, },
55   [B2055_C2_SP_LPFBWSEL]        = { .ghz5 = 0x0015, .ghz2 = 0x0015, NOUPLOAD, },
56   [B2055_C1_SP_TXGC1]           = { .ghz5 = 0x004F, .ghz2 = 0x004F, UPLOAD, },
57   [B2055_C1_SP_TXGC2]           = { .ghz5 = 0x0005, .ghz2 = 0x0005, UPLOAD, },
58   [B2055_C2_SP_TXGC1]           = { .ghz5 = 0x004F, .ghz2 = 0x004F, UPLOAD, },
59   [B2055_C2_SP_TXGC2]           = { .ghz5 = 0x0005, .ghz2 = 0x0005, UPLOAD, },
60   [B2055_MASTER1]               = { .ghz5 = 0x00D0, .ghz2 = 0x00D0, NOUPLOAD, },
61   [B2055_MASTER2]               = { .ghz5 = 0x0002, .ghz2 = 0x0002, NOUPLOAD, },
62   [B2055_PD_LGEN]               = { .ghz5 = 0x0000, .ghz2 = 0x0000, NOUPLOAD, },
63   [B2055_PD_PLLTS]              = { .ghz5 = 0x0040, .ghz2 = 0x0040, NOUPLOAD, },
64   [B2055_C1_PD_LGBUF]           = { .ghz5 = 0x0000, .ghz2 = 0x0000, NOUPLOAD, },
65   [B2055_C1_PD_TX]              = { .ghz5 = 0x0000, .ghz2 = 0x0000, NOUPLOAD, },
66   [B2055_C1_PD_RXTX]            = { .ghz5 = 0x0000, .ghz2 = 0x0000, NOUPLOAD, },
67   [B2055_C1_PD_RSSIMISC]        = { .ghz5 = 0x0000, .ghz2 = 0x0000, NOUPLOAD, },
68   [B2055_C2_PD_LGBUF]           = { .ghz5 = 0x0000, .ghz2 = 0x0000, NOUPLOAD, },
69   [B2055_C2_PD_TX]              = { .ghz5 = 0x0000, .ghz2 = 0x0000, NOUPLOAD, },
70   [B2055_C2_PD_RXTX]            = { .ghz5 = 0x0000, .ghz2 = 0x0000, NOUPLOAD, },
71   [B2055_C2_PD_RSSIMISC]        = { .ghz5 = 0x0000, .ghz2 = 0x0000, NOUPLOAD, },
72   [B2055_PWRDET_LGEN]           = { .ghz5 = 0x00C0, .ghz2 = 0x00C0, NOUPLOAD, },
73   [B2055_C1_PWRDET_LGBUF]       = { .ghz5 = 0x00FF, .ghz2 = 0x00FF, NOUPLOAD, },
74   [B2055_C1_PWRDET_RXTX]        = { .ghz5 = 0x00C0, .ghz2 = 0x00C0, NOUPLOAD, },
75   [B2055_C2_PWRDET_LGBUF]       = { .ghz5 = 0x00FF, .ghz2 = 0x00FF, NOUPLOAD, },
76   [B2055_C2_PWRDET_RXTX]        = { .ghz5 = 0x00C0, .ghz2 = 0x00C0, NOUPLOAD, },
77   [B2055_RRCCAL_CS]             = { .ghz5 = 0x0000, .ghz2 = 0x0000, NOUPLOAD, },
78   [B2055_RRCCAL_NOPTSEL]        = { .ghz5 = 0x002C, .ghz2 = 0x002C, NOUPLOAD, },
79   [B2055_CAL_MISC]              = { .ghz5 = 0x0000, .ghz2 = 0x0000, NOUPLOAD, },
80   [B2055_CAL_COUT]              = { .ghz5 = 0x0000, .ghz2 = 0x0000, NOUPLOAD, },
81   [B2055_CAL_COUT2]             = { .ghz5 = 0x0000, .ghz2 = 0x0000, NOUPLOAD, },
82   [B2055_CAL_CVARCTL]           = { .ghz5 = 0x0000, .ghz2 = 0x0000, NOUPLOAD, },
83   [B2055_CAL_RVARCTL]           = { .ghz5 = 0x0000, .ghz2 = 0x0000, NOUPLOAD, },
84   [B2055_CAL_LPOCTL]            = { .ghz5 = 0x0000, .ghz2 = 0x0000, NOUPLOAD, },
85   [B2055_CAL_TS]                = { .ghz5 = 0x0000, .ghz2 = 0x0000, NOUPLOAD, },
86   [B2055_CAL_RCCALRTS]          = { .ghz5 = 0x0000, .ghz2 = 0x0000, NOUPLOAD, },
87   [B2055_CAL_RCALRTS]           = { .ghz5 = 0x0000, .ghz2 = 0x0000, NOUPLOAD, },
88   [B2055_PADDRV]                = { .ghz5 = 0x00A4, .ghz2 = 0x00A4, NOUPLOAD, },
89   [B2055_XOCTL1]                = { .ghz5 = 0x0038, .ghz2 = 0x0038, NOUPLOAD, },
90   [B2055_XOCTL2]                = { .ghz5 = 0x0000, .ghz2 = 0x0000, NOUPLOAD, },
91   [B2055_XOREGUL]               = { .ghz5 = 0x0004, .ghz2 = 0x0004, UPLOAD, },
92   [B2055_XOMISC]                = { .ghz5 = 0x0000, .ghz2 = 0x0000, NOUPLOAD, },
93   [B2055_PLL_LFC1]              = { .ghz5 = 0x000A, .ghz2 = 0x000A, NOUPLOAD, },
94   [B2055_PLL_CALVTH]            = { .ghz5 = 0x0087, .ghz2 = 0x0087, NOUPLOAD, },
95   [B2055_PLL_LFC2]              = { .ghz5 = 0x0009, .ghz2 = 0x0009, NOUPLOAD, },
96   [B2055_PLL_REF]               = { .ghz5 = 0x0070, .ghz2 = 0x0070, NOUPLOAD, },
97   [B2055_PLL_LFR1]              = { .ghz5 = 0x0011, .ghz2 = 0x0011, NOUPLOAD, },
98   [B2055_PLL_PFDCP]             = { .ghz5 = 0x0018, .ghz2 = 0x0018, UPLOAD, },
99   [B2055_PLL_IDAC_CPOPAMP]      = { .ghz5 = 0x0006, .ghz2 = 0x0006, NOUPLOAD, },
100   [B2055_PLL_CPREG]             = { .ghz5 = 0x0004, .ghz2 = 0x0004, UPLOAD, },
101   [B2055_PLL_RCAL]              = { .ghz5 = 0x0006, .ghz2 = 0x0006, NOUPLOAD, },
102   [B2055_RF_PLLMOD0]            = { .ghz5 = 0x009E, .ghz2 = 0x009E, NOUPLOAD, },
103   [B2055_RF_PLLMOD1]            = { .ghz5 = 0x0009, .ghz2 = 0x0009, NOUPLOAD, },
104   [B2055_RF_MMDIDAC1]           = { .ghz5 = 0x00C8, .ghz2 = 0x00C8, UPLOAD, },
105   [B2055_RF_MMDIDAC0]           = { .ghz5 = 0x0088, .ghz2 = 0x0088, NOUPLOAD, },
106   [B2055_RF_MMDSP]              = { .ghz5 = 0x0000, .ghz2 = 0x0000, NOUPLOAD, },
107   [B2055_VCO_CAL1]              = { .ghz5 = 0x0000, .ghz2 = 0x0000, NOUPLOAD, },
108   [B2055_VCO_CAL2]              = { .ghz5 = 0x0000, .ghz2 = 0x0000, NOUPLOAD, },
109   [B2055_VCO_CAL3]              = { .ghz5 = 0x0001, .ghz2 = 0x0001, NOUPLOAD, },
110   [B2055_VCO_CAL4]              = { .ghz5 = 0x0002, .ghz2 = 0x0002, NOUPLOAD, },
111   [B2055_VCO_CAL5]              = { .ghz5 = 0x0096, .ghz2 = 0x0096, NOUPLOAD, },
112   [B2055_VCO_CAL6]              = { .ghz5 = 0x003E, .ghz2 = 0x003E, NOUPLOAD, },
113   [B2055_VCO_CAL7]              = { .ghz5 = 0x003E, .ghz2 = 0x003E, NOUPLOAD, },
114   [B2055_VCO_CAL8]              = { .ghz5 = 0x0013, .ghz2 = 0x0013, NOUPLOAD, },
115   [B2055_VCO_CAL9]              = { .ghz5 = 0x0002, .ghz2 = 0x0002, NOUPLOAD, },
116   [B2055_VCO_CAL10]             = { .ghz5 = 0x0015, .ghz2 = 0x0015, NOUPLOAD, },
117   [B2055_VCO_CAL11]             = { .ghz5 = 0x0007, .ghz2 = 0x0007, NOUPLOAD, },
118   [B2055_VCO_CAL12]             = { .ghz5 = 0x0000, .ghz2 = 0x0000, NOUPLOAD, },
119   [B2055_VCO_CAL13]             = { .ghz5 = 0x0000, .ghz2 = 0x0000, NOUPLOAD, },
120   [B2055_VCO_CAL14]             = { .ghz5 = 0x0000, .ghz2 = 0x0000, NOUPLOAD, },
121   [B2055_VCO_CAL15]             = { .ghz5 = 0x0000, .ghz2 = 0x0000, NOUPLOAD, },
122   [B2055_VCO_CAL16]             = { .ghz5 = 0x0000, .ghz2 = 0x0000, NOUPLOAD, },
123   [B2055_VCO_KVCO]              = { .ghz5 = 0x0008, .ghz2 = 0x0008, NOUPLOAD, },
124   [B2055_VCO_CAPTAIL]           = { .ghz5 = 0x0008, .ghz2 = 0x0008, NOUPLOAD, },
125   [B2055_VCO_IDACVCO]           = { .ghz5 = 0x0006, .ghz2 = 0x0006, NOUPLOAD, },
126   [B2055_VCO_REG]               = { .ghz5 = 0x0084, .ghz2 = 0x0084, UPLOAD, },
127   [B2055_PLL_RFVTH]             = { .ghz5 = 0x00C3, .ghz2 = 0x00C3, NOUPLOAD, },
128   [B2055_LGBUF_CENBUF]          = { .ghz5 = 0x008F, .ghz2 = 0x008F, NOUPLOAD, },
129   [B2055_LGEN_TUNE1]            = { .ghz5 = 0x00FF, .ghz2 = 0x00FF, NOUPLOAD, },
130   [B2055_LGEN_TUNE2]            = { .ghz5 = 0x00FF, .ghz2 = 0x00FF, NOUPLOAD, },
131   [B2055_LGEN_IDAC1]            = { .ghz5 = 0x0088, .ghz2 = 0x0088, NOUPLOAD, },
132   [B2055_LGEN_IDAC2]            = { .ghz5 = 0x0088, .ghz2 = 0x0088, NOUPLOAD, },
133   [B2055_LGEN_BIASC]            = { .ghz5 = 0x0000, .ghz2 = 0x0000, NOUPLOAD, },
134   [B2055_LGEN_BIASIDAC]         = { .ghz5 = 0x00CC, .ghz2 = 0x00CC, NOUPLOAD, },
135   [B2055_LGEN_RCAL]             = { .ghz5 = 0x0006, .ghz2 = 0x0006, NOUPLOAD, },
136   [B2055_LGEN_DIV]              = { .ghz5 = 0x0080, .ghz2 = 0x0080, NOUPLOAD, },
137   [B2055_LGEN_SPARE2]           = { .ghz5 = 0x0080, .ghz2 = 0x0080, NOUPLOAD, },
138   [B2055_C1_LGBUF_ATUNE]        = { .ghz5 = 0x00F8, .ghz2 = 0x00F8, NOUPLOAD, },
139   [B2055_C1_LGBUF_GTUNE]        = { .ghz5 = 0x0088, .ghz2 = 0x0088, NOUPLOAD, },
140   [B2055_C1_LGBUF_DIV]          = { .ghz5 = 0x0088, .ghz2 = 0x0088, NOUPLOAD, },
141   [B2055_C1_LGBUF_AIDAC]        = { .ghz5 = 0x0088, .ghz2 = 0x0008, UPLOAD, },
142   [B2055_C1_LGBUF_GIDAC]        = { .ghz5 = 0x0088, .ghz2 = 0x0088, NOUPLOAD, },
143   [B2055_C1_LGBUF_IDACFO]       = { .ghz5 = 0x0000, .ghz2 = 0x0000, NOUPLOAD, },
144   [B2055_C1_LGBUF_SPARE]        = { .ghz5 = 0x0001, .ghz2 = 0x0001, UPLOAD, },
145   [B2055_C1_RX_RFSPC1]          = { .ghz5 = 0x008A, .ghz2 = 0x008A, NOUPLOAD, },
146   [B2055_C1_RX_RFR1]            = { .ghz5 = 0x0008, .ghz2 = 0x0008, NOUPLOAD, },
147   [B2055_C1_RX_RFR2]            = { .ghz5 = 0x0083, .ghz2 = 0x0083, NOUPLOAD, },
148   [B2055_C1_RX_RFRCAL]          = { .ghz5 = 0x0006, .ghz2 = 0x0006, NOUPLOAD, },
149   [B2055_C1_RX_BB_BLCMP]        = { .ghz5 = 0x00A0, .ghz2 = 0x00A0, NOUPLOAD, },
150   [B2055_C1_RX_BB_LPF]          = { .ghz5 = 0x000A, .ghz2 = 0x000A, NOUPLOAD, },
151   [B2055_C1_RX_BB_MIDACHP]      = { .ghz5 = 0x0087, .ghz2 = 0x0087, UPLOAD, },
152   [B2055_C1_RX_BB_VGA1IDAC]     = { .ghz5 = 0x002A, .ghz2 = 0x002A, NOUPLOAD, },
153   [B2055_C1_RX_BB_VGA2IDAC]     = { .ghz5 = 0x002A, .ghz2 = 0x002A, NOUPLOAD, },
154   [B2055_C1_RX_BB_VGA3IDAC]     = { .ghz5 = 0x002A, .ghz2 = 0x002A, NOUPLOAD, },
155   [B2055_C1_RX_BB_BUFOCTL]      = { .ghz5 = 0x002A, .ghz2 = 0x002A, NOUPLOAD, },
156   [B2055_C1_RX_BB_RCCALCTL]     = { .ghz5 = 0x0018, .ghz2 = 0x0018, NOUPLOAD, },
157   [B2055_C1_RX_BB_RSSICTL1]     = { .ghz5 = 0x006A, .ghz2 = 0x006A, UPLOAD, },
158   [B2055_C1_RX_BB_RSSICTL2]     = { .ghz5 = 0x00AB, .ghz2 = 0x00AB, UPLOAD, },
159   [B2055_C1_RX_BB_RSSICTL3]     = { .ghz5 = 0x0013, .ghz2 = 0x0013, UPLOAD, },
160   [B2055_C1_RX_BB_RSSICTL4]     = { .ghz5 = 0x00C1, .ghz2 = 0x00C1, UPLOAD, },
161   [B2055_C1_RX_BB_RSSICTL5]     = { .ghz5 = 0x00AA, .ghz2 = 0x00AA, UPLOAD, },
162   [B2055_C1_RX_BB_REG]          = { .ghz5 = 0x0087, .ghz2 = 0x0087, UPLOAD, },
163   [B2055_C1_RX_BB_SPARE1]       = { .ghz5 = 0x0000, .ghz2 = 0x0000, NOUPLOAD, },
164   [B2055_C1_RX_TXBBRCAL]        = { .ghz5 = 0x0006, .ghz2 = 0x0006, NOUPLOAD, },
165   [B2055_C1_TX_RF_SPGA]         = { .ghz5 = 0x0007, .ghz2 = 0x0007, NOUPLOAD, },
166   [B2055_C1_TX_RF_SPAD]         = { .ghz5 = 0x0007, .ghz2 = 0x0007, NOUPLOAD, },
167   [B2055_C1_TX_RF_CNTPGA1]      = { .ghz5 = 0x0015, .ghz2 = 0x0015, NOUPLOAD, },
168   [B2055_C1_TX_RF_CNTPAD1]      = { .ghz5 = 0x0055, .ghz2 = 0x0055, NOUPLOAD, },
169   [B2055_C1_TX_RF_PGAIDAC]      = { .ghz5 = 0x0097, .ghz2 = 0x0097, UPLOAD, },
170   [B2055_C1_TX_PGAPADTN]        = { .ghz5 = 0x0008, .ghz2 = 0x0008, NOUPLOAD, },
171   [B2055_C1_TX_PADIDAC1]        = { .ghz5 = 0x0014, .ghz2 = 0x0014, UPLOAD, },
172   [B2055_C1_TX_PADIDAC2]        = { .ghz5 = 0x0033, .ghz2 = 0x0033, NOUPLOAD, },
173   [B2055_C1_TX_MXBGTRIM]        = { .ghz5 = 0x0088, .ghz2 = 0x0088, NOUPLOAD, },
174   [B2055_C1_TX_RF_RCAL]         = { .ghz5 = 0x0006, .ghz2 = 0x0006, NOUPLOAD, },
175   [B2055_C1_TX_RF_PADTSSI1]     = { .ghz5 = 0x0003, .ghz2 = 0x0003, UPLOAD, },
176   [B2055_C1_TX_RF_PADTSSI2]     = { .ghz5 = 0x000A, .ghz2 = 0x000A, NOUPLOAD, },
177   [B2055_C1_TX_RF_SPARE]        = { .ghz5 = 0x0003, .ghz2 = 0x0003, UPLOAD, },
178   [B2055_C1_TX_RF_IQCAL1]       = { .ghz5 = 0x002A, .ghz2 = 0x002A, NOUPLOAD, },
179   [B2055_C1_TX_RF_IQCAL2]       = { .ghz5 = 0x00A4, .ghz2 = 0x00A4, NOUPLOAD, },
180   [B2055_C1_TXBB_RCCAL]         = { .ghz5 = 0x0018, .ghz2 = 0x0018, NOUPLOAD, },
181   [B2055_C1_TXBB_LPF1]          = { .ghz5 = 0x0028, .ghz2 = 0x0028, NOUPLOAD, },
182   [B2055_C1_TX_VOSCNCL]         = { .ghz5 = 0x0000, .ghz2 = 0x0000, NOUPLOAD, },
183   [B2055_C1_TX_LPF_MXGMIDAC]    = { .ghz5 = 0x004A, .ghz2 = 0x004A, NOUPLOAD, },
184   [B2055_C1_TX_BB_MXGM]         = { .ghz5 = 0x0000, .ghz2 = 0x0000, NOUPLOAD, },
185   [B2055_C2_LGBUF_ATUNE]        = { .ghz5 = 0x00F8, .ghz2 = 0x00F8, NOUPLOAD, },
186   [B2055_C2_LGBUF_GTUNE]        = { .ghz5 = 0x0088, .ghz2 = 0x0088, NOUPLOAD, },
187   [B2055_C2_LGBUF_DIV]          = { .ghz5 = 0x0088, .ghz2 = 0x0088, NOUPLOAD, },
188   [B2055_C2_LGBUF_AIDAC]        = { .ghz5 = 0x0088, .ghz2 = 0x0008, UPLOAD, },
189   [B2055_C2_LGBUF_GIDAC]        = { .ghz5 = 0x0088, .ghz2 = 0x0088, NOUPLOAD, },
190   [B2055_C2_LGBUF_IDACFO]       = { .ghz5 = 0x0000, .ghz2 = 0x0000, NOUPLOAD, },
191   [B2055_C2_LGBUF_SPARE]        = { .ghz5 = 0x0001, .ghz2 = 0x0001, UPLOAD, },
192   [B2055_C2_RX_RFSPC1]          = { .ghz5 = 0x008A, .ghz2 = 0x008A, NOUPLOAD, },
193   [B2055_C2_RX_RFR1]            = { .ghz5 = 0x0008, .ghz2 = 0x0008, NOUPLOAD, },
194   [B2055_C2_RX_RFR2]            = { .ghz5 = 0x0083, .ghz2 = 0x0083, NOUPLOAD, },
195   [B2055_C2_RX_RFRCAL]          = { .ghz5 = 0x0006, .ghz2 = 0x0006, NOUPLOAD, },
196   [B2055_C2_RX_BB_BLCMP]        = { .ghz5 = 0x00A0, .ghz2 = 0x00A0, NOUPLOAD, },
197   [B2055_C2_RX_BB_LPF]          = { .ghz5 = 0x000A, .ghz2 = 0x000A, NOUPLOAD, },
198   [B2055_C2_RX_BB_MIDACHP]      = { .ghz5 = 0x0087, .ghz2 = 0x0087, UPLOAD, },
199   [B2055_C2_RX_BB_VGA1IDAC]     = { .ghz5 = 0x002A, .ghz2 = 0x002A, NOUPLOAD, },
200   [B2055_C2_RX_BB_VGA2IDAC]     = { .ghz5 = 0x002A, .ghz2 = 0x002A, NOUPLOAD, },
201   [B2055_C2_RX_BB_VGA3IDAC]     = { .ghz5 = 0x002A, .ghz2 = 0x002A, NOUPLOAD, },
202   [B2055_C2_RX_BB_BUFOCTL]      = { .ghz5 = 0x002A, .ghz2 = 0x002A, NOUPLOAD, },
203   [B2055_C2_RX_BB_RCCALCTL]     = { .ghz5 = 0x0018, .ghz2 = 0x0018, NOUPLOAD, },
204   [B2055_C2_RX_BB_RSSICTL1]     = { .ghz5 = 0x006A, .ghz2 = 0x006A, UPLOAD, },
205   [B2055_C2_RX_BB_RSSICTL2]     = { .ghz5 = 0x00AB, .ghz2 = 0x00AB, UPLOAD, },
206   [B2055_C2_RX_BB_RSSICTL3]     = { .ghz5 = 0x0013, .ghz2 = 0x0013, UPLOAD, },
207   [B2055_C2_RX_BB_RSSICTL4]     = { .ghz5 = 0x00C1, .ghz2 = 0x00C1, UPLOAD, },
208   [B2055_C2_RX_BB_RSSICTL5]     = { .ghz5 = 0x00AA, .ghz2 = 0x00AA, UPLOAD, },
209   [B2055_C2_RX_BB_REG]          = { .ghz5 = 0x0087, .ghz2 = 0x0087, UPLOAD, },
210   [B2055_C2_RX_BB_SPARE1]       = { .ghz5 = 0x0000, .ghz2 = 0x0000, NOUPLOAD, },
211   [B2055_C2_RX_TXBBRCAL]        = { .ghz5 = 0x0006, .ghz2 = 0x0006, NOUPLOAD, },
212   [B2055_C2_TX_RF_SPGA]         = { .ghz5 = 0x0007, .ghz2 = 0x0007, NOUPLOAD, },
213   [B2055_C2_TX_RF_SPAD]         = { .ghz5 = 0x0007, .ghz2 = 0x0007, NOUPLOAD, },
214   [B2055_C2_TX_RF_CNTPGA1]      = { .ghz5 = 0x0015, .ghz2 = 0x0015, NOUPLOAD, },
215   [B2055_C2_TX_RF_CNTPAD1]      = { .ghz5 = 0x0055, .ghz2 = 0x0055, NOUPLOAD, },
216   [B2055_C2_TX_RF_PGAIDAC]      = { .ghz5 = 0x0097, .ghz2 = 0x0097, UPLOAD, },
217   [B2055_C2_TX_PGAPADTN]        = { .ghz5 = 0x0008, .ghz2 = 0x0008, NOUPLOAD, },
218   [B2055_C2_TX_PADIDAC1]        = { .ghz5 = 0x0014, .ghz2 = 0x0014, UPLOAD, },
219   [B2055_C2_TX_PADIDAC2]        = { .ghz5 = 0x0033, .ghz2 = 0x0033, NOUPLOAD, },
220   [B2055_C2_TX_MXBGTRIM]        = { .ghz5 = 0x0088, .ghz2 = 0x0088, NOUPLOAD, },
221   [B2055_C2_TX_RF_RCAL]         = { .ghz5 = 0x0006, .ghz2 = 0x0006, NOUPLOAD, },
222   [B2055_C2_TX_RF_PADTSSI1]     = { .ghz5 = 0x0003, .ghz2 = 0x0003, UPLOAD, },
223   [B2055_C2_TX_RF_PADTSSI2]     = { .ghz5 = 0x000A, .ghz2 = 0x000A, NOUPLOAD, },
224   [B2055_C2_TX_RF_SPARE]        = { .ghz5 = 0x0003, .ghz2 = 0x0003, UPLOAD, },
225   [B2055_C2_TX_RF_IQCAL1]       = { .ghz5 = 0x002A, .ghz2 = 0x002A, NOUPLOAD, },
226   [B2055_C2_TX_RF_IQCAL2]       = { .ghz5 = 0x00A4, .ghz2 = 0x00A4, NOUPLOAD, },
227   [B2055_C2_TXBB_RCCAL]         = { .ghz5 = 0x0018, .ghz2 = 0x0018, NOUPLOAD, },
228   [B2055_C2_TXBB_LPF1]          = { .ghz5 = 0x0028, .ghz2 = 0x0028, NOUPLOAD, },
229   [B2055_C2_TX_VOSCNCL]         = { .ghz5 = 0x0000, .ghz2 = 0x0000, NOUPLOAD, },
230   [B2055_C2_TX_LPF_MXGMIDAC]    = { .ghz5 = 0x004A, .ghz2 = 0x004A, NOUPLOAD, },
231   [B2055_C2_TX_BB_MXGM]         = { .ghz5 = 0x0000, .ghz2 = 0x0000, NOUPLOAD, },
232   [B2055_PRG_GCHP21]            = { .ghz5 = 0x0071, .ghz2 = 0x0071, NOUPLOAD, },
233   [B2055_PRG_GCHP22]            = { .ghz5 = 0x0072, .ghz2 = 0x0072, NOUPLOAD, },
234   [B2055_PRG_GCHP23]            = { .ghz5 = 0x0073, .ghz2 = 0x0073, NOUPLOAD, },
235   [B2055_PRG_GCHP24]            = { .ghz5 = 0x0074, .ghz2 = 0x0074, NOUPLOAD, },
236   [B2055_PRG_GCHP25]            = { .ghz5 = 0x0075, .ghz2 = 0x0075, NOUPLOAD, },
237   [B2055_PRG_GCHP26]            = { .ghz5 = 0x0076, .ghz2 = 0x0076, NOUPLOAD, },
238   [B2055_PRG_GCHP27]            = { .ghz5 = 0x0077, .ghz2 = 0x0077, NOUPLOAD, },
239   [B2055_PRG_GCHP28]            = { .ghz5 = 0x0078, .ghz2 = 0x0078, NOUPLOAD, },
240   [B2055_PRG_GCHP29]            = { .ghz5 = 0x0079, .ghz2 = 0x0079, NOUPLOAD, },
241   [B2055_PRG_GCHP30]            = { .ghz5 = 0x007A, .ghz2 = 0x007A, NOUPLOAD, },
242   [0xC7]                        = { .ghz5 = 0x0000, .ghz2 = 0x0000, NOUPLOAD, },
243   [0xC8]                        = { .ghz5 = 0x0000, .ghz2 = 0x0000, NOUPLOAD, },
244   [0xC9]                        = { .ghz5 = 0x0000, .ghz2 = 0x0000, NOUPLOAD, },
245   [0xCA]                        = { .ghz5 = 0x0000, .ghz2 = 0x0000, NOUPLOAD, },
246   [0xCB]                        = { .ghz5 = 0x0000, .ghz2 = 0x0000, NOUPLOAD, },
247   [0xCC]                        = { .ghz5 = 0x0000, .ghz2 = 0x0000, NOUPLOAD, },
248   [B2055_C1_LNA_GAINBST]        = { .ghz5 = 0x0000, .ghz2 = 0x0000, NOUPLOAD, },
249   [0xCE]                        = { .ghz5 = 0x0000, .ghz2 = 0x0000, NOUPLOAD, },
250   [0xCF]                        = { .ghz5 = 0x0000, .ghz2 = 0x0000, NOUPLOAD, },
251   [0xD0]                        = { .ghz5 = 0x0000, .ghz2 = 0x0000, NOUPLOAD, },
252   [0xD1]                        = { .ghz5 = 0x0018, .ghz2 = 0x0018, NOUPLOAD, },
253   [B2055_C1_B0NB_RSSIVCM]       = { .ghz5 = 0x0088, .ghz2 = 0x0088, NOUPLOAD, },
254   [0xD3]                        = { .ghz5 = 0x0000, .ghz2 = 0x0000, NOUPLOAD, },
255   [0xD4]                        = { .ghz5 = 0x0000, .ghz2 = 0x0000, NOUPLOAD, },
256   [0xD5]                        = { .ghz5 = 0x0000, .ghz2 = 0x0000, NOUPLOAD, },
257   [B2055_C1_GENSPARE2]          = { .ghz5 = 0x0000, .ghz2 = 0x0000, NOUPLOAD, },
258   [0xD7]                        = { .ghz5 = 0x0000, .ghz2 = 0x0000, NOUPLOAD, },
259   [0xD8]                        = { .ghz5 = 0x0000, .ghz2 = 0x0000, NOUPLOAD, },
260   [B2055_C2_LNA_GAINBST]        = { .ghz5 = 0x0000, .ghz2 = 0x0000, NOUPLOAD, },
261   [0xDA]                        = { .ghz5 = 0x0000, .ghz2 = 0x0000, NOUPLOAD, },
262   [0xDB]                        = { .ghz5 = 0x0000, .ghz2 = 0x0000, NOUPLOAD, },
263   [0xDC]                        = { .ghz5 = 0x0000, .ghz2 = 0x0000, NOUPLOAD, },
264   [0xDD]                        = { .ghz5 = 0x0018, .ghz2 = 0x0018, NOUPLOAD, },
265   [B2055_C2_B0NB_RSSIVCM]       = { .ghz5 = 0x0088, .ghz2 = 0x0088, NOUPLOAD, },
266   [0xDF]                        = { .ghz5 = 0x0000, .ghz2 = 0x0000, NOUPLOAD, },
267   [0xE0]                        = { .ghz5 = 0x0000, .ghz2 = 0x0000, NOUPLOAD, },
268   [0xE1]                        = { .ghz5 = 0x0000, .ghz2 = 0x0000, NOUPLOAD, },
269   [B2055_C2_GENSPARE2]          = { .ghz5 = 0x0000, .ghz2 = 0x0000, NOUPLOAD, },
270 };
271
272
273 void b2055_upload_inittab(struct b43_wldev *dev,
274                           bool ghz5, bool ignore_uploadflag)
275 {
276         struct b2055_inittab_entry *e;
277         unsigned int i;
278         u16 value;
279
280         for (i = 0; i < ARRAY_SIZE(b2055_inittab); i++) {
281                 e = &(b2055_inittab[i]);
282                 if (!(e->flags & B2055_INITTAB_ENTRY_OK))
283                         continue;
284                 if ((e->flags & B2055_INITTAB_UPLOAD) || ignore_uploadflag) {
285                         if (ghz5)
286                                 value = e->ghz5;
287                         else
288                                 value = e->ghz2;
289                         b43_radio_write16(dev, i, value);
290                 }
291         }
292 }