aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/ath/ath9k
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/wireless/ath/ath9k')
-rw-r--r--drivers/net/wireless/ath/ath9k/ar9003_calib.c76
-rw-r--r--drivers/net/wireless/ath/ath9k/ar9003_phy.h46
-rw-r--r--drivers/net/wireless/ath/ath9k/ar9462_2p0_initvals.h2
3 files changed, 116 insertions, 8 deletions
diff --git a/drivers/net/wireless/ath/ath9k/ar9003_calib.c b/drivers/net/wireless/ath/ath9k/ar9003_calib.c
index 162401f22f8..8b0d8dcd762 100644
--- a/drivers/net/wireless/ath/ath9k/ar9003_calib.c
+++ b/drivers/net/wireless/ath/ath9k/ar9003_calib.c
@@ -891,6 +891,74 @@ static void ar9003_hw_tx_iq_cal_reload(struct ath_hw *ah)
891 AR_PHY_RX_IQCAL_CORR_B0_LOOPBACK_IQCORR_EN, 0x1); 891 AR_PHY_RX_IQCAL_CORR_B0_LOOPBACK_IQCORR_EN, 0x1);
892} 892}
893 893
894static void ar9003_hw_manual_peak_cal(struct ath_hw *ah, u8 chain, bool is_2g)
895{
896 int offset[8], total = 0, test;
897 int agc_out, i;
898
899 REG_RMW_FIELD(ah, AR_PHY_65NM_RXRF_GAINSTAGES(chain),
900 AR_PHY_65NM_RXRF_GAINSTAGES_RX_OVERRIDE, 0x1);
901 REG_RMW_FIELD(ah, AR_PHY_65NM_RXRF_GAINSTAGES(chain),
902 AR_PHY_65NM_RXRF_GAINSTAGES_LNAON_CALDC, 0x0);
903 if (is_2g)
904 REG_RMW_FIELD(ah, AR_PHY_65NM_RXRF_GAINSTAGES(chain),
905 AR_PHY_65NM_RXRF_GAINSTAGES_LNA2G_GAIN_OVR, 0x0);
906 else
907 REG_RMW_FIELD(ah, AR_PHY_65NM_RXRF_GAINSTAGES(chain),
908 AR_PHY_65NM_RXRF_GAINSTAGES_LNA5G_GAIN_OVR, 0x0);
909
910 REG_RMW_FIELD(ah, AR_PHY_65NM_RXTX2(chain),
911 AR_PHY_65NM_RXTX2_RXON_OVR, 0x1);
912 REG_RMW_FIELD(ah, AR_PHY_65NM_RXTX2(chain),
913 AR_PHY_65NM_RXTX2_RXON, 0x0);
914
915 REG_RMW_FIELD(ah, AR_PHY_65NM_RXRF_AGC(chain),
916 AR_PHY_65NM_RXRF_AGC_AGC_OVERRIDE, 0x1);
917 REG_RMW_FIELD(ah, AR_PHY_65NM_RXRF_AGC(chain),
918 AR_PHY_65NM_RXRF_AGC_AGC_ON_OVR, 0x1);
919 REG_RMW_FIELD(ah, AR_PHY_65NM_RXRF_AGC(chain),
920 AR_PHY_65NM_RXRF_AGC_AGC_CAL_OVR, 0x1);
921 if (is_2g)
922 REG_RMW_FIELD(ah, AR_PHY_65NM_RXRF_AGC(chain),
923 AR_PHY_65NM_RXRF_AGC_AGC2G_DBDAC_OVR, 0x0);
924 else
925 REG_RMW_FIELD(ah, AR_PHY_65NM_RXRF_AGC(chain),
926 AR_PHY_65NM_RXRF_AGC_AGC5G_DBDAC_OVR, 0x0);
927
928 for (i = 6; i > 0; i--) {
929 offset[i] = BIT(i - 1);
930 test = total + offset[i];
931
932 if (is_2g)
933 REG_RMW_FIELD(ah, AR_PHY_65NM_RXRF_AGC(chain),
934 AR_PHY_65NM_RXRF_AGC_AGC2G_CALDAC_OVR,
935 test);
936 else
937 REG_RMW_FIELD(ah, AR_PHY_65NM_RXRF_AGC(chain),
938 AR_PHY_65NM_RXRF_AGC_AGC5G_CALDAC_OVR,
939 test);
940 udelay(100);
941 agc_out = REG_READ_FIELD(ah, AR_PHY_65NM_RXRF_AGC(chain),
942 AR_PHY_65NM_RXRF_AGC_AGC_OUT);
943 offset[i] = (agc_out) ? 0 : 1;
944 total += (offset[i] << (i - 1));
945 }
946
947 if (is_2g)
948 REG_RMW_FIELD(ah, AR_PHY_65NM_RXRF_AGC(chain),
949 AR_PHY_65NM_RXRF_AGC_AGC2G_CALDAC_OVR, total);
950 else
951 REG_RMW_FIELD(ah, AR_PHY_65NM_RXRF_AGC(chain),
952 AR_PHY_65NM_RXRF_AGC_AGC5G_CALDAC_OVR, total);
953
954 REG_RMW_FIELD(ah, AR_PHY_65NM_RXRF_GAINSTAGES(chain),
955 AR_PHY_65NM_RXRF_GAINSTAGES_RX_OVERRIDE, 0);
956 REG_RMW_FIELD(ah, AR_PHY_65NM_RXTX2(chain),
957 AR_PHY_65NM_RXTX2_RXON_OVR, 0);
958 REG_RMW_FIELD(ah, AR_PHY_65NM_RXRF_AGC(chain),
959 AR_PHY_65NM_RXRF_AGC_AGC_CAL_OVR, 0);
960}
961
894static bool ar9003_hw_init_cal(struct ath_hw *ah, 962static bool ar9003_hw_init_cal(struct ath_hw *ah,
895 struct ath9k_channel *chan) 963 struct ath9k_channel *chan)
896{ 964{
@@ -989,6 +1057,14 @@ skip_tx_iqcal:
989 status = ath9k_hw_wait(ah, AR_PHY_AGC_CONTROL, 1057 status = ath9k_hw_wait(ah, AR_PHY_AGC_CONTROL,
990 AR_PHY_AGC_CONTROL_CAL, 1058 AR_PHY_AGC_CONTROL_CAL,
991 0, AH_WAIT_TIMEOUT); 1059 0, AH_WAIT_TIMEOUT);
1060 if (AR_SREV_9462(ah) || AR_SREV_9565(ah)) {
1061 for (i = 0; i < AR9300_MAX_CHAINS; i++) {
1062 if (!(ah->rxchainmask & (1 << i)))
1063 continue;
1064 ar9003_hw_manual_peak_cal(ah, i,
1065 IS_CHAN_2GHZ(chan));
1066 }
1067 }
992 } 1068 }
993 1069
994 if (ath9k_hw_mci_is_enabled(ah) && IS_CHAN_2GHZ(chan) && run_agc_cal) 1070 if (ath9k_hw_mci_is_enabled(ah) && IS_CHAN_2GHZ(chan) && run_agc_cal)
diff --git a/drivers/net/wireless/ath/ath9k/ar9003_phy.h b/drivers/net/wireless/ath/ath9k/ar9003_phy.h
index 8f585233a78..4c3d06de711 100644
--- a/drivers/net/wireless/ath/ath9k/ar9003_phy.h
+++ b/drivers/net/wireless/ath/ath9k/ar9003_phy.h
@@ -698,13 +698,6 @@
698#define AR_PHY_65NM_CH0_THERM_SAR_ADC_OUT 0x0000ff00 698#define AR_PHY_65NM_CH0_THERM_SAR_ADC_OUT 0x0000ff00
699#define AR_PHY_65NM_CH0_THERM_SAR_ADC_OUT_S 8 699#define AR_PHY_65NM_CH0_THERM_SAR_ADC_OUT_S 8
700 700
701#define AR_PHY_65NM_CH0_RXTX1 0x16100
702#define AR_PHY_65NM_CH0_RXTX2 0x16104
703#define AR_PHY_65NM_CH1_RXTX1 0x16500
704#define AR_PHY_65NM_CH1_RXTX2 0x16504
705#define AR_PHY_65NM_CH2_RXTX1 0x16900
706#define AR_PHY_65NM_CH2_RXTX2 0x16904
707
708#define AR_CH0_TOP2 (AR_SREV_9300(ah) ? 0x1628c : \ 701#define AR_CH0_TOP2 (AR_SREV_9300(ah) ? 0x1628c : \
709 (AR_SREV_9462(ah) ? 0x16290 : 0x16284)) 702 (AR_SREV_9462(ah) ? 0x16290 : 0x16284))
710#define AR_CH0_TOP2_XPABIASLVL 0xf000 703#define AR_CH0_TOP2_XPABIASLVL 0xf000
@@ -1286,4 +1279,43 @@
1286#define AR_BTCOEX_WL_LNADIV_BT_INACTIVE_THRESHOLD 0xFC000000 1279#define AR_BTCOEX_WL_LNADIV_BT_INACTIVE_THRESHOLD 0xFC000000
1287#define AR_BTCOEX_WL_LNADIV_BT_INACTIVE_THRESHOLD_S 26 1280#define AR_BTCOEX_WL_LNADIV_BT_INACTIVE_THRESHOLD_S 26
1288 1281
1282/* Manual Peak detector calibration */
1283#define AR_PHY_65NM_BASE 0x16000
1284#define AR_PHY_65NM_RXRF_GAINSTAGES(i) (AR_PHY_65NM_BASE + \
1285 (i * 0x400) + 0x8)
1286#define AR_PHY_65NM_RXRF_GAINSTAGES_RX_OVERRIDE 0x80000000
1287#define AR_PHY_65NM_RXRF_GAINSTAGES_RX_OVERRIDE_S 31
1288#define AR_PHY_65NM_RXRF_GAINSTAGES_LNAON_CALDC 0x00000002
1289#define AR_PHY_65NM_RXRF_GAINSTAGES_LNAON_CALDC_S 1
1290#define AR_PHY_65NM_RXRF_GAINSTAGES_LNA2G_GAIN_OVR 0x70000000
1291#define AR_PHY_65NM_RXRF_GAINSTAGES_LNA2G_GAIN_OVR_S 28
1292#define AR_PHY_65NM_RXRF_GAINSTAGES_LNA5G_GAIN_OVR 0x03800000
1293#define AR_PHY_65NM_RXRF_GAINSTAGES_LNA5G_GAIN_OVR_S 23
1294
1295#define AR_PHY_65NM_RXTX2(i) (AR_PHY_65NM_BASE + \
1296 (i * 0x400) + 0x104)
1297#define AR_PHY_65NM_RXTX2_RXON_OVR 0x00001000
1298#define AR_PHY_65NM_RXTX2_RXON_OVR_S 12
1299#define AR_PHY_65NM_RXTX2_RXON 0x00000800
1300#define AR_PHY_65NM_RXTX2_RXON_S 11
1301
1302#define AR_PHY_65NM_RXRF_AGC(i) (AR_PHY_65NM_BASE + \
1303 (i * 0x400) + 0xc)
1304#define AR_PHY_65NM_RXRF_AGC_AGC_OVERRIDE 0x80000000
1305#define AR_PHY_65NM_RXRF_AGC_AGC_OVERRIDE_S 31
1306#define AR_PHY_65NM_RXRF_AGC_AGC_ON_OVR 0x40000000
1307#define AR_PHY_65NM_RXRF_AGC_AGC_ON_OVR_S 30
1308#define AR_PHY_65NM_RXRF_AGC_AGC_CAL_OVR 0x20000000
1309#define AR_PHY_65NM_RXRF_AGC_AGC_CAL_OVR_S 29
1310#define AR_PHY_65NM_RXRF_AGC_AGC2G_DBDAC_OVR 0x1E000000
1311#define AR_PHY_65NM_RXRF_AGC_AGC2G_DBDAC_OVR_S 25
1312#define AR_PHY_65NM_RXRF_AGC_AGC5G_DBDAC_OVR 0x00078000
1313#define AR_PHY_65NM_RXRF_AGC_AGC5G_DBDAC_OVR_S 15
1314#define AR_PHY_65NM_RXRF_AGC_AGC2G_CALDAC_OVR 0x01F80000
1315#define AR_PHY_65NM_RXRF_AGC_AGC2G_CALDAC_OVR_S 19
1316#define AR_PHY_65NM_RXRF_AGC_AGC5G_CALDAC_OVR 0x00007e00
1317#define AR_PHY_65NM_RXRF_AGC_AGC5G_CALDAC_OVR_S 9
1318#define AR_PHY_65NM_RXRF_AGC_AGC_OUT 0x00000004
1319#define AR_PHY_65NM_RXRF_AGC_AGC_OUT_S 2
1320
1289#endif /* AR9003_PHY_H */ 1321#endif /* AR9003_PHY_H */
diff --git a/drivers/net/wireless/ath/ath9k/ar9462_2p0_initvals.h b/drivers/net/wireless/ath/ath9k/ar9462_2p0_initvals.h
index 58f30f65c6b..ccc42a71b43 100644
--- a/drivers/net/wireless/ath/ath9k/ar9462_2p0_initvals.h
+++ b/drivers/net/wireless/ath/ath9k/ar9462_2p0_initvals.h
@@ -78,7 +78,7 @@ static const u32 ar9462_2p0_baseband_postamble[][5] = {
78 {0x0000a284, 0x00000000, 0x00000000, 0x00000150, 0x00000150}, 78 {0x0000a284, 0x00000000, 0x00000000, 0x00000150, 0x00000150},
79 {0x0000a288, 0x00000110, 0x00000110, 0x00000110, 0x00000110}, 79 {0x0000a288, 0x00000110, 0x00000110, 0x00000110, 0x00000110},
80 {0x0000a28c, 0x00022222, 0x00022222, 0x00022222, 0x00022222}, 80 {0x0000a28c, 0x00022222, 0x00022222, 0x00022222, 0x00022222},
81 {0x0000a2c4, 0x00158d18, 0x00158d18, 0x00158d18, 0x00158d18}, 81 {0x0000a2c4, 0x00058d18, 0x00058d18, 0x00058d18, 0x00058d18},
82 {0x0000a2d0, 0x00041981, 0x00041981, 0x00041981, 0x00041982}, 82 {0x0000a2d0, 0x00041981, 0x00041981, 0x00041981, 0x00041982},
83 {0x0000a2d8, 0x7999a83b, 0x7999a83b, 0x7999a83b, 0x7999a83b}, 83 {0x0000a2d8, 0x7999a83b, 0x7999a83b, 0x7999a83b, 0x7999a83b},
84 {0x0000a358, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, 84 {0x0000a358, 0x00000000, 0x00000000, 0x00000000, 0x00000000},