| From: Felix Fietkau <nbd@openwrt.org> |
| Date: Fri, 15 Mar 2013 14:53:31 +0100 |
| Subject: ath9k_hw: revert chainmask to user configuration after calibration |
| |
| commit 74632d11a133b5baf6b9d622dd19d2f944d93d94 upstream. |
| |
| The commit 'ath9k_hw: fix calibration issues on chainmask that don't |
| include chain 0' changed the hardware chainmask to the chip chainmask |
| for the duration of the calibration, but the revert to user |
| configuration in the reset path runs too early. |
| |
| That causes some issues with limiting the number of antennas (including |
| spurious failure in hardware-generated packets). |
| |
| Fix this by reverting the chainmask after the essential parts of the |
| calibration that need the workaround, and before NF calibration is run. |
| |
| Signed-off-by: Felix Fietkau <nbd@openwrt.org> |
| Reported-by: Wojciech Dubowik <Wojciech.Dubowik@neratec.com> |
| Tested-by: Wojciech Dubowik <Wojciech.Dubowik@neratec.com> |
| Signed-off-by: John W. Linville <linville@tuxdriver.com> |
| Signed-off-by: Ben Hutchings <ben@decadent.org.uk> |
| --- |
| drivers/net/wireless/ath/ath9k/ar9003_calib.c | 4 ++++ |
| 1 file changed, 4 insertions(+) |
| |
| --- a/drivers/net/wireless/ath/ath9k/ar9003_calib.c |
| +++ b/drivers/net/wireless/ath/ath9k/ar9003_calib.c |
| @@ -946,6 +946,7 @@ static bool ar9003_hw_init_cal(struct at |
| AR_PHY_CL_TAB_1, |
| AR_PHY_CL_TAB_2 }; |
| |
| + /* Use chip chainmask only for calibration */ |
| ar9003_hw_set_chain_masks(ah, ah->caps.rx_chainmask, ah->caps.tx_chainmask); |
| |
| if (rtt) { |
| @@ -1087,6 +1088,9 @@ skip_tx_iqcal: |
| ar9003_hw_rtt_disable(ah); |
| } |
| |
| + /* Revert chainmask to runtime parameters */ |
| + ar9003_hw_set_chain_masks(ah, ah->rxchainmask, ah->txchainmask); |
| + |
| /* Initialize list pointers */ |
| ah->cal_list = ah->cal_list_last = ah->cal_list_curr = NULL; |
| ah->supp_cals = IQ_MISMATCH_CAL; |