Turn off Interference Mitigation/Ambient Noise Imunity when the HAL is not in Station...
[madwifi/.git] / ath / if_ath.c
index 6e16801f513c1b380785a00289989211b28df76d..288966a4b8afbc5dd4d18bd953dfff141316bd10 100644 (file)
@@ -869,6 +869,11 @@ ath_attach(u_int16_t devid, struct net_device *dev, HAL_BUS_TAG tag)
         */
        sc->sc_hasveol = ath_hal_hasveol(ah);
 
+       /* Interference mitigation/ambient noise immunity (ANI).
+        * In modes other than HAL_M_STA, it causes receive sensitivity 
+        * problems for OFDM. */
+       sc->sc_hasintmit = ath_hal_hasintmit(ah);
+
        /* get mac address from hardware */
        ath_hal_getmac(ah, ic->ic_myaddr);
        if (sc->sc_hasbmask) {
@@ -2018,6 +2023,10 @@ ath_init(struct net_device *dev)
 
        if (sc->sc_softled)
                ath_hal_gpioCfgOutput(ah, sc->sc_ledpin);
+
+       if ((sc->sc_opmode != HAL_M_STA) && sc->sc_hasintmit)
+               ath_hal_setintmit(ah, 0);
+
        /*
         * This is needed only to setup initial state
         * but it's best done after a reset.
@@ -2273,6 +2282,10 @@ ath_reset(struct net_device *dev)
        if (!ath_hal_reset(ah, sc->sc_opmode, &sc->sc_curchan, AH_TRUE, &status))
                printk("%s: %s: unable to reset hardware: '%s' (HAL status %u)\n",
                        DEV_NAME(dev), __func__, ath_get_hal_status_desc(status), status);
+
+       if ((sc->sc_opmode != HAL_M_STA) && sc->sc_hasintmit)
+               ath_hal_setintmit(ah, 0);
+
        ath_update_txpow(sc);           /* update tx power state */
        if (ath_startrecv(sc) != 0)     /* restart recv */
                printk("%s: %s: unable to start recv logic\n",
@@ -7960,6 +7973,9 @@ ath_chan_set(struct ath_softc *sc, struct ieee80211_channel *chan)
                if (sc->sc_softled)
                        ath_hal_gpioCfgOutput(ah, sc->sc_ledpin);
 
+               if ((sc->sc_opmode != HAL_M_STA) && sc->sc_hasintmit)
+                       ath_hal_setintmit(ah, 0);
+
                sc->sc_curchan = hchan;
                ath_update_txpow(sc);           /* update tx power state */