Merge git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-next into for...
[pandora-kernel.git] / drivers / net / wireless / ath / ath9k / init.c
index b855fe1..aa0ff7e 100644 (file)
@@ -197,6 +197,19 @@ static unsigned int ath9k_ioread32(void *hw_priv, u32 reg_offset)
        return val;
 }
 
+static unsigned int __ath9k_reg_rmw(struct ath_softc *sc, u32 reg_offset,
+                                   u32 set, u32 clr)
+{
+       u32 val;
+
+       val = ioread32(sc->mem + reg_offset);
+       val &= ~clr;
+       val |= set;
+       iowrite32(val, sc->mem + reg_offset);
+
+       return val;
+}
+
 static unsigned int ath9k_reg_rmw(void *hw_priv, u32 reg_offset, u32 set, u32 clr)
 {
        struct ath_hw *ah = (struct ath_hw *) hw_priv;
@@ -205,16 +218,12 @@ static unsigned int ath9k_reg_rmw(void *hw_priv, u32 reg_offset, u32 set, u32 cl
        unsigned long uninitialized_var(flags);
        u32 val;
 
-       if (ah->config.serialize_regmode == SER_REG_MODE_ON)
+       if (ah->config.serialize_regmode == SER_REG_MODE_ON) {
                spin_lock_irqsave(&sc->sc_serial_rw, flags);
-
-       val = ioread32(sc->mem + reg_offset);
-       val &= ~clr;
-       val |= set;
-       iowrite32(val, sc->mem + reg_offset);
-
-       if (ah->config.serialize_regmode == SER_REG_MODE_ON)
+               val = __ath9k_reg_rmw(sc, reg_offset, set, clr);
                spin_unlock_irqrestore(&sc->sc_serial_rw, flags);
+       } else
+               val = __ath9k_reg_rmw(sc, reg_offset, set, clr);
 
        return val;
 }
@@ -661,8 +670,10 @@ static void ath9k_init_band_txpower(struct ath_softc *sc, int band)
 static void ath9k_init_txpower_limits(struct ath_softc *sc)
 {
        struct ath_hw *ah = sc->sc_ah;
+       struct ath_common *common = ath9k_hw_common(sc->sc_ah);
        struct ath9k_channel *curchan = ah->curchan;
 
+       ah->txchainmask = common->tx_chainmask;
        if (ah->caps.hw_caps & ATH9K_HW_CAP_2GHZ)
                ath9k_init_band_txpower(sc, IEEE80211_BAND_2GHZ);
        if (ah->caps.hw_caps & ATH9K_HW_CAP_5GHZ)