|
@@ -1015,52 +1015,6 @@ static bool ar9003_hw_ani_control(struct ath_hw *ah,
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
-static void ar9003_hw_nf_sanitize_2g(struct ath_hw *ah, s16 *nf)
|
|
|
-{
|
|
|
- struct ath_common *common = ath9k_hw_common(ah);
|
|
|
-
|
|
|
- if (*nf > ah->nf_2g_max) {
|
|
|
- ath_print(common, ATH_DBG_CALIBRATE,
|
|
|
- "2 GHz NF (%d) > MAX (%d), "
|
|
|
- "correcting to MAX",
|
|
|
- *nf, ah->nf_2g_max);
|
|
|
- *nf = ah->nf_2g_max;
|
|
|
- } else if (*nf < ah->nf_2g_min) {
|
|
|
- ath_print(common, ATH_DBG_CALIBRATE,
|
|
|
- "2 GHz NF (%d) < MIN (%d), "
|
|
|
- "correcting to MIN",
|
|
|
- *nf, ah->nf_2g_min);
|
|
|
- *nf = ah->nf_2g_min;
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void ar9003_hw_nf_sanitize_5g(struct ath_hw *ah, s16 *nf)
|
|
|
-{
|
|
|
- struct ath_common *common = ath9k_hw_common(ah);
|
|
|
-
|
|
|
- if (*nf > ah->nf_5g_max) {
|
|
|
- ath_print(common, ATH_DBG_CALIBRATE,
|
|
|
- "5 GHz NF (%d) > MAX (%d), "
|
|
|
- "correcting to MAX",
|
|
|
- *nf, ah->nf_5g_max);
|
|
|
- *nf = ah->nf_5g_max;
|
|
|
- } else if (*nf < ah->nf_5g_min) {
|
|
|
- ath_print(common, ATH_DBG_CALIBRATE,
|
|
|
- "5 GHz NF (%d) < MIN (%d), "
|
|
|
- "correcting to MIN",
|
|
|
- *nf, ah->nf_5g_min);
|
|
|
- *nf = ah->nf_5g_min;
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-static void ar9003_hw_nf_sanitize(struct ath_hw *ah, s16 *nf)
|
|
|
-{
|
|
|
- if (IS_CHAN_2GHZ(ah->curchan))
|
|
|
- ar9003_hw_nf_sanitize_2g(ah, nf);
|
|
|
- else
|
|
|
- ar9003_hw_nf_sanitize_5g(ah, nf);
|
|
|
-}
|
|
|
-
|
|
|
static void ar9003_hw_do_getnf(struct ath_hw *ah,
|
|
|
int16_t nfarray[NUM_NF_READINGS])
|
|
|
{
|
|
@@ -1070,7 +1024,6 @@ static void ar9003_hw_do_getnf(struct ath_hw *ah,
|
|
|
nf = MS(REG_READ(ah, AR_PHY_CCA_0), AR_PHY_MINCCA_PWR);
|
|
|
if (nf & 0x100)
|
|
|
nf = 0 - ((nf ^ 0x1ff) + 1);
|
|
|
- ar9003_hw_nf_sanitize(ah, &nf);
|
|
|
ath_print(common, ATH_DBG_CALIBRATE,
|
|
|
"NF calibrated [ctl] [chain 0] is %d\n", nf);
|
|
|
nfarray[0] = nf;
|
|
@@ -1078,7 +1031,6 @@ static void ar9003_hw_do_getnf(struct ath_hw *ah,
|
|
|
nf = MS(REG_READ(ah, AR_PHY_CCA_1), AR_PHY_CH1_MINCCA_PWR);
|
|
|
if (nf & 0x100)
|
|
|
nf = 0 - ((nf ^ 0x1ff) + 1);
|
|
|
- ar9003_hw_nf_sanitize(ah, &nf);
|
|
|
ath_print(common, ATH_DBG_CALIBRATE,
|
|
|
"NF calibrated [ctl] [chain 1] is %d\n", nf);
|
|
|
nfarray[1] = nf;
|
|
@@ -1086,7 +1038,6 @@ static void ar9003_hw_do_getnf(struct ath_hw *ah,
|
|
|
nf = MS(REG_READ(ah, AR_PHY_CCA_2), AR_PHY_CH2_MINCCA_PWR);
|
|
|
if (nf & 0x100)
|
|
|
nf = 0 - ((nf ^ 0x1ff) + 1);
|
|
|
- ar9003_hw_nf_sanitize(ah, &nf);
|
|
|
ath_print(common, ATH_DBG_CALIBRATE,
|
|
|
"NF calibrated [ctl] [chain 2] is %d\n", nf);
|
|
|
nfarray[2] = nf;
|
|
@@ -1094,7 +1045,6 @@ static void ar9003_hw_do_getnf(struct ath_hw *ah,
|
|
|
nf = MS(REG_READ(ah, AR_PHY_EXT_CCA), AR_PHY_EXT_MINCCA_PWR);
|
|
|
if (nf & 0x100)
|
|
|
nf = 0 - ((nf ^ 0x1ff) + 1);
|
|
|
- ar9003_hw_nf_sanitize(ah, &nf);
|
|
|
ath_print(common, ATH_DBG_CALIBRATE,
|
|
|
"NF calibrated [ext] [chain 0] is %d\n", nf);
|
|
|
nfarray[3] = nf;
|
|
@@ -1102,7 +1052,6 @@ static void ar9003_hw_do_getnf(struct ath_hw *ah,
|
|
|
nf = MS(REG_READ(ah, AR_PHY_EXT_CCA_1), AR_PHY_CH1_EXT_MINCCA_PWR);
|
|
|
if (nf & 0x100)
|
|
|
nf = 0 - ((nf ^ 0x1ff) + 1);
|
|
|
- ar9003_hw_nf_sanitize(ah, &nf);
|
|
|
ath_print(common, ATH_DBG_CALIBRATE,
|
|
|
"NF calibrated [ext] [chain 1] is %d\n", nf);
|
|
|
nfarray[4] = nf;
|
|
@@ -1110,18 +1059,19 @@ static void ar9003_hw_do_getnf(struct ath_hw *ah,
|
|
|
nf = MS(REG_READ(ah, AR_PHY_EXT_CCA_2), AR_PHY_CH2_EXT_MINCCA_PWR);
|
|
|
if (nf & 0x100)
|
|
|
nf = 0 - ((nf ^ 0x1ff) + 1);
|
|
|
- ar9003_hw_nf_sanitize(ah, &nf);
|
|
|
ath_print(common, ATH_DBG_CALIBRATE,
|
|
|
"NF calibrated [ext] [chain 2] is %d\n", nf);
|
|
|
nfarray[5] = nf;
|
|
|
}
|
|
|
|
|
|
-void ar9003_hw_set_nf_limits(struct ath_hw *ah)
|
|
|
+static void ar9003_hw_set_nf_limits(struct ath_hw *ah)
|
|
|
{
|
|
|
- ah->nf_2g_max = AR_PHY_CCA_MAX_GOOD_VAL_9300_2GHZ;
|
|
|
- ah->nf_2g_min = AR_PHY_CCA_MIN_GOOD_VAL_9300_2GHZ;
|
|
|
- ah->nf_5g_max = AR_PHY_CCA_MAX_GOOD_VAL_9300_5GHZ;
|
|
|
- ah->nf_5g_min = AR_PHY_CCA_MIN_GOOD_VAL_9300_5GHZ;
|
|
|
+ ah->nf_2g.max = AR_PHY_CCA_MAX_GOOD_VAL_9300_2GHZ;
|
|
|
+ ah->nf_2g.min = AR_PHY_CCA_MIN_GOOD_VAL_9300_2GHZ;
|
|
|
+ ah->nf_2g.nominal = AR_PHY_CCA_NOM_VAL_9300_2GHZ;
|
|
|
+ ah->nf_5g.max = AR_PHY_CCA_MAX_GOOD_VAL_9300_5GHZ;
|
|
|
+ ah->nf_5g.min = AR_PHY_CCA_MIN_GOOD_VAL_9300_5GHZ;
|
|
|
+ ah->nf_5g.nominal = AR_PHY_CCA_NOM_VAL_9300_5GHZ;
|
|
|
}
|
|
|
|
|
|
/*
|
|
@@ -1309,6 +1259,8 @@ void ar9003_hw_attach_phy_ops(struct ath_hw *ah)
|
|
|
priv_ops->do_getnf = ar9003_hw_do_getnf;
|
|
|
priv_ops->loadnf = ar9003_hw_loadnf;
|
|
|
priv_ops->ani_cache_ini_regs = ar9003_hw_ani_cache_ini_regs;
|
|
|
+
|
|
|
+ ar9003_hw_set_nf_limits(ah);
|
|
|
}
|
|
|
|
|
|
void ar9003_hw_bb_watchdog_config(struct ath_hw *ah)
|