blob: f029f6e1f5d1c879abdbeea625a841aa87582ff3 [file] [log] [blame]
Rafał Miłecki5192bf52011-06-19 12:17:19 +02001/*
2
3 Broadcom B43 wireless driver
4 IEEE 802.11n 2059 radio device data tables
5
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2 of the License, or
9 (at your option) any later version.
10
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with this program; see the file COPYING. If not, write to
18 the Free Software Foundation, Inc., 51 Franklin Steet, Fifth Floor,
19 Boston, MA 02110-1301, USA.
20
21*/
22
23#include "b43.h"
24#include "radio_2059.h"
25
Rafał Miłeckifeb90632011-06-27 14:58:54 +020026#define RADIOREGS(r00, r01, r02, r03, r04, r05, r06, r07, r08, r09, \
27 r10, r11, r12, r13, r14, r15, r16, r17, r18, r19, \
28 r20, r21, r22, r23, r24, r25, r26, r27, r28) \
29 .radio_syn16 = r00, \
30 .radio_syn17 = r01, \
31 .radio_syn22 = r02, \
32 .radio_syn25 = r03, \
33 .radio_syn27 = r04, \
34 .radio_syn28 = r05, \
35 .radio_syn29 = r06, \
36 .radio_syn2c = r07, \
37 .radio_syn2d = r08, \
38 .radio_syn37 = r09, \
39 .radio_syn41 = r10, \
40 .radio_syn43 = r11, \
41 .radio_syn47 = r12, \
42 .radio_syn4a = r13, \
43 .radio_syn58 = r14, \
44 .radio_syn5a = r15, \
45 .radio_syn6a = r16, \
46 .radio_syn6d = r17, \
47 .radio_syn6e = r18, \
48 .radio_syn92 = r19, \
49 .radio_syn98 = r20, \
50 .radio_rxtx4a = r21, \
51 .radio_rxtx58 = r22, \
52 .radio_rxtx5a = r23, \
53 .radio_rxtx6a = r24, \
54 .radio_rxtx6d = r25, \
55 .radio_rxtx6e = r26, \
56 .radio_rxtx92 = r27, \
57 .radio_rxtx98 = r28
58
59#define PHYREGS(r0, r1, r2, r3, r4, r5) \
60 .phy_regs.bw1 = r0, \
61 .phy_regs.bw2 = r1, \
62 .phy_regs.bw3 = r2, \
63 .phy_regs.bw4 = r3, \
64 .phy_regs.bw5 = r4, \
65 .phy_regs.bw6 = r5
66
67static const struct b43_phy_ht_channeltab_e_radio2059 b43_phy_ht_channeltab_radio2059[] = {
68 { .freq = 2412,
69 RADIOREGS(0x48, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x6c,
70 0x09, 0x0f, 0x0a, 0x00, 0x0a, 0x00, 0x61, 0x03,
71 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x61, 0x03,
72 0x00, 0x00, 0x00, 0xf0, 0x00),
73 PHYREGS(0x03c9, 0x03c5, 0x03c1, 0x043a, 0x043f, 0x0443),
74 },
75 { .freq = 2417,
76 RADIOREGS(0x4b, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x71,
77 0x09, 0x0f, 0x0a, 0x00, 0x0a, 0x00, 0x61, 0x03,
78 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x61, 0x03,
79 0x00, 0x00, 0x00, 0xf0, 0x00),
80 PHYREGS(0x03cb, 0x03c7, 0x03c3, 0x0438, 0x043d, 0x0441),
81 },
82 { .freq = 2422,
83 RADIOREGS(0x4e, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x76,
84 0x09, 0x0f, 0x09, 0x00, 0x09, 0x00, 0x61, 0x03,
85 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x61, 0x03,
86 0x00, 0x00, 0x00, 0xf0, 0x00),
87 PHYREGS(0x03cd, 0x03c9, 0x03c5, 0x0436, 0x043a, 0x043f),
88 },
89 { .freq = 2427,
90 RADIOREGS(0x52, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x7b,
91 0x09, 0x0f, 0x09, 0x00, 0x09, 0x00, 0x61, 0x03,
92 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x61, 0x03,
93 0x00, 0x00, 0x00, 0xf0, 0x00),
94 PHYREGS(0x03cf, 0x03cb, 0x03c7, 0x0434, 0x0438, 0x043d),
95 },
96 { .freq = 2432,
97 RADIOREGS(0x55, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x80,
98 0x09, 0x0f, 0x08, 0x00, 0x08, 0x00, 0x61, 0x03,
99 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x61, 0x03,
100 0x00, 0x00, 0x00, 0xf0, 0x00),
101 PHYREGS(0x03d1, 0x03cd, 0x03c9, 0x0431, 0x0436, 0x043a),
102 },
103 { .freq = 2437,
104 RADIOREGS(0x58, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x85,
105 0x09, 0x0f, 0x08, 0x00, 0x08, 0x00, 0x61, 0x03,
106 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x61, 0x03,
107 0x00, 0x00, 0x00, 0xf0, 0x00),
108 PHYREGS(0x03d3, 0x03cf, 0x03cb, 0x042f, 0x0434, 0x0438),
109 },
110 { .freq = 2442,
111 RADIOREGS(0x5c, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x8a,
112 0x09, 0x0f, 0x07, 0x00, 0x07, 0x00, 0x61, 0x03,
113 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x61, 0x03,
114 0x00, 0x00, 0x00, 0xf0, 0x00),
115 PHYREGS(0x03d5, 0x03d1, 0x03cd, 0x042d, 0x0431, 0x0436),
116 },
117 { .freq = 2447,
118 RADIOREGS(0x5f, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x8f,
119 0x09, 0x0f, 0x07, 0x00, 0x07, 0x00, 0x61, 0x03,
120 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x61, 0x03,
121 0x00, 0x00, 0x00, 0xf0, 0x00),
122 PHYREGS(0x03d7, 0x03d3, 0x03cf, 0x042b, 0x042f, 0x0434),
123 },
124 { .freq = 2452,
125 RADIOREGS(0x62, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x94,
126 0x09, 0x0f, 0x07, 0x00, 0x07, 0x00, 0x61, 0x03,
127 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x61, 0x03,
128 0x00, 0x00, 0x00, 0xf0, 0x00),
129 PHYREGS(0x03d9, 0x03d5, 0x03d1, 0x0429, 0x042d, 0x0431),
130 },
131 { .freq = 2457,
132 RADIOREGS(0x66, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x99,
133 0x09, 0x0f, 0x06, 0x00, 0x06, 0x00, 0x61, 0x03,
134 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x61, 0x03,
135 0x00, 0x00, 0x00, 0xf0, 0x00),
136 PHYREGS(0x03db, 0x03d7, 0x03d3, 0x0427, 0x042b, 0x042f),
137 },
138 { .freq = 2462,
139 RADIOREGS(0x69, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x9e,
140 0x09, 0x0f, 0x06, 0x00, 0x06, 0x00, 0x61, 0x03,
141 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x61, 0x03,
142 0x00, 0x00, 0x00, 0xf0, 0x00),
143 PHYREGS(0x03dd, 0x03d9, 0x03d5, 0x0424, 0x0429, 0x042d),
144 },
145 { .freq = 2467,
146 RADIOREGS(0x6c, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0xa3,
147 0x09, 0x0f, 0x05, 0x00, 0x05, 0x00, 0x61, 0x03,
148 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x61, 0x03,
149 0x00, 0x00, 0x00, 0xf0, 0x00),
150 PHYREGS(0x03df, 0x03db, 0x03d7, 0x0422, 0x0427, 0x042b),
151 },
152 { .freq = 2472,
153 RADIOREGS(0x70, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0xa8,
154 0x09, 0x0f, 0x05, 0x00, 0x05, 0x00, 0x61, 0x03,
155 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x61, 0x03,
156 0x00, 0x00, 0x00, 0xf0, 0x00),
157 PHYREGS(0x03e1, 0x03dd, 0x03d9, 0x0420, 0x0424, 0x0429),
158 },
159};
160
Rafał Miłecki5192bf52011-06-19 12:17:19 +0200161const struct b43_phy_ht_channeltab_e_radio2059
162*b43_phy_ht_get_channeltab_e_r2059(struct b43_wldev *dev, u16 freq)
163{
Rafał Miłecki49ac26f2011-07-17 10:30:33 +0200164 const struct b43_phy_ht_channeltab_e_radio2059 *e;
165 unsigned int i;
166
167 e = b43_phy_ht_channeltab_radio2059;
168 for (i = 0; i < ARRAY_SIZE(b43_phy_ht_channeltab_radio2059); i++, e++) {
169 if (e->freq == freq)
170 return e;
171 }
172
Rafał Miłecki5192bf52011-06-19 12:17:19 +0200173 return NULL;
174}