Message ID | 20130315183433.GA2676@bombadil.infradead.org (mailing list archive) |
---|---|
State | Not Applicable, archived |
Headers | show |
On 2013-03-15 7:34 PM, Luis R. Rodriguez wrote: > On Fri, Mar 15, 2013 at 02:53:31PM +0100, Felix Fietkau wrote: >> 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> >> Cc: stable@vger.kernel.org > > This applies to v3.8 as well with the following changes, do you want > it there as well? Yes -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/drivers/net/wireless/ath/ath9k/ar9003_calib.c b/drivers/net/wireless/ath/ath9k/ar9003_calib.c index 56317b0..e99f481 100644 --- a/drivers/net/wireless/ath/ath9k/ar9003_calib.c +++ b/drivers/net/wireless/ath/ath9k/ar9003_calib.c @@ -976,6 +976,7 @@ static bool ar9003_hw_init_cal(struct ath_hw *ah, 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) { @@ -1131,6 +1132,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;