Commit 60e2434c authored by Felix Fietkau's avatar Felix Fietkau Committed by Kalle Valo
Browse files

mt76x2: add channel argument to eeprom tx power functions



Preparation for exposing maximum power to mac80211

Signed-off-by: default avatarFelix Fietkau <nbd@nbd.name>
Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
parent ed6b4370
Loading
Loading
Loading
Loading
+18 −12
Original line number Original line Diff line number Diff line
@@ -425,12 +425,13 @@ mt76x2_rate_power_val(u8 val)
	return mt76x2_sign_extend_optional(val, 7);
	return mt76x2_sign_extend_optional(val, 7);
}
}


void mt76x2_get_rate_power(struct mt76x2_dev *dev, struct mt76_rate_power *t)
void mt76x2_get_rate_power(struct mt76x2_dev *dev, struct mt76_rate_power *t,
			   struct ieee80211_channel *chan)
{
{
	bool is_5ghz;
	bool is_5ghz;
	u16 val;
	u16 val;


	is_5ghz = dev->mt76.chandef.chan->band == NL80211_BAND_5GHZ;
	is_5ghz = chan->band == NL80211_BAND_5GHZ;


	memset(t, 0, sizeof(*t));
	memset(t, 0, sizeof(*t));


@@ -484,9 +485,9 @@ void mt76x2_get_rate_power(struct mt76x2_dev *dev, struct mt76_rate_power *t)


static void
static void
mt76x2_get_power_info_2g(struct mt76x2_dev *dev, struct mt76x2_tx_power_info *t,
mt76x2_get_power_info_2g(struct mt76x2_dev *dev, struct mt76x2_tx_power_info *t,
		       int chain, int offset)
		         struct ieee80211_channel *chan, int chain, int offset)
{
{
	int channel = dev->mt76.chandef.chan->hw_value;
	int channel = chan->hw_value;
	int delta_idx;
	int delta_idx;
	u8 data[6];
	u8 data[6];
	u16 val;
	u16 val;
@@ -511,9 +512,9 @@ mt76x2_get_power_info_2g(struct mt76x2_dev *dev, struct mt76x2_tx_power_info *t,


static void
static void
mt76x2_get_power_info_5g(struct mt76x2_dev *dev, struct mt76x2_tx_power_info *t,
mt76x2_get_power_info_5g(struct mt76x2_dev *dev, struct mt76x2_tx_power_info *t,
		       int chain, int offset)
		         struct ieee80211_channel *chan, int chain, int offset)
{
{
	int channel = dev->mt76.chandef.chan->hw_value;
	int channel = chan->hw_value;
	enum mt76x2_cal_channel_group group;
	enum mt76x2_cal_channel_group group;
	int delta_idx;
	int delta_idx;
	u16 val;
	u16 val;
@@ -559,7 +560,8 @@ mt76x2_get_power_info_5g(struct mt76x2_dev *dev, struct mt76x2_tx_power_info *t,
}
}


void mt76x2_get_power_info(struct mt76x2_dev *dev,
void mt76x2_get_power_info(struct mt76x2_dev *dev,
			   struct mt76x2_tx_power_info *t)
			   struct mt76x2_tx_power_info *t,
			   struct ieee80211_channel *chan)
{
{
	u16 bw40, bw80;
	u16 bw40, bw80;


@@ -568,13 +570,17 @@ void mt76x2_get_power_info(struct mt76x2_dev *dev,
	bw40 = mt76x2_eeprom_get(dev, MT_EE_TX_POWER_DELTA_BW40);
	bw40 = mt76x2_eeprom_get(dev, MT_EE_TX_POWER_DELTA_BW40);
	bw80 = mt76x2_eeprom_get(dev, MT_EE_TX_POWER_DELTA_BW80);
	bw80 = mt76x2_eeprom_get(dev, MT_EE_TX_POWER_DELTA_BW80);


	if (dev->mt76.chandef.chan->band == NL80211_BAND_5GHZ) {
	if (chan->band == NL80211_BAND_5GHZ) {
		bw40 >>= 8;
		bw40 >>= 8;
		mt76x2_get_power_info_5g(dev, t, 0, MT_EE_TX_POWER_0_START_5G);
		mt76x2_get_power_info_5g(dev, t, chan, 0,
		mt76x2_get_power_info_5g(dev, t, 1, MT_EE_TX_POWER_1_START_5G);
					 MT_EE_TX_POWER_0_START_5G);
		mt76x2_get_power_info_5g(dev, t, chan, 1,
					 MT_EE_TX_POWER_1_START_5G);
	} else {
	} else {
		mt76x2_get_power_info_2g(dev, t, 0, MT_EE_TX_POWER_0_START_2G);
		mt76x2_get_power_info_2g(dev, t, chan, 0,
		mt76x2_get_power_info_2g(dev, t, 1, MT_EE_TX_POWER_1_START_2G);
					 MT_EE_TX_POWER_0_START_2G);
		mt76x2_get_power_info_2g(dev, t, chan, 1,
					 MT_EE_TX_POWER_1_START_2G);
	}
	}


	if (mt76x2_tssi_enabled(dev) || !field_valid(t->target_power))
	if (mt76x2_tssi_enabled(dev) || !field_valid(t->target_power))
+4 −2
Original line number Original line Diff line number Diff line
@@ -146,9 +146,11 @@ mt76x2_eeprom_get(struct mt76x2_dev *dev, enum mt76x2_eeprom_field field)
	return get_unaligned_le16(dev->mt76.eeprom.data + field);
	return get_unaligned_le16(dev->mt76.eeprom.data + field);
}
}


void mt76x2_get_rate_power(struct mt76x2_dev *dev, struct mt76_rate_power *t);
void mt76x2_get_rate_power(struct mt76x2_dev *dev, struct mt76_rate_power *t,
			   struct ieee80211_channel *chan);
void mt76x2_get_power_info(struct mt76x2_dev *dev,
void mt76x2_get_power_info(struct mt76x2_dev *dev,
			   struct mt76x2_tx_power_info *t);
			   struct mt76x2_tx_power_info *t,
			   struct ieee80211_channel *chan);
int mt76x2_get_temp_comp(struct mt76x2_dev *dev, struct mt76x2_temp_comp *t);
int mt76x2_get_temp_comp(struct mt76x2_dev *dev, struct mt76x2_temp_comp *t);
bool mt76x2_ext_pa_enabled(struct mt76x2_dev *dev, enum nl80211_band band);
bool mt76x2_ext_pa_enabled(struct mt76x2_dev *dev, enum nl80211_band band);
void mt76x2_read_rx_gain(struct mt76x2_dev *dev);
void mt76x2_read_rx_gain(struct mt76x2_dev *dev);
+4 −3
Original line number Original line Diff line number Diff line
@@ -117,11 +117,12 @@ mt76x2_get_max_power(struct mt76_rate_power *r)
void mt76x2_phy_set_txpower(struct mt76x2_dev *dev)
void mt76x2_phy_set_txpower(struct mt76x2_dev *dev)
{
{
	enum nl80211_chan_width width = dev->mt76.chandef.width;
	enum nl80211_chan_width width = dev->mt76.chandef.width;
	struct ieee80211_channel *chan = dev->mt76.chandef.chan;
	struct mt76x2_tx_power_info txp;
	struct mt76x2_tx_power_info txp;
	int txp_0, txp_1, delta = 0;
	int txp_0, txp_1, delta = 0;
	struct mt76_rate_power t = {};
	struct mt76_rate_power t = {};


	mt76x2_get_power_info(dev, &txp);
	mt76x2_get_power_info(dev, &txp, chan);


	if (width == NL80211_CHAN_WIDTH_40)
	if (width == NL80211_CHAN_WIDTH_40)
		delta = txp.delta_bw40;
		delta = txp.delta_bw40;
@@ -131,7 +132,7 @@ void mt76x2_phy_set_txpower(struct mt76x2_dev *dev)
	if (txp.target_power > dev->txpower_conf)
	if (txp.target_power > dev->txpower_conf)
		delta -= txp.target_power - dev->txpower_conf;
		delta -= txp.target_power - dev->txpower_conf;


	mt76x2_get_rate_power(dev, &t);
	mt76x2_get_rate_power(dev, &t, chan);
	mt76x2_add_rate_power_offset(&t, txp.chain[0].target_power +
	mt76x2_add_rate_power_offset(&t, txp.chain[0].target_power +
				   txp.chain[0].delta);
				   txp.chain[0].delta);
	mt76x2_limit_rate_power(&t, dev->txpower_conf);
	mt76x2_limit_rate_power(&t, dev->txpower_conf);
@@ -675,7 +676,7 @@ mt76x2_phy_tssi_compensate(struct mt76x2_dev *dev)
			return;
			return;


		dev->cal.tssi_comp_pending = false;
		dev->cal.tssi_comp_pending = false;
		mt76x2_get_power_info(dev, &txp);
		mt76x2_get_power_info(dev, &txp, chan);


		if (mt76x2_ext_pa_enabled(dev, chan->band))
		if (mt76x2_ext_pa_enabled(dev, chan->band))
			t.pa_mode = 1;
			t.pa_mode = 1;