Lines Matching +full:eeprom +full:- +full:data

1 // SPDX-License-Identifier: ISC
8 #include "eeprom.h"
12 u8 *eeprom = dev->mt76.eeprom.data; in mt7996_check_eeprom() local
13 u16 val = get_unaligned_le16(eeprom); in mt7996_check_eeprom()
17 return is_mt7996(&dev->mt76) ? 0 : -EINVAL; in mt7996_check_eeprom()
19 return is_mt7992(&dev->mt76) ? 0 : -EINVAL; in mt7996_check_eeprom()
21 return -EINVAL; in mt7996_check_eeprom()
27 switch (mt76_chip(&dev->mt76)) { in mt7996_eeprom_name()
29 switch (dev->var.type) { in mt7996_eeprom_name()
31 if (dev->var.fem == MT7996_FEM_INT) in mt7996_eeprom_name()
36 if (dev->var.fem == MT7996_FEM_INT) in mt7996_eeprom_name()
38 if (dev->var.fem == MT7996_FEM_MIX) in mt7996_eeprom_name()
44 switch (dev->var.type) { in mt7996_eeprom_name()
46 if (dev->var.fem == MT7996_FEM_INT) in mt7996_eeprom_name()
51 if (dev->var.fem == MT7996_FEM_INT) in mt7996_eeprom_name()
59 mt7996_eeprom_parse_stream(const u8 *eeprom, u8 band_idx, u8 *path, in mt7996_eeprom_parse_stream() argument
65 eeprom[MT_EE_WIFI_CONF + 2]); in mt7996_eeprom_parse_stream()
67 eeprom[MT_EE_WIFI_CONF + 3]); in mt7996_eeprom_parse_stream()
69 eeprom[MT_EE_WIFI_CONF + 5]); in mt7996_eeprom_parse_stream()
73 eeprom[MT_EE_WIFI_CONF + 2]); in mt7996_eeprom_parse_stream()
75 eeprom[MT_EE_WIFI_CONF + 4]); in mt7996_eeprom_parse_stream()
77 eeprom[MT_EE_WIFI_CONF + 5]); in mt7996_eeprom_parse_stream()
81 eeprom[MT_EE_WIFI_CONF + 1]); in mt7996_eeprom_parse_stream()
83 eeprom[MT_EE_WIFI_CONF + 3]); in mt7996_eeprom_parse_stream()
85 eeprom[MT_EE_WIFI_CONF + 4]); in mt7996_eeprom_parse_stream()
94 u8 *eeprom = dev->mt76.eeprom.data, fem[2]; in mt7996_eeprom_variant_valid() local
98 fem[i] = u8_get_bits(eeprom[MT_EE_WIFI_CONF + 6 + i], in mt7996_eeprom_variant_valid()
101 if (dev->var.fem == MT7996_FEM_EXT && in mt7996_eeprom_variant_valid()
104 else if (dev->var.fem == MT7996_FEM_INT && in mt7996_eeprom_variant_valid()
107 else if (dev->var.fem == MT7996_FEM_MIX && in mt7996_eeprom_variant_valid()
115 if (!dev->mt76.phys[i]) in mt7996_eeprom_variant_valid()
118 mt7996_eeprom_parse_stream(eeprom, i, &path, &rx_path, &nss); in mt7996_eeprom_variant_valid()
131 u8 *eeprom = dev->mt76.eeprom.data; in mt7996_eeprom_check_or_use_default() local
135 ret = request_firmware(&fw, mt7996_eeprom_name(dev), dev->mt76.dev); in mt7996_eeprom_check_or_use_default()
139 if (!fw || !fw->data) { in mt7996_eeprom_check_or_use_default()
140 dev_err(dev->mt76.dev, "Invalid default bin\n"); in mt7996_eeprom_check_or_use_default()
141 ret = -EINVAL; in mt7996_eeprom_check_or_use_default()
145 if (!use_default && mt7996_eeprom_variant_valid(dev, fw->data)) in mt7996_eeprom_check_or_use_default()
148 dev_warn(dev->mt76.dev, "eeprom load fail, use default bin\n"); in mt7996_eeprom_check_or_use_default()
149 memcpy(eeprom, fw->data, MT7996_EEPROM_SIZE); in mt7996_eeprom_check_or_use_default()
150 dev->flash_mode = true; in mt7996_eeprom_check_or_use_default()
163 ret = mt76_eeprom_init(&dev->mt76, MT7996_EEPROM_SIZE); in mt7996_eeprom_load()
168 dev->flash_mode = true; in mt7996_eeprom_load()
172 if (!dev->flash_mode) { in mt7996_eeprom_load()
178 memset(dev->mt76.eeprom.data, 0, MT7996_EEPROM_SIZE); in mt7996_eeprom_load()
189 /* check if eeprom data from fw is valid */ in mt7996_eeprom_load()
196 /* read eeprom data from fw */ in mt7996_eeprom_load()
200 if (i == block_num - 1) in mt7996_eeprom_load()
204 if (ret && ret != -EINVAL) { in mt7996_eeprom_load()
221 struct mt7996_dev *dev = phy->dev; in mt7996_eeprom_parse_efuse_hw_cap()
230 u8 band_offs = phy->mt76->band_idx * 3; in mt7996_eeprom_parse_efuse_hw_cap()
232 dev->has_eht = !(cap & MODE_HE_ONLY); in mt7996_eeprom_parse_efuse_hw_cap()
233 dev->wtbl_size_group = u32_get_bits(cap, WTBL_SIZE_GROUP); in mt7996_eeprom_parse_efuse_hw_cap()
239 if (dev->wtbl_size_group < 2 || dev->wtbl_size_group > 4) in mt7996_eeprom_parse_efuse_hw_cap()
240 dev->wtbl_size_group = is_mt7996(&dev->mt76) ? 4 : 2; in mt7996_eeprom_parse_efuse_hw_cap()
247 u8 *eeprom = phy->dev->mt76.eeprom.data; in mt7996_eeprom_parse_band_config() local
248 u32 val = eeprom[MT_EE_WIFI_CONF]; in mt7996_eeprom_parse_band_config()
251 switch (phy->mt76->band_idx) { in mt7996_eeprom_parse_band_config()
256 val = eeprom[MT_EE_WIFI_CONF + 1]; in mt7996_eeprom_parse_band_config()
266 phy->mt76->cap.has_2ghz = true; in mt7996_eeprom_parse_band_config()
269 phy->mt76->cap.has_5ghz = true; in mt7996_eeprom_parse_band_config()
272 phy->mt76->cap.has_6ghz = true; in mt7996_eeprom_parse_band_config()
275 ret = -EINVAL; in mt7996_eeprom_parse_band_config()
284 u8 path, rx_path, nss, band_idx = phy->mt76->band_idx; in mt7996_eeprom_parse_hw_cap()
285 u8 *eeprom = dev->mt76.eeprom.data; in mt7996_eeprom_parse_hw_cap() local
286 struct mt76_phy *mphy = phy->mt76; in mt7996_eeprom_parse_hw_cap()
290 mt7996_eeprom_parse_stream(eeprom, band_idx, &path, &rx_path, &nss); in mt7996_eeprom_parse_hw_cap()
304 phy->has_aux_rx = true; in mt7996_eeprom_parse_hw_cap()
306 mphy->antenna_mask = BIT(nss) - 1; in mt7996_eeprom_parse_hw_cap()
307 mphy->chainmask = (BIT(path) - 1) << dev->chainshift[band_idx]; in mt7996_eeprom_parse_hw_cap()
308 phy->orig_chainmask = mphy->chainmask; in mt7996_eeprom_parse_hw_cap()
309 dev->chainmask |= mphy->chainmask; in mt7996_eeprom_parse_hw_cap()
311 dev->chainshift[band_idx + 1] = dev->chainshift[band_idx] + in mt7996_eeprom_parse_hw_cap()
312 hweight16(mphy->chainmask); in mt7996_eeprom_parse_hw_cap()
325 ret = mt7996_eeprom_parse_hw_cap(dev, &dev->phy); in mt7996_eeprom_init()
329 memcpy(dev->mphy.macaddr, dev->mt76.eeprom.data + MT_EE_MAC_ADDR, ETH_ALEN); in mt7996_eeprom_init()
330 mt76_eeprom_override(&dev->mphy); in mt7996_eeprom_init()
338 u8 *eeprom = dev->mt76.eeprom.data; in mt7996_eeprom_get_target_power() local
341 if (chan->band == NL80211_BAND_5GHZ) in mt7996_eeprom_get_target_power()
342 target_power = eeprom[MT_EE_TX0_POWER_5G + in mt7996_eeprom_get_target_power()
343 mt7996_get_channel_group_5g(chan->hw_value)]; in mt7996_eeprom_get_target_power()
344 else if (chan->band == NL80211_BAND_6GHZ) in mt7996_eeprom_get_target_power()
345 target_power = eeprom[MT_EE_TX0_POWER_6G + in mt7996_eeprom_get_target_power()
346 mt7996_get_channel_group_6g(chan->hw_value)]; in mt7996_eeprom_get_target_power()
348 target_power = eeprom[MT_EE_TX0_POWER_2G]; in mt7996_eeprom_get_target_power()
355 u8 *eeprom = dev->mt76.eeprom.data; in mt7996_eeprom_get_power_delta() local
360 val = eeprom[MT_EE_RATE_DELTA_5G]; in mt7996_eeprom_get_power_delta()
362 val = eeprom[MT_EE_RATE_DELTA_6G]; in mt7996_eeprom_get_power_delta()
364 val = eeprom[MT_EE_RATE_DELTA_2G]; in mt7996_eeprom_get_power_delta()
371 return val & MT_EE_RATE_DELTA_SIGN ? delta : -delta; in mt7996_eeprom_get_power_delta()