ath5k: update PCU opmode whenever a new interface is added
Bob Copeland [Wed, 29 Jul 2009 14:29:03 +0000 (10:29 -0400)]
Previously, we would store the operating mode at interface up time,
but only update the PCU registers when the next reset happened.
The result is that if beacon configuration (ops->bss_info_changed)
happens before ops->config, we will program the wrong things into
the timer registers.  Consequently, beacons won't work in AP mode
until after a reset (channel change, scan etc.).

This is fragile anyway so just program the opmode as soon as
mac80211 gives it to us.

Signed-off-by: Bob Copeland <me@bobcopeland.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>

drivers/net/wireless/ath/ath5k/base.c

index 7db32ce..55ee976 100644 (file)
@@ -1117,6 +1117,8 @@ ath5k_mode_setup(struct ath5k_softc *sc)
        struct ath5k_hw *ah = sc->ah;
        u32 rfilt;
 
+       ah->ah_op_mode = sc->opmode;
+
        /* configure rx filter */
        rfilt = sc->filter_flags;
        ath5k_hw_set_rx_filter(ah, rfilt);
@@ -2768,6 +2770,7 @@ static int ath5k_add_interface(struct ieee80211_hw *hw,
        }
 
        ath5k_hw_set_lladdr(sc->ah, conf->mac_addr);
+       ath5k_mode_setup(sc);
 
        ret = 0;
 end: