Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1562580e authored by Sujith Manoharan's avatar Sujith Manoharan Committed by John W. Linville
Browse files

ath9k_hw: Calculate the correct training power for PAPRD



Assign the training power for PAPRD based on the chip.

Signed-off-by: default avatarSujith Manoharan <c_manoha@qca.qualcomm.com>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent 0f21ee8d
Loading
Loading
Loading
Loading
+28 −13
Original line number Diff line number Diff line
@@ -5072,6 +5072,33 @@ static inline u8 mcsidx_to_tgtpwridx(unsigned int mcs_idx, u8 base_pwridx)
		return base_pwridx + 4 * (mcs_idx / 8) + mod_idx - 2;
}

static void ar9003_paprd_set_txpower(struct ath_hw *ah,
				     struct ath9k_channel *chan,
				     u8 *targetPowerValT2)
{
	int i;

	if (!ar9003_is_paprd_enabled(ah))
		return;

	if (IS_CHAN_HT40(chan))
		i = ALL_TARGET_HT40_7;
	else
		i = ALL_TARGET_HT20_7;

	if (IS_CHAN_2GHZ(chan)) {
		if (!AR_SREV_9330(ah) && !AR_SREV_9340(ah) &&
		    !AR_SREV_9462(ah) && !AR_SREV_9565(ah)) {
			if (IS_CHAN_HT40(chan))
				i = ALL_TARGET_HT40_0_8_16;
			else
				i = ALL_TARGET_HT20_0_8_16;
		}
	}

	ah->paprd_target_power = targetPowerValT2[i];
}

static void ath9k_hw_ar9300_set_txpower(struct ath_hw *ah,
					struct ath9k_channel *chan, u16 cfgCtl,
					u8 twiceAntennaReduction,
@@ -5166,19 +5193,7 @@ static void ath9k_hw_ar9300_set_txpower(struct ath_hw *ah,
	/* Write target power array to registers */
	ar9003_hw_tx_power_regwrite(ah, targetPowerValT2);
	ar9003_hw_calibration_apply(ah, chan->channel);

	if (IS_CHAN_2GHZ(chan)) {
		if (IS_CHAN_HT40(chan))
			i = ALL_TARGET_HT40_0_8_16;
		else
			i = ALL_TARGET_HT20_0_8_16;
	} else {
		if (IS_CHAN_HT40(chan))
			i = ALL_TARGET_HT40_7;
		else
			i = ALL_TARGET_HT20_7;
	}
	ah->paprd_target_power = targetPowerValT2[i];
	ar9003_paprd_set_txpower(ah, chan, targetPowerValT2);
}

static u16 ath9k_hw_ar9300_get_spur_channel(struct ath_hw *ah,
+15 −7
Original line number Diff line number Diff line
@@ -74,6 +74,13 @@ static int ar9003_get_training_power_2g(struct ath_hw *ah)
	unsigned int power, scale, delta;

	scale = ar9003_get_paprd_scale_factor(ah, chan);

	if (AR_SREV_9330(ah) || AR_SREV_9340(ah) ||
	    AR_SREV_9462(ah) || AR_SREV_9565(ah)) {
		power = ah->paprd_target_power + 2;
	} else if (AR_SREV_9485(ah)) {
		power = 25;
	} else {
		power = REG_READ_FIELD(ah, AR_PHY_POWERTX_RATE5,
				       AR_PHY_POWERTX_RATE5_POWERTXHT20_0);

@@ -83,6 +90,7 @@ static int ar9003_get_training_power_2g(struct ath_hw *ah)

		if (delta < 4)
			power -= 4 - delta;
	}

	return power;
}