Skip to content

Commit 9fc162d

Browse files
im-0ptpt52
authored andcommitted
wifi: mt76: mt7996: Use tx_power from default fw if EEPROM contains 0s
Some Banana Pi BPI-R4-NIC-BE14 WiFi modules are sold with zeros instead of usable tx_power values in EEPROM for 2.4 GHz and 5 GHz bands. This patch replaces tx_power zeros with default values from firmware files while keeping the rest of the EEPROM data intact (including valid 6 GHz tx_power table). Signed-off-by: Ivan Mironov <mironov.ivan@gmail.com> Cc: stable@vger.kernel.org Fixes: 98686cd21624 ("wifi: mt76: mt7996: add driver for MediaTek Wi-Fi 7 (802.11be) devices") Closes: openwrt/openwrt#17489 Link: openwrt#954
1 parent 9f9d1a3 commit 9fc162d

1 file changed

Lines changed: 32 additions & 0 deletions

File tree

mt7996/eeprom.c

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,36 @@ mt7996_eeprom_parse_stream(const u8 *eeprom, u8 band_idx, u8 *path,
9595
}
9696
}
9797

98+
static void
99+
mt7996_eeprom_fixup_tx_power(struct mt7996_dev *dev, const u8 *def)
100+
{
101+
u8 *eeprom = dev->mt76.eeprom.data;
102+
int i;
103+
bool zeros_detected = false;
104+
105+
if (!eeprom[MT_EE_TX0_POWER_2G]) {
106+
eeprom[MT_EE_TX0_POWER_2G] = def[MT_EE_TX0_POWER_2G];
107+
zeros_detected = true;
108+
}
109+
110+
for (i = MT_EE_TX0_POWER_5G; i < MT_EE_TX0_POWER_5G + 5; ++i) {
111+
if (!eeprom[i]) {
112+
eeprom[i] = def[i];
113+
zeros_detected = true;
114+
}
115+
}
116+
117+
for (i = MT_EE_TX0_POWER_6G; i < MT_EE_TX0_POWER_6G + 8; ++i) {
118+
if (!eeprom[i]) {
119+
eeprom[i] = def[i];
120+
zeros_detected = true;
121+
}
122+
}
123+
124+
if (zeros_detected)
125+
dev_warn(dev->mt76.dev, "eeprom tx_power zeros detected, using defaults\n");
126+
}
127+
98128
static bool mt7996_eeprom_variant_valid(struct mt7996_dev *dev, const u8 *def)
99129
{
100130
#define FEM_INT 0
@@ -150,6 +180,8 @@ mt7996_eeprom_check_or_use_default(struct mt7996_dev *dev, bool use_default)
150180
goto out;
151181
}
152182

183+
mt7996_eeprom_fixup_tx_power(dev, fw->data);
184+
153185
if (!use_default && mt7996_eeprom_variant_valid(dev, fw->data))
154186
goto out;
155187

0 commit comments

Comments
 (0)