Skip to content

Commit 81076ff

Browse files
im-0frank-w
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 <[email protected]> Cc: [email protected] Fixes: 98686cd ("wifi: mt76: mt7996: add driver for MediaTek Wi-Fi 7 (802.11be) devices") Closes: openwrt/openwrt#17489 Link: openwrt/mt76#954
1 parent 75dc272 commit 81076ff

File tree

1 file changed

+32
-0
lines changed
  • drivers/net/wireless/mediatek/mt76/mt7996

1 file changed

+32
-0
lines changed

drivers/net/wireless/mediatek/mt76/mt7996/eeprom.c

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

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

181+
mt7996_eeprom_fixup_tx_power(dev, fw->data);
182+
151183
if (!use_default && mt7996_eeprom_variant_valid(dev, fw->data))
152184
goto out;
153185

0 commit comments

Comments
 (0)