|
@@ -2625,6 +2625,19 @@ ath5k_stop_hw(struct ath5k_softc *sc)
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
|
+static void
|
|
|
+ath5k_intr_calibration_poll(struct ath5k_hw *ah)
|
|
|
+{
|
|
|
+ if (time_is_before_eq_jiffies(ah->ah_cal_next_full)) {
|
|
|
+ ah->ah_cal_next_full = jiffies +
|
|
|
+ msecs_to_jiffies(ATH5K_TUNE_CALIBRATION_INTERVAL_FULL);
|
|
|
+ tasklet_schedule(&ah->ah_sc->calib);
|
|
|
+ }
|
|
|
+ /* we could use SWI to generate enough interrupts to meet our
|
|
|
+ * calibration interval requirements, if necessary:
|
|
|
+ * AR5K_REG_ENABLE_BITS(ah, AR5K_CR, AR5K_CR_SWI); */
|
|
|
+}
|
|
|
+
|
|
|
static irqreturn_t
|
|
|
ath5k_intr(int irq, void *dev_id)
|
|
|
{
|
|
@@ -2689,7 +2702,7 @@ ath5k_intr(int irq, void *dev_id)
|
|
|
if (unlikely(!counter))
|
|
|
ATH5K_WARN(sc, "too many interrupts, giving up for now\n");
|
|
|
|
|
|
- ath5k_hw_calibration_poll(ah);
|
|
|
+ ath5k_intr_calibration_poll(ah);
|
|
|
|
|
|
return IRQ_HANDLED;
|
|
|
}
|