aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRafał Miłecki <zajec5@gmail.com>2013-03-20 13:24:47 -0400
committerRafał Miłecki <zajec5@gmail.com>2013-04-23 06:27:57 -0400
commita3764ef7a56913f0060247a7ed49bd2c74200d97 (patch)
tree10c0136281dff0ff802e12d197f5e1604c1acdd7
parent2a2d0589446c3808858410639719642712af59c1 (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.c104
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
1292static void b43_nphy_rev3_rssi_select(struct b43_wldev *dev, u8 code, u8 type) 1292static 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
1375static void b43_nphy_rev2_rssi_select(struct b43_wldev *dev, u8 code, u8 type) 1379static 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 */
1437static void b43_nphy_rssi_select(struct b43_wldev *dev, u8 code, u8 type) 1451static 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 */
1446static void b43_nphy_set_rssi_2055_vcm(struct b43_wldev *dev, u8 type, u8 *buf) 1461static 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 */
1474static int b43_nphy_poll_rssi(struct b43_wldev *dev, u8 type, s32 *buf, 1490static 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 */
1752static void b43_nphy_rev2_rssi_cal(struct b43_wldev *dev, u8 type) 1770static 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);