Skip to content

Commit c3e9bea

Browse files
im-0danpawlik
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: 98686cd21624 ("wifi: mt76: mt7996: add driver for MediaTek Wi-Fi 7 (802.11be) devices") Closes: openwrt/openwrt#17489 Link: openwrt#954 (cherry picked from commit aaf90b2)
1 parent 7c2b835 commit c3e9bea

File tree

1 file changed

+32
-0
lines changed

1 file changed

+32
-0
lines changed

mt7996/eeprom.c

+32
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,36 @@ mt7996_eeprom_parse_stream(const u8 *eeprom, u8 band_idx, u8 *path,
8787
}
8888
}
8989

90+
static void
91+
mt7996_eeprom_fixup_tx_power(struct mt7996_dev *dev, const u8 *def)
92+
{
93+
u8 *eeprom = dev->mt76.eeprom.data;
94+
int i;
95+
bool zeros_detected = false;
96+
97+
if (!eeprom[MT_EE_TX0_POWER_2G]) {
98+
eeprom[MT_EE_TX0_POWER_2G] = def[MT_EE_TX0_POWER_2G];
99+
zeros_detected = true;
100+
}
101+
102+
for (i = MT_EE_TX0_POWER_5G; i < MT_EE_TX0_POWER_5G + 5; ++i) {
103+
if (!eeprom[i]) {
104+
eeprom[i] = def[i];
105+
zeros_detected = true;
106+
}
107+
}
108+
109+
for (i = MT_EE_TX0_POWER_6G; i < MT_EE_TX0_POWER_6G + 8; ++i) {
110+
if (!eeprom[i]) {
111+
eeprom[i] = def[i];
112+
zeros_detected = true;
113+
}
114+
}
115+
116+
if (zeros_detected)
117+
dev_warn(dev->mt76.dev, "eeprom tx_power zeros detected, using defaults\n");
118+
}
119+
90120
static bool mt7996_eeprom_variant_valid(struct mt7996_dev *dev, const u8 *def)
91121
{
92122
#define FEM_INT 0
@@ -142,6 +172,8 @@ mt7996_eeprom_check_or_use_default(struct mt7996_dev *dev, bool use_default)
142172
goto out;
143173
}
144174

175+
mt7996_eeprom_fixup_tx_power(dev, fw->data);
176+
145177
if (!use_default && mt7996_eeprom_variant_valid(dev, fw->data))
146178
goto out;
147179

0 commit comments

Comments
 (0)