Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

b43: N-PHY: add RF power tables for radio 0x2057 revs 9 & 14

Don't write them as we don't have gains configured correctly yet.

Signed-off-by: Rafał Miłecki <zajec5@gmail.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>

authored by

Rafał Miłecki and committed by
John W. Linville
a68c356b 33df85f6

+87 -3
+18 -3
drivers/net/wireless/b43/phy_n.c
··· 4235 4235 4236 4236 const u32 *table = NULL; 4237 4237 u32 rfpwr_offset; 4238 - u8 pga_gain; 4238 + u8 pga_gain, pad_gain; 4239 4239 int i; 4240 + const s16 *uninitialized_var(rf_pwr_offset_table); 4240 4241 4241 4242 table = b43_nphy_get_tx_gain_table(dev); 4242 4243 if (!table) ··· 4253 4252 nphy->gmval = (table[0] >> 16) & 0x7000; 4254 4253 #endif 4255 4254 4255 + if (phy->rev >= 19) { 4256 + return; 4257 + } else if (phy->rev >= 7) { 4258 + rf_pwr_offset_table = b43_ntab_get_rf_pwr_offset_table(dev); 4259 + if (!rf_pwr_offset_table) 4260 + return; 4261 + /* TODO: Enable this once we have gains configured */ 4262 + return; 4263 + } 4264 + 4256 4265 for (i = 0; i < 128; i++) { 4257 4266 if (phy->rev >= 19) { 4258 4267 /* TODO */ 4259 4268 return; 4260 4269 } else if (phy->rev >= 7) { 4261 - /* TODO */ 4262 - return; 4270 + pga_gain = (table[i] >> 24) & 0xf; 4271 + pad_gain = (table[i] >> 19) & 0x1f; 4272 + if (b43_current_band(dev->wl) == IEEE80211_BAND_2GHZ) 4273 + rfpwr_offset = rf_pwr_offset_table[pad_gain]; 4274 + else 4275 + rfpwr_offset = rf_pwr_offset_table[pga_gain]; 4263 4276 } else { 4264 4277 pga_gain = (table[i] >> 24) & 0xF; 4265 4278 if (b43_current_band(dev->wl) == IEEE80211_BAND_2GHZ)
+67
drivers/net/wireless/b43/tables_nphy.c
··· 2878 2878 -54, -46, -39, -31, -23, -15, -8, 0 2879 2879 }; 2880 2880 2881 + /* Extracted from MMIO dump of 6.30.223.248 2882 + * Entries: 0, 15, 17, 21, 24, 26, 27, 29, 30 were guessed 2883 + */ 2884 + static const s16 b43_ntab_rf_pwr_offset_2057_rev9_2g[] = { 2885 + -133, -133, -107, -92, -81, 2886 + -73, -66, -61, -56, -52, 2887 + -48, -44, -41, -37, -34, 2888 + -31, -28, -25, -22, -19, 2889 + -17, -14, -12, -10, -9, 2890 + -7, -5, -4, -3, -2, 2891 + -1, 0, 2892 + }; 2893 + 2894 + /* Extracted from MMIO dump of 6.30.223.248 */ 2895 + static const s16 b43_ntab_rf_pwr_offset_2057_rev9_5g[] = { 2896 + -101, -94, -86, -79, -72, 2897 + -65, -57, -50, -42, -35, 2898 + -28, -21, -16, -9, -4, 2899 + 0, 2900 + }; 2901 + 2902 + /* Extracted from MMIO dump of 6.30.223.248 2903 + * Entries: 0, 26, 28, 29, 30, 31 were guessed 2904 + */ 2905 + static const s16 b43_ntab_rf_pwr_offset_2057_rev14_2g[] = { 2906 + -111, -111, -111, -84, -70, 2907 + -59, -52, -45, -40, -36, 2908 + -32, -29, -26, -23, -21, 2909 + -18, -16, -15, -13, -11, 2910 + -10, -8, -7, -6, -5, 2911 + -4, -4, -3, -3, -2, 2912 + -2, -1, 2913 + }; 2914 + 2881 2915 const u16 tbl_iqcal_gainparams[2][9][8] = { 2882 2916 { 2883 2917 { 0x000, 0, 0, 2, 0x69, 0x69, 0x69, 0x69 }, ··· 3739 3705 "No 2GHz EPA gain table available for this device\n"); 3740 3706 return NULL; 3741 3707 } 3708 + } 3709 + } 3710 + 3711 + const s16 *b43_ntab_get_rf_pwr_offset_table(struct b43_wldev *dev) 3712 + { 3713 + struct b43_phy *phy = &dev->phy; 3714 + 3715 + if (b43_current_band(dev->wl) == IEEE80211_BAND_2GHZ) { 3716 + switch (phy->rev) { 3717 + case 17: 3718 + if (phy->radio_rev == 14) 3719 + return b43_ntab_rf_pwr_offset_2057_rev14_2g; 3720 + break; 3721 + case 16: 3722 + if (phy->radio_rev == 9) 3723 + return b43_ntab_rf_pwr_offset_2057_rev9_2g; 3724 + break; 3725 + } 3726 + 3727 + b43err(dev->wl, 3728 + "No 2GHz RF power table available for this device\n"); 3729 + return NULL; 3730 + } else { 3731 + switch (phy->rev) { 3732 + case 16: 3733 + if (phy->radio_rev == 9) 3734 + return b43_ntab_rf_pwr_offset_2057_rev9_5g; 3735 + break; 3736 + } 3737 + 3738 + b43err(dev->wl, 3739 + "No 5GHz RF power table available for this device\n"); 3740 + return NULL; 3742 3741 } 3743 3742 } 3744 3743
+2
drivers/net/wireless/b43/tables_nphy.h
··· 191 191 192 192 const u32 *b43_nphy_get_tx_gain_table(struct b43_wldev *dev); 193 193 194 + const s16 *b43_ntab_get_rf_pwr_offset_table(struct b43_wldev *dev); 195 + 194 196 extern const s8 b43_ntab_papd_pga_gain_delta_ipa_2g[]; 195 197 196 198 extern const u16 tbl_iqcal_gainparams[2][9][8];