diff options
author | Rafał Miłecki <zajec5@gmail.com> | 2014-07-08 09:11:09 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2014-07-15 15:51:40 -0400 |
commit | 785e7dbb75d2b3109daad37a261b9b66ece393c0 (patch) | |
tree | e764012b0a144921f40a21fa20b2c99baeb560c8 /drivers/net/wireless/b43 | |
parent | 162bee1a3e5714abd9a429d85c64830bacaca682 (diff) |
b43: N-PHY: implement channel switching of radio 0x2057 rev 5
Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/b43')
-rw-r--r-- | drivers/net/wireless/b43/radio_2057.c | 129 |
1 files changed, 129 insertions, 0 deletions
diff --git a/drivers/net/wireless/b43/radio_2057.c b/drivers/net/wireless/b43/radio_2057.c index 941cf3db5a64..ca22faa41d28 100644 --- a/drivers/net/wireless/b43/radio_2057.c +++ b/drivers/net/wireless/b43/radio_2057.c | |||
@@ -149,6 +149,27 @@ static u16 r2057_rev9_init[][2] = { | |||
149 | .radio_lna2g_tune_core1 = r26, \ | 149 | .radio_lna2g_tune_core1 = r26, \ |
150 | .radio_lna5g_tune_core1 = r27 | 150 | .radio_lna5g_tune_core1 = r27 |
151 | 151 | ||
152 | #define RADIOREGS7_2G(r00, r01, r02, r03, r04, r05, r06, r07, r08, r09, \ | ||
153 | r10, r11, r12, r13, r14, r15, r16, r17) \ | ||
154 | .radio_vcocal_countval0 = r00, \ | ||
155 | .radio_vcocal_countval1 = r01, \ | ||
156 | .radio_rfpll_refmaster_sparextalsize = r02, \ | ||
157 | .radio_rfpll_loopfilter_r1 = r03, \ | ||
158 | .radio_rfpll_loopfilter_c2 = r04, \ | ||
159 | .radio_rfpll_loopfilter_c1 = r05, \ | ||
160 | .radio_cp_kpd_idac = r06, \ | ||
161 | .radio_rfpll_mmd0 = r07, \ | ||
162 | .radio_rfpll_mmd1 = r08, \ | ||
163 | .radio_vcobuf_tune = r09, \ | ||
164 | .radio_logen_mx2g_tune = r10, \ | ||
165 | .radio_logen_indbuf2g_tune = r11, \ | ||
166 | .radio_lna2g_tune_core0 = r12, \ | ||
167 | .radio_txmix2g_tune_boost_pu_core0 = r13, \ | ||
168 | .radio_pad2g_tune_pus_core0 = r14, \ | ||
169 | .radio_lna2g_tune_core1 = r15, \ | ||
170 | .radio_txmix2g_tune_boost_pu_core1 = r16, \ | ||
171 | .radio_pad2g_tune_pus_core1 = r17 | ||
172 | |||
152 | #define PHYREGS(r0, r1, r2, r3, r4, r5) \ | 173 | #define PHYREGS(r0, r1, r2, r3, r4, r5) \ |
153 | .phy_regs.phy_bw1a = r0, \ | 174 | .phy_regs.phy_bw1a = r0, \ |
154 | .phy_regs.phy_bw2 = r1, \ | 175 | .phy_regs.phy_bw2 = r1, \ |
@@ -157,6 +178,108 @@ static u16 r2057_rev9_init[][2] = { | |||
157 | .phy_regs.phy_bw5 = r4, \ | 178 | .phy_regs.phy_bw5 = r4, \ |
158 | .phy_regs.phy_bw6 = r5 | 179 | .phy_regs.phy_bw6 = r5 |
159 | 180 | ||
181 | /* Copied from brcmsmac (5.75.11): chan_info_nphyrev8_2057_rev5 */ | ||
182 | static const struct b43_nphy_chantabent_rev7_2g b43_nphy_chantab_phy_rev8_radio_rev5[] = { | ||
183 | { | ||
184 | .freq = 2412, | ||
185 | RADIOREGS7_2G(0x48, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x6c, | ||
186 | 0x09, 0x0d, 0x08, 0x0e, 0x61, 0x03, 0xff, 0x61, | ||
187 | 0x03, 0xff), | ||
188 | PHYREGS(0x03c9, 0x03c5, 0x03c1, 0x043a, 0x043f, 0x0443), | ||
189 | }, | ||
190 | { | ||
191 | .freq = 2417, | ||
192 | RADIOREGS7_2G(0x4b, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x71, | ||
193 | 0x09, 0x0d, 0x08, 0x0e, 0x61, 0x03, 0xff, 0x61, | ||
194 | 0x03, 0xff), | ||
195 | PHYREGS(0x03cb, 0x03c7, 0x03c3, 0x0438, 0x043d, 0x0441), | ||
196 | }, | ||
197 | { | ||
198 | .freq = 2422, | ||
199 | RADIOREGS7_2G(0x4e, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x76, | ||
200 | 0x09, 0x0d, 0x08, 0x0e, 0x61, 0x03, 0xef, 0x61, | ||
201 | 0x03, 0xef), | ||
202 | PHYREGS(0x03cd, 0x03c9, 0x03c5, 0x0436, 0x043a, 0x043f), | ||
203 | }, | ||
204 | { | ||
205 | .freq = 2427, | ||
206 | RADIOREGS7_2G(0x52, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x7b, | ||
207 | 0x09, 0x0c, 0x08, 0x0e, 0x61, 0x03, 0xdf, 0x61, | ||
208 | 0x03, 0xdf), | ||
209 | PHYREGS(0x03cf, 0x03cb, 0x03c7, 0x0434, 0x0438, 0x043d), | ||
210 | }, | ||
211 | { | ||
212 | .freq = 2432, | ||
213 | RADIOREGS7_2G(0x55, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x80, | ||
214 | 0x09, 0x0c, 0x07, 0x0d, 0x61, 0x03, 0xcf, 0x61, | ||
215 | 0x03, 0xcf), | ||
216 | PHYREGS(0x03d1, 0x03cd, 0x03c9, 0x0431, 0x0436, 0x043a), | ||
217 | }, | ||
218 | { | ||
219 | .freq = 2437, | ||
220 | RADIOREGS7_2G(0x58, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x85, | ||
221 | 0x09, 0x0c, 0x07, 0x0d, 0x61, 0x03, 0xbf, 0x61, | ||
222 | 0x03, 0xbf), | ||
223 | PHYREGS(0x03d3, 0x03cf, 0x03cb, 0x042f, 0x0434, 0x0438), | ||
224 | }, | ||
225 | { | ||
226 | .freq = 2442, | ||
227 | RADIOREGS7_2G(0x5c, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x8a, | ||
228 | 0x09, 0x0b, 0x07, 0x0d, 0x61, 0x03, 0xaf, 0x61, | ||
229 | 0x03, 0xaf), | ||
230 | PHYREGS(0x03d5, 0x03d1, 0x03cd, 0x042d, 0x0431, 0x0436), | ||
231 | }, | ||
232 | { | ||
233 | .freq = 2447, | ||
234 | RADIOREGS7_2G(0x5f, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x8f, | ||
235 | 0x09, 0x0b, 0x07, 0x0d, 0x61, 0x03, 0x9f, 0x61, | ||
236 | 0x03, 0x9f), | ||
237 | PHYREGS(0x03d7, 0x03d3, 0x03cf, 0x042b, 0x042f, 0x0434), | ||
238 | }, | ||
239 | { | ||
240 | .freq = 2452, | ||
241 | RADIOREGS7_2G(0x62, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x94, | ||
242 | 0x09, 0x0b, 0x07, 0x0d, 0x61, 0x03, 0x8f, 0x61, | ||
243 | 0x03, 0x8f), | ||
244 | PHYREGS(0x03d9, 0x03d5, 0x03d1, 0x0429, 0x042d, 0x0431), | ||
245 | }, | ||
246 | { | ||
247 | .freq = 2457, | ||
248 | RADIOREGS7_2G(0x66, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x99, | ||
249 | 0x09, 0x0b, 0x07, 0x0c, 0x61, 0x03, 0x7f, 0x61, | ||
250 | 0x03, 0x7f), | ||
251 | PHYREGS(0x03db, 0x03d7, 0x03d3, 0x0427, 0x042b, 0x042f), | ||
252 | }, | ||
253 | { | ||
254 | .freq = 2462, | ||
255 | RADIOREGS7_2G(0x69, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0x9e, | ||
256 | 0x09, 0x0b, 0x07, 0x0c, 0x61, 0x03, 0x6f, 0x61, | ||
257 | 0x03, 0x6f), | ||
258 | PHYREGS(0x03dd, 0x03d9, 0x03d5, 0x0424, 0x0429, 0x042d), | ||
259 | }, | ||
260 | { | ||
261 | .freq = 2467, | ||
262 | RADIOREGS7_2G(0x6c, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0xa3, | ||
263 | 0x09, 0x0b, 0x06, 0x0c, 0x61, 0x03, 0x5f, 0x61, | ||
264 | 0x03, 0x5f), | ||
265 | PHYREGS(0x03df, 0x03db, 0x03d7, 0x0422, 0x0427, 0x042b), | ||
266 | }, | ||
267 | { | ||
268 | .freq = 2472, | ||
269 | RADIOREGS7_2G(0x70, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0xa8, | ||
270 | 0x09, 0x0a, 0x06, 0x0b, 0x61, 0x03, 0x4f, 0x61, | ||
271 | 0x03, 0x4f), | ||
272 | PHYREGS(0x03e1, 0x03dd, 0x03d9, 0x0420, 0x0424, 0x0429), | ||
273 | }, | ||
274 | { | ||
275 | .freq = 2484, | ||
276 | RADIOREGS7_2G(0x78, 0x16, 0x30, 0x1b, 0x0a, 0x0a, 0x30, 0xb4, | ||
277 | 0x09, 0x0a, 0x06, 0x0b, 0x61, 0x03, 0x3f, 0x61, | ||
278 | 0x03, 0x3f), | ||
279 | PHYREGS(0x03e6, 0x03e2, 0x03de, 0x041b, 0x041f, 0x0424), | ||
280 | } | ||
281 | }; | ||
282 | |||
160 | /* Extracted from MMIO dump of 6.30.223.141 */ | 283 | /* Extracted from MMIO dump of 6.30.223.141 */ |
161 | static const struct b43_nphy_chantabent_rev7 b43_nphy_chantab_phy_rev16_radio_rev9[] = { | 284 | static const struct b43_nphy_chantabent_rev7 b43_nphy_chantab_phy_rev16_radio_rev9[] = { |
162 | { | 285 | { |
@@ -377,6 +500,12 @@ void r2057_get_chantabent_rev7(struct b43_wldev *dev, u16 freq, | |||
377 | 500 | ||
378 | /* TODO */ | 501 | /* TODO */ |
379 | switch (phy->rev) { | 502 | switch (phy->rev) { |
503 | case 8: | ||
504 | if (phy->radio_rev == 5) { | ||
505 | e_r7_2g = b43_nphy_chantab_phy_rev8_radio_rev5; | ||
506 | len = ARRAY_SIZE(b43_nphy_chantab_phy_rev8_radio_rev5); | ||
507 | } | ||
508 | break; | ||
380 | case 16: | 509 | case 16: |
381 | if (phy->radio_rev == 9) { | 510 | if (phy->radio_rev == 9) { |
382 | e_r7 = b43_nphy_chantab_phy_rev16_radio_rev9; | 511 | e_r7 = b43_nphy_chantab_phy_rev16_radio_rev9; |