Commit 22bfce0a authored by Felix Fietkau's avatar Felix Fietkau Committed by sanglipeng
Browse files

wifi: mt76: mt76x02: fix MT76x0 external LNA gain handling

stable inclusion
from stable-v5.10.198
commit 666cdc43df2475807ae3aaa85e40f87c76ee2629
category: bugfix
bugzilla: https://gitee.com/openeuler/kernel/issues/I987V5

Reference: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?id=666cdc43df2475807ae3aaa85e40f87c76ee2629



--------------------------------

[ Upstream commit 684e45e1 ]

On MT76x0, LNA gain should be applied for both external and internal LNA.
On MT76x2, LNA gain should be treated as 0 for external LNA.
Move the LNA type based logic to mt76x2 in order to fix mt76x0.

Fixes: 2daa6758 ("mt76x0: unify lna_gain parsing")
Reported-by: default avatarShiji Yang <yangshiji66@outlook.com>
Signed-off-by: default avatarFelix Fietkau <nbd@nbd.name>
Signed-off-by: default avatarKalle Valo <kvalo@kernel.org>
Link: https://lore.kernel.org/r/20230919194747.31647-1-nbd@nbd.name


Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
Signed-off-by: default avatarsanglipeng <sanglipeng1@jd.com>
parent 9e27eb66
Loading
Loading
Loading
Loading
+0 −7
Original line number Diff line number Diff line
@@ -131,15 +131,8 @@ u8 mt76x02_get_lna_gain(struct mt76x02_dev *dev,
			s8 *lna_2g, s8 *lna_5g,
			struct ieee80211_channel *chan)
{
	u16 val;
	u8 lna;

	val = mt76x02_eeprom_get(dev, MT_EE_NIC_CONF_1);
	if (val & MT_EE_NIC_CONF_1_LNA_EXT_2G)
		*lna_2g = 0;
	if (val & MT_EE_NIC_CONF_1_LNA_EXT_5G)
		memset(lna_5g, 0, sizeof(s8) * 3);

	if (chan->band == NL80211_BAND_2GHZ)
		lna = *lna_2g;
	else if (chan->hw_value <= 64)
+11 −2
Original line number Diff line number Diff line
@@ -256,7 +256,8 @@ void mt76x2_read_rx_gain(struct mt76x02_dev *dev)
	struct ieee80211_channel *chan = dev->mphy.chandef.chan;
	int channel = chan->hw_value;
	s8 lna_5g[3], lna_2g;
	u8 lna;
	bool use_lna;
	u8 lna = 0;
	u16 val;

	if (chan->band == NL80211_BAND_2GHZ)
@@ -275,7 +276,15 @@ void mt76x2_read_rx_gain(struct mt76x02_dev *dev)
	dev->cal.rx.mcu_gain |= (lna_5g[1] & 0xff) << 16;
	dev->cal.rx.mcu_gain |= (lna_5g[2] & 0xff) << 24;

	val = mt76x02_eeprom_get(dev, MT_EE_NIC_CONF_1);
	if (chan->band == NL80211_BAND_2GHZ)
		use_lna = !(val & MT_EE_NIC_CONF_1_LNA_EXT_2G);
	else
		use_lna = !(val & MT_EE_NIC_CONF_1_LNA_EXT_5G);

	if (use_lna)
		lna = mt76x02_get_lna_gain(dev, &lna_2g, lna_5g, chan);

	dev->cal.rx.lna_gain = mt76x02_sign_extend(lna, 8);
}
EXPORT_SYMBOL_GPL(mt76x2_read_rx_gain);