Skip to content

Commit

Permalink
ath5k: run NF calibration only every 60 seconds
Browse files Browse the repository at this point in the history
Since NF calibration interferes with TX and RX and also has been the cause of
other problems (when it's run concurrently with ath5k_reset) we want to run it
less often - every 60 seconds for now.

Signed-off-by: Bruno Randolf <br1@einfach.org>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
  • Loading branch information
Bruno Randolf authored and John W. Linville committed Jun 2, 2010
1 parent 0e8e02d commit afe8628
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 7 deletions.
2 changes: 2 additions & 0 deletions drivers/net/wireless/ath/ath5k/ath5k.h
Original file line number Diff line number Diff line change
Expand Up @@ -204,6 +204,7 @@
#define AR5K_TUNE_TPC_TXPOWER false
#define ATH5K_TUNE_CALIBRATION_INTERVAL_FULL 10000 /* 10 sec */
#define ATH5K_TUNE_CALIBRATION_INTERVAL_ANI 1000 /* 1 sec */
#define ATH5K_TUNE_CALIBRATION_INTERVAL_NF 60000 /* 60 sec */

#define AR5K_INIT_CARR_SENSE_EN 1

Expand Down Expand Up @@ -1118,6 +1119,7 @@ struct ath5k_hw {
/* Calibration timestamp */
unsigned long ah_cal_next_full;
unsigned long ah_cal_next_ani;
unsigned long ah_cal_next_nf;

/* Calibration mask */
u8 ah_cal_mask;
Expand Down
18 changes: 11 additions & 7 deletions drivers/net/wireless/ath/ath5k/base.c
Original file line number Diff line number Diff line change
Expand Up @@ -2803,14 +2803,16 @@ ath5k_tasklet_calibrate(unsigned long data)
ieee80211_frequency_to_channel(
sc->curchan->center_freq));

/* TODO: We don't need to run noise floor calibration as often
* as I/Q calibration.*/

/* Noise floor calibration interrupts rx/tx path while I/Q calibration
* doesn't. Stop queues so that calibration doesn't interfere with tx */
ieee80211_stop_queues(sc->hw);
ath5k_hw_update_noise_floor(ah);
ieee80211_wake_queues(sc->hw);
* doesn't. We stop the queues so that calibration doesn't interfere
* with TX and don't run it as often */
if (time_is_before_eq_jiffies(ah->ah_cal_next_nf)) {
ah->ah_cal_next_nf = jiffies +
msecs_to_jiffies(ATH5K_TUNE_CALIBRATION_INTERVAL_NF);
ieee80211_stop_queues(sc->hw);
ath5k_hw_update_noise_floor(ah);
ieee80211_wake_queues(sc->hw);
}

ah->ah_cal_mask &= ~AR5K_CALIBRATION_FULL;
}
Expand Down Expand Up @@ -2931,6 +2933,8 @@ ath5k_reset(struct ath5k_softc *sc, struct ieee80211_channel *chan)

ah->ah_cal_next_full = jiffies;
ah->ah_cal_next_ani = jiffies;
ah->ah_cal_next_nf = jiffies;

/*
* Change channels and update the h/w rate map if we're switching;
* e.g. 11a to 11b/g.
Expand Down

0 comments on commit afe8628

Please sign in to comment.