Commit 26c7fc43 authored by Bruno Randolf's avatar Bruno Randolf Committed by John W. Linville
Browse files

ath5k: Simplify powertable recalculation



Let ath5k_hw_txpower() decide if it can re-use the powertable or if it has to
be recalculated instead of passing a 'fast' flag from the outside.

Signed-off-by: default avatarBruno Randolf <br1@einfach.org>
Acked-by: default avatarNick Kossifidis <mickflemm@gmail.com>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent 6dab55bf
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -1113,6 +1113,7 @@ struct ath5k_hw {
		s16		txp_cck_ofdm_gainf_delta;
		/* Value in dB units */
		s16		txp_cck_ofdm_pwr_delta;
		bool		txp_setup;
	} ah_txpower;

	struct {
+13 −22
Original line number Diff line number Diff line
@@ -3004,6 +3004,8 @@ ath5k_setup_channel_powertable(struct ath5k_hw *ah,
		return -EINVAL;
	}

	ah->ah_txpower.txp_setup = true;

	return 0;
}

@@ -3105,9 +3107,10 @@ 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, bool fast)
		u8 ee_mode, u8 txpower)
{
	struct ath5k_rate_pcal_info rate_info;
	struct ieee80211_channel *curr_channel = ah->ah_current_channel;
	u8 type;
	int ret;

@@ -3138,10 +3141,13 @@ ath5k_hw_txpower(struct ath5k_hw *ah, struct ieee80211_channel *channel,
		return -EINVAL;
	}

	/* If fast is set it means we are on the same channel/mode
	 * so there is no need to recalculate the powertable, we 'll
	 * just use the cached one */
	if (!fast) {
	/*
	 * If we don't change channel/mode skip tx powertable calculation
	 * and use the cached one.
	 */
	if (!ah->ah_txpower.txp_setup ||
	    (channel->hw_value != curr_channel->hw_value) ||
	    (channel->center_freq != curr_channel->center_freq)) {
		/* Reset TX power values */
		memset(&ah->ah_txpower, 0, sizeof(ah->ah_txpower));
		ah->ah_txpower.txp_tpc = AR5K_TUNE_TPC_TXPOWER;
@@ -3159,8 +3165,6 @@ ath5k_hw_txpower(struct ath5k_hw *ah, struct ieee80211_channel *channel,
	else
		ath5k_setup_pcdac_table(ah);



	/* Limit max power if we have a CTL available */
	ath5k_get_max_ctl_power(ah, channel);

@@ -3238,7 +3242,7 @@ int ath5k_hw_set_txpower_limit(struct ath5k_hw *ah, u8 txpower)
	ATH5K_DBG(ah->ah_sc, ATH5K_DEBUG_TXPOWER,
		"changing txpower to %d\n", txpower);

	return ath5k_hw_txpower(ah, channel, ee_mode, txpower, true);
	return ath5k_hw_txpower(ah, channel, ee_mode, txpower);
}

/*************\
@@ -3251,7 +3255,6 @@ int ath5k_hw_phy_init(struct ath5k_hw *ah, struct ieee80211_channel *channel,
	struct ieee80211_channel *curr_channel;
	int ret, i;
	u32 phy_tst1;
	bool fast_txp;
	ret = 0;

	/*
@@ -3281,17 +3284,6 @@ int ath5k_hw_phy_init(struct ath5k_hw *ah, struct ieee80211_channel *channel,
			return -EIO;
	}

	/*
	 * If we don't change channel/mode skip
	 * tx powertable calculation and use the
	 * cached one.
	 */
	if ((channel->hw_value == curr_channel->hw_value) &&
	(channel->center_freq == curr_channel->center_freq))
		fast_txp = true;
	else
		fast_txp = false;

	/*
	 * Set TX power
	 *
@@ -3300,8 +3292,7 @@ int ath5k_hw_phy_init(struct ath5k_hw *ah, struct ieee80211_channel *channel,
	 * properly set curve indices.
	 */
	ret = ath5k_hw_txpower(ah, channel, ee_mode,
				ah->ah_txpower.txp_max_pwr / 2,
				fast_txp);
				ah->ah_txpower.txp_max_pwr / 2);
	if (ret)
		return ret;