Lines Matching +full:txpower +full:- +full:5 +full:g

1 // SPDX-License-Identifier: GPL-2.0-or-later
6 Copyright (c) 2005 Martin Langer <martin-[email protected]>,
14 driver Copyright(c) 2003 - 2004 Intel Corporation.
46 -7, -7, -7, -7,
47 -7, -7, -7, -7,
48 -7, -7, -7, -7,
65 5, -7, -20, -20,
66 -20, -20, -20, -20,
67 -20, -20, -20, -20,
77 B43legacy_WARN_ON(dev->phy.phy_locked); in b43legacy_phy_lock()
78 dev->phy.phy_locked = 1; in b43legacy_phy_lock()
81 if (dev->dev->id.revision < 3) { in b43legacy_phy_lock()
84 if (!b43legacy_is_mode(dev->wl, NL80211_IFTYPE_AP)) in b43legacy_phy_lock()
85 b43legacy_power_saving_ctl_bits(dev, -1, 1); in b43legacy_phy_lock()
92 B43legacy_WARN_ON(!dev->phy.phy_locked); in b43legacy_phy_unlock()
93 dev->phy.phy_locked = 0; in b43legacy_phy_unlock()
96 if (dev->dev->id.revision < 3) { in b43legacy_phy_unlock()
99 if (!b43legacy_is_mode(dev->wl, NL80211_IFTYPE_AP)) in b43legacy_phy_unlock()
100 b43legacy_power_saving_ctl_bits(dev, -1, -1); in b43legacy_phy_unlock()
118 struct b43legacy_phy *phy = &dev->phy; in b43legacy_phy_calibrate()
121 if (phy->calibrated) in b43legacy_phy_calibrate()
123 if (phy->type == B43legacy_PHYTYPE_G && phy->rev == 1) { in b43legacy_phy_calibrate()
128 phy->calibrated = 1; in b43legacy_phy_calibrate()
132 * as described in https://bcm-specs.sipsolutions.net/InitPowerControl
136 struct b43legacy_phy *phy = &dev->phy; in b43legacy_phy_init_pctl()
142 B43legacy_BUG_ON(!(phy->type == B43legacy_PHYTYPE_B || in b43legacy_phy_init_pctl()
143 phy->type == B43legacy_PHYTYPE_G)); in b43legacy_phy_init_pctl()
145 (dev->dev->bus->boardinfo.type == 0x0416)) in b43legacy_phy_init_pctl()
151 if (phy->type == B43legacy_PHYTYPE_G) { in b43legacy_phy_init_pctl()
152 if (!phy->gmode) in b43legacy_phy_init_pctl()
156 if (phy->savedpctlreg != 0xFFFF) in b43legacy_phy_init_pctl()
159 if (phy->manual_txpower_control) in b43legacy_phy_init_pctl()
163 if (phy->type == B43legacy_PHYTYPE_B && in b43legacy_phy_init_pctl()
164 phy->rev >= 2 && in b43legacy_phy_init_pctl()
165 phy->radio_ver == 0x2050) in b43legacy_phy_init_pctl()
170 saved_batt = phy->bbatt; in b43legacy_phy_init_pctl()
171 saved_ratt = phy->rfatt; in b43legacy_phy_init_pctl()
172 saved_txctl1 = phy->txctl1; in b43legacy_phy_init_pctl()
173 if ((phy->radio_rev >= 6) && (phy->radio_rev <= 8) in b43legacy_phy_init_pctl()
174 && /*FIXME: incomplete specs for 5 < revision < 9 */ 0) in b43legacy_phy_init_pctl()
182 phy->savedpctlreg = b43legacy_phy_read(dev, B43legacy_PHY_G_PCTL); in b43legacy_phy_init_pctl()
195 struct b43legacy_phy *phy = &dev->phy; in b43legacy_phy_agcsetup()
198 if (phy->rev == 1) in b43legacy_phy_agcsetup()
206 if (phy->rev == 1) { in b43legacy_phy_agcsetup()
236 if (phy->rev == 1) in b43legacy_phy_agcsetup()
260 if (phy->rev == 1) { in b43legacy_phy_agcsetup()
274 if (phy->rev > 2) { in b43legacy_phy_agcsetup()
285 if (phy->rev == 1) { in b43legacy_phy_agcsetup()
301 if (phy->rev >= 6) { in b43legacy_phy_agcsetup()
311 struct b43legacy_phy *phy = &dev->phy; in b43legacy_phy_setupg()
314 B43legacy_BUG_ON(phy->type != B43legacy_PHYTYPE_G); in b43legacy_phy_setupg()
315 if (phy->rev == 1) { in b43legacy_phy_setupg()
333 /* nrssi values are signed 6-bit values. Why 0x7654 here? */ in b43legacy_phy_setupg()
336 if (phy->rev == 2) { in b43legacy_phy_setupg()
339 } else if (phy->rev > 2) { in b43legacy_phy_setupg()
354 if (phy->rev <= 2) in b43legacy_phy_setupg()
358 else if ((phy->rev >= 7) && (b43legacy_phy_read(dev, 0x0449) & 0x0200)) in b43legacy_phy_setupg()
367 if (phy->rev == 2) in b43legacy_phy_setupg()
371 else if ((phy->rev > 2) && (phy->rev <= 8)) in b43legacy_phy_setupg()
376 if (phy->rev == 1) { in b43legacy_phy_setupg()
385 (dev->dev->bus->boardinfo.type == 0x0416) && in b43legacy_phy_setupg()
386 (dev->dev->bus->sprom.board_rev == 0x0017)) in b43legacy_phy_setupg()
401 (dev->dev->bus->boardinfo.type == 0x0416) && in b43legacy_phy_setupg()
402 (dev->dev->bus->sprom.board_rev == 0x0017)) in b43legacy_phy_setupg()
417 if (dev->dev->bus->sprom.boardflags_lo & B43legacy_BFL_PACTRL) in b43legacy_phy_inita()
423 struct b43legacy_phy *phy = &dev->phy; in b43legacy_phy_initb2()
435 val -= 0x0202; in b43legacy_phy_initb2()
438 b43legacy_radio_selectchannel(dev, phy->channel, 0); in b43legacy_phy_initb2()
439 if (phy->radio_ver != 0x2050) { in b43legacy_phy_initb2()
445 if (phy->radio_ver == 0x2050) { in b43legacy_phy_initb2()
460 if (phy->radio_ver != 0x2050) in b43legacy_phy_initb2()
464 if (phy->radio_ver != 0x2050) in b43legacy_phy_initb2()
472 struct b43legacy_phy *phy = &dev->phy; in b43legacy_phy_initb4()
484 val -= 0x0202; in b43legacy_phy_initb4()
487 b43legacy_radio_selectchannel(dev, phy->channel, 0); in b43legacy_phy_initb4()
488 if (phy->radio_ver != 0x2050) { in b43legacy_phy_initb4()
494 if (phy->radio_ver == 0x2050) { in b43legacy_phy_initb4()
505 if (phy->radio_ver == 0x2050) in b43legacy_phy_initb4()
512 if (phy->radio_ver == 0x2050) in b43legacy_phy_initb4()
516 if (phy->radio_ver == 0x2050) in b43legacy_phy_initb4()
519 if (dev->dev->bus->sprom.boardflags_lo & B43legacy_BFL_RSSI) { in b43legacy_phy_initb4()
528 struct b43legacy_phy *phy = &dev->phy; in b43legacy_phy_initb5()
533 if (phy->analog == 1) in b43legacy_phy_initb5()
538 (dev->dev->bus->boardinfo.type != 0x0416)) { in b43legacy_phy_initb5()
548 if (phy->radio_ver == 0x2050) in b43legacy_phy_initb5()
551 if (phy->gmode) { in b43legacy_phy_initb5()
552 if (phy->radio_ver == 0x2050) { in b43legacy_phy_initb5()
579 if (dev->bad_frames_preempt) in b43legacy_phy_initb5()
584 if (phy->analog == 1) { in b43legacy_phy_initb5()
595 if (phy->analog == 1) in b43legacy_phy_initb5()
600 if (phy->analog == 0) in b43legacy_phy_initb5()
603 old_channel = (phy->channel == 0xFF) ? 1 : phy->channel; in b43legacy_phy_initb5()
607 if (phy->radio_ver != 0x2050) { in b43legacy_phy_initb5()
615 if (phy->radio_ver == 0x2050) { in b43legacy_phy_initb5()
634 if (phy->radio_ver == 0x2050) in b43legacy_phy_initb5()
643 struct b43legacy_phy *phy = &dev->phy; in b43legacy_phy_initb6()
651 if (phy->radio_rev == 4 || in b43legacy_phy_initb6()
652 phy->radio_rev == 5) { in b43legacy_phy_initb6()
669 if (phy->radio_rev == 8) { in b43legacy_phy_initb6()
677 if (dev->dev->bus->sprom.boardflags_lo & 0x8000) { in b43legacy_phy_initb6()
692 val -= 0x0202; in b43legacy_phy_initb6()
697 val -= 0x0202; in b43legacy_phy_initb6()
704 if (phy->type == B43legacy_PHYTYPE_G) { in b43legacy_phy_initb6()
719 old_channel = phy->channel; in b43legacy_phy_initb6()
728 if (phy->radio_rev < 6 || phy->radio_rev == 8) { in b43legacy_phy_initb6()
734 if (phy->radio_rev <= 2) { in b43legacy_phy_initb6()
747 if (phy->radio_rev >= 6) in b43legacy_phy_initb6()
753 if (phy->radio_rev == 4 || phy->radio_rev == 5) in b43legacy_phy_initb6()
756 if (phy->radio_rev <= 2) in b43legacy_phy_initb6()
759 if (phy->analog == 4) { in b43legacy_phy_initb6()
766 if (phy->type == B43legacy_PHYTYPE_G) in b43legacy_phy_initb6()
768 if (phy->type == B43legacy_PHYTYPE_B) { in b43legacy_phy_initb6()
775 if (dev->dev->bus->sprom.boardflags_lo & in b43legacy_phy_initb6()
786 struct b43legacy_phy *phy = &dev->phy; in b43legacy_calc_loopback_gain()
800 if (phy->rev != 1) { in b43legacy_calc_loopback_gain()
802 backup_phy[5] = b43legacy_phy_read(dev, 0x0815); in b43legacy_calc_loopback_gain()
814 backup_bband = phy->bbatt; in b43legacy_calc_loopback_gain()
831 if (phy->rev != 1) { in b43legacy_calc_loopback_gain()
854 if (phy->analog == 0) in b43legacy_calc_loopback_gain()
860 if (phy->rev != 1) { in b43legacy_calc_loopback_gain()
869 if (phy->radio_ver == 0x2050 && phy->radio_rev == 2) { in b43legacy_calc_loopback_gain()
875 } else if (phy->radio_rev == 8) { in b43legacy_calc_loopback_gain()
883 if (phy->rev >= 3) in b43legacy_calc_loopback_gain()
899 if (dev->dev->bus->sprom.boardflags_lo & B43legacy_BFL_EXTLNA) { in b43legacy_calc_loopback_gain()
900 if (phy->rev >= 7) { in b43legacy_calc_loopback_gain()
929 loop1_omitted = loop1_cnt - loop1_done; in b43legacy_calc_loopback_gain()
936 for (i = loop1_done - 8; i < 16; i++) { in b43legacy_calc_loopback_gain()
952 if (phy->rev != 1) { in b43legacy_calc_loopback_gain()
954 b43legacy_phy_write(dev, 0x0815, backup_phy[5]); in b43legacy_calc_loopback_gain()
979 phy->loopback_gain[0] = ((loop1_done * 6) - (loop1_omitted * 4)) - 11; in b43legacy_calc_loopback_gain()
980 phy->loopback_gain[1] = (24 - (3 * loop2_done)) * 2; in b43legacy_calc_loopback_gain()
985 struct b43legacy_phy *phy = &dev->phy; in b43legacy_phy_initg()
988 if (phy->rev == 1) in b43legacy_phy_initg()
992 if (phy->rev >= 2 && phy->gmode) in b43legacy_phy_initg()
995 if (phy->rev >= 2) { in b43legacy_phy_initg()
999 if (phy->rev == 2) { in b43legacy_phy_initg()
1003 if (phy->rev > 5) { in b43legacy_phy_initg()
1007 if (phy->gmode) { in b43legacy_phy_initg()
1013 if (tmp == 4 || tmp == 5) { in b43legacy_phy_initg()
1021 if (phy->rev >= 2) in b43legacy_phy_initg()
1024 if (phy->radio_rev == 8) { in b43legacy_phy_initg()
1030 if (phy->rev >= 2 && phy->gmode) in b43legacy_phy_initg()
1032 if (phy->radio_rev != 8) { in b43legacy_phy_initg()
1033 if (phy->initval == 0xFFFF) in b43legacy_phy_initg()
1034 phy->initval = b43legacy_radio_init2050(dev); in b43legacy_phy_initg()
1036 b43legacy_radio_write16(dev, 0x0078, phy->initval); in b43legacy_phy_initg()
1038 if (phy->txctl2 == 0xFFFF) in b43legacy_phy_initg()
1041 if (phy->radio_ver == 0x2050 && phy->radio_rev == 8) in b43legacy_phy_initg()
1043 (phy->txctl1 << 4) | in b43legacy_phy_initg()
1044 phy->txctl2); in b43legacy_phy_initg()
1049 phy->txctl1); in b43legacy_phy_initg()
1050 if (phy->rev >= 6) in b43legacy_phy_initg()
1053 & 0x0FFF) | (phy->txctl2 << 12)); in b43legacy_phy_initg()
1054 if (dev->dev->bus->sprom.boardflags_lo & in b43legacy_phy_initg()
1059 if (phy->rev < 2) in b43legacy_phy_initg()
1064 if (phy->gmode) { in b43legacy_phy_initg()
1069 if (!(dev->dev->bus->sprom.boardflags_lo & B43legacy_BFL_RSSI)) { in b43legacy_phy_initg()
1074 * entries to -32 (see the clamp_val() in nrssi_hw_update()) in b43legacy_phy_initg()
1078 } else if (phy->gmode || phy->rev >= 2) { in b43legacy_phy_initg()
1079 if (phy->nrssi[0] == -1000) { in b43legacy_phy_initg()
1080 B43legacy_WARN_ON(phy->nrssi[1] != -1000); in b43legacy_phy_initg()
1083 B43legacy_WARN_ON(phy->nrssi[1] == -1000); in b43legacy_phy_initg()
1087 if (phy->radio_rev == 8) in b43legacy_phy_initg()
1090 if (dev->dev->bus->chip_id == 0x4306 in b43legacy_phy_initg()
1091 && dev->dev->bus->chip_package == 2) { in b43legacy_phy_initg()
1123 struct b43legacy_phy *phy = &dev->phy; in b43legacy_phy_lo_b_measure()
1133 if (phy->radio_ver == 0x2053) { in b43legacy_phy_lo_b_measure()
1137 regstack[5] = b43legacy_phy_read(dev, 0x0003); in b43legacy_phy_lo_b_measure()
1154 if (phy->radio_ver == 0x2053) { in b43legacy_phy_lo_b_measure()
1159 phy->minlowsig[0] = 0xFFFF; in b43legacy_phy_lo_b_measure()
1168 if (mls < phy->minlowsig[0]) { in b43legacy_phy_lo_b_measure()
1169 phy->minlowsig[0] = mls; in b43legacy_phy_lo_b_measure()
1170 phy->minlowsigpos[0] = i; in b43legacy_phy_lo_b_measure()
1174 | phy->minlowsigpos[0]); in b43legacy_phy_lo_b_measure()
1176 phy->minlowsig[1] = 0xFFFF; in b43legacy_phy_lo_b_measure()
1178 for (i = -4; i < 5; i += 2) { in b43legacy_phy_lo_b_measure()
1179 for (j = -4; j < 5; j += 2) { in b43legacy_phy_lo_b_measure()
1186 if (mls < phy->minlowsig[1]) { in b43legacy_phy_lo_b_measure()
1187 phy->minlowsig[1] = mls; in b43legacy_phy_lo_b_measure()
1188 phy->minlowsigpos[1] = fval; in b43legacy_phy_lo_b_measure()
1192 phy->minlowsigpos[1] += 0x0101; in b43legacy_phy_lo_b_measure()
1194 b43legacy_phy_write(dev, 0x002F, phy->minlowsigpos[1]); in b43legacy_phy_lo_b_measure()
1195 if (phy->radio_ver == 0x2053) { in b43legacy_phy_lo_b_measure()
1199 b43legacy_phy_write(dev, 0x0003, regstack[5]); in b43legacy_phy_lo_b_measure()
1219 struct b43legacy_phy *phy = &dev->phy; in b43legacy_phy_lo_g_deviation_subval()
1224 if (phy->gmode) { in b43legacy_phy_lo_g_deviation_subval()
1228 udelay(5); in b43legacy_phy_lo_g_deviation_subval()
1269 value = (u8)(pair->low); in b43legacy_lo_write()
1270 value |= ((u8)(pair->high)) << 8; in b43legacy_lo_write()
1274 if (pair->low < -8 || pair->low > 8 || in b43legacy_lo_write()
1275 pair->high < -8 || pair->high > 8) { in b43legacy_lo_write()
1276 b43legacydbg(dev->wl, in b43legacy_lo_write()
1279 pair->low, pair->high); in b43legacy_lo_write()
1294 struct b43legacy_phy *phy = &dev->phy; in b43legacy_find_lopair()
1308 struct b43legacy_phy *phy = &dev->phy; in b43legacy_current_lopair()
1310 return b43legacy_find_lopair(dev, phy->bbatt, in b43legacy_current_lopair()
1311 phy->rfatt, phy->txctl1); in b43legacy_current_lopair()
1314 /* Adjust B/G LO */
1329 struct b43legacy_phy *phy = &dev->phy; in b43legacy_phy_lo_g_measure_txctl2()
1347 phy->txctl2 = txctl2; in b43legacy_phy_lo_g_measure_txctl2()
1359 { .high = 1, .low = -1, }, in b43legacy_phy_lo_g_state()
1360 { .high = 0, .low = -1, }, in b43legacy_phy_lo_g_state()
1361 { .high = -1, .low = -1, }, in b43legacy_phy_lo_g_state()
1362 { .high = -1, .low = 0, }, in b43legacy_phy_lo_g_state()
1363 { .high = -1, .low = 1, }, in b43legacy_phy_lo_g_state()
1367 .high = in_pair->high, in b43legacy_phy_lo_g_state()
1368 .low = in_pair->low, in b43legacy_phy_lo_g_state()
1393 begin = state - 1; in b43legacy_phy_lo_g_state()
1396 begin = state - 2; in b43legacy_phy_lo_g_state()
1402 end -= 8; in b43legacy_phy_lo_g_state()
1410 transitions[j - 1].high; in b43legacy_phy_lo_g_state()
1411 transition.low = tmp_pair.low + transitions[j - 1].low; in b43legacy_phy_lo_g_state()
1434 } while (i-- && found_lower); in b43legacy_phy_lo_g_state()
1436 out_pair->high = lowest_transition.high; in b43legacy_phy_lo_g_state()
1437 out_pair->low = lowest_transition.low; in b43legacy_phy_lo_g_state()
1444 struct b43legacy_phy *phy = &dev->phy; in b43legacy_phy_set_baseband_attenuation()
1447 if (phy->analog == 0) { in b43legacy_phy_set_baseband_attenuation()
1454 if (phy->analog > 1) { in b43legacy_phy_set_baseband_attenuation()
1464 /* https://bcm-specs.sipsolutions.net/LocalOscillator/Measure */
1467 static const u8 pairorder[10] = { 3, 1, 5, 7, 9, 2, 0, 4, 6, 8 }; in b43legacy_phy_lo_g_measure()
1470 struct b43legacy_phy *phy = &dev->phy; in b43legacy_phy_lo_g_measure()
1485 oldchannel = phy->channel; in b43legacy_phy_lo_g_measure()
1487 if (phy->gmode) { in b43legacy_phy_lo_g_measure()
1497 regstack[5] = b43legacy_phy_read(dev, 0x15); in b43legacy_phy_lo_g_measure()
1504 if (phy->gmode) { in b43legacy_phy_lo_g_measure()
1511 if (phy->gmode) { in b43legacy_phy_lo_g_measure()
1528 if (phy->gmode) { in b43legacy_phy_lo_g_measure()
1542 /* Loop over each possible RadioAttenuation (0-9) */ in b43legacy_phy_lo_g_measure()
1574 if (!tmp_control->used) in b43legacy_phy_lo_g_measure()
1581 b43legacy_radio_write16(dev, 0x52, phy->txctl2); in b43legacy_phy_lo_g_measure()
1598 /* Loop over each possible RadioAttenuation (10-13) */ in b43legacy_phy_lo_g_measure()
1603 tmp_control = b43legacy_get_lopair(phy, i - 9, in b43legacy_phy_lo_g_measure()
1608 tmp = (i - 9) * 2 + j - 5; in b43legacy_phy_lo_g_measure()
1619 tmp_control = b43legacy_get_lopair(phy, i - 9, in b43legacy_phy_lo_g_measure()
1621 if (!tmp_control->used) in b43legacy_phy_lo_g_measure()
1627 b43legacy_radio_write16(dev, 0x43, i - 9); in b43legacy_phy_lo_g_measure()
1631 phy->txctl2 in b43legacy_phy_lo_g_measure()
1650 if (phy->gmode) { in b43legacy_phy_lo_g_measure()
1653 udelay(5); in b43legacy_phy_lo_g_measure()
1662 if (phy->gmode) in b43legacy_phy_lo_g_measure()
1667 b43legacy_phy_write(dev, 0x0015, regstack[5]); in b43legacy_phy_lo_g_measure()
1677 if (phy->gmode) { in b43legacy_phy_lo_g_measure()
1691 tmp_control = phy->_lo_pairs + i; in b43legacy_phy_lo_g_measure()
1692 if (tmp_control->low < -8 || tmp_control->low > 8 || in b43legacy_phy_lo_g_measure()
1693 tmp_control->high < -8 || tmp_control->high > 8) in b43legacy_phy_lo_g_measure()
1694 b43legacywarn(dev->wl, in b43legacy_phy_lo_g_measure()
1697 tmp_control->low, tmp_control->high, i); in b43legacy_phy_lo_g_measure()
1709 pair->used = 1; in b43legacy_phy_lo_mark_current_used()
1714 struct b43legacy_phy *phy = &dev->phy; in b43legacy_phy_lo_mark_all_unused()
1719 pair = phy->_lo_pairs + i; in b43legacy_phy_lo_mark_all_unused()
1720 pair->used = 0; in b43legacy_phy_lo_mark_all_unused()
1724 /* https://bcm-specs.sipsolutions.net/EstimatePowerOut
1729 struct b43legacy_phy *phy = &dev->phy; in b43legacy_phy_estimate_power_out()
1733 tmp = phy->idle_tssi; in b43legacy_phy_estimate_power_out()
1735 tmp -= phy->savedpctlreg; in b43legacy_phy_estimate_power_out()
1737 switch (phy->type) { in b43legacy_phy_estimate_power_out()
1741 dbm = phy->tssi2dbm[tmp]; in b43legacy_phy_estimate_power_out()
1750 /* https://bcm-specs.sipsolutions.net/RecalculateTransmissionPower */
1753 struct b43legacy_phy *phy = &dev->phy; in b43legacy_phy_xmitpower()
1755 u16 txpower; in b43legacy_phy_xmitpower() local
1770 if (phy->savedpctlreg == 0xFFFF) in b43legacy_phy_xmitpower()
1772 if ((dev->dev->bus->boardinfo.type == 0x0416) && in b43legacy_phy_xmitpower()
1776 if (phy->manual_txpower_control) in b43legacy_phy_xmitpower()
1780 B43legacy_BUG_ON(!(phy->type == B43legacy_PHYTYPE_B || in b43legacy_phy_xmitpower()
1781 phy->type == B43legacy_PHYTYPE_G)); in b43legacy_phy_xmitpower()
1813 average -= 13; in b43legacy_phy_xmitpower()
1817 max_pwr = dev->dev->bus->sprom.maxpwr_bg; in b43legacy_phy_xmitpower()
1819 if ((dev->dev->bus->sprom.boardflags_lo in b43legacy_phy_xmitpower()
1821 (phy->type == B43legacy_PHYTYPE_G)) in b43legacy_phy_xmitpower()
1822 max_pwr -= 0x3; in b43legacy_phy_xmitpower()
1824 b43legacywarn(dev->wl, "Invalid max-TX-power value in SPROM." in b43legacy_phy_xmitpower()
1827 dev->dev->bus->sprom.maxpwr_bg = max_pwr; in b43legacy_phy_xmitpower()
1838 - dev->dev->bus->sprom.antenna_gain.a0 in b43legacy_phy_xmitpower()
1839 - 0x6, max_pwr); in b43legacy_phy_xmitpower()
1841 /* find the desired power in Q5.2 - power_level is in dBm in b43legacy_phy_xmitpower()
1842 * and limit it - max_pwr is already in Q5.2 */ in b43legacy_phy_xmitpower()
1843 desired_pwr = clamp_val(phy->power_level << 2, 0, max_pwr); in b43legacy_phy_xmitpower()
1845 b43legacydbg(dev->wl, "Current TX power output: " Q52_FMT in b43legacy_phy_xmitpower()
1851 pwr_adjust = (desired_pwr - estimated_pwr) / 2; in b43legacy_phy_xmitpower()
1854 radio_att_delta = -(pwr_adjust + 7) >> 3; in b43legacy_phy_xmitpower()
1856 baseband_att_delta = -(pwr_adjust >> 1) - (4 * radio_att_delta); in b43legacy_phy_xmitpower()
1864 baseband_attenuation = phy->bbatt; in b43legacy_phy_xmitpower()
1866 radio_attenuation = phy->rfatt; in b43legacy_phy_xmitpower()
1870 * baseband 0-11, radio 0-9. in b43legacy_phy_xmitpower()
1874 baseband_attenuation -= (4 * -radio_attenuation); in b43legacy_phy_xmitpower()
1877 baseband_attenuation += (4 * (radio_attenuation - 9)); in b43legacy_phy_xmitpower()
1882 radio_attenuation--; in b43legacy_phy_xmitpower()
1885 baseband_attenuation -= 4; in b43legacy_phy_xmitpower()
1891 txpower = phy->txctl1; in b43legacy_phy_xmitpower()
1892 if ((phy->radio_ver == 0x2050) && (phy->radio_rev == 2)) { in b43legacy_phy_xmitpower()
1894 if (txpower == 0) { in b43legacy_phy_xmitpower()
1895 txpower = 3; in b43legacy_phy_xmitpower()
1898 } else if (dev->dev->bus->sprom.boardflags_lo in b43legacy_phy_xmitpower()
1901 (radio_attenuation - 2); in b43legacy_phy_xmitpower()
1904 } else if (radio_attenuation > 4 && txpower != 0) { in b43legacy_phy_xmitpower()
1905 txpower = 0; in b43legacy_phy_xmitpower()
1907 radio_attenuation -= 3; in b43legacy_phy_xmitpower()
1910 radio_attenuation -= 2; in b43legacy_phy_xmitpower()
1911 baseband_attenuation -= 2; in b43legacy_phy_xmitpower()
1916 phy->txctl1 = txpower; in b43legacy_phy_xmitpower()
1919 phy->rfatt = radio_attenuation; in b43legacy_phy_xmitpower()
1920 phy->bbatt = baseband_attenuation; in b43legacy_phy_xmitpower()
1926 radio_attenuation, txpower); in b43legacy_phy_xmitpower()
1955 return -EINVAL; in b43legacy_tssi2dbm_entry()
1956 q = b43legacy_tssi2dbm_ad(f * 4096 - in b43legacy_tssi2dbm_entry()
1959 delta = abs(q - f); in b43legacy_tssi2dbm_entry()
1964 -127, 128); in b43legacy_tssi2dbm_entry()
1968 /* http://bcm-specs.sipsolutions.net/TSSI_to_DBM_Table */
1971 struct b43legacy_phy *phy = &dev->phy; in b43legacy_phy_init_tssi2dbm_table()
1978 B43legacy_WARN_ON(!(phy->type == B43legacy_PHYTYPE_B || in b43legacy_phy_init_tssi2dbm_table()
1979 phy->type == B43legacy_PHYTYPE_G)); in b43legacy_phy_init_tssi2dbm_table()
1980 pab0 = (s16)(dev->dev->bus->sprom.pa0b0); in b43legacy_phy_init_tssi2dbm_table()
1981 pab1 = (s16)(dev->dev->bus->sprom.pa0b1); in b43legacy_phy_init_tssi2dbm_table()
1982 pab2 = (s16)(dev->dev->bus->sprom.pa0b2); in b43legacy_phy_init_tssi2dbm_table()
1984 if ((dev->dev->bus->chip_id == 0x4301) && (phy->radio_ver != 0x2050)) { in b43legacy_phy_init_tssi2dbm_table()
1985 phy->idle_tssi = 0x34; in b43legacy_phy_init_tssi2dbm_table()
1986 phy->tssi2dbm = b43legacy_tssi2dbm_b_table; in b43legacy_phy_init_tssi2dbm_table()
1991 pab0 != -1 && pab1 != -1 && pab2 != -1) { in b43legacy_phy_init_tssi2dbm_table()
1993 if ((s8)dev->dev->bus->sprom.itssi_bg != 0 && in b43legacy_phy_init_tssi2dbm_table()
1994 (s8)dev->dev->bus->sprom.itssi_bg != -1) in b43legacy_phy_init_tssi2dbm_table()
1995 phy->idle_tssi = (s8)(dev->dev->bus->sprom. in b43legacy_phy_init_tssi2dbm_table()
1998 phy->idle_tssi = 62; in b43legacy_phy_init_tssi2dbm_table()
2001 b43legacyerr(dev->wl, "Could not allocate memory " in b43legacy_phy_init_tssi2dbm_table()
2003 return -ENOMEM; in b43legacy_phy_init_tssi2dbm_table()
2008 phy->tssi2dbm = NULL; in b43legacy_phy_init_tssi2dbm_table()
2009 b43legacyerr(dev->wl, "Could not generate " in b43legacy_phy_init_tssi2dbm_table()
2012 return -ENODEV; in b43legacy_phy_init_tssi2dbm_table()
2014 phy->tssi2dbm = dyn_tssi2dbm; in b43legacy_phy_init_tssi2dbm_table()
2015 phy->dyn_tssi_tbl = 1; in b43legacy_phy_init_tssi2dbm_table()
2018 switch (phy->type) { in b43legacy_phy_init_tssi2dbm_table()
2020 phy->idle_tssi = 0x34; in b43legacy_phy_init_tssi2dbm_table()
2021 phy->tssi2dbm = b43legacy_tssi2dbm_b_table; in b43legacy_phy_init_tssi2dbm_table()
2024 phy->idle_tssi = 0x34; in b43legacy_phy_init_tssi2dbm_table()
2025 phy->tssi2dbm = b43legacy_tssi2dbm_g_table; in b43legacy_phy_init_tssi2dbm_table()
2035 struct b43legacy_phy *phy = &dev->phy; in b43legacy_phy_init()
2036 int err = -ENODEV; in b43legacy_phy_init()
2038 switch (phy->type) { in b43legacy_phy_init()
2040 switch (phy->rev) { in b43legacy_phy_init()
2049 case 5: in b43legacy_phy_init()
2065 b43legacyerr(dev->wl, "Unknown PHYTYPE found\n"); in b43legacy_phy_init()
2072 struct b43legacy_phy *phy = &dev->phy; in b43legacy_phy_set_antenna_diversity()
2078 antennadiv = phy->antenna_diversity; in b43legacy_phy_set_antenna_diversity()
2090 switch (phy->type) { in b43legacy_phy_set_antenna_diversity()
2113 if (phy->type == B43legacy_PHYTYPE_G) { in b43legacy_phy_set_antenna_diversity()
2122 if (phy->rev >= 2) { in b43legacy_phy_set_antenna_diversity()
2130 if (phy->rev == 2) in b43legacy_phy_set_antenna_diversity()
2137 } else if (phy->rev >= 6) in b43legacy_phy_set_antenna_diversity()
2140 if (phy->rev < 3) in b43legacy_phy_set_antenna_diversity()
2149 if (phy->rev == 3) { in b43legacy_phy_set_antenna_diversity()
2165 if (dev->dev->id.revision == 2) in b43legacy_phy_set_antenna_diversity()
2185 phy->antenna_diversity = antennadiv; in b43legacy_phy_set_antenna_diversity()
2192 * -1 => calculate the bit
2204 if (bit25 == -1) { in b43legacy_power_saving_ctl_bits()
2209 if (bit26 == -1) { in b43legacy_power_saving_ctl_bits()
2212 * or the latest PS-Poll packet sent was successful, in b43legacy_power_saving_ctl_bits()
2225 if (bit26 && dev->dev->id.revision >= 5) { in b43legacy_power_saving_ctl_bits()