diff options
author | Rafał Miłecki <zajec5@gmail.com> | 2013-03-20 13:24:47 -0400 |
---|---|---|
committer | Rafał Miłecki <zajec5@gmail.com> | 2013-04-23 06:27:57 -0400 |
commit | a3764ef7a56913f0060247a7ed49bd2c74200d97 (patch) | |
tree | 10c0136281dff0ff802e12d197f5e1604c1acdd7 | |
parent | 2a2d0589446c3808858410639719642712af59c1 (diff) |
b43: N-PHY: use enum for RSSI type everywhere we use it
Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
-rw-r--r-- | drivers/net/wireless/b43/phy_n.c | 104 |
1 files changed, 61 insertions, 43 deletions
diff --git a/drivers/net/wireless/b43/phy_n.c b/drivers/net/wireless/b43/phy_n.c index 60ac7c131e0a..b8b373ebc8b2 100644 --- a/drivers/net/wireless/b43/phy_n.c +++ b/drivers/net/wireless/b43/phy_n.c | |||
@@ -1289,7 +1289,8 @@ static void b43_nphy_scale_offset_rssi(struct b43_wldev *dev, u16 scale, | |||
1289 | } | 1289 | } |
1290 | } | 1290 | } |
1291 | 1291 | ||
1292 | static void b43_nphy_rev3_rssi_select(struct b43_wldev *dev, u8 code, u8 type) | 1292 | static void b43_nphy_rev3_rssi_select(struct b43_wldev *dev, u8 code, |
1293 | enum n_rssi_type rssi_type) | ||
1293 | { | 1294 | { |
1294 | u8 i; | 1295 | u8 i; |
1295 | u16 reg, val; | 1296 | u16 reg, val; |
@@ -1312,7 +1313,9 @@ static void b43_nphy_rev3_rssi_select(struct b43_wldev *dev, u8 code, u8 type) | |||
1312 | B43_NPHY_AFECTL_OVER1 : B43_NPHY_AFECTL_OVER; | 1313 | B43_NPHY_AFECTL_OVER1 : B43_NPHY_AFECTL_OVER; |
1313 | b43_phy_maskset(dev, reg, 0xFDFF, 0x0200); | 1314 | b43_phy_maskset(dev, reg, 0xFDFF, 0x0200); |
1314 | 1315 | ||
1315 | if (type < 3) { | 1316 | if (rssi_type == N_RSSI_W1 || |
1317 | rssi_type == N_RSSI_W2 || | ||
1318 | rssi_type == N_RSSI_NB) { | ||
1316 | reg = (i == 0) ? | 1319 | reg = (i == 0) ? |
1317 | B43_NPHY_AFECTL_C1 : | 1320 | B43_NPHY_AFECTL_C1 : |
1318 | B43_NPHY_AFECTL_C2; | 1321 | B43_NPHY_AFECTL_C2; |
@@ -1323,9 +1326,9 @@ static void b43_nphy_rev3_rssi_select(struct b43_wldev *dev, u8 code, u8 type) | |||
1323 | B43_NPHY_RFCTL_LUT_TRSW_UP2; | 1326 | B43_NPHY_RFCTL_LUT_TRSW_UP2; |
1324 | b43_phy_maskset(dev, reg, 0xFFC3, 0); | 1327 | b43_phy_maskset(dev, reg, 0xFFC3, 0); |
1325 | 1328 | ||
1326 | if (type == 0) | 1329 | if (rssi_type == N_RSSI_W1) |
1327 | val = (b43_current_band(dev->wl) == IEEE80211_BAND_5GHZ) ? 4 : 8; | 1330 | val = (b43_current_band(dev->wl) == IEEE80211_BAND_5GHZ) ? 4 : 8; |
1328 | else if (type == 1) | 1331 | else if (rssi_type == N_RSSI_W2) |
1329 | val = 16; | 1332 | val = 16; |
1330 | else | 1333 | else |
1331 | val = 32; | 1334 | val = 32; |
@@ -1336,9 +1339,9 @@ static void b43_nphy_rev3_rssi_select(struct b43_wldev *dev, u8 code, u8 type) | |||
1336 | B43_NPHY_TXF_40CO_B32S1; | 1339 | B43_NPHY_TXF_40CO_B32S1; |
1337 | b43_phy_set(dev, reg, 0x0020); | 1340 | b43_phy_set(dev, reg, 0x0020); |
1338 | } else { | 1341 | } else { |
1339 | if (type == 6) | 1342 | if (rssi_type == N_RSSI_TBD) |
1340 | val = 0x0100; | 1343 | val = 0x0100; |
1341 | else if (type == 3) | 1344 | else if (rssi_type == N_RSSI_IQ) |
1342 | val = 0x0200; | 1345 | val = 0x0200; |
1343 | else | 1346 | else |
1344 | val = 0x0300; | 1347 | val = 0x0300; |
@@ -1350,7 +1353,8 @@ static void b43_nphy_rev3_rssi_select(struct b43_wldev *dev, u8 code, u8 type) | |||
1350 | b43_phy_maskset(dev, reg, 0xFCFF, val); | 1353 | b43_phy_maskset(dev, reg, 0xFCFF, val); |
1351 | b43_phy_maskset(dev, reg, 0xF3FF, val << 2); | 1354 | b43_phy_maskset(dev, reg, 0xF3FF, val << 2); |
1352 | 1355 | ||
1353 | if (type != 3 && type != 6) { | 1356 | if (rssi_type != N_RSSI_IQ && |
1357 | rssi_type != N_RSSI_TBD) { | ||
1354 | enum ieee80211_band band = | 1358 | enum ieee80211_band band = |
1355 | b43_current_band(dev->wl); | 1359 | b43_current_band(dev->wl); |
1356 | 1360 | ||
@@ -1372,33 +1376,43 @@ static void b43_nphy_rev3_rssi_select(struct b43_wldev *dev, u8 code, u8 type) | |||
1372 | } | 1376 | } |
1373 | } | 1377 | } |
1374 | 1378 | ||
1375 | static void b43_nphy_rev2_rssi_select(struct b43_wldev *dev, u8 code, u8 type) | 1379 | static void b43_nphy_rev2_rssi_select(struct b43_wldev *dev, u8 code, |
1380 | enum n_rssi_type rssi_type) | ||
1376 | { | 1381 | { |
1377 | u16 val; | 1382 | u16 val; |
1383 | bool rssi_w1_w2_nb = false; | ||
1378 | 1384 | ||
1379 | if (type < 3) | 1385 | switch (rssi_type) { |
1386 | case N_RSSI_W1: | ||
1387 | case N_RSSI_W2: | ||
1388 | case N_RSSI_NB: | ||
1380 | val = 0; | 1389 | val = 0; |
1381 | else if (type == 6) | 1390 | rssi_w1_w2_nb = true; |
1391 | break; | ||
1392 | case N_RSSI_TBD: | ||
1382 | val = 1; | 1393 | val = 1; |
1383 | else if (type == 3) | 1394 | break; |
1395 | case N_RSSI_IQ: | ||
1384 | val = 2; | 1396 | val = 2; |
1385 | else | 1397 | break; |
1398 | default: | ||
1386 | val = 3; | 1399 | val = 3; |
1400 | } | ||
1387 | 1401 | ||
1388 | val = (val << 12) | (val << 14); | 1402 | val = (val << 12) | (val << 14); |
1389 | b43_phy_maskset(dev, B43_NPHY_AFECTL_C1, 0x0FFF, val); | 1403 | b43_phy_maskset(dev, B43_NPHY_AFECTL_C1, 0x0FFF, val); |
1390 | b43_phy_maskset(dev, B43_NPHY_AFECTL_C2, 0x0FFF, val); | 1404 | b43_phy_maskset(dev, B43_NPHY_AFECTL_C2, 0x0FFF, val); |
1391 | 1405 | ||
1392 | if (type < 3) { | 1406 | if (rssi_w1_w2_nb) { |
1393 | b43_phy_maskset(dev, B43_NPHY_RFCTL_RSSIO1, 0xFFCF, | 1407 | b43_phy_maskset(dev, B43_NPHY_RFCTL_RSSIO1, 0xFFCF, |
1394 | (type + 1) << 4); | 1408 | (rssi_type + 1) << 4); |
1395 | b43_phy_maskset(dev, B43_NPHY_RFCTL_RSSIO2, 0xFFCF, | 1409 | b43_phy_maskset(dev, B43_NPHY_RFCTL_RSSIO2, 0xFFCF, |
1396 | (type + 1) << 4); | 1410 | (rssi_type + 1) << 4); |
1397 | } | 1411 | } |
1398 | 1412 | ||
1399 | if (code == 0) { | 1413 | if (code == 0) { |
1400 | b43_phy_mask(dev, B43_NPHY_AFECTL_OVER, ~0x3000); | 1414 | b43_phy_mask(dev, B43_NPHY_AFECTL_OVER, ~0x3000); |
1401 | if (type < 3) { | 1415 | if (rssi_w1_w2_nb) { |
1402 | b43_phy_mask(dev, B43_NPHY_RFCTL_CMD, | 1416 | b43_phy_mask(dev, B43_NPHY_RFCTL_CMD, |
1403 | ~(B43_NPHY_RFCTL_CMD_RXEN | | 1417 | ~(B43_NPHY_RFCTL_CMD_RXEN | |
1404 | B43_NPHY_RFCTL_CMD_CORESEL)); | 1418 | B43_NPHY_RFCTL_CMD_CORESEL)); |
@@ -1414,7 +1428,7 @@ static void b43_nphy_rev2_rssi_select(struct b43_wldev *dev, u8 code, u8 type) | |||
1414 | } | 1428 | } |
1415 | } else { | 1429 | } else { |
1416 | b43_phy_set(dev, B43_NPHY_AFECTL_OVER, 0x3000); | 1430 | b43_phy_set(dev, B43_NPHY_AFECTL_OVER, 0x3000); |
1417 | if (type < 3) { | 1431 | if (rssi_w1_w2_nb) { |
1418 | b43_phy_maskset(dev, B43_NPHY_RFCTL_CMD, | 1432 | b43_phy_maskset(dev, B43_NPHY_RFCTL_CMD, |
1419 | ~(B43_NPHY_RFCTL_CMD_RXEN | | 1433 | ~(B43_NPHY_RFCTL_CMD_RXEN | |
1420 | B43_NPHY_RFCTL_CMD_CORESEL), | 1434 | B43_NPHY_RFCTL_CMD_CORESEL), |
@@ -1434,7 +1448,8 @@ static void b43_nphy_rev2_rssi_select(struct b43_wldev *dev, u8 code, u8 type) | |||
1434 | } | 1448 | } |
1435 | 1449 | ||
1436 | /* http://bcm-v4.sipsolutions.net/802.11/PHY/N/RSSISel */ | 1450 | /* http://bcm-v4.sipsolutions.net/802.11/PHY/N/RSSISel */ |
1437 | static void b43_nphy_rssi_select(struct b43_wldev *dev, u8 code, u8 type) | 1451 | static void b43_nphy_rssi_select(struct b43_wldev *dev, u8 code, |
1452 | enum n_rssi_type type) | ||
1438 | { | 1453 | { |
1439 | if (dev->phy.rev >= 3) | 1454 | if (dev->phy.rev >= 3) |
1440 | b43_nphy_rev3_rssi_select(dev, code, type); | 1455 | b43_nphy_rev3_rssi_select(dev, code, type); |
@@ -1443,11 +1458,12 @@ static void b43_nphy_rssi_select(struct b43_wldev *dev, u8 code, u8 type) | |||
1443 | } | 1458 | } |
1444 | 1459 | ||
1445 | /* http://bcm-v4.sipsolutions.net/802.11/PHY/N/SetRssi2055Vcm */ | 1460 | /* http://bcm-v4.sipsolutions.net/802.11/PHY/N/SetRssi2055Vcm */ |
1446 | static void b43_nphy_set_rssi_2055_vcm(struct b43_wldev *dev, u8 type, u8 *buf) | 1461 | static void b43_nphy_set_rssi_2055_vcm(struct b43_wldev *dev, |
1462 | enum n_rssi_type rssi_type, u8 *buf) | ||
1447 | { | 1463 | { |
1448 | int i; | 1464 | int i; |
1449 | for (i = 0; i < 2; i++) { | 1465 | for (i = 0; i < 2; i++) { |
1450 | if (type == 2) { | 1466 | if (rssi_type == N_RSSI_NB) { |
1451 | if (i == 0) { | 1467 | if (i == 0) { |
1452 | b43_radio_maskset(dev, B2055_C1_B0NB_RSSIVCM, | 1468 | b43_radio_maskset(dev, B2055_C1_B0NB_RSSIVCM, |
1453 | 0xFC, buf[0]); | 1469 | 0xFC, buf[0]); |
@@ -1471,8 +1487,8 @@ static void b43_nphy_set_rssi_2055_vcm(struct b43_wldev *dev, u8 type, u8 *buf) | |||
1471 | } | 1487 | } |
1472 | 1488 | ||
1473 | /* http://bcm-v4.sipsolutions.net/802.11/PHY/N/PollRssi */ | 1489 | /* http://bcm-v4.sipsolutions.net/802.11/PHY/N/PollRssi */ |
1474 | static int b43_nphy_poll_rssi(struct b43_wldev *dev, u8 type, s32 *buf, | 1490 | static int b43_nphy_poll_rssi(struct b43_wldev *dev, enum n_rssi_type rssi_type, |
1475 | u8 nsamp) | 1491 | s32 *buf, u8 nsamp) |
1476 | { | 1492 | { |
1477 | int i; | 1493 | int i; |
1478 | int out; | 1494 | int out; |
@@ -1503,7 +1519,7 @@ static int b43_nphy_poll_rssi(struct b43_wldev *dev, u8 type, s32 *buf, | |||
1503 | save_regs_phy[8] = 0; | 1519 | save_regs_phy[8] = 0; |
1504 | } | 1520 | } |
1505 | 1521 | ||
1506 | b43_nphy_rssi_select(dev, 5, type); | 1522 | b43_nphy_rssi_select(dev, 5, rssi_type); |
1507 | 1523 | ||
1508 | if (dev->phy.rev < 2) { | 1524 | if (dev->phy.rev < 2) { |
1509 | save_regs_phy[8] = b43_phy_read(dev, B43_NPHY_GPIO_SEL); | 1525 | save_regs_phy[8] = b43_phy_read(dev, B43_NPHY_GPIO_SEL); |
@@ -1622,14 +1638,16 @@ static void b43_nphy_rev3_rssi_cal(struct b43_wldev *dev) | |||
1622 | if (!(rx_core_state & (1 << core))) | 1638 | if (!(rx_core_state & (1 << core))) |
1623 | continue; | 1639 | continue; |
1624 | r = core ? B2056_RX1 : B2056_RX0; | 1640 | r = core ? B2056_RX1 : B2056_RX0; |
1625 | b43_nphy_scale_offset_rssi(dev, 0, 0, core + 1, N_RAIL_I, 2); | 1641 | b43_nphy_scale_offset_rssi(dev, 0, 0, core + 1, N_RAIL_I, |
1626 | b43_nphy_scale_offset_rssi(dev, 0, 0, core + 1, N_RAIL_Q, 2); | 1642 | N_RSSI_NB); |
1643 | b43_nphy_scale_offset_rssi(dev, 0, 0, core + 1, N_RAIL_Q, | ||
1644 | N_RSSI_NB); | ||
1627 | 1645 | ||
1628 | /* Grab RSSI results for every possible VCM */ | 1646 | /* Grab RSSI results for every possible VCM */ |
1629 | for (vcm = 0; vcm < 8; vcm++) { | 1647 | for (vcm = 0; vcm < 8; vcm++) { |
1630 | b43_radio_maskset(dev, r | B2056_RX_RSSI_MISC, 0xE3, | 1648 | b43_radio_maskset(dev, r | B2056_RX_RSSI_MISC, 0xE3, |
1631 | vcm << 2); | 1649 | vcm << 2); |
1632 | b43_nphy_poll_rssi(dev, 2, results[vcm], 8); | 1650 | b43_nphy_poll_rssi(dev, N_RSSI_NB, results[vcm], 8); |
1633 | } | 1651 | } |
1634 | 1652 | ||
1635 | /* Find out which VCM got the best results */ | 1653 | /* Find out which VCM got the best results */ |
@@ -1671,7 +1689,7 @@ static void b43_nphy_rev3_rssi_cal(struct b43_wldev *dev) | |||
1671 | b43_nphy_scale_offset_rssi(dev, 0, offset[i], | 1689 | b43_nphy_scale_offset_rssi(dev, 0, offset[i], |
1672 | (i / 2 == 0) ? 1 : 2, | 1690 | (i / 2 == 0) ? 1 : 2, |
1673 | (i % 2 == 0) ? N_RAIL_I : N_RAIL_Q, | 1691 | (i % 2 == 0) ? N_RAIL_I : N_RAIL_Q, |
1674 | 2); | 1692 | N_RSSI_NB); |
1675 | } | 1693 | } |
1676 | } | 1694 | } |
1677 | 1695 | ||
@@ -1749,7 +1767,7 @@ static void b43_nphy_rev3_rssi_cal(struct b43_wldev *dev) | |||
1749 | } | 1767 | } |
1750 | 1768 | ||
1751 | /* http://bcm-v4.sipsolutions.net/802.11/PHY/N/RSSICal */ | 1769 | /* http://bcm-v4.sipsolutions.net/802.11/PHY/N/RSSICal */ |
1752 | static void b43_nphy_rev2_rssi_cal(struct b43_wldev *dev, u8 type) | 1770 | static void b43_nphy_rev2_rssi_cal(struct b43_wldev *dev, enum n_rssi_type type) |
1753 | { | 1771 | { |
1754 | int i, j, vcm; | 1772 | int i, j, vcm; |
1755 | u8 state[4]; | 1773 | u8 state[4]; |
@@ -1769,10 +1787,10 @@ static void b43_nphy_rev2_rssi_cal(struct b43_wldev *dev, u8 type) | |||
1769 | s32 results[4][4] = { }; | 1787 | s32 results[4][4] = { }; |
1770 | s32 miniq[4][2] = { }; | 1788 | s32 miniq[4][2] = { }; |
1771 | 1789 | ||
1772 | if (type == 2) { | 1790 | if (type == N_RSSI_NB) { |
1773 | code = 0; | 1791 | code = 0; |
1774 | val = 6; | 1792 | val = 6; |
1775 | } else if (type < 2) { | 1793 | } else if (type == N_RSSI_W1 || type == N_RSSI_W2) { |
1776 | code = 25; | 1794 | code = 25; |
1777 | val = 4; | 1795 | val = 4; |
1778 | } else { | 1796 | } else { |
@@ -1815,10 +1833,10 @@ static void b43_nphy_rev2_rssi_cal(struct b43_wldev *dev, u8 type) | |||
1815 | u8 tmp[4]; | 1833 | u8 tmp[4]; |
1816 | for (j = 0; j < 4; j++) | 1834 | for (j = 0; j < 4; j++) |
1817 | tmp[j] = vcm; | 1835 | tmp[j] = vcm; |
1818 | if (type != 1) | 1836 | if (type != N_RSSI_W2) |
1819 | b43_nphy_set_rssi_2055_vcm(dev, type, tmp); | 1837 | b43_nphy_set_rssi_2055_vcm(dev, type, tmp); |
1820 | b43_nphy_poll_rssi(dev, type, results[vcm], 8); | 1838 | b43_nphy_poll_rssi(dev, type, results[vcm], 8); |
1821 | if (type < 2) | 1839 | if (type == N_RSSI_W1 || type == N_RSSI_W2) |
1822 | for (j = 0; j < 2; j++) | 1840 | for (j = 0; j < 2; j++) |
1823 | miniq[vcm][j] = min(results[vcm][2 * j], | 1841 | miniq[vcm][j] = min(results[vcm][2 * j], |
1824 | results[vcm][2 * j + 1]); | 1842 | results[vcm][2 * j + 1]); |
@@ -1830,7 +1848,7 @@ static void b43_nphy_rev2_rssi_cal(struct b43_wldev *dev, u8 type) | |||
1830 | s32 minpoll = 249; | 1848 | s32 minpoll = 249; |
1831 | s32 currd; | 1849 | s32 currd; |
1832 | for (vcm = 0; vcm < 4; vcm++) { | 1850 | for (vcm = 0; vcm < 4; vcm++) { |
1833 | if (type == 2) | 1851 | if (type == N_RSSI_NB) |
1834 | currd = abs(results[vcm][i]); | 1852 | currd = abs(results[vcm][i]); |
1835 | else | 1853 | else |
1836 | currd = abs(miniq[vcm][i / 2] - code * 8); | 1854 | currd = abs(miniq[vcm][i / 2] - code * 8); |
@@ -1847,7 +1865,7 @@ static void b43_nphy_rev2_rssi_cal(struct b43_wldev *dev, u8 type) | |||
1847 | vcm_final[i] = minvcm; | 1865 | vcm_final[i] = minvcm; |
1848 | } | 1866 | } |
1849 | 1867 | ||
1850 | if (type != 1) | 1868 | if (type != N_RSSI_W2) |
1851 | b43_nphy_set_rssi_2055_vcm(dev, type, vcm_final); | 1869 | b43_nphy_set_rssi_2055_vcm(dev, type, vcm_final); |
1852 | 1870 | ||
1853 | for (i = 0; i < 4; i++) { | 1871 | for (i = 0; i < 4; i++) { |
@@ -1873,28 +1891,28 @@ static void b43_nphy_rev2_rssi_cal(struct b43_wldev *dev, u8 type) | |||
1873 | 1891 | ||
1874 | switch (state[2]) { | 1892 | switch (state[2]) { |
1875 | case 1: | 1893 | case 1: |
1876 | b43_nphy_rssi_select(dev, 1, 2); | 1894 | b43_nphy_rssi_select(dev, 1, N_RSSI_NB); |
1877 | break; | 1895 | break; |
1878 | case 4: | 1896 | case 4: |
1879 | b43_nphy_rssi_select(dev, 1, 0); | 1897 | b43_nphy_rssi_select(dev, 1, N_RSSI_W1); |
1880 | break; | 1898 | break; |
1881 | case 2: | 1899 | case 2: |
1882 | b43_nphy_rssi_select(dev, 1, 1); | 1900 | b43_nphy_rssi_select(dev, 1, N_RSSI_W2); |
1883 | break; | 1901 | break; |
1884 | default: | 1902 | default: |
1885 | b43_nphy_rssi_select(dev, 1, 1); | 1903 | b43_nphy_rssi_select(dev, 1, N_RSSI_W2); |
1886 | break; | 1904 | break; |
1887 | } | 1905 | } |
1888 | 1906 | ||
1889 | switch (state[3]) { | 1907 | switch (state[3]) { |
1890 | case 1: | 1908 | case 1: |
1891 | b43_nphy_rssi_select(dev, 2, 2); | 1909 | b43_nphy_rssi_select(dev, 2, N_RSSI_NB); |
1892 | break; | 1910 | break; |
1893 | case 4: | 1911 | case 4: |
1894 | b43_nphy_rssi_select(dev, 2, 0); | 1912 | b43_nphy_rssi_select(dev, 2, N_RSSI_W1); |
1895 | break; | 1913 | break; |
1896 | default: | 1914 | default: |
1897 | b43_nphy_rssi_select(dev, 2, 1); | 1915 | b43_nphy_rssi_select(dev, 2, N_RSSI_W2); |
1898 | break; | 1916 | break; |
1899 | } | 1917 | } |
1900 | 1918 | ||
@@ -3153,9 +3171,9 @@ static void b43_nphy_tx_power_ctl_idle_tssi(struct b43_wldev *dev) | |||
3153 | b43_nphy_stop_playback(dev); | 3171 | b43_nphy_stop_playback(dev); |
3154 | b43_nphy_tx_tone(dev, 0xFA0, 0, false, false); | 3172 | b43_nphy_tx_tone(dev, 0xFA0, 0, false, false); |
3155 | udelay(20); | 3173 | udelay(20); |
3156 | tmp = b43_nphy_poll_rssi(dev, 4, rssi, 1); | 3174 | tmp = b43_nphy_poll_rssi(dev, N_RSSI_TSSI_2G, rssi, 1); |
3157 | b43_nphy_stop_playback(dev); | 3175 | b43_nphy_stop_playback(dev); |
3158 | b43_nphy_rssi_select(dev, 0, 0); | 3176 | b43_nphy_rssi_select(dev, 0, N_RSSI_W1); |
3159 | 3177 | ||
3160 | if (phy->rev >= 7) | 3178 | if (phy->rev >= 7) |
3161 | b43_nphy_rf_control_override_rev7(dev, 0x2000, 0, 3, true, 0); | 3179 | b43_nphy_rf_control_override_rev7(dev, 0x2000, 0, 3, true, 0); |