249 lines
7.0 KiB
Diff
249 lines
7.0 KiB
Diff
--- a/drivers/net/wireless/ath/ath9k/hw.h
|
|
+++ b/drivers/net/wireless/ath/ath9k/hw.h
|
|
@@ -535,8 +535,6 @@ struct ath_hw_private_ops {
|
|
bool (*macversion_supported)(u32 macversion);
|
|
void (*setup_calibration)(struct ath_hw *ah,
|
|
struct ath9k_cal_list *currCal);
|
|
- bool (*iscal_supported)(struct ath_hw *ah,
|
|
- enum ath9k_cal_types calType);
|
|
|
|
/* PHY ops */
|
|
int (*rf_set_freq)(struct ath_hw *ah,
|
|
@@ -689,7 +687,7 @@ struct ath_hw {
|
|
u32 atim_window;
|
|
|
|
/* Calibration */
|
|
- enum ath9k_cal_types supp_cals;
|
|
+ u32 supp_cals;
|
|
struct ath9k_cal_list iq_caldata;
|
|
struct ath9k_cal_list adcgain_caldata;
|
|
struct ath9k_cal_list adcdc_caldata;
|
|
--- a/drivers/net/wireless/ath/ath9k/ar9002_calib.c
|
|
+++ b/drivers/net/wireless/ath/ath9k/ar9002_calib.c
|
|
@@ -20,6 +20,13 @@
|
|
|
|
#define AR9285_CLCAL_REDO_THRESH 1
|
|
|
|
+enum ar9002_cal_types {
|
|
+ ADC_GAIN_CAL = BIT(0),
|
|
+ ADC_DC_CAL = BIT(1),
|
|
+ IQ_MISMATCH_CAL = BIT(2),
|
|
+};
|
|
+
|
|
+
|
|
static void ar9002_hw_setup_calibration(struct ath_hw *ah,
|
|
struct ath9k_cal_list *currCal)
|
|
{
|
|
@@ -45,8 +52,6 @@ static void ar9002_hw_setup_calibration(
|
|
ath_print(common, ATH_DBG_CALIBRATE,
|
|
"starting ADC DC Calibration\n");
|
|
break;
|
|
- case TEMP_COMP_CAL:
|
|
- break; /* Not supported */
|
|
}
|
|
|
|
REG_SET_BIT(ah, AR_PHY_TIMING_CTRL4(0),
|
|
@@ -91,25 +96,6 @@ static bool ar9002_hw_per_calibration(st
|
|
return iscaldone;
|
|
}
|
|
|
|
-/* Assumes you are talking about the currently configured channel */
|
|
-static bool ar9002_hw_iscal_supported(struct ath_hw *ah,
|
|
- enum ath9k_cal_types calType)
|
|
-{
|
|
- struct ieee80211_conf *conf = &ath9k_hw_common(ah)->hw->conf;
|
|
-
|
|
- switch (calType & ah->supp_cals) {
|
|
- case IQ_MISMATCH_CAL: /* Both 2 GHz and 5 GHz support OFDM */
|
|
- return true;
|
|
- case ADC_GAIN_CAL:
|
|
- case ADC_DC_CAL:
|
|
- if (!(conf->channel->band == IEEE80211_BAND_2GHZ &&
|
|
- conf_is_ht20(conf)))
|
|
- return true;
|
|
- break;
|
|
- }
|
|
- return false;
|
|
-}
|
|
-
|
|
static void ar9002_hw_iqcal_collect(struct ath_hw *ah)
|
|
{
|
|
int i;
|
|
@@ -872,24 +858,28 @@ static bool ar9002_hw_init_cal(struct at
|
|
|
|
/* Enable IQ, ADC Gain and ADC DC offset CALs */
|
|
if (AR_SREV_9100(ah) || AR_SREV_9160_10_OR_LATER(ah)) {
|
|
- if (ar9002_hw_iscal_supported(ah, ADC_GAIN_CAL)) {
|
|
+ ah->supp_cals = IQ_MISMATCH_CAL;
|
|
+
|
|
+ if (AR_SREV_9160_10_OR_LATER(ah) &&
|
|
+ !(IS_CHAN_2GHZ(chan) && IS_CHAN_HT20(chan))) {
|
|
+ ah->supp_cals |= ADC_GAIN_CAL | ADC_DC_CAL;
|
|
+
|
|
+
|
|
INIT_CAL(&ah->adcgain_caldata);
|
|
INSERT_CAL(ah, &ah->adcgain_caldata);
|
|
ath_print(common, ATH_DBG_CALIBRATE,
|
|
"enabling ADC Gain Calibration.\n");
|
|
- }
|
|
- if (ar9002_hw_iscal_supported(ah, ADC_DC_CAL)) {
|
|
+
|
|
INIT_CAL(&ah->adcdc_caldata);
|
|
INSERT_CAL(ah, &ah->adcdc_caldata);
|
|
ath_print(common, ATH_DBG_CALIBRATE,
|
|
"enabling ADC DC Calibration.\n");
|
|
}
|
|
- if (ar9002_hw_iscal_supported(ah, IQ_MISMATCH_CAL)) {
|
|
- INIT_CAL(&ah->iq_caldata);
|
|
- INSERT_CAL(ah, &ah->iq_caldata);
|
|
- ath_print(common, ATH_DBG_CALIBRATE,
|
|
- "enabling IQ Calibration.\n");
|
|
- }
|
|
+
|
|
+ INIT_CAL(&ah->iq_caldata);
|
|
+ INSERT_CAL(ah, &ah->iq_caldata);
|
|
+ ath_print(common, ATH_DBG_CALIBRATE,
|
|
+ "enabling IQ Calibration.\n");
|
|
|
|
ah->cal_list_curr = ah->cal_list;
|
|
|
|
@@ -980,7 +970,6 @@ void ar9002_hw_attach_calib_ops(struct a
|
|
priv_ops->init_cal_settings = ar9002_hw_init_cal_settings;
|
|
priv_ops->init_cal = ar9002_hw_init_cal;
|
|
priv_ops->setup_calibration = ar9002_hw_setup_calibration;
|
|
- priv_ops->iscal_supported = ar9002_hw_iscal_supported;
|
|
|
|
ops->calibrate = ar9002_hw_calibrate;
|
|
}
|
|
--- a/drivers/net/wireless/ath/ath9k/ar9003_calib.c
|
|
+++ b/drivers/net/wireless/ath/ath9k/ar9003_calib.c
|
|
@@ -18,6 +18,11 @@
|
|
#include "hw-ops.h"
|
|
#include "ar9003_phy.h"
|
|
|
|
+enum ar9003_cal_types {
|
|
+ IQ_MISMATCH_CAL = BIT(0),
|
|
+ TEMP_COMP_CAL = BIT(1),
|
|
+};
|
|
+
|
|
static void ar9003_hw_setup_calibration(struct ath_hw *ah,
|
|
struct ath9k_cal_list *currCal)
|
|
{
|
|
@@ -50,10 +55,6 @@ static void ar9003_hw_setup_calibration(
|
|
ath_print(common, ATH_DBG_CALIBRATE,
|
|
"starting Temperature Compensation Calibration\n");
|
|
break;
|
|
- case ADC_GAIN_CAL:
|
|
- case ADC_DC_CAL:
|
|
- /* Not yet */
|
|
- break;
|
|
}
|
|
}
|
|
|
|
@@ -313,27 +314,6 @@ static const struct ath9k_percal_data iq
|
|
static void ar9003_hw_init_cal_settings(struct ath_hw *ah)
|
|
{
|
|
ah->iq_caldata.calData = &iq_cal_single_sample;
|
|
- ah->supp_cals = IQ_MISMATCH_CAL;
|
|
-}
|
|
-
|
|
-static bool ar9003_hw_iscal_supported(struct ath_hw *ah,
|
|
- enum ath9k_cal_types calType)
|
|
-{
|
|
- switch (calType & ah->supp_cals) {
|
|
- case IQ_MISMATCH_CAL:
|
|
- /*
|
|
- * XXX: Run IQ Mismatch for non-CCK only
|
|
- * Note that CHANNEL_B is never set though.
|
|
- */
|
|
- return true;
|
|
- case ADC_GAIN_CAL:
|
|
- case ADC_DC_CAL:
|
|
- return false;
|
|
- case TEMP_COMP_CAL:
|
|
- return true;
|
|
- }
|
|
-
|
|
- return false;
|
|
}
|
|
|
|
/*
|
|
@@ -772,15 +752,16 @@ static bool ar9003_hw_init_cal(struct at
|
|
|
|
/* Initialize list pointers */
|
|
ah->cal_list = ah->cal_list_last = ah->cal_list_curr = NULL;
|
|
+ ah->supp_cals = IQ_MISMATCH_CAL;
|
|
|
|
- if (ar9003_hw_iscal_supported(ah, IQ_MISMATCH_CAL)) {
|
|
+ if (ah->supp_cals & IQ_MISMATCH_CAL) {
|
|
INIT_CAL(&ah->iq_caldata);
|
|
INSERT_CAL(ah, &ah->iq_caldata);
|
|
ath_print(common, ATH_DBG_CALIBRATE,
|
|
"enabling IQ Calibration.\n");
|
|
}
|
|
|
|
- if (ar9003_hw_iscal_supported(ah, TEMP_COMP_CAL)) {
|
|
+ if (ah->supp_cals & TEMP_COMP_CAL) {
|
|
INIT_CAL(&ah->tempCompCalData);
|
|
INSERT_CAL(ah, &ah->tempCompCalData);
|
|
ath_print(common, ATH_DBG_CALIBRATE,
|
|
@@ -807,7 +788,6 @@ void ar9003_hw_attach_calib_ops(struct a
|
|
priv_ops->init_cal_settings = ar9003_hw_init_cal_settings;
|
|
priv_ops->init_cal = ar9003_hw_init_cal;
|
|
priv_ops->setup_calibration = ar9003_hw_setup_calibration;
|
|
- priv_ops->iscal_supported = ar9003_hw_iscal_supported;
|
|
|
|
ops->calibrate = ar9003_hw_calibrate;
|
|
}
|
|
--- a/drivers/net/wireless/ath/ath9k/calib.h
|
|
+++ b/drivers/net/wireless/ath/ath9k/calib.h
|
|
@@ -58,13 +58,6 @@ struct ar5416IniArray {
|
|
} \
|
|
} while (0)
|
|
|
|
-enum ath9k_cal_types {
|
|
- ADC_GAIN_CAL = 0x2,
|
|
- ADC_DC_CAL = 0x4,
|
|
- IQ_MISMATCH_CAL = 0x8,
|
|
- TEMP_COMP_CAL = 0x10,
|
|
-};
|
|
-
|
|
enum ath9k_cal_state {
|
|
CAL_INACTIVE,
|
|
CAL_WAITING,
|
|
@@ -79,7 +72,7 @@ enum ath9k_cal_state {
|
|
#define PER_MAX_LOG_COUNT 10
|
|
|
|
struct ath9k_percal_data {
|
|
- enum ath9k_cal_types calType;
|
|
+ u32 calType;
|
|
u32 calNumSamples;
|
|
u32 calCountMax;
|
|
void (*calCollect) (struct ath_hw *);
|
|
--- a/drivers/net/wireless/ath/ath9k/hw-ops.h
|
|
+++ b/drivers/net/wireless/ath/ath9k/hw-ops.h
|
|
@@ -276,12 +276,6 @@ static inline void ath9k_hw_setup_calibr
|
|
ath9k_hw_private_ops(ah)->setup_calibration(ah, currCal);
|
|
}
|
|
|
|
-static inline bool ath9k_hw_iscal_supported(struct ath_hw *ah,
|
|
- enum ath9k_cal_types calType)
|
|
-{
|
|
- return ath9k_hw_private_ops(ah)->iscal_supported(ah, calType);
|
|
-}
|
|
-
|
|
static inline void ath9k_ani_reset(struct ath_hw *ah, bool is_scanning)
|
|
{
|
|
ath9k_hw_private_ops(ah)->ani_reset(ah, is_scanning);
|
|
--- a/drivers/net/wireless/ath/ath9k/calib.c
|
|
+++ b/drivers/net/wireless/ath/ath9k/calib.c
|
|
@@ -186,7 +186,7 @@ bool ath9k_hw_reset_calvalid(struct ath_
|
|
return true;
|
|
}
|
|
|
|
- if (!ath9k_hw_iscal_supported(ah, currCal->calData->calType))
|
|
+ if (!(ah->supp_cals & currCal->calData->calType))
|
|
return true;
|
|
|
|
ath_print(common, ATH_DBG_CALIBRATE,
|