diff options
author | Gábor Stefanik <netrolller.3d@gmail.com> | 2009-08-26 14:51:25 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2009-08-28 14:40:52 -0400 |
commit | 68ec53292c7f09056152efa9a6ee2591c794f08c (patch) | |
tree | d0b0441033a8a885c93f4b94ee4ee9eb044e0233 /drivers/net/wireless/b43 | |
parent | d8fa338ee01e7de029d2441a8c2b9c5fbfeac82f (diff) |
b43: Fix and update LP-PHY code
-Fix a few nasty typos (b43_phy_* operations instead of b43_radio_*)
in the channel tune routines.
-Fix some typos & spec errors found by MMIO tracing.
-Optimize b43_phy_write & b43_phy_mask/set/maskset to use
only the minimal number of MMIO accesses. (Write is possible
using a single 32-bit MMIO write, while set/mask/maskset can
be done in 3 16-bit MMIOs).
-Set the default channel back to 1, as the bug forcing us to use
channel 7 is now fixed.
With this, the device comes up, scans, associates, transmits,
receives, monitors and injects on all channels - in other words,
it's fully functional. Sensitivity and TX power are still sub-optimal,
due to the lack of calibration (that's next on my list).
Signed-off-by: Gábor Stefanik <netrolller.3d@gmail.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/b43')
-rw-r--r-- | drivers/net/wireless/b43/phy_common.c | 27 | ||||
-rw-r--r-- | drivers/net/wireless/b43/phy_common.h | 3 | ||||
-rw-r--r-- | drivers/net/wireless/b43/phy_lp.c | 91 | ||||
-rw-r--r-- | drivers/net/wireless/b43/phy_lp.h | 3 | ||||
-rw-r--r-- | drivers/net/wireless/b43/tables_lpphy.c | 79 |
5 files changed, 122 insertions, 81 deletions
diff --git a/drivers/net/wireless/b43/phy_common.c b/drivers/net/wireless/b43/phy_common.c index 51686ec96984..6e704becda6f 100644 --- a/drivers/net/wireless/b43/phy_common.c +++ b/drivers/net/wireless/b43/phy_common.c | |||
@@ -249,20 +249,35 @@ void b43_phy_copy(struct b43_wldev *dev, u16 destreg, u16 srcreg) | |||
249 | 249 | ||
250 | void b43_phy_mask(struct b43_wldev *dev, u16 offset, u16 mask) | 250 | void b43_phy_mask(struct b43_wldev *dev, u16 offset, u16 mask) |
251 | { | 251 | { |
252 | b43_phy_write(dev, offset, | 252 | if (dev->phy.ops->phy_maskset) { |
253 | b43_phy_read(dev, offset) & mask); | 253 | assert_mac_suspended(dev); |
254 | dev->phy.ops->phy_maskset(dev, offset, mask, 0); | ||
255 | } else { | ||
256 | b43_phy_write(dev, offset, | ||
257 | b43_phy_read(dev, offset) & mask); | ||
258 | } | ||
254 | } | 259 | } |
255 | 260 | ||
256 | void b43_phy_set(struct b43_wldev *dev, u16 offset, u16 set) | 261 | void b43_phy_set(struct b43_wldev *dev, u16 offset, u16 set) |
257 | { | 262 | { |
258 | b43_phy_write(dev, offset, | 263 | if (dev->phy.ops->phy_maskset) { |
259 | b43_phy_read(dev, offset) | set); | 264 | assert_mac_suspended(dev); |
265 | dev->phy.ops->phy_maskset(dev, offset, 0xFFFF, set); | ||
266 | } else { | ||
267 | b43_phy_write(dev, offset, | ||
268 | b43_phy_read(dev, offset) | set); | ||
269 | } | ||
260 | } | 270 | } |
261 | 271 | ||
262 | void b43_phy_maskset(struct b43_wldev *dev, u16 offset, u16 mask, u16 set) | 272 | void b43_phy_maskset(struct b43_wldev *dev, u16 offset, u16 mask, u16 set) |
263 | { | 273 | { |
264 | b43_phy_write(dev, offset, | 274 | if (dev->phy.ops->phy_maskset) { |
265 | (b43_phy_read(dev, offset) & mask) | set); | 275 | assert_mac_suspended(dev); |
276 | dev->phy.ops->phy_maskset(dev, offset, mask, set); | ||
277 | } else { | ||
278 | b43_phy_write(dev, offset, | ||
279 | (b43_phy_read(dev, offset) & mask) | set); | ||
280 | } | ||
266 | } | 281 | } |
267 | 282 | ||
268 | int b43_switch_channel(struct b43_wldev *dev, unsigned int new_channel) | 283 | int b43_switch_channel(struct b43_wldev *dev, unsigned int new_channel) |
diff --git a/drivers/net/wireless/b43/phy_common.h b/drivers/net/wireless/b43/phy_common.h index 9f9f23cab72a..b47a0f55c0b6 100644 --- a/drivers/net/wireless/b43/phy_common.h +++ b/drivers/net/wireless/b43/phy_common.h | |||
@@ -95,6 +95,8 @@ enum b43_txpwr_result { | |||
95 | * Must not be NULL. | 95 | * Must not be NULL. |
96 | * @phy_write: Write to a PHY register. | 96 | * @phy_write: Write to a PHY register. |
97 | * Must not be NULL. | 97 | * Must not be NULL. |
98 | * @phy_maskset: Maskset a PHY register, taking shortcuts. | ||
99 | * If it is NULL, a generic algorithm is used. | ||
98 | * @radio_read: Read from a Radio register. | 100 | * @radio_read: Read from a Radio register. |
99 | * Must not be NULL. | 101 | * Must not be NULL. |
100 | * @radio_write: Write to a Radio register. | 102 | * @radio_write: Write to a Radio register. |
@@ -154,6 +156,7 @@ struct b43_phy_operations { | |||
154 | /* Register access */ | 156 | /* Register access */ |
155 | u16 (*phy_read)(struct b43_wldev *dev, u16 reg); | 157 | u16 (*phy_read)(struct b43_wldev *dev, u16 reg); |
156 | void (*phy_write)(struct b43_wldev *dev, u16 reg, u16 value); | 158 | void (*phy_write)(struct b43_wldev *dev, u16 reg, u16 value); |
159 | void (*phy_maskset)(struct b43_wldev *dev, u16 reg, u16 mask, u16 set); | ||
157 | u16 (*radio_read)(struct b43_wldev *dev, u16 reg); | 160 | u16 (*radio_read)(struct b43_wldev *dev, u16 reg); |
158 | void (*radio_write)(struct b43_wldev *dev, u16 reg, u16 value); | 161 | void (*radio_write)(struct b43_wldev *dev, u16 reg, u16 value); |
159 | 162 | ||
diff --git a/drivers/net/wireless/b43/phy_lp.c b/drivers/net/wireless/b43/phy_lp.c index 5306f2c66b34..1a57d3390e92 100644 --- a/drivers/net/wireless/b43/phy_lp.c +++ b/drivers/net/wireless/b43/phy_lp.c | |||
@@ -44,7 +44,7 @@ static inline u16 channel2freq_lp(u8 channel) | |||
44 | static unsigned int b43_lpphy_op_get_default_chan(struct b43_wldev *dev) | 44 | static unsigned int b43_lpphy_op_get_default_chan(struct b43_wldev *dev) |
45 | { | 45 | { |
46 | if (b43_current_band(dev->wl) == IEEE80211_BAND_2GHZ) | 46 | if (b43_current_band(dev->wl) == IEEE80211_BAND_2GHZ) |
47 | return 7; //FIXME temporary - channel 1 is broken | 47 | return 1; |
48 | return 36; | 48 | return 36; |
49 | } | 49 | } |
50 | 50 | ||
@@ -182,8 +182,8 @@ static void lpphy_adjust_gain_table(struct b43_wldev *dev, u32 freq) | |||
182 | temp[1] = temp[0] + 0x1000; | 182 | temp[1] = temp[0] + 0x1000; |
183 | temp[2] = temp[0] + 0x2000; | 183 | temp[2] = temp[0] + 0x2000; |
184 | 184 | ||
185 | b43_lptab_write_bulk(dev, B43_LPTAB16(12, 0), 3, temp); | ||
186 | b43_lptab_write_bulk(dev, B43_LPTAB16(13, 0), 3, temp); | 185 | b43_lptab_write_bulk(dev, B43_LPTAB16(13, 0), 3, temp); |
186 | b43_lptab_write_bulk(dev, B43_LPTAB16(12, 0), 3, temp); | ||
187 | } | 187 | } |
188 | 188 | ||
189 | static void lpphy_table_init(struct b43_wldev *dev) | 189 | static void lpphy_table_init(struct b43_wldev *dev) |
@@ -223,8 +223,8 @@ static void lpphy_baseband_rev0_1_init(struct b43_wldev *dev) | |||
223 | b43_phy_maskset(dev, B43_LPPHY_VERYLOWGAINDB, 0xFF00, 0x0006); | 223 | b43_phy_maskset(dev, B43_LPPHY_VERYLOWGAINDB, 0xFF00, 0x0006); |
224 | b43_phy_mask(dev, B43_LPPHY_RX_RADIO_CTL, 0xFFFE); | 224 | b43_phy_mask(dev, B43_LPPHY_RX_RADIO_CTL, 0xFFFE); |
225 | b43_phy_maskset(dev, B43_LPPHY_CLIPCTRTHRESH, 0xFFE0, 0x0005); | 225 | b43_phy_maskset(dev, B43_LPPHY_CLIPCTRTHRESH, 0xFFE0, 0x0005); |
226 | b43_phy_maskset(dev, B43_LPPHY_CLIPCTRTHRESH, 0xFC10, 0x0180); | 226 | b43_phy_maskset(dev, B43_LPPHY_CLIPCTRTHRESH, 0xFC1F, 0x0180); |
227 | b43_phy_maskset(dev, B43_LPPHY_CLIPCTRTHRESH, 0x83FF, 0x3800); | 227 | b43_phy_maskset(dev, B43_LPPHY_CLIPCTRTHRESH, 0x83FF, 0x3C00); |
228 | b43_phy_maskset(dev, B43_LPPHY_GAINDIRECTMISMATCH, 0xFFF0, 0x0005); | 228 | b43_phy_maskset(dev, B43_LPPHY_GAINDIRECTMISMATCH, 0xFFF0, 0x0005); |
229 | b43_phy_maskset(dev, B43_LPPHY_GAIN_MISMATCH_LIMIT, 0xFFC0, 0x001A); | 229 | b43_phy_maskset(dev, B43_LPPHY_GAIN_MISMATCH_LIMIT, 0xFFC0, 0x001A); |
230 | b43_phy_maskset(dev, B43_LPPHY_CRS_ED_THRESH, 0xFF00, 0x00B3); | 230 | b43_phy_maskset(dev, B43_LPPHY_CRS_ED_THRESH, 0xFF00, 0x00B3); |
@@ -237,7 +237,7 @@ static void lpphy_baseband_rev0_1_init(struct b43_wldev *dev) | |||
237 | /* TODO: | 237 | /* TODO: |
238 | * Set the LDO voltage to 0x0028 - FIXME: What is this? | 238 | * Set the LDO voltage to 0x0028 - FIXME: What is this? |
239 | * Call sb_pmu_set_ldo_voltage with 4 and the LDO voltage | 239 | * Call sb_pmu_set_ldo_voltage with 4 and the LDO voltage |
240 | * as arguments | 240 | * as arguments |
241 | * Call sb_pmu_paref_ldo_enable with argument TRUE | 241 | * Call sb_pmu_paref_ldo_enable with argument TRUE |
242 | */ | 242 | */ |
243 | if (dev->phy.rev == 0) { | 243 | if (dev->phy.rev == 0) { |
@@ -340,11 +340,11 @@ static void lpphy_baseband_rev0_1_init(struct b43_wldev *dev) | |||
340 | if (dev->phy.rev == 1) { | 340 | if (dev->phy.rev == 1) { |
341 | tmp = b43_phy_read(dev, B43_LPPHY_CLIPCTRTHRESH); | 341 | tmp = b43_phy_read(dev, B43_LPPHY_CLIPCTRTHRESH); |
342 | tmp2 = (tmp & 0x03E0) >> 5; | 342 | tmp2 = (tmp & 0x03E0) >> 5; |
343 | tmp2 |= tmp << 5; | 343 | tmp2 |= tmp2 << 5; |
344 | b43_phy_write(dev, B43_LPPHY_4C3, tmp2); | 344 | b43_phy_write(dev, B43_LPPHY_4C3, tmp2); |
345 | tmp = b43_phy_read(dev, B43_LPPHY_OFDMSYNCTHRESH0); | 345 | tmp = b43_phy_read(dev, B43_LPPHY_GAINDIRECTMISMATCH); |
346 | tmp2 = (tmp & 0x1F00) >> 8; | 346 | tmp2 = (tmp & 0x1F00) >> 8; |
347 | tmp2 |= tmp << 5; | 347 | tmp2 |= tmp2 << 5; |
348 | b43_phy_write(dev, B43_LPPHY_4C4, tmp2); | 348 | b43_phy_write(dev, B43_LPPHY_4C4, tmp2); |
349 | tmp = b43_phy_read(dev, B43_LPPHY_VERYLOWGAINDB); | 349 | tmp = b43_phy_read(dev, B43_LPPHY_VERYLOWGAINDB); |
350 | tmp2 = tmp & 0x00FF; | 350 | tmp2 = tmp & 0x00FF; |
@@ -761,7 +761,7 @@ static void lpphy_disable_crs(struct b43_wldev *dev, bool user) | |||
761 | b43_phy_set(dev, B43_LPPHY_RF_OVERRIDE_0, 0x3); | 761 | b43_phy_set(dev, B43_LPPHY_RF_OVERRIDE_0, 0x3); |
762 | b43_phy_mask(dev, B43_LPPHY_RF_OVERRIDE_VAL_0, 0xFFFB); | 762 | b43_phy_mask(dev, B43_LPPHY_RF_OVERRIDE_VAL_0, 0xFFFB); |
763 | b43_phy_set(dev, B43_LPPHY_RF_OVERRIDE_0, 0x4); | 763 | b43_phy_set(dev, B43_LPPHY_RF_OVERRIDE_0, 0x4); |
764 | b43_phy_mask(dev, B43_LPPHY_RF_OVERRIDE_0, 0xFFF7); | 764 | b43_phy_mask(dev, B43_LPPHY_RF_OVERRIDE_VAL_0, 0xFFF7); |
765 | b43_phy_set(dev, B43_LPPHY_RF_OVERRIDE_0, 0x8); | 765 | b43_phy_set(dev, B43_LPPHY_RF_OVERRIDE_0, 0x8); |
766 | b43_phy_set(dev, B43_LPPHY_RF_OVERRIDE_VAL_0, 0x10); | 766 | b43_phy_set(dev, B43_LPPHY_RF_OVERRIDE_VAL_0, 0x10); |
767 | b43_phy_set(dev, B43_LPPHY_RF_OVERRIDE_0, 0x10); | 767 | b43_phy_set(dev, B43_LPPHY_RF_OVERRIDE_0, 0x10); |
@@ -956,7 +956,7 @@ static void lpphy_run_ddfs(struct b43_wldev *dev, int i_on, int q_on, | |||
956 | b43_phy_maskset(dev, B43_LPPHY_AFE_DDFS, 0xFF9F, scale_idx << 5); | 956 | b43_phy_maskset(dev, B43_LPPHY_AFE_DDFS, 0xFF9F, scale_idx << 5); |
957 | b43_phy_mask(dev, B43_LPPHY_AFE_DDFS, 0xFFFB); | 957 | b43_phy_mask(dev, B43_LPPHY_AFE_DDFS, 0xFFFB); |
958 | b43_phy_set(dev, B43_LPPHY_AFE_DDFS, 0x2); | 958 | b43_phy_set(dev, B43_LPPHY_AFE_DDFS, 0x2); |
959 | b43_phy_set(dev, B43_LPPHY_AFE_DDFS, 0x20); | 959 | b43_phy_set(dev, B43_LPPHY_LP_PHY_CTL, 0x20); |
960 | } | 960 | } |
961 | 961 | ||
962 | static bool lpphy_rx_iq_est(struct b43_wldev *dev, u16 samples, u8 time, | 962 | static bool lpphy_rx_iq_est(struct b43_wldev *dev, u16 samples, u8 time, |
@@ -968,7 +968,7 @@ static bool lpphy_rx_iq_est(struct b43_wldev *dev, u16 samples, u8 time, | |||
968 | b43_phy_write(dev, B43_LPPHY_IQ_NUM_SMPLS_ADDR, samples); | 968 | b43_phy_write(dev, B43_LPPHY_IQ_NUM_SMPLS_ADDR, samples); |
969 | b43_phy_maskset(dev, B43_LPPHY_IQ_ENABLE_WAIT_TIME_ADDR, 0xFF00, time); | 969 | b43_phy_maskset(dev, B43_LPPHY_IQ_ENABLE_WAIT_TIME_ADDR, 0xFF00, time); |
970 | b43_phy_mask(dev, B43_LPPHY_IQ_ENABLE_WAIT_TIME_ADDR, 0xFEFF); | 970 | b43_phy_mask(dev, B43_LPPHY_IQ_ENABLE_WAIT_TIME_ADDR, 0xFEFF); |
971 | b43_phy_set(dev, B43_LPPHY_IQ_ENABLE_WAIT_TIME_ADDR, 0xFDFF); | 971 | b43_phy_set(dev, B43_LPPHY_IQ_ENABLE_WAIT_TIME_ADDR, 0x200); |
972 | 972 | ||
973 | for (i = 0; i < 500; i++) { | 973 | for (i = 0; i < 500; i++) { |
974 | if (!(b43_phy_read(dev, | 974 | if (!(b43_phy_read(dev, |
@@ -1135,9 +1135,9 @@ static void lpphy_set_tx_power_control(struct b43_wldev *dev, | |||
1135 | } | 1135 | } |
1136 | if (dev->phy.rev >= 2) { | 1136 | if (dev->phy.rev >= 2) { |
1137 | if (mode == B43_LPPHY_TXPCTL_HW) | 1137 | if (mode == B43_LPPHY_TXPCTL_HW) |
1138 | b43_phy_maskset(dev, B43_PHY_OFDM(0xD0), 0xFD, 0x2); | 1138 | b43_phy_set(dev, B43_PHY_OFDM(0xD0), 0x2); |
1139 | else | 1139 | else |
1140 | b43_phy_maskset(dev, B43_PHY_OFDM(0xD0), 0xFD, 0); | 1140 | b43_phy_mask(dev, B43_PHY_OFDM(0xD0), 0xFFFD); |
1141 | } | 1141 | } |
1142 | lpphy_write_tx_pctl_mode_to_hardware(dev); | 1142 | lpphy_write_tx_pctl_mode_to_hardware(dev); |
1143 | } | 1143 | } |
@@ -1169,7 +1169,7 @@ static void lpphy_rev0_1_rc_calib(struct b43_wldev *dev) | |||
1169 | err = b43_lpphy_op_switch_channel(dev, 7); | 1169 | err = b43_lpphy_op_switch_channel(dev, 7); |
1170 | if (err) { | 1170 | if (err) { |
1171 | b43dbg(dev->wl, | 1171 | b43dbg(dev->wl, |
1172 | "RC calib: Failed to switch to channel 7, error = %d", | 1172 | "RC calib: Failed to switch to channel 7, error = %d\n", |
1173 | err); | 1173 | err); |
1174 | } | 1174 | } |
1175 | old_txg_ovr = !!(b43_phy_read(dev, B43_LPPHY_AFE_CTL_OVR) & 0x40); | 1175 | old_txg_ovr = !!(b43_phy_read(dev, B43_LPPHY_AFE_CTL_OVR) & 0x40); |
@@ -1500,8 +1500,15 @@ static u16 b43_lpphy_op_read(struct b43_wldev *dev, u16 reg) | |||
1500 | 1500 | ||
1501 | static void b43_lpphy_op_write(struct b43_wldev *dev, u16 reg, u16 value) | 1501 | static void b43_lpphy_op_write(struct b43_wldev *dev, u16 reg, u16 value) |
1502 | { | 1502 | { |
1503 | b43_write32(dev, B43_MMIO_PHY_CONTROL, ((u32)value << 16) | reg); | ||
1504 | } | ||
1505 | |||
1506 | static void b43_lpphy_op_maskset(struct b43_wldev *dev, u16 reg, u16 mask, | ||
1507 | u16 set) | ||
1508 | { | ||
1503 | b43_write16(dev, B43_MMIO_PHY_CONTROL, reg); | 1509 | b43_write16(dev, B43_MMIO_PHY_CONTROL, reg); |
1504 | b43_write16(dev, B43_MMIO_PHY_DATA, value); | 1510 | b43_write16(dev, B43_MMIO_PHY_DATA, |
1511 | (b43_read16(dev, B43_MMIO_PHY_DATA) & mask) | set); | ||
1505 | } | 1512 | } |
1506 | 1513 | ||
1507 | static u16 b43_lpphy_op_radio_read(struct b43_wldev *dev, u16 reg) | 1514 | static u16 b43_lpphy_op_radio_read(struct b43_wldev *dev, u16 reg) |
@@ -1920,8 +1927,8 @@ static void lpphy_b2062_reset_pll_bias(struct b43_wldev *dev) | |||
1920 | 1927 | ||
1921 | static void lpphy_b2062_vco_calib(struct b43_wldev *dev) | 1928 | static void lpphy_b2062_vco_calib(struct b43_wldev *dev) |
1922 | { | 1929 | { |
1923 | b43_phy_write(dev, B2062_S_RFPLL_CTL21, 0x42); | 1930 | b43_radio_write(dev, B2062_S_RFPLL_CTL21, 0x42); |
1924 | b43_phy_write(dev, B2062_S_RFPLL_CTL21, 0x62); | 1931 | b43_radio_write(dev, B2062_S_RFPLL_CTL21, 0x62); |
1925 | udelay(200); | 1932 | udelay(200); |
1926 | } | 1933 | } |
1927 | 1934 | ||
@@ -1980,7 +1987,7 @@ static int lpphy_b2062_tune(struct b43_wldev *dev, | |||
1980 | tmp6 = tmp5 / tmp4; | 1987 | tmp6 = tmp5 / tmp4; |
1981 | tmp7 = tmp5 % tmp4; | 1988 | tmp7 = tmp5 % tmp4; |
1982 | b43_radio_write(dev, B2062_S_RFPLL_CTL29, tmp6 + ((2 * tmp7) / tmp4)); | 1989 | b43_radio_write(dev, B2062_S_RFPLL_CTL29, tmp6 + ((2 * tmp7) / tmp4)); |
1983 | tmp8 = b43_phy_read(dev, B2062_S_RFPLL_CTL19); | 1990 | tmp8 = b43_radio_read(dev, B2062_S_RFPLL_CTL19); |
1984 | tmp9 = ((2 * tmp3 * (tmp8 + 1)) + (3 * tmp1)) / (6 * tmp1); | 1991 | tmp9 = ((2 * tmp3 * (tmp8 + 1)) + (3 * tmp1)) / (6 * tmp1); |
1985 | b43_radio_write(dev, B2062_S_RFPLL_CTL23, (tmp9 >> 8) + 16); | 1992 | b43_radio_write(dev, B2062_S_RFPLL_CTL23, (tmp9 >> 8) + 16); |
1986 | b43_radio_write(dev, B2062_S_RFPLL_CTL24, tmp9 & 0xFF); | 1993 | b43_radio_write(dev, B2062_S_RFPLL_CTL24, tmp9 & 0xFF); |
@@ -2019,17 +2026,17 @@ static void lpphy_b2063_vco_calib(struct b43_wldev *dev) | |||
2019 | { | 2026 | { |
2020 | u16 tmp; | 2027 | u16 tmp; |
2021 | 2028 | ||
2022 | b43_phy_mask(dev, B2063_PLL_SP1, ~0x40); | 2029 | b43_radio_mask(dev, B2063_PLL_SP1, ~0x40); |
2023 | tmp = b43_phy_read(dev, B2063_PLL_JTAG_CALNRST) & 0xF8; | 2030 | tmp = b43_radio_read(dev, B2063_PLL_JTAG_CALNRST) & 0xF8; |
2024 | b43_phy_write(dev, B2063_PLL_JTAG_CALNRST, tmp); | 2031 | b43_radio_write(dev, B2063_PLL_JTAG_CALNRST, tmp); |
2025 | udelay(1); | 2032 | udelay(1); |
2026 | b43_phy_write(dev, B2063_PLL_JTAG_CALNRST, tmp | 0x4); | 2033 | b43_radio_write(dev, B2063_PLL_JTAG_CALNRST, tmp | 0x4); |
2027 | udelay(1); | 2034 | udelay(1); |
2028 | b43_phy_write(dev, B2063_PLL_JTAG_CALNRST, tmp | 0x6); | 2035 | b43_radio_write(dev, B2063_PLL_JTAG_CALNRST, tmp | 0x6); |
2029 | udelay(1); | 2036 | udelay(1); |
2030 | b43_phy_write(dev, B2063_PLL_JTAG_CALNRST, tmp | 0x7); | 2037 | b43_radio_write(dev, B2063_PLL_JTAG_CALNRST, tmp | 0x7); |
2031 | udelay(300); | 2038 | udelay(300); |
2032 | b43_phy_set(dev, B2063_PLL_SP1, 0x40); | 2039 | b43_radio_set(dev, B2063_PLL_SP1, 0x40); |
2033 | } | 2040 | } |
2034 | 2041 | ||
2035 | static int lpphy_b2063_tune(struct b43_wldev *dev, | 2042 | static int lpphy_b2063_tune(struct b43_wldev *dev, |
@@ -2124,31 +2131,31 @@ static int lpphy_b2063_tune(struct b43_wldev *dev, | |||
2124 | scale = 0; | 2131 | scale = 0; |
2125 | tmp5 = ((tmp4 + (tmp3 >> 1)) / tmp3) - 8; | 2132 | tmp5 = ((tmp4 + (tmp3 >> 1)) / tmp3) - 8; |
2126 | } | 2133 | } |
2127 | b43_phy_maskset(dev, B2063_PLL_JTAG_PLL_CP2, 0xFFC0, tmp5); | 2134 | b43_radio_maskset(dev, B2063_PLL_JTAG_PLL_CP2, 0xFFC0, tmp5); |
2128 | b43_phy_maskset(dev, B2063_PLL_JTAG_PLL_CP2, 0xFFBF, scale << 6); | 2135 | b43_radio_maskset(dev, B2063_PLL_JTAG_PLL_CP2, 0xFFBF, scale << 6); |
2129 | 2136 | ||
2130 | tmp6 = lpphy_qdiv_roundup(100 * val1, val3, 16); | 2137 | tmp6 = lpphy_qdiv_roundup(100 * val1, val3, 16); |
2131 | tmp6 *= (tmp5 * 8) * (scale + 1); | 2138 | tmp6 *= (tmp5 * 8) * (scale + 1); |
2132 | if (tmp6 > 150) | 2139 | if (tmp6 > 150) |
2133 | tmp6 = 0; | 2140 | tmp6 = 0; |
2134 | 2141 | ||
2135 | b43_phy_maskset(dev, B2063_PLL_JTAG_PLL_CP3, 0xFFE0, tmp6); | 2142 | b43_radio_maskset(dev, B2063_PLL_JTAG_PLL_CP3, 0xFFE0, tmp6); |
2136 | b43_phy_maskset(dev, B2063_PLL_JTAG_PLL_CP3, 0xFFDF, scale << 5); | 2143 | b43_radio_maskset(dev, B2063_PLL_JTAG_PLL_CP3, 0xFFDF, scale << 5); |
2137 | 2144 | ||
2138 | b43_phy_maskset(dev, B2063_PLL_JTAG_PLL_XTAL_12, 0xFFFB, 0x4); | 2145 | b43_radio_maskset(dev, B2063_PLL_JTAG_PLL_XTAL_12, 0xFFFB, 0x4); |
2139 | if (crystal_freq > 26000000) | 2146 | if (crystal_freq > 26000000) |
2140 | b43_phy_set(dev, B2063_PLL_JTAG_PLL_XTAL_12, 0x2); | 2147 | b43_radio_set(dev, B2063_PLL_JTAG_PLL_XTAL_12, 0x2); |
2141 | else | 2148 | else |
2142 | b43_phy_mask(dev, B2063_PLL_JTAG_PLL_XTAL_12, 0xFD); | 2149 | b43_radio_mask(dev, B2063_PLL_JTAG_PLL_XTAL_12, 0xFD); |
2143 | 2150 | ||
2144 | if (val1 == 45) | 2151 | if (val1 == 45) |
2145 | b43_phy_set(dev, B2063_PLL_JTAG_PLL_VCO1, 0x2); | 2152 | b43_radio_set(dev, B2063_PLL_JTAG_PLL_VCO1, 0x2); |
2146 | else | 2153 | else |
2147 | b43_phy_mask(dev, B2063_PLL_JTAG_PLL_VCO1, 0xFD); | 2154 | b43_radio_mask(dev, B2063_PLL_JTAG_PLL_VCO1, 0xFD); |
2148 | 2155 | ||
2149 | b43_phy_set(dev, B2063_PLL_SP2, 0x3); | 2156 | b43_radio_set(dev, B2063_PLL_SP2, 0x3); |
2150 | udelay(1); | 2157 | udelay(1); |
2151 | b43_phy_mask(dev, B2063_PLL_SP2, 0xFFFC); | 2158 | b43_radio_mask(dev, B2063_PLL_SP2, 0xFFFC); |
2152 | lpphy_b2063_vco_calib(dev); | 2159 | lpphy_b2063_vco_calib(dev); |
2153 | b43_radio_write(dev, B2063_COMM15, old_comm15); | 2160 | b43_radio_write(dev, B2063_COMM15, old_comm15); |
2154 | 2161 | ||
@@ -2158,10 +2165,9 @@ static int lpphy_b2063_tune(struct b43_wldev *dev, | |||
2158 | static int b43_lpphy_op_switch_channel(struct b43_wldev *dev, | 2165 | static int b43_lpphy_op_switch_channel(struct b43_wldev *dev, |
2159 | unsigned int new_channel) | 2166 | unsigned int new_channel) |
2160 | { | 2167 | { |
2168 | struct b43_phy_lp *lpphy = dev->phy.lp; | ||
2161 | int err; | 2169 | int err; |
2162 | 2170 | ||
2163 | b43_write16(dev, B43_MMIO_CHANNEL, new_channel); | ||
2164 | |||
2165 | if (dev->phy.radio_ver == 0x2063) { | 2171 | if (dev->phy.radio_ver == 0x2063) { |
2166 | err = lpphy_b2063_tune(dev, new_channel); | 2172 | err = lpphy_b2063_tune(dev, new_channel); |
2167 | if (err) | 2173 | if (err) |
@@ -2174,6 +2180,9 @@ static int b43_lpphy_op_switch_channel(struct b43_wldev *dev, | |||
2174 | lpphy_adjust_gain_table(dev, channel2freq_lp(new_channel)); | 2180 | lpphy_adjust_gain_table(dev, channel2freq_lp(new_channel)); |
2175 | } | 2181 | } |
2176 | 2182 | ||
2183 | lpphy->channel = new_channel; | ||
2184 | b43_write16(dev, B43_MMIO_CHANNEL, new_channel); | ||
2185 | |||
2177 | return 0; | 2186 | return 0; |
2178 | } | 2187 | } |
2179 | 2188 | ||
@@ -2185,10 +2194,9 @@ static int b43_lpphy_op_init(struct b43_wldev *dev) | |||
2185 | lpphy_baseband_init(dev); | 2194 | lpphy_baseband_init(dev); |
2186 | lpphy_radio_init(dev); | 2195 | lpphy_radio_init(dev); |
2187 | lpphy_calibrate_rc(dev); | 2196 | lpphy_calibrate_rc(dev); |
2188 | err = b43_lpphy_op_switch_channel(dev, | 2197 | err = b43_lpphy_op_switch_channel(dev, 7); |
2189 | b43_lpphy_op_get_default_chan(dev)); | ||
2190 | if (err) { | 2198 | if (err) { |
2191 | b43dbg(dev->wl, "Switch to init channel failed, error = %d.\n", | 2199 | b43dbg(dev->wl, "Switch to channel 7 failed, error = %d.\n", |
2192 | err); | 2200 | err); |
2193 | } | 2201 | } |
2194 | lpphy_tx_pctl_init(dev); | 2202 | lpphy_tx_pctl_init(dev); |
@@ -2222,6 +2230,7 @@ const struct b43_phy_operations b43_phyops_lp = { | |||
2222 | .init = b43_lpphy_op_init, | 2230 | .init = b43_lpphy_op_init, |
2223 | .phy_read = b43_lpphy_op_read, | 2231 | .phy_read = b43_lpphy_op_read, |
2224 | .phy_write = b43_lpphy_op_write, | 2232 | .phy_write = b43_lpphy_op_write, |
2233 | .phy_maskset = b43_lpphy_op_maskset, | ||
2225 | .radio_read = b43_lpphy_op_radio_read, | 2234 | .radio_read = b43_lpphy_op_radio_read, |
2226 | .radio_write = b43_lpphy_op_radio_write, | 2235 | .radio_write = b43_lpphy_op_radio_write, |
2227 | .software_rfkill = b43_lpphy_op_software_rfkill, | 2236 | .software_rfkill = b43_lpphy_op_software_rfkill, |
diff --git a/drivers/net/wireless/b43/phy_lp.h b/drivers/net/wireless/b43/phy_lp.h index e158d1f66c0e..c3232c17b60a 100644 --- a/drivers/net/wireless/b43/phy_lp.h +++ b/drivers/net/wireless/b43/phy_lp.h | |||
@@ -888,6 +888,9 @@ struct b43_phy_lp { | |||
888 | bool crs_usr_disable, crs_sys_disable; | 888 | bool crs_usr_disable, crs_sys_disable; |
889 | 889 | ||
890 | unsigned int pdiv; | 890 | unsigned int pdiv; |
891 | |||
892 | /* The channel we are tuned to */ | ||
893 | u8 channel; | ||
891 | }; | 894 | }; |
892 | 895 | ||
893 | enum tssi_mux_mode { | 896 | enum tssi_mux_mode { |
diff --git a/drivers/net/wireless/b43/tables_lpphy.c b/drivers/net/wireless/b43/tables_lpphy.c index 60d472f285af..c784def19b19 100644 --- a/drivers/net/wireless/b43/tables_lpphy.c +++ b/drivers/net/wireless/b43/tables_lpphy.c | |||
@@ -624,30 +624,35 @@ u32 b43_lptab_read(struct b43_wldev *dev, u32 offset) | |||
624 | void b43_lptab_read_bulk(struct b43_wldev *dev, u32 offset, | 624 | void b43_lptab_read_bulk(struct b43_wldev *dev, u32 offset, |
625 | unsigned int nr_elements, void *_data) | 625 | unsigned int nr_elements, void *_data) |
626 | { | 626 | { |
627 | u32 type, value; | 627 | u32 type; |
628 | u8 *data = _data; | 628 | u8 *data = _data; |
629 | unsigned int i; | 629 | unsigned int i; |
630 | 630 | ||
631 | type = offset & B43_LPTAB_TYPEMASK; | 631 | type = offset & B43_LPTAB_TYPEMASK; |
632 | offset &= ~B43_LPTAB_TYPEMASK; | ||
633 | B43_WARN_ON(offset > 0xFFFF); | ||
634 | |||
635 | b43_phy_write(dev, B43_LPPHY_TABLE_ADDR, offset); | ||
636 | |||
632 | for (i = 0; i < nr_elements; i++) { | 637 | for (i = 0; i < nr_elements; i++) { |
633 | value = b43_lptab_read(dev, offset); | ||
634 | switch (type) { | 638 | switch (type) { |
635 | case B43_LPTAB_8BIT: | 639 | case B43_LPTAB_8BIT: |
636 | *data = value; | 640 | *data = b43_phy_read(dev, B43_LPPHY_TABLEDATALO) & 0xFF; |
637 | data++; | 641 | data++; |
638 | break; | 642 | break; |
639 | case B43_LPTAB_16BIT: | 643 | case B43_LPTAB_16BIT: |
640 | *((u16 *)data) = value; | 644 | *((u16 *)data) = b43_phy_read(dev, B43_LPPHY_TABLEDATALO); |
641 | data += 2; | 645 | data += 2; |
642 | break; | 646 | break; |
643 | case B43_LPTAB_32BIT: | 647 | case B43_LPTAB_32BIT: |
644 | *((u32 *)data) = value; | 648 | *((u32 *)data) = b43_phy_read(dev, B43_LPPHY_TABLEDATAHI); |
649 | *((u32 *)data) <<= 16; | ||
650 | *((u32 *)data) |= b43_phy_read(dev, B43_LPPHY_TABLEDATALO); | ||
645 | data += 4; | 651 | data += 4; |
646 | break; | 652 | break; |
647 | default: | 653 | default: |
648 | B43_WARN_ON(1); | 654 | B43_WARN_ON(1); |
649 | } | 655 | } |
650 | offset++; | ||
651 | } | 656 | } |
652 | } | 657 | } |
653 | 658 | ||
@@ -688,26 +693,34 @@ void b43_lptab_write_bulk(struct b43_wldev *dev, u32 offset, | |||
688 | unsigned int i; | 693 | unsigned int i; |
689 | 694 | ||
690 | type = offset & B43_LPTAB_TYPEMASK; | 695 | type = offset & B43_LPTAB_TYPEMASK; |
696 | offset &= ~B43_LPTAB_TYPEMASK; | ||
697 | B43_WARN_ON(offset > 0xFFFF); | ||
698 | |||
699 | b43_phy_write(dev, B43_LPPHY_TABLE_ADDR, offset); | ||
700 | |||
691 | for (i = 0; i < nr_elements; i++) { | 701 | for (i = 0; i < nr_elements; i++) { |
692 | switch (type) { | 702 | switch (type) { |
693 | case B43_LPTAB_8BIT: | 703 | case B43_LPTAB_8BIT: |
694 | value = *data; | 704 | value = *data; |
695 | data++; | 705 | data++; |
706 | B43_WARN_ON(value & ~0xFF); | ||
707 | b43_phy_write(dev, B43_LPPHY_TABLEDATALO, value); | ||
696 | break; | 708 | break; |
697 | case B43_LPTAB_16BIT: | 709 | case B43_LPTAB_16BIT: |
698 | value = *((u16 *)data); | 710 | value = *((u16 *)data); |
699 | data += 2; | 711 | data += 2; |
712 | B43_WARN_ON(value & ~0xFFFF); | ||
713 | b43_phy_write(dev, B43_LPPHY_TABLEDATALO, value); | ||
700 | break; | 714 | break; |
701 | case B43_LPTAB_32BIT: | 715 | case B43_LPTAB_32BIT: |
702 | value = *((u32 *)data); | 716 | value = *((u32 *)data); |
703 | data += 4; | 717 | data += 4; |
718 | b43_phy_write(dev, B43_LPPHY_TABLEDATAHI, value >> 16); | ||
719 | b43_phy_write(dev, B43_LPPHY_TABLEDATALO, value); | ||
704 | break; | 720 | break; |
705 | default: | 721 | default: |
706 | B43_WARN_ON(1); | 722 | B43_WARN_ON(1); |
707 | value = 0; | ||
708 | } | 723 | } |
709 | b43_lptab_write(dev, offset, value); | ||
710 | offset++; | ||
711 | } | 724 | } |
712 | } | 725 | } |
713 | 726 | ||
@@ -777,7 +790,7 @@ static const u8 lpphy_pll_fraction_table[] = { | |||
777 | 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, | 790 | 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, |
778 | }; | 791 | }; |
779 | 792 | ||
780 | static const u16 lpphy_iq_local_table[] = { | 793 | static const u16 lpphy_iqlo_cal_table[] = { |
781 | 0x0200, 0x0300, 0x0400, 0x0600, 0x0800, 0x0b00, 0x1000, 0x1001, 0x1002, | 794 | 0x0200, 0x0300, 0x0400, 0x0600, 0x0800, 0x0b00, 0x1000, 0x1001, 0x1002, |
782 | 0x1003, 0x1004, 0x1005, 0x1006, 0x1007, 0x1707, 0x2007, 0x2d07, 0x4007, | 795 | 0x1003, 0x1004, 0x1005, 0x1006, 0x1007, 0x1707, 0x2007, 0x2d07, 0x4007, |
783 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, | 796 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, |
@@ -789,10 +802,17 @@ static const u16 lpphy_iq_local_table[] = { | |||
789 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, | 802 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, |
790 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4000, 0x0000, 0x0000, | 803 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4000, 0x0000, 0x0000, |
791 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, | 804 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, |
792 | 0x0000, 0x0000, | 805 | 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, |
793 | }; | 806 | }; |
794 | 807 | ||
795 | static const u16 lpphy_ofdm_cck_gain_table[] = { | 808 | static const u16 lpphy_rev0_ofdm_cck_gain_table[] = { |
809 | 0x0001, 0x0001, 0x0001, 0x0001, 0x1001, 0x2001, 0x3001, 0x4001, 0x5001, | ||
810 | 0x6001, 0x7001, 0x7011, 0x7021, 0x2035, 0x2045, 0x2055, 0x2065, 0x2075, | ||
811 | 0x006d, 0x007d, 0x014d, 0x015d, 0x115d, 0x035d, 0x135d, 0x055d, 0x155d, | ||
812 | 0x0d5d, 0x1d5d, 0x2d5d, 0x555d, 0x655d, 0x755d, | ||
813 | }; | ||
814 | |||
815 | static const u16 lpphy_rev1_ofdm_cck_gain_table[] = { | ||
796 | 0x5000, 0x6000, 0x7000, 0x0001, 0x1001, 0x2001, 0x3001, 0x4001, 0x5001, | 816 | 0x5000, 0x6000, 0x7000, 0x0001, 0x1001, 0x2001, 0x3001, 0x4001, 0x5001, |
797 | 0x6001, 0x7001, 0x7011, 0x7021, 0x2035, 0x2045, 0x2055, 0x2065, 0x2075, | 817 | 0x6001, 0x7001, 0x7011, 0x7021, 0x2035, 0x2045, 0x2055, 0x2065, 0x2075, |
798 | 0x006d, 0x007d, 0x014d, 0x015d, 0x115d, 0x035d, 0x135d, 0x055d, 0x155d, | 818 | 0x006d, 0x007d, 0x014d, 0x015d, 0x115d, 0x035d, 0x135d, 0x055d, 0x155d, |
@@ -2263,11 +2283,18 @@ void lpphy_rev0_1_table_init(struct b43_wldev *dev) | |||
2263 | b43_lptab_write_bulk(dev, B43_LPTAB8(6, 0), | 2283 | b43_lptab_write_bulk(dev, B43_LPTAB8(6, 0), |
2264 | ARRAY_SIZE(lpphy_pll_fraction_table), lpphy_pll_fraction_table); | 2284 | ARRAY_SIZE(lpphy_pll_fraction_table), lpphy_pll_fraction_table); |
2265 | b43_lptab_write_bulk(dev, B43_LPTAB16(0, 0), | 2285 | b43_lptab_write_bulk(dev, B43_LPTAB16(0, 0), |
2266 | ARRAY_SIZE(lpphy_iq_local_table), lpphy_iq_local_table); | 2286 | ARRAY_SIZE(lpphy_iqlo_cal_table), lpphy_iqlo_cal_table); |
2267 | b43_lptab_write_bulk(dev, B43_LPTAB16(13, 0), | 2287 | if (dev->phy.rev == 0) { |
2268 | ARRAY_SIZE(lpphy_ofdm_cck_gain_table), lpphy_ofdm_cck_gain_table); | 2288 | b43_lptab_write_bulk(dev, B43_LPTAB16(13, 0), |
2269 | b43_lptab_write_bulk(dev, B43_LPTAB16(12, 0), | 2289 | ARRAY_SIZE(lpphy_rev0_ofdm_cck_gain_table), lpphy_rev0_ofdm_cck_gain_table); |
2270 | ARRAY_SIZE(lpphy_ofdm_cck_gain_table), lpphy_ofdm_cck_gain_table); | 2290 | b43_lptab_write_bulk(dev, B43_LPTAB16(12, 0), |
2291 | ARRAY_SIZE(lpphy_rev0_ofdm_cck_gain_table), lpphy_rev0_ofdm_cck_gain_table); | ||
2292 | } else { | ||
2293 | b43_lptab_write_bulk(dev, B43_LPTAB16(13, 0), | ||
2294 | ARRAY_SIZE(lpphy_rev1_ofdm_cck_gain_table), lpphy_rev1_ofdm_cck_gain_table); | ||
2295 | b43_lptab_write_bulk(dev, B43_LPTAB16(12, 0), | ||
2296 | ARRAY_SIZE(lpphy_rev1_ofdm_cck_gain_table), lpphy_rev1_ofdm_cck_gain_table); | ||
2297 | } | ||
2271 | b43_lptab_write_bulk(dev, B43_LPTAB16(15, 0), | 2298 | b43_lptab_write_bulk(dev, B43_LPTAB16(15, 0), |
2272 | ARRAY_SIZE(lpphy_gain_delta_table), lpphy_gain_delta_table); | 2299 | ARRAY_SIZE(lpphy_gain_delta_table), lpphy_gain_delta_table); |
2273 | b43_lptab_write_bulk(dev, B43_LPTAB32(10, 0), | 2300 | b43_lptab_write_bulk(dev, B43_LPTAB32(10, 0), |
@@ -2281,22 +2308,6 @@ void lpphy_rev2plus_table_init(struct b43_wldev *dev) | |||
2281 | 2308 | ||
2282 | B43_WARN_ON(dev->phy.rev < 2); | 2309 | B43_WARN_ON(dev->phy.rev < 2); |
2283 | 2310 | ||
2284 | /* | ||
2285 | * FIXME This code follows the specs, but it looks wrong: | ||
2286 | * In each pass, it writes 4 bytes to an offset in table ID 7, | ||
2287 | * then increments the offset by 1 for the next pass. This results | ||
2288 | * in the first 3 bytes of each pass except the first one getting | ||
2289 | * written to a location that has already been zeroed in the previous | ||
2290 | * pass. | ||
2291 | * This is what the vendor driver does, but it still looks suspicious. | ||
2292 | * | ||
2293 | * This should probably suffice: | ||
2294 | * | ||
2295 | * for (i = 0; i < 704; i+=4) | ||
2296 | * b43_lptab_write(dev, B43_LPTAB32(7, i), 0) | ||
2297 | * | ||
2298 | * This should be tested once the code is functional. | ||
2299 | */ | ||
2300 | for (i = 0; i < 704; i++) | 2311 | for (i = 0; i < 704; i++) |
2301 | b43_lptab_write(dev, B43_LPTAB32(7, i), 0); | 2312 | b43_lptab_write(dev, B43_LPTAB32(7, i), 0); |
2302 | 2313 | ||
@@ -2323,7 +2334,7 @@ void lpphy_rev2plus_table_init(struct b43_wldev *dev) | |||
2323 | b43_lptab_write_bulk(dev, B43_LPTAB8(6, 0), | 2334 | b43_lptab_write_bulk(dev, B43_LPTAB8(6, 0), |
2324 | ARRAY_SIZE(lpphy_pll_fraction_table), lpphy_pll_fraction_table); | 2335 | ARRAY_SIZE(lpphy_pll_fraction_table), lpphy_pll_fraction_table); |
2325 | b43_lptab_write_bulk(dev, B43_LPTAB16(0, 0), | 2336 | b43_lptab_write_bulk(dev, B43_LPTAB16(0, 0), |
2326 | ARRAY_SIZE(lpphy_iq_local_table), lpphy_iq_local_table); | 2337 | ARRAY_SIZE(lpphy_iqlo_cal_table), lpphy_iqlo_cal_table); |
2327 | b43_lptab_write_bulk(dev, B43_LPTAB32(9, 0), | 2338 | b43_lptab_write_bulk(dev, B43_LPTAB32(9, 0), |
2328 | ARRAY_SIZE(lpphy_papd_eps_table), lpphy_papd_eps_table); | 2339 | ARRAY_SIZE(lpphy_papd_eps_table), lpphy_papd_eps_table); |
2329 | b43_lptab_write_bulk(dev, B43_LPTAB32(10, 0), | 2340 | b43_lptab_write_bulk(dev, B43_LPTAB32(10, 0), |