Commit a3764ef7 authored by Rafał Miłecki's avatar Rafał Miłecki

b43: N-PHY: use enum for RSSI type everywhere we use it

Signed-off-by: default avatarRafał Miłecki <zajec5@gmail.com>
parent 2a2d0589
...@@ -1289,7 +1289,8 @@ static void b43_nphy_scale_offset_rssi(struct b43_wldev *dev, u16 scale, ...@@ -1289,7 +1289,8 @@ static void b43_nphy_scale_offset_rssi(struct b43_wldev *dev, u16 scale,
} }
} }
static void b43_nphy_rev3_rssi_select(struct b43_wldev *dev, u8 code, u8 type) static void b43_nphy_rev3_rssi_select(struct b43_wldev *dev, u8 code,
enum n_rssi_type rssi_type)
{ {
u8 i; u8 i;
u16 reg, val; u16 reg, val;
...@@ -1312,7 +1313,9 @@ static void b43_nphy_rev3_rssi_select(struct b43_wldev *dev, u8 code, u8 type) ...@@ -1312,7 +1313,9 @@ static void b43_nphy_rev3_rssi_select(struct b43_wldev *dev, u8 code, u8 type)
B43_NPHY_AFECTL_OVER1 : B43_NPHY_AFECTL_OVER; B43_NPHY_AFECTL_OVER1 : B43_NPHY_AFECTL_OVER;
b43_phy_maskset(dev, reg, 0xFDFF, 0x0200); b43_phy_maskset(dev, reg, 0xFDFF, 0x0200);
if (type < 3) { if (rssi_type == N_RSSI_W1 ||
rssi_type == N_RSSI_W2 ||
rssi_type == N_RSSI_NB) {
reg = (i == 0) ? reg = (i == 0) ?
B43_NPHY_AFECTL_C1 : B43_NPHY_AFECTL_C1 :
B43_NPHY_AFECTL_C2; B43_NPHY_AFECTL_C2;
...@@ -1323,9 +1326,9 @@ static void b43_nphy_rev3_rssi_select(struct b43_wldev *dev, u8 code, u8 type) ...@@ -1323,9 +1326,9 @@ static void b43_nphy_rev3_rssi_select(struct b43_wldev *dev, u8 code, u8 type)
B43_NPHY_RFCTL_LUT_TRSW_UP2; B43_NPHY_RFCTL_LUT_TRSW_UP2;
b43_phy_maskset(dev, reg, 0xFFC3, 0); b43_phy_maskset(dev, reg, 0xFFC3, 0);
if (type == 0) if (rssi_type == N_RSSI_W1)
val = (b43_current_band(dev->wl) == IEEE80211_BAND_5GHZ) ? 4 : 8; val = (b43_current_band(dev->wl) == IEEE80211_BAND_5GHZ) ? 4 : 8;
else if (type == 1) else if (rssi_type == N_RSSI_W2)
val = 16; val = 16;
else else
val = 32; val = 32;
...@@ -1336,9 +1339,9 @@ static void b43_nphy_rev3_rssi_select(struct b43_wldev *dev, u8 code, u8 type) ...@@ -1336,9 +1339,9 @@ static void b43_nphy_rev3_rssi_select(struct b43_wldev *dev, u8 code, u8 type)
B43_NPHY_TXF_40CO_B32S1; B43_NPHY_TXF_40CO_B32S1;
b43_phy_set(dev, reg, 0x0020); b43_phy_set(dev, reg, 0x0020);
} else { } else {
if (type == 6) if (rssi_type == N_RSSI_TBD)
val = 0x0100; val = 0x0100;
else if (type == 3) else if (rssi_type == N_RSSI_IQ)
val = 0x0200; val = 0x0200;
else else
val = 0x0300; val = 0x0300;
...@@ -1350,7 +1353,8 @@ static void b43_nphy_rev3_rssi_select(struct b43_wldev *dev, u8 code, u8 type) ...@@ -1350,7 +1353,8 @@ static void b43_nphy_rev3_rssi_select(struct b43_wldev *dev, u8 code, u8 type)
b43_phy_maskset(dev, reg, 0xFCFF, val); b43_phy_maskset(dev, reg, 0xFCFF, val);
b43_phy_maskset(dev, reg, 0xF3FF, val << 2); b43_phy_maskset(dev, reg, 0xF3FF, val << 2);
if (type != 3 && type != 6) { if (rssi_type != N_RSSI_IQ &&
rssi_type != N_RSSI_TBD) {
enum ieee80211_band band = enum ieee80211_band band =
b43_current_band(dev->wl); b43_current_band(dev->wl);
...@@ -1372,33 +1376,43 @@ static void b43_nphy_rev3_rssi_select(struct b43_wldev *dev, u8 code, u8 type) ...@@ -1372,33 +1376,43 @@ static void b43_nphy_rev3_rssi_select(struct b43_wldev *dev, u8 code, u8 type)
} }
} }
static void b43_nphy_rev2_rssi_select(struct b43_wldev *dev, u8 code, u8 type) static void b43_nphy_rev2_rssi_select(struct b43_wldev *dev, u8 code,
enum n_rssi_type rssi_type)
{ {
u16 val; u16 val;
bool rssi_w1_w2_nb = false;
if (type < 3) switch (rssi_type) {
case N_RSSI_W1:
case N_RSSI_W2:
case N_RSSI_NB:
val = 0; val = 0;
else if (type == 6) rssi_w1_w2_nb = true;
break;
case N_RSSI_TBD:
val = 1; val = 1;
else if (type == 3) break;
case N_RSSI_IQ:
val = 2; val = 2;
else break;
default:
val = 3; val = 3;
}
val = (val << 12) | (val << 14); val = (val << 12) | (val << 14);
b43_phy_maskset(dev, B43_NPHY_AFECTL_C1, 0x0FFF, val); b43_phy_maskset(dev, B43_NPHY_AFECTL_C1, 0x0FFF, val);
b43_phy_maskset(dev, B43_NPHY_AFECTL_C2, 0x0FFF, val); b43_phy_maskset(dev, B43_NPHY_AFECTL_C2, 0x0FFF, val);
if (type < 3) { if (rssi_w1_w2_nb) {
b43_phy_maskset(dev, B43_NPHY_RFCTL_RSSIO1, 0xFFCF, b43_phy_maskset(dev, B43_NPHY_RFCTL_RSSIO1, 0xFFCF,
(type + 1) << 4); (rssi_type + 1) << 4);
b43_phy_maskset(dev, B43_NPHY_RFCTL_RSSIO2, 0xFFCF, b43_phy_maskset(dev, B43_NPHY_RFCTL_RSSIO2, 0xFFCF,
(type + 1) << 4); (rssi_type + 1) << 4);
} }
if (code == 0) { if (code == 0) {
b43_phy_mask(dev, B43_NPHY_AFECTL_OVER, ~0x3000); b43_phy_mask(dev, B43_NPHY_AFECTL_OVER, ~0x3000);
if (type < 3) { if (rssi_w1_w2_nb) {
b43_phy_mask(dev, B43_NPHY_RFCTL_CMD, b43_phy_mask(dev, B43_NPHY_RFCTL_CMD,
~(B43_NPHY_RFCTL_CMD_RXEN | ~(B43_NPHY_RFCTL_CMD_RXEN |
B43_NPHY_RFCTL_CMD_CORESEL)); 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,7 +1428,7 @@ static void b43_nphy_rev2_rssi_select(struct b43_wldev *dev, u8 code, u8 type)
} }
} else { } else {
b43_phy_set(dev, B43_NPHY_AFECTL_OVER, 0x3000); b43_phy_set(dev, B43_NPHY_AFECTL_OVER, 0x3000);
if (type < 3) { if (rssi_w1_w2_nb) {
b43_phy_maskset(dev, B43_NPHY_RFCTL_CMD, b43_phy_maskset(dev, B43_NPHY_RFCTL_CMD,
~(B43_NPHY_RFCTL_CMD_RXEN | ~(B43_NPHY_RFCTL_CMD_RXEN |
B43_NPHY_RFCTL_CMD_CORESEL), 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,7 +1448,8 @@ static void b43_nphy_rev2_rssi_select(struct b43_wldev *dev, u8 code, u8 type)
} }
/* http://bcm-v4.sipsolutions.net/802.11/PHY/N/RSSISel */ /* http://bcm-v4.sipsolutions.net/802.11/PHY/N/RSSISel */
static void b43_nphy_rssi_select(struct b43_wldev *dev, u8 code, u8 type) static void b43_nphy_rssi_select(struct b43_wldev *dev, u8 code,
enum n_rssi_type type)
{ {
if (dev->phy.rev >= 3) if (dev->phy.rev >= 3)
b43_nphy_rev3_rssi_select(dev, code, type); 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,11 +1458,12 @@ static void b43_nphy_rssi_select(struct b43_wldev *dev, u8 code, u8 type)
} }
/* http://bcm-v4.sipsolutions.net/802.11/PHY/N/SetRssi2055Vcm */ /* http://bcm-v4.sipsolutions.net/802.11/PHY/N/SetRssi2055Vcm */
static void b43_nphy_set_rssi_2055_vcm(struct b43_wldev *dev, u8 type, u8 *buf) static void b43_nphy_set_rssi_2055_vcm(struct b43_wldev *dev,
enum n_rssi_type rssi_type, u8 *buf)
{ {
int i; int i;
for (i = 0; i < 2; i++) { for (i = 0; i < 2; i++) {
if (type == 2) { if (rssi_type == N_RSSI_NB) {
if (i == 0) { if (i == 0) {
b43_radio_maskset(dev, B2055_C1_B0NB_RSSIVCM, b43_radio_maskset(dev, B2055_C1_B0NB_RSSIVCM,
0xFC, buf[0]); 0xFC, buf[0]);
...@@ -1471,8 +1487,8 @@ static void b43_nphy_set_rssi_2055_vcm(struct b43_wldev *dev, u8 type, u8 *buf) ...@@ -1471,8 +1487,8 @@ static void b43_nphy_set_rssi_2055_vcm(struct b43_wldev *dev, u8 type, u8 *buf)
} }
/* http://bcm-v4.sipsolutions.net/802.11/PHY/N/PollRssi */ /* http://bcm-v4.sipsolutions.net/802.11/PHY/N/PollRssi */
static int b43_nphy_poll_rssi(struct b43_wldev *dev, u8 type, s32 *buf, static int b43_nphy_poll_rssi(struct b43_wldev *dev, enum n_rssi_type rssi_type,
u8 nsamp) s32 *buf, u8 nsamp)
{ {
int i; int i;
int out; int out;
...@@ -1503,7 +1519,7 @@ static int b43_nphy_poll_rssi(struct b43_wldev *dev, u8 type, s32 *buf, ...@@ -1503,7 +1519,7 @@ static int b43_nphy_poll_rssi(struct b43_wldev *dev, u8 type, s32 *buf,
save_regs_phy[8] = 0; save_regs_phy[8] = 0;
} }
b43_nphy_rssi_select(dev, 5, type); b43_nphy_rssi_select(dev, 5, rssi_type);
if (dev->phy.rev < 2) { if (dev->phy.rev < 2) {
save_regs_phy[8] = b43_phy_read(dev, B43_NPHY_GPIO_SEL); 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,14 +1638,16 @@ static void b43_nphy_rev3_rssi_cal(struct b43_wldev *dev)
if (!(rx_core_state & (1 << core))) if (!(rx_core_state & (1 << core)))
continue; continue;
r = core ? B2056_RX1 : B2056_RX0; r = core ? B2056_RX1 : B2056_RX0;
b43_nphy_scale_offset_rssi(dev, 0, 0, core + 1, N_RAIL_I, 2); b43_nphy_scale_offset_rssi(dev, 0, 0, core + 1, N_RAIL_I,
b43_nphy_scale_offset_rssi(dev, 0, 0, core + 1, N_RAIL_Q, 2); N_RSSI_NB);
b43_nphy_scale_offset_rssi(dev, 0, 0, core + 1, N_RAIL_Q,
N_RSSI_NB);
/* Grab RSSI results for every possible VCM */ /* Grab RSSI results for every possible VCM */
for (vcm = 0; vcm < 8; vcm++) { for (vcm = 0; vcm < 8; vcm++) {
b43_radio_maskset(dev, r | B2056_RX_RSSI_MISC, 0xE3, b43_radio_maskset(dev, r | B2056_RX_RSSI_MISC, 0xE3,
vcm << 2); vcm << 2);
b43_nphy_poll_rssi(dev, 2, results[vcm], 8); b43_nphy_poll_rssi(dev, N_RSSI_NB, results[vcm], 8);
} }
/* Find out which VCM got the best results */ /* Find out which VCM got the best results */
...@@ -1671,7 +1689,7 @@ static void b43_nphy_rev3_rssi_cal(struct b43_wldev *dev) ...@@ -1671,7 +1689,7 @@ static void b43_nphy_rev3_rssi_cal(struct b43_wldev *dev)
b43_nphy_scale_offset_rssi(dev, 0, offset[i], b43_nphy_scale_offset_rssi(dev, 0, offset[i],
(i / 2 == 0) ? 1 : 2, (i / 2 == 0) ? 1 : 2,
(i % 2 == 0) ? N_RAIL_I : N_RAIL_Q, (i % 2 == 0) ? N_RAIL_I : N_RAIL_Q,
2); N_RSSI_NB);
} }
} }
...@@ -1749,7 +1767,7 @@ static void b43_nphy_rev3_rssi_cal(struct b43_wldev *dev) ...@@ -1749,7 +1767,7 @@ static void b43_nphy_rev3_rssi_cal(struct b43_wldev *dev)
} }
/* http://bcm-v4.sipsolutions.net/802.11/PHY/N/RSSICal */ /* http://bcm-v4.sipsolutions.net/802.11/PHY/N/RSSICal */
static void b43_nphy_rev2_rssi_cal(struct b43_wldev *dev, u8 type) static void b43_nphy_rev2_rssi_cal(struct b43_wldev *dev, enum n_rssi_type type)
{ {
int i, j, vcm; int i, j, vcm;
u8 state[4]; u8 state[4];
...@@ -1769,10 +1787,10 @@ static void b43_nphy_rev2_rssi_cal(struct b43_wldev *dev, u8 type) ...@@ -1769,10 +1787,10 @@ static void b43_nphy_rev2_rssi_cal(struct b43_wldev *dev, u8 type)
s32 results[4][4] = { }; s32 results[4][4] = { };
s32 miniq[4][2] = { }; s32 miniq[4][2] = { };
if (type == 2) { if (type == N_RSSI_NB) {
code = 0; code = 0;
val = 6; val = 6;
} else if (type < 2) { } else if (type == N_RSSI_W1 || type == N_RSSI_W2) {
code = 25; code = 25;
val = 4; val = 4;
} else { } else {
...@@ -1815,10 +1833,10 @@ static void b43_nphy_rev2_rssi_cal(struct b43_wldev *dev, u8 type) ...@@ -1815,10 +1833,10 @@ static void b43_nphy_rev2_rssi_cal(struct b43_wldev *dev, u8 type)
u8 tmp[4]; u8 tmp[4];
for (j = 0; j < 4; j++) for (j = 0; j < 4; j++)
tmp[j] = vcm; tmp[j] = vcm;
if (type != 1) if (type != N_RSSI_W2)
b43_nphy_set_rssi_2055_vcm(dev, type, tmp); b43_nphy_set_rssi_2055_vcm(dev, type, tmp);
b43_nphy_poll_rssi(dev, type, results[vcm], 8); b43_nphy_poll_rssi(dev, type, results[vcm], 8);
if (type < 2) if (type == N_RSSI_W1 || type == N_RSSI_W2)
for (j = 0; j < 2; j++) for (j = 0; j < 2; j++)
miniq[vcm][j] = min(results[vcm][2 * j], miniq[vcm][j] = min(results[vcm][2 * j],
results[vcm][2 * j + 1]); results[vcm][2 * j + 1]);
...@@ -1830,7 +1848,7 @@ static void b43_nphy_rev2_rssi_cal(struct b43_wldev *dev, u8 type) ...@@ -1830,7 +1848,7 @@ static void b43_nphy_rev2_rssi_cal(struct b43_wldev *dev, u8 type)
s32 minpoll = 249; s32 minpoll = 249;
s32 currd; s32 currd;
for (vcm = 0; vcm < 4; vcm++) { for (vcm = 0; vcm < 4; vcm++) {
if (type == 2) if (type == N_RSSI_NB)
currd = abs(results[vcm][i]); currd = abs(results[vcm][i]);
else else
currd = abs(miniq[vcm][i / 2] - code * 8); 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,7 +1865,7 @@ static void b43_nphy_rev2_rssi_cal(struct b43_wldev *dev, u8 type)
vcm_final[i] = minvcm; vcm_final[i] = minvcm;
} }
if (type != 1) if (type != N_RSSI_W2)
b43_nphy_set_rssi_2055_vcm(dev, type, vcm_final); b43_nphy_set_rssi_2055_vcm(dev, type, vcm_final);
for (i = 0; i < 4; i++) { for (i = 0; i < 4; i++) {
...@@ -1873,28 +1891,28 @@ static void b43_nphy_rev2_rssi_cal(struct b43_wldev *dev, u8 type) ...@@ -1873,28 +1891,28 @@ static void b43_nphy_rev2_rssi_cal(struct b43_wldev *dev, u8 type)
switch (state[2]) { switch (state[2]) {
case 1: case 1:
b43_nphy_rssi_select(dev, 1, 2); b43_nphy_rssi_select(dev, 1, N_RSSI_NB);
break; break;
case 4: case 4:
b43_nphy_rssi_select(dev, 1, 0); b43_nphy_rssi_select(dev, 1, N_RSSI_W1);
break; break;
case 2: case 2:
b43_nphy_rssi_select(dev, 1, 1); b43_nphy_rssi_select(dev, 1, N_RSSI_W2);
break; break;
default: default:
b43_nphy_rssi_select(dev, 1, 1); b43_nphy_rssi_select(dev, 1, N_RSSI_W2);
break; break;
} }
switch (state[3]) { switch (state[3]) {
case 1: case 1:
b43_nphy_rssi_select(dev, 2, 2); b43_nphy_rssi_select(dev, 2, N_RSSI_NB);
break; break;
case 4: case 4:
b43_nphy_rssi_select(dev, 2, 0); b43_nphy_rssi_select(dev, 2, N_RSSI_W1);
break; break;
default: default:
b43_nphy_rssi_select(dev, 2, 1); b43_nphy_rssi_select(dev, 2, N_RSSI_W2);
break; break;
} }
...@@ -3153,9 +3171,9 @@ static void b43_nphy_tx_power_ctl_idle_tssi(struct b43_wldev *dev) ...@@ -3153,9 +3171,9 @@ static void b43_nphy_tx_power_ctl_idle_tssi(struct b43_wldev *dev)
b43_nphy_stop_playback(dev); b43_nphy_stop_playback(dev);
b43_nphy_tx_tone(dev, 0xFA0, 0, false, false); b43_nphy_tx_tone(dev, 0xFA0, 0, false, false);
udelay(20); udelay(20);
tmp = b43_nphy_poll_rssi(dev, 4, rssi, 1); tmp = b43_nphy_poll_rssi(dev, N_RSSI_TSSI_2G, rssi, 1);
b43_nphy_stop_playback(dev); b43_nphy_stop_playback(dev);
b43_nphy_rssi_select(dev, 0, 0); b43_nphy_rssi_select(dev, 0, N_RSSI_W1);
if (phy->rev >= 7) if (phy->rev >= 7)
b43_nphy_rf_control_override_rev7(dev, 0x2000, 0, 3, true, 0); b43_nphy_rf_control_override_rev7(dev, 0x2000, 0, 3, true, 0);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment