ath5k: eliminate CHANNEL_* macros, use AR5K_MODE_* in channel->hw_value
[pandora-kernel.git] / drivers / net / wireless / ath / ath5k / reset.c
index 5d6d3bd..8bc57e4 100644 (file)
@@ -102,12 +102,18 @@ static void ath5k_hw_init_core_clock(struct ath5k_hw *ah)
        /*
         * Set core clock frequency
         */
-       if (channel->hw_value & CHANNEL_5GHZ)
-               clock = 40; /* 802.11a */
-       else if (channel->hw_value & CHANNEL_CCK)
-               clock = 22; /* 802.11b */
-       else
-               clock = 44; /* 802.11g */
+       switch (channel->hw_value) {
+       case AR5K_MODE_11A:
+               clock = 40;
+               break;
+       case AR5K_MODE_11B:
+               clock = 22;
+               break;
+       case AR5K_MODE_11G:
+       default:
+               clock = 44;
+               break;
+       }
 
        /* Use clock multiplier for non-default
         * bwmode */
@@ -581,8 +587,9 @@ int ath5k_hw_on_hold(struct ath5k_hw *ah)
 
 /*
  * Bring up MAC + PHY Chips and program PLL
+ * Channel is NULL for the initial wakeup.
  */
-int ath5k_hw_nic_wakeup(struct ath5k_hw *ah, int flags, bool initial)
+int ath5k_hw_nic_wakeup(struct ath5k_hw *ah, struct ieee80211_channel *channel)
 {
        struct pci_dev *pdev = ah->pdev;
        u32 turbo, mode, clock, bus_flags;
@@ -592,7 +599,7 @@ int ath5k_hw_nic_wakeup(struct ath5k_hw *ah, int flags, bool initial)
        mode = 0;
        clock = 0;
 
-       if ((ath5k_get_bus_type(ah) != ATH_AHB) || !initial) {
+       if ((ath5k_get_bus_type(ah) != ATH_AHB) || channel) {
                /* Wakeup the device */
                ret = ath5k_hw_set_power(ah, AR5K_PM_AWAKE, true, 0);
                if (ret) {
@@ -652,7 +659,7 @@ int ath5k_hw_nic_wakeup(struct ath5k_hw *ah, int flags, bool initial)
 
        /* On initialization skip PLL programming since we don't have
         * a channel / mode set yet */
-       if (initial)
+       if (!channel)
                return 0;
 
        if (ah->ah_version != AR5K_AR5210) {
@@ -668,13 +675,13 @@ int ath5k_hw_nic_wakeup(struct ath5k_hw *ah, int flags, bool initial)
                        clock = AR5K_PHY_PLL_RF5111;            /*Zero*/
                }
 
-               if (flags & CHANNEL_2GHZ) {
+               if (channel->band == IEEE80211_BAND_2GHZ) {
                        mode |= AR5K_PHY_MODE_FREQ_2GHZ;
                        clock |= AR5K_PHY_PLL_44MHZ;
 
-                       if (flags & CHANNEL_CCK) {
+                       if (channel->hw_value == AR5K_MODE_11B) {
                                mode |= AR5K_PHY_MODE_MOD_CCK;
-                       } else if (flags & CHANNEL_OFDM) {
+                       } else {
                                /* XXX Dynamic OFDM/CCK is not supported by the
                                 * AR5211 so we set MOD_OFDM for plain g (no
                                 * CCK headers) operation. We need to test
@@ -686,27 +693,16 @@ int ath5k_hw_nic_wakeup(struct ath5k_hw *ah, int flags, bool initial)
                                        mode |= AR5K_PHY_MODE_MOD_OFDM;
                                else
                                        mode |= AR5K_PHY_MODE_MOD_DYN;
-                       } else {
-                               ATH5K_ERR(ah,
-                                       "invalid radio modulation mode\n");
-                               return -EINVAL;
                        }
-               } else if (flags & CHANNEL_5GHZ) {
-                       mode |= AR5K_PHY_MODE_FREQ_5GHZ;
+               } else if (channel->band == IEEE80211_BAND_5GHZ) {
+                       mode |= (AR5K_PHY_MODE_FREQ_5GHZ |
+                                AR5K_PHY_MODE_MOD_OFDM);
 
                        /* Different PLL setting for 5413 */
                        if (ah->ah_radio == AR5K_RF5413)
                                clock = AR5K_PHY_PLL_40MHZ_5413;
                        else
                                clock |= AR5K_PHY_PLL_40MHZ;
-
-                       if (flags & CHANNEL_OFDM)
-                               mode |= AR5K_PHY_MODE_MOD_OFDM;
-                       else {
-                               ATH5K_ERR(ah,
-                                       "invalid radio modulation mode\n");
-                               return -EINVAL;
-                       }
                } else {
                        ATH5K_ERR(ah, "invalid radio frequency mode\n");
                        return -EINVAL;
@@ -822,7 +818,7 @@ static void ath5k_hw_tweak_initval_settings(struct ath5k_hw *ah,
                u32 data;
                ath5k_hw_reg_write(ah, AR5K_PHY_CCKTXCTL_WORLD,
                                AR5K_PHY_CCKTXCTL);
-               if (channel->hw_value & CHANNEL_5GHZ)
+               if (channel->band == IEEE80211_BAND_5GHZ)
                        data = 0xffb81020;
                else
                        data = 0xffb80d20;
@@ -905,7 +901,7 @@ static void ath5k_hw_commit_eeprom_settings(struct ath5k_hw *ah,
        /* Set CCK to OFDM power delta on tx power
         * adjustment register */
        if (ah->ah_phy_revision >= AR5K_SREV_PHY_5212A) {
-               if (channel->hw_value == CHANNEL_G)
+               if (channel->hw_value == AR5K_MODE_11G)
                        ath5k_hw_reg_write(ah,
                        AR5K_REG_SM((ee->ee_cck_ofdm_gain_delta * -1),
                                AR5K_PHY_TX_PWR_ADJ_CCK_GAIN_DELTA) |
@@ -1084,29 +1080,23 @@ int ath5k_hw_reset(struct ath5k_hw *ah, enum nl80211_iftype op_mode,
                ret = 0;
        }
 
-       switch (channel->hw_value & CHANNEL_MODES) {
-       case CHANNEL_A:
-               mode = AR5K_MODE_11A;
+       mode = channel->hw_value;
+       switch (mode) {
+       case AR5K_MODE_11A:
                break;
-       case CHANNEL_G:
-
+       case AR5K_MODE_11G:
                if (ah->ah_version <= AR5K_AR5211) {
                        ATH5K_ERR(ah,
                                "G mode not available on 5210/5211");
                        return -EINVAL;
                }
-
-               mode = AR5K_MODE_11G;
                break;
-       case CHANNEL_B:
-
+       case AR5K_MODE_11B:
                if (ah->ah_version < AR5K_AR5211) {
                        ATH5K_ERR(ah,
                                "B mode not available on 5210");
                        return -EINVAL;
                }
-
-               mode = AR5K_MODE_11B;
                break;
        default:
                ATH5K_ERR(ah,
@@ -1192,7 +1182,7 @@ int ath5k_hw_reset(struct ath5k_hw *ah, enum nl80211_iftype op_mode,
        }
 
        /* Wakeup the device */
-       ret = ath5k_hw_nic_wakeup(ah, channel->hw_value, false);
+       ret = ath5k_hw_nic_wakeup(ah, channel);
        if (ret)
                return ret;