2010/12/21 Bruno Randolf <br1@xxxxxxxxxxx>: > 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@xxxxxxxxxxx> > --- > Â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 <mickflemm@xxxxxxxxx> -- GPG ID: 0xD21DB2DB As you read this post global entropy rises. Have Fun ;-) Nick -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html