On 2012-07-11 8:42 PM, Gabor Juhos wrote: > 2012.07.11. 19:59 keltezéssel, Felix Fietkau írta: >> Many chips are not able to deal with non-consecutive rx antenna selections >> and respond with calibration errors, reset errors, etc. >> When an antenna is selected as a tx antenna, also flag it for rx to avoid >> chip issues. >> >> Signed-off-by: Felix Fietkau <nbd@xxxxxxxxxxx> >> --- >> drivers/net/wireless/ath/ath9k/main.c | 19 ++++++++++++++++++- >> 1 files changed, 18 insertions(+), 1 deletions(-) >> >> diff --git a/drivers/net/wireless/ath/ath9k/main.c b/drivers/net/wireless/ath/ath9k/main.c >> index 248e5b2..49f293a 100644 >> --- a/drivers/net/wireless/ath/ath9k/main.c >> +++ b/drivers/net/wireless/ath/ath9k/main.c >> @@ -1912,12 +1912,29 @@ static u32 fill_chainmask(u32 cap, u32 new) >> return filled; >> } >> >> +static bool validate_antenna_mask(struct ath_hw *ah, u32 val) >> +{ >> + switch (val & ah->caps.rx_chainmask) { >> + case 0x1: >> + case 0x3: >> + case 0x7: >> + return true; >> + case 0x2: >> + return (ah->caps.rx_chainmask == 1); > > This case statement seems superfluous. If 'rx_chainmask == 1' then 'val & > rx_chainmask' never will be 0x2. > >> + default: >> + return false; >> + } > > Additionally, the function does not allows to set rx antenna to 0x2/0x3 for > chips with antenna diversity capabilities. Yeah, thanks. I added the case 0x2 above to take care of that, but it's obviously buggy because of the masking with rx_chainmask. I'll fix it in v2. - Felix -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html