2010/12/21 Bruno Randolf <b...@einfach.org>:
> 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 <b...@einfach.org>
> ---
>  drivers/net/wireless/ath/ath5k/ath5k.h  |    2 -
>  drivers/net/wireless/ath/ath5k/eeprom.c |   16 +++++++
>  drivers/net/wireless/ath/ath5k/eeprom.h |    2 +
>  drivers/net/wireless/ath/ath5k/phy.c    |   68 
> +++++++------------------------
>  drivers/net/wireless/ath/ath5k/reset.c  |   19 ++++-----
>  5 files changed, 42 insertions(+), 65 deletions(-)
>
> diff --git a/drivers/net/wireless/ath/ath5k/ath5k.h 
> b/drivers/net/wireless/ath/ath5k/ath5k.h
> index 5de8520..407e39c 100644
> --- a/drivers/net/wireless/ath/ath5k/ath5k.h
> +++ b/drivers/net/wireless/ath/ath5k/ath5k.h
> @@ -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
> diff --git a/drivers/net/wireless/ath/ath5k/eeprom.c 
> b/drivers/net/wireless/ath/ath5k/eeprom.c
> index 97eaa9a..80e6256 100644
> --- a/drivers/net/wireless/ath/ath5k/eeprom.c
> +++ b/drivers/net/wireless/ath/ath5k/eeprom.c
> @@ -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;
> +       }
> +}
> diff --git a/drivers/net/wireless/ath/ath5k/eeprom.h 
> b/drivers/net/wireless/ath/ath5k/eeprom.h
> index 0017006..7c09e15 100644
> --- a/drivers/net/wireless/ath/ath5k/eeprom.h
> +++ b/drivers/net/wireless/ath/ath5k/eeprom.h
> @@ -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);
> diff --git a/drivers/net/wireless/ath/ath5k/phy.c 
> b/drivers/net/wireless/ath/ath5k/phy.c
> index b6e9621..9306d5f 100644
> --- a/drivers/net/wireless/ath/ath5k/phy.c
> +++ b/drivers/net/wireless/ath/ath5k/phy.c
> @@ -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;
> diff --git a/drivers/net/wireless/ath/ath5k/reset.c 
> b/drivers/net/wireless/ath/ath5k/reset.c
> index 4b8b987..3c962f7 100644
> --- a/drivers/net/wireless/ath/ath5k/reset.c
> +++ b/drivers/net/wireless/ath/ath5k/reset.c
> @@ -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);
>
>

Acked-by: Nick Kossifidis <mickfl...@gmail.com>


-- 
GPG ID: 0xD21DB2DB
As you read this post global entropy rises. Have Fun ;-)
Nick
_______________________________________________
ath5k-devel mailing list
ath5k-devel@lists.ath5k.org
https://lists.ath5k.org/mailman/listinfo/ath5k-devel

Reply via email to