Add ar5416RestoreChainMask() which will undo any AR5416 specific chainmask

overriding after calibration.

This will get set for other two chain radios, such as AR9280 and later on,
AR9287. It should however be a nul operation.
This commit is contained in:
Adrian Chadd 2011-01-26 10:48:29 +00:00
parent b868c6d0b1
commit f68a9f06e1
2 changed files with 15 additions and 0 deletions

View File

@ -202,6 +202,7 @@ extern void ar5416GetTargetPowersLeg(struct ath_hal *ah,
uint16_t numChannels, CAL_TARGET_POWER_LEG *pNewPower,
uint16_t numRates, HAL_BOOL isExtTarget);
extern void ar5416InitChainMasks(struct ath_hal *ah);
extern void ar5416RestoreChainMask(struct ath_hal *ah);
extern HAL_BOOL ar5416StopTxDma(struct ath_hal *ah, u_int q);
extern HAL_BOOL ar5416SetupTxDesc(struct ath_hal *ah, struct ath_desc *ds,

View File

@ -329,6 +329,8 @@ ar5416Reset(struct ath_hal *ah, HAL_OPMODE opmode,
if (!ar5416InitCal(ah, chan))
FAIL(HAL_ESELFTEST);
ar5416RestoreChainMask(ah);
AH_PRIVATE(ah)->ah_opmode = opmode; /* record operating mode */
if (bChannelChange && !IEEE80211_IS_CHAN_DFS(chan))
@ -1124,6 +1126,18 @@ ar5416InitChainMasks(struct ath_hal *ah)
OS_REG_WRITE(ah, AR_SELFGEN_MASK, AH5416(ah)->ah_tx_chainmask);
}
void
ar5416RestoreChainMask(struct ath_hal *ah)
{
int rx_chainmask = AH5416(ah)->ah_rx_chainmask;
if ((rx_chainmask == 0x5) || (rx_chainmask == 0x3)) {
OS_REG_WRITE(ah, AR_PHY_RX_CHAINMASK, rx_chainmask);
OS_REG_WRITE(ah, AR_PHY_CAL_CHAINMASK, rx_chainmask);
}
}
#ifndef IS_5GHZ_FAST_CLOCK_EN
#define IS_5GHZ_FAST_CLOCK_EN(ah, chan) AH_FALSE
#endif