ath5k: Use helper function to get eeprom mode from channel
authorBruno Randolf <br1@einfach.org>
Tue, 21 Dec 2010 08:30:43 +0000 (17:30 +0900)
committerJohn W. Linville <linville@tuxdriver.com>
Wed, 22 Dec 2010 20:43:28 +0000 (15:43 -0500)
Introduce a helper function to get the EEPROM mode from channel and remove
multiple similar switch statements. Also since it's now easy to get the EEPROM
mode from the channel, use them inside the functions which need it, instead of
passing a redundant ee_mode parameter.

Signed-off-by: Bruno Randolf <br1@einfach.org>
Acked-by: Nick Kossifidis <mickflemm@gmail.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/ath/ath5k/ath5k.h
drivers/net/wireless/ath/ath5k/eeprom.c
drivers/net/wireless/ath/ath5k/eeprom.h
drivers/net/wireless/ath/ath5k/phy.c
drivers/net/wireless/ath/ath5k/reset.c

index 5de85201765127a2bd280e1aeac9afd3a53d75ec..407e39c2b10bae1de88352360b12a792584d10ff 100644 (file)
@@ -1318,7 +1318,7 @@ void ath5k_hw_set_antenna_switch(struct ath5k_hw *ah, u8 ee_mode);
 int ath5k_hw_set_txpower_limit(struct ath5k_hw *ah, u8 txpower);
 /* Init function */
 int ath5k_hw_phy_init(struct ath5k_hw *ah, struct ieee80211_channel *channel,
-                               u8 mode, u8 ee_mode, bool fast);
+                               u8 mode, bool fast);
 
 /*
  * Functions used internaly
index 97eaa9a4415ed9f36b18111878689ae135793c7b..80e625608bac69665b29ff32915d3e8f0d13c92a 100644 (file)
@@ -1802,3 +1802,19 @@ ath5k_eeprom_detach(struct ath5k_hw *ah)
        for (mode = AR5K_EEPROM_MODE_11A; mode <= AR5K_EEPROM_MODE_11G; mode++)
                ath5k_eeprom_free_pcal_info(ah, mode);
 }
+
+int
+ath5k_eeprom_mode_from_channel(struct ieee80211_channel *channel)
+{
+       switch (channel->hw_value & CHANNEL_MODES) {
+       case CHANNEL_A:
+       case CHANNEL_XR:
+               return AR5K_EEPROM_MODE_11A;
+       case CHANNEL_G:
+               return AR5K_EEPROM_MODE_11G;
+       case CHANNEL_B:
+               return AR5K_EEPROM_MODE_11B;
+       default:
+               return -1;
+       }
+}
index 0017006be8414d5f07a83a7f08746efe969ef508..7c09e150dbdc640555bb3f7717de1e4a1182b8cc 100644 (file)
@@ -517,3 +517,5 @@ struct ath5k_eeprom_info {
        u32     ee_antenna[AR5K_EEPROM_N_MODES][AR5K_ANT_MAX];
 };
 
+int
+ath5k_eeprom_mode_from_channel(struct ieee80211_channel *channel);
index b6e96213e92477904665c2bdce933ead7ba9c48f..9306d5fda6753df363a35b6fa9ff5dea20b4a0e3 100644 (file)
@@ -1355,20 +1355,7 @@ void ath5k_hw_update_noise_floor(struct ath5k_hw *ah)
                return;
        }
 
-       switch (ah->ah_current_channel->hw_value & CHANNEL_MODES) {
-       case CHANNEL_A:
-       case CHANNEL_XR:
-               ee_mode = AR5K_EEPROM_MODE_11A;
-               break;
-       case CHANNEL_G:
-               ee_mode = AR5K_EEPROM_MODE_11G;
-               break;
-       default:
-       case CHANNEL_B:
-               ee_mode = AR5K_EEPROM_MODE_11B;
-               break;
-       }
-
+       ee_mode = ath5k_eeprom_mode_from_channel(ah->ah_current_channel);
 
        /* completed NF calibration, test threshold */
        nf = ath5k_hw_read_measured_noise_floor(ah);
@@ -1941,18 +1928,8 @@ ath5k_hw_set_antenna_mode(struct ath5k_hw *ah, u8 ant_mode)
 
        def_ant = ah->ah_def_ant;
 
-       switch (channel->hw_value & CHANNEL_MODES) {
-       case CHANNEL_A:
-       case CHANNEL_XR:
-               ee_mode = AR5K_EEPROM_MODE_11A;
-               break;
-       case CHANNEL_G:
-               ee_mode = AR5K_EEPROM_MODE_11G;
-               break;
-       case CHANNEL_B:
-               ee_mode = AR5K_EEPROM_MODE_11B;
-               break;
-       default:
+       ee_mode = ath5k_eeprom_mode_from_channel(channel);
+       if (ee_mode < 0) {
                ATH5K_ERR(ah->ah_sc,
                        "invalid channel: %d\n", channel->center_freq);
                return;
@@ -3100,11 +3077,11 @@ ath5k_setup_rate_powertable(struct ath5k_hw *ah, u16 max_pwr,
  */
 static int
 ath5k_hw_txpower(struct ath5k_hw *ah, struct ieee80211_channel *channel,
-               u8 ee_mode, u8 txpower)
+                u8 txpower)
 {
        struct ath5k_rate_pcal_info rate_info;
        struct ieee80211_channel *curr_channel = ah->ah_current_channel;
-       u8 type;
+       u8 type, ee_mode;
        int ret;
 
        if (txpower > AR5K_TUNE_MAX_TXPOWER) {
@@ -3112,6 +3089,13 @@ ath5k_hw_txpower(struct ath5k_hw *ah, struct ieee80211_channel *channel,
                return -EINVAL;
        }
 
+       ee_mode = ath5k_eeprom_mode_from_channel(channel);
+       if (ee_mode < 0) {
+               ATH5K_ERR(ah->ah_sc,
+                       "invalid channel: %d\n", channel->center_freq);
+               return -EINVAL;
+       }
+
        /* Initialize TX power table */
        switch (ah->ah_radio) {
        case AR5K_RF5110:
@@ -3208,31 +3192,10 @@ ath5k_hw_txpower(struct ath5k_hw *ah, struct ieee80211_channel *channel,
 
 int ath5k_hw_set_txpower_limit(struct ath5k_hw *ah, u8 txpower)
 {
-       /*Just a try M.F.*/
-       struct ieee80211_channel *channel = ah->ah_current_channel;
-       u8 ee_mode;
-
-       switch (channel->hw_value & CHANNEL_MODES) {
-       case CHANNEL_A:
-       case CHANNEL_XR:
-               ee_mode = AR5K_EEPROM_MODE_11A;
-               break;
-       case CHANNEL_G:
-               ee_mode = AR5K_EEPROM_MODE_11G;
-               break;
-       case CHANNEL_B:
-               ee_mode = AR5K_EEPROM_MODE_11B;
-               break;
-       default:
-               ATH5K_ERR(ah->ah_sc,
-                       "invalid channel: %d\n", channel->center_freq);
-               return -EINVAL;
-       }
-
        ATH5K_DBG(ah->ah_sc, ATH5K_DEBUG_TXPOWER,
                "changing txpower to %d\n", txpower);
 
-       return ath5k_hw_txpower(ah, channel, ee_mode, txpower);
+       return ath5k_hw_txpower(ah, ah->ah_current_channel, txpower);
 }
 
 /*************\
@@ -3240,7 +3203,7 @@ int ath5k_hw_set_txpower_limit(struct ath5k_hw *ah, u8 txpower)
 \*************/
 
 int ath5k_hw_phy_init(struct ath5k_hw *ah, struct ieee80211_channel *channel,
-                               u8 mode, u8 ee_mode, bool fast)
+                     u8 mode, bool fast)
 {
        struct ieee80211_channel *curr_channel;
        int ret, i;
@@ -3281,8 +3244,7 @@ int ath5k_hw_phy_init(struct ath5k_hw *ah, struct ieee80211_channel *channel,
         * RF buffer settings on 5211/5212+ so that we
         * properly set curve indices.
         */
-       ret = ath5k_hw_txpower(ah, channel, ee_mode,
-               ah->ah_txpower.txp_cur_pwr ?
+       ret = ath5k_hw_txpower(ah, channel, ah->ah_txpower.txp_cur_pwr ?
                        ah->ah_txpower.txp_cur_pwr / 2 : AR5K_TUNE_MAX_TXPOWER);
        if (ret)
                return ret;
index e360e73b32609491c566ed9d7c8960b7eec4ddce..84206898f77d89daa5821a9afeece34b275f3f67 100644 (file)
@@ -866,15 +866,18 @@ static void ath5k_hw_tweak_initval_settings(struct ath5k_hw *ah,
 }
 
 static void ath5k_hw_commit_eeprom_settings(struct ath5k_hw *ah,
-               struct ieee80211_channel *channel, u8 ee_mode)
+               struct ieee80211_channel *channel)
 {
        struct ath5k_eeprom_info *ee = &ah->ah_capabilities.cap_eeprom;
        s16 cck_ofdm_pwr_delta;
+       u8 ee_mode;
 
        /* TODO: Add support for AR5210 EEPROM */
        if (ah->ah_version == AR5K_AR5210)
                return;
 
+       ee_mode = ath5k_eeprom_mode_from_channel(channel);
+
        /* Adjust power delta for channel 14 */
        if (channel->center_freq == 2484)
                cck_ofdm_pwr_delta =
@@ -1020,10 +1023,9 @@ int ath5k_hw_reset(struct ath5k_hw *ah, enum nl80211_iftype op_mode,
                struct ieee80211_channel *channel, bool fast, bool skip_pcu)
 {
        u32 s_seq[10], s_led[3], tsf_up, tsf_lo;
-       u8 mode, ee_mode;
+       u8 mode;
        int i, ret;
 
-       ee_mode = 0;
        tsf_up = 0;
        tsf_lo = 0;
        mode = 0;
@@ -1070,7 +1072,6 @@ int ath5k_hw_reset(struct ath5k_hw *ah, enum nl80211_iftype op_mode,
        switch (channel->hw_value & CHANNEL_MODES) {
        case CHANNEL_A:
                mode = AR5K_MODE_11A;
-               ee_mode = AR5K_EEPROM_MODE_11A;
                break;
        case CHANNEL_G:
 
@@ -1081,7 +1082,6 @@ int ath5k_hw_reset(struct ath5k_hw *ah, enum nl80211_iftype op_mode,
                }
 
                mode = AR5K_MODE_11G;
-               ee_mode = AR5K_EEPROM_MODE_11G;
                break;
        case CHANNEL_B:
 
@@ -1092,7 +1092,6 @@ int ath5k_hw_reset(struct ath5k_hw *ah, enum nl80211_iftype op_mode,
                }
 
                mode = AR5K_MODE_11B;
-               ee_mode = AR5K_EEPROM_MODE_11B;
                break;
        case CHANNEL_XR:
                if (ah->ah_version == AR5K_AR5211) {
@@ -1101,7 +1100,6 @@ int ath5k_hw_reset(struct ath5k_hw *ah, enum nl80211_iftype op_mode,
                        return -EINVAL;
                }
                mode = AR5K_MODE_XR;
-               ee_mode = AR5K_EEPROM_MODE_11A;
                break;
        default:
                ATH5K_ERR(ah->ah_sc,
@@ -1114,8 +1112,7 @@ int ath5k_hw_reset(struct ath5k_hw *ah, enum nl80211_iftype op_mode,
         * go on. If it fails continue with a normal reset.
         */
        if (fast) {
-               ret = ath5k_hw_phy_init(ah, channel, mode,
-                                       ee_mode, true);
+               ret = ath5k_hw_phy_init(ah, channel, mode, true);
                if (ret) {
                        ATH5K_DBG(ah->ah_sc, ATH5K_DEBUG_RESET,
                                "fast chan change failed, falling back to normal reset\n");
@@ -1212,7 +1209,7 @@ int ath5k_hw_reset(struct ath5k_hw *ah, enum nl80211_iftype op_mode,
        ath5k_hw_tweak_initval_settings(ah, channel);
 
        /* Commit values from EEPROM */
-       ath5k_hw_commit_eeprom_settings(ah, channel, ee_mode);
+       ath5k_hw_commit_eeprom_settings(ah, channel);
 
 
        /*
@@ -1251,7 +1248,7 @@ int ath5k_hw_reset(struct ath5k_hw *ah, enum nl80211_iftype op_mode,
        /*
         * Initialize PHY
         */
-       ret = ath5k_hw_phy_init(ah, channel, mode, ee_mode, false);
+       ret = ath5k_hw_phy_init(ah, channel, mode, false);
        if (ret) {
                ATH5K_ERR(ah->ah_sc,
                        "failed to initialize PHY (%i) !\n", ret);