summaryrefslogtreecommitdiffstats
path: root/sys/dev/ath/ath_hal/ar5212/ar5212_attach.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/dev/ath/ath_hal/ar5212/ar5212_attach.c')
-rw-r--r--sys/dev/ath/ath_hal/ar5212/ar5212_attach.c24
1 files changed, 23 insertions, 1 deletions
diff --git a/sys/dev/ath/ath_hal/ar5212/ar5212_attach.c b/sys/dev/ath/ath_hal/ar5212/ar5212_attach.c
index a833a03..32b3bde 100644
--- a/sys/dev/ath/ath_hal/ar5212/ar5212_attach.c
+++ b/sys/dev/ath/ath_hal/ar5212/ar5212_attach.c
@@ -786,7 +786,29 @@ ar5212FillCapabilityInfo(struct ath_hal *ah)
else
pCap->halHigh2GhzChan = 2732;
- pCap->halLow5GhzChan = 4915;
+ /*
+ * For AR5111 version < 4, the lowest centre frequency supported is
+ * 5130MHz. For AR5111 version 4, the 4.9GHz channels are supported
+ * but only in 10MHz increments.
+ *
+ * In addition, the programming method is wrong - it uses the IEEE
+ * channel number to calculate the frequency, rather than the
+ * channel centre. Since half/quarter rates re-use some of the
+ * 5GHz channel IEEE numbers, this will result in a badly programmed
+ * synth.
+ *
+ * Until the relevant support is written, just limit lower frequency
+ * support for AR5111 so things aren't incorrectly programmed.
+ *
+ * XXX It's also possible this code doesn't correctly limit the
+ * centre frequencies of potential channels; this is very important
+ * for half/quarter rate!
+ */
+ if (AH_RADIO_MAJOR(ah) == AR_RAD5111_SREV_MAJOR) {
+ pCap->halLow5GhzChan = 5120; /* XXX lowest centre = 5130MHz */
+ } else {
+ pCap->halLow5GhzChan = 4915;
+ }
pCap->halHigh5GhzChan = 6100;
pCap->halCipherCkipSupport = AH_FALSE;
OpenPOWER on IntegriCloud