Lines Matching +full:eeprom +full:- +full:data
1 // SPDX-License-Identifier: ISC
7 #include "eeprom.h"
15 struct mt76_dev *mdev = &dev->mt76; in mt7915_eeprom_load_precal()
16 u8 *eeprom = mdev->eeprom.data; in mt7915_eeprom_load_precal() local
17 u32 offs = is_mt7915(&dev->mt76) ? MT_EE_DO_PRE_CAL : MT_EE_DO_PRE_CAL_V2; in mt7915_eeprom_load_precal()
18 u32 size, val = eeprom[offs]; in mt7915_eeprom_load_precal()
21 if (!dev->flash_mode || !val) in mt7915_eeprom_load_precal()
26 dev->cal = devm_kzalloc(mdev->dev, size, GFP_KERNEL); in mt7915_eeprom_load_precal()
27 if (!dev->cal) in mt7915_eeprom_load_precal()
28 return -ENOMEM; in mt7915_eeprom_load_precal()
30 offs = is_mt7915(&dev->mt76) ? MT_EE_PRECAL : MT_EE_PRECAL_V2; in mt7915_eeprom_load_precal()
32 ret = mt76_get_of_data_from_mtd(mdev, dev->cal, offs, size); in mt7915_eeprom_load_precal()
36 ret = mt76_get_of_data_from_nvmem(mdev, dev->cal, "precal", size); in mt7915_eeprom_load_precal()
40 dev_warn(mdev->dev, "missing precal data, size=%d\n", size); in mt7915_eeprom_load_precal()
41 devm_kfree(mdev->dev, dev->cal); in mt7915_eeprom_load_precal()
42 dev->cal = NULL; in mt7915_eeprom_load_precal()
49 u8 *eeprom = dev->mt76.eeprom.data; in mt7915_check_eeprom() local
50 u16 val = get_unaligned_le16(eeprom); in mt7915_check_eeprom()
52 #define CHECK_EEPROM_ERR(match) (match ? 0 : -EINVAL) in mt7915_check_eeprom()
55 return CHECK_EEPROM_ERR(is_mt7915(&dev->mt76)); in mt7915_check_eeprom()
57 return CHECK_EEPROM_ERR(is_mt7916(&dev->mt76)); in mt7915_check_eeprom()
59 return CHECK_EEPROM_ERR(is_mt7981(&dev->mt76)); in mt7915_check_eeprom()
61 return CHECK_EEPROM_ERR(is_mt7986(&dev->mt76)); in mt7915_check_eeprom()
63 return -EINVAL; in mt7915_check_eeprom()
69 switch (mt76_chip(&dev->mt76)) { in mt7915_eeprom_name()
71 return dev->dbdc_support ? in mt7915_eeprom_name()
100 u8 *eeprom = dev->mt76.eeprom.data; in mt7915_eeprom_load_default() local
104 ret = request_firmware(&fw, mt7915_eeprom_name(dev), dev->mt76.dev); in mt7915_eeprom_load_default()
108 if (!fw || !fw->data) { in mt7915_eeprom_load_default()
109 dev_err(dev->mt76.dev, "Invalid default bin\n"); in mt7915_eeprom_load_default()
110 ret = -EINVAL; in mt7915_eeprom_load_default()
114 memcpy(eeprom, fw->data, mt7915_eeprom_size(dev)); in mt7915_eeprom_load_default()
115 dev->flash_mode = true; in mt7915_eeprom_load_default()
128 ret = mt76_eeprom_init(&dev->mt76, eeprom_size); in mt7915_eeprom_load()
133 dev->flash_mode = true; in mt7915_eeprom_load()
145 return -EINVAL; in mt7915_eeprom_load()
147 /* read eeprom data from efuse */ in mt7915_eeprom_load()
161 struct mt7915_dev *dev = phy->dev; in mt7915_eeprom_parse_band_config()
162 u8 *eeprom = dev->mt76.eeprom.data; in mt7915_eeprom_parse_band_config() local
163 u8 band = phy->mt76->band_idx; in mt7915_eeprom_parse_band_config()
166 val = eeprom[MT_EE_WIFI_CONF + band]; in mt7915_eeprom_parse_band_config()
169 if (!is_mt7915(&dev->mt76)) { in mt7915_eeprom_parse_band_config()
172 phy->mt76->cap.has_5ghz = true; in mt7915_eeprom_parse_band_config()
175 phy->mt76->cap.has_6ghz = true; in mt7915_eeprom_parse_band_config()
179 phy->mt76->cap.has_6ghz = true; in mt7915_eeprom_parse_band_config()
180 u8p_replace_bits(&eeprom[MT_EE_WIFI_CONF + band], in mt7915_eeprom_parse_band_config()
184 phy->mt76->cap.has_5ghz = true; in mt7915_eeprom_parse_band_config()
185 u8p_replace_bits(&eeprom[MT_EE_WIFI_CONF + band], in mt7915_eeprom_parse_band_config()
190 dev->flash_mode = true; in mt7915_eeprom_parse_band_config()
194 phy->mt76->cap.has_2ghz = true; in mt7915_eeprom_parse_band_config()
197 } else if (val == MT_EE_BAND_SEL_DEFAULT && dev->dbdc_support) { in mt7915_eeprom_parse_band_config()
203 phy->mt76->cap.has_5ghz = true; in mt7915_eeprom_parse_band_config()
206 phy->mt76->cap.has_2ghz = true; in mt7915_eeprom_parse_band_config()
209 phy->mt76->cap.has_2ghz = true; in mt7915_eeprom_parse_band_config()
210 phy->mt76->cap.has_5ghz = true; in mt7915_eeprom_parse_band_config()
218 u8 path, nss, nss_max = 4, *eeprom = dev->mt76.eeprom.data; in mt7915_eeprom_parse_hw_cap() local
219 struct mt76_phy *mphy = phy->mt76; in mt7915_eeprom_parse_hw_cap()
220 u8 band = phy->mt76->band_idx; in mt7915_eeprom_parse_hw_cap()
224 /* read tx/rx path from eeprom */ in mt7915_eeprom_parse_hw_cap()
225 if (is_mt7915(&dev->mt76)) { in mt7915_eeprom_parse_hw_cap()
227 eeprom[MT_EE_WIFI_CONF]); in mt7915_eeprom_parse_hw_cap()
230 eeprom[MT_EE_WIFI_CONF + band]); in mt7915_eeprom_parse_hw_cap()
238 if (dev->dbdc_support) { in mt7915_eeprom_parse_hw_cap()
239 if (is_mt7915(&dev->mt76)) { in mt7915_eeprom_parse_hw_cap()
242 eeprom[MT_EE_WIFI_CONF + 3]); in mt7915_eeprom_parse_hw_cap()
245 eeprom[MT_EE_WIFI_CONF + 3]); in mt7915_eeprom_parse_hw_cap()
248 eeprom[MT_EE_WIFI_CONF + 2 + band]); in mt7915_eeprom_parse_hw_cap()
251 if (!is_mt798x(&dev->mt76)) in mt7915_eeprom_parse_hw_cap()
259 mphy->chainmask = BIT(path) - 1; in mt7915_eeprom_parse_hw_cap()
261 mphy->chainmask <<= dev->chainshift; in mt7915_eeprom_parse_hw_cap()
262 mphy->antenna_mask = BIT(nss) - 1; in mt7915_eeprom_parse_hw_cap()
263 dev->chainmask |= mphy->chainmask; in mt7915_eeprom_parse_hw_cap()
264 dev->chainshift = hweight8(dev->mphy.chainmask); in mt7915_eeprom_parse_hw_cap()
273 if (ret != -EINVAL) in mt7915_eeprom_init()
276 dev_warn(dev->mt76.dev, "eeprom load fail, use default bin\n"); in mt7915_eeprom_init()
283 mt7915_eeprom_parse_hw_cap(dev, &dev->phy); in mt7915_eeprom_init()
284 memcpy(dev->mphy.macaddr, dev->mt76.eeprom.data + MT_EE_MAC_ADDR, in mt7915_eeprom_init()
287 mt76_eeprom_override(&dev->mphy); in mt7915_eeprom_init()
296 u8 *eeprom = dev->mt76.eeprom.data; in mt7915_eeprom_get_target_power() local
301 return -EINVAL; in mt7915_eeprom_get_target_power()
303 tssi_on = mt7915_tssi_enabled(dev, chan->band); in mt7915_eeprom_get_target_power()
304 is_7976 = mt7915_check_adie(dev, false) || is_mt7916(&dev->mt76); in mt7915_eeprom_get_target_power()
306 if (chan->band == NL80211_BAND_2GHZ) { in mt7915_eeprom_get_target_power()
309 target_power = eeprom[index]; in mt7915_eeprom_get_target_power()
312 target_power = eeprom[index]; in mt7915_eeprom_get_target_power()
315 target_power += eeprom[index + 1]; in mt7915_eeprom_get_target_power()
317 } else if (chan->band == NL80211_BAND_5GHZ) { in mt7915_eeprom_get_target_power()
318 int group = mt7915_get_channel_group_5g(chan->hw_value, is_7976); in mt7915_eeprom_get_target_power()
322 target_power = eeprom[index + group]; in mt7915_eeprom_get_target_power()
325 target_power = eeprom[index + group]; in mt7915_eeprom_get_target_power()
328 target_power += eeprom[index + 8]; in mt7915_eeprom_get_target_power()
331 int group = mt7915_get_channel_group_6g(chan->hw_value); in mt7915_eeprom_get_target_power()
334 target_power = is_7976 ? eeprom[index + group] : 0; in mt7915_eeprom_get_target_power()
342 u8 *eeprom = dev->mt76.eeprom.data; in mt7915_eeprom_get_power_delta() local
345 bool is_7976 = mt7915_check_adie(dev, false) || is_mt7916(&dev->mt76); in mt7915_eeprom_get_power_delta()
354 val = eeprom[offs]; in mt7915_eeprom_get_power_delta()
361 return val & MT_EE_RATE_DELTA_SIGN ? delta : -delta; in mt7915_eeprom_get_power_delta()