Commit 9019f646 authored by Sujith Manoharan's avatar Sujith Manoharan Committed by John W. Linville

ath9k: Fix RX filter calculation

If multiple channel contexts are active, then the opmode
can be different in each context. Since the RX filter is
calculated in ath_startrecv() before switching to the
new opmode, the wrong filters are chosen.

Fix this by calling ath9k_calculate_summary_state() before
the RX module is started.
Signed-off-by: default avatarSujith Manoharan <c_manoha@qca.qualcomm.com>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent fdcf1bd4
...@@ -224,6 +224,8 @@ static bool ath_complete_reset(struct ath_softc *sc, bool start) ...@@ -224,6 +224,8 @@ static bool ath_complete_reset(struct ath_softc *sc, bool start)
struct ath_common *common = ath9k_hw_common(ah); struct ath_common *common = ath9k_hw_common(ah);
unsigned long flags; unsigned long flags;
ath9k_calculate_summary_state(sc, sc->cur_chan);
if (ath_startrecv(sc) != 0) { if (ath_startrecv(sc) != 0) {
ath_err(common, "Unable to restart recv logic\n"); ath_err(common, "Unable to restart recv logic\n");
return false; return false;
...@@ -233,7 +235,6 @@ static bool ath_complete_reset(struct ath_softc *sc, bool start) ...@@ -233,7 +235,6 @@ static bool ath_complete_reset(struct ath_softc *sc, bool start)
sc->cur_chan->txpower, &sc->curtxpow); sc->cur_chan->txpower, &sc->curtxpow);
clear_bit(ATH_OP_HW_RESET, &common->op_flags); clear_bit(ATH_OP_HW_RESET, &common->op_flags);
ath9k_calculate_summary_state(sc, sc->cur_chan);
if (!sc->cur_chan->offchannel && start) { if (!sc->cur_chan->offchannel && start) {
/* restore per chanctx TSF timer */ /* restore per chanctx TSF timer */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment