@@ -228,10 +228,98 @@ static void b43_chantab_radio_2056_upload(struct b43_wldev *dev,
228
228
static void b43_radio_2056_setup (struct b43_wldev * dev ,
229
229
const struct b43_nphy_channeltab_entry_rev3 * e )
230
230
{
231
+ struct ssb_sprom * sprom = dev -> dev -> bus_sprom ;
232
+ enum ieee80211_band band = b43_current_band (dev -> wl );
233
+ u16 offset ;
234
+ u8 i ;
235
+ u16 bias , cbias , pag_boost , pgag_boost , mixg_boost , padg_boost ;
236
+
231
237
B43_WARN_ON (dev -> phy .rev < 3 );
232
238
233
239
b43_chantab_radio_2056_upload (dev , e );
234
- /* TODO */
240
+ b2056_upload_syn_pll_cp2 (dev , band == IEEE80211_BAND_5GHZ );
241
+
242
+ if (sprom -> boardflags2_lo & B43_BFL2_GPLL_WAR &&
243
+ b43_current_band (dev -> wl ) == IEEE80211_BAND_2GHZ ) {
244
+ b43_radio_write (dev , B2056_SYN_PLL_LOOPFILTER1 , 0x1F );
245
+ b43_radio_write (dev , B2056_SYN_PLL_LOOPFILTER2 , 0x1F );
246
+ if (dev -> dev -> chip_id == 0x4716 ) {
247
+ b43_radio_write (dev , B2056_SYN_PLL_LOOPFILTER4 , 0x14 );
248
+ b43_radio_write (dev , B2056_SYN_PLL_CP2 , 0 );
249
+ } else {
250
+ b43_radio_write (dev , B2056_SYN_PLL_LOOPFILTER4 , 0x0B );
251
+ b43_radio_write (dev , B2056_SYN_PLL_CP2 , 0x14 );
252
+ }
253
+ }
254
+ if (sprom -> boardflags2_lo & B43_BFL2_APLL_WAR &&
255
+ b43_current_band (dev -> wl ) == IEEE80211_BAND_5GHZ ) {
256
+ b43_radio_write (dev , B2056_SYN_PLL_LOOPFILTER1 , 0x1F );
257
+ b43_radio_write (dev , B2056_SYN_PLL_LOOPFILTER2 , 0x1F );
258
+ b43_radio_write (dev , B2056_SYN_PLL_LOOPFILTER4 , 0x05 );
259
+ b43_radio_write (dev , B2056_SYN_PLL_CP2 , 0x0C );
260
+ }
261
+
262
+ if (dev -> phy .n -> ipa2g_on && band == IEEE80211_BAND_2GHZ ) {
263
+ for (i = 0 ; i < 2 ; i ++ ) {
264
+ offset = i ? B2056_TX1 : B2056_TX0 ;
265
+ if (dev -> phy .rev >= 5 ) {
266
+ b43_radio_write (dev ,
267
+ offset | B2056_TX_PADG_IDAC , 0xcc );
268
+
269
+ if (dev -> dev -> chip_id == 0x4716 ) {
270
+ bias = 0x40 ;
271
+ cbias = 0x45 ;
272
+ pag_boost = 0x5 ;
273
+ pgag_boost = 0x33 ;
274
+ mixg_boost = 0x55 ;
275
+ } else {
276
+ bias = 0x25 ;
277
+ cbias = 0x20 ;
278
+ pag_boost = 0x4 ;
279
+ pgag_boost = 0x03 ;
280
+ mixg_boost = 0x65 ;
281
+ }
282
+ padg_boost = 0x77 ;
283
+
284
+ b43_radio_write (dev ,
285
+ offset | B2056_TX_INTPAG_IMAIN_STAT ,
286
+ bias );
287
+ b43_radio_write (dev ,
288
+ offset | B2056_TX_INTPAG_IAUX_STAT ,
289
+ bias );
290
+ b43_radio_write (dev ,
291
+ offset | B2056_TX_INTPAG_CASCBIAS ,
292
+ cbias );
293
+ b43_radio_write (dev ,
294
+ offset | B2056_TX_INTPAG_BOOST_TUNE ,
295
+ pag_boost );
296
+ b43_radio_write (dev ,
297
+ offset | B2056_TX_PGAG_BOOST_TUNE ,
298
+ pgag_boost );
299
+ b43_radio_write (dev ,
300
+ offset | B2056_TX_PADG_BOOST_TUNE ,
301
+ padg_boost );
302
+ b43_radio_write (dev ,
303
+ offset | B2056_TX_MIXG_BOOST_TUNE ,
304
+ mixg_boost );
305
+ } else {
306
+ bias = dev -> phy .is_40mhz ? 0x40 : 0x20 ;
307
+ b43_radio_write (dev ,
308
+ offset | B2056_TX_INTPAG_IMAIN_STAT ,
309
+ bias );
310
+ b43_radio_write (dev ,
311
+ offset | B2056_TX_INTPAG_IAUX_STAT ,
312
+ bias );
313
+ b43_radio_write (dev ,
314
+ offset | B2056_TX_INTPAG_CASCBIAS ,
315
+ 0x30 );
316
+ }
317
+ b43_radio_write (dev , offset | B2056_TX_PA_SPARE1 , 0xee );
318
+ }
319
+ } else if (dev -> phy .n -> ipa5g_on && band == IEEE80211_BAND_5GHZ ) {
320
+ /* TODO */
321
+ }
322
+
235
323
udelay (50 );
236
324
/* VCO calibration */
237
325
b43_radio_write (dev , B2056_SYN_PLL_VCOCAL12 , 0x00 );
0 commit comments