162306a36Sopenharmony_ci/* SPDX-License-Identifier: ISC */ 262306a36Sopenharmony_ci/* Copyright (C) 2020 MediaTek Inc. */ 362306a36Sopenharmony_ci 462306a36Sopenharmony_ci#ifndef __MT7915_EEPROM_H 562306a36Sopenharmony_ci#define __MT7915_EEPROM_H 662306a36Sopenharmony_ci 762306a36Sopenharmony_ci#include "mt7915.h" 862306a36Sopenharmony_ci 962306a36Sopenharmony_cistruct cal_data { 1062306a36Sopenharmony_ci u8 count; 1162306a36Sopenharmony_ci u16 offset[60]; 1262306a36Sopenharmony_ci}; 1362306a36Sopenharmony_ci 1462306a36Sopenharmony_cienum mt7915_eeprom_field { 1562306a36Sopenharmony_ci MT_EE_CHIP_ID = 0x000, 1662306a36Sopenharmony_ci MT_EE_VERSION = 0x002, 1762306a36Sopenharmony_ci MT_EE_MAC_ADDR = 0x004, 1862306a36Sopenharmony_ci MT_EE_MAC_ADDR2 = 0x00a, 1962306a36Sopenharmony_ci MT_EE_DDIE_FT_VERSION = 0x050, 2062306a36Sopenharmony_ci MT_EE_DO_PRE_CAL = 0x062, 2162306a36Sopenharmony_ci MT_EE_WIFI_CONF = 0x190, 2262306a36Sopenharmony_ci MT_EE_RATE_DELTA_2G = 0x252, 2362306a36Sopenharmony_ci MT_EE_RATE_DELTA_5G = 0x29d, 2462306a36Sopenharmony_ci MT_EE_TX0_POWER_2G = 0x2fc, 2562306a36Sopenharmony_ci MT_EE_TX0_POWER_5G = 0x34b, 2662306a36Sopenharmony_ci MT_EE_RATE_DELTA_2G_V2 = 0x7d3, 2762306a36Sopenharmony_ci MT_EE_RATE_DELTA_5G_V2 = 0x81e, 2862306a36Sopenharmony_ci MT_EE_RATE_DELTA_6G_V2 = 0x884, /* 6g fields only appear in eeprom v2 */ 2962306a36Sopenharmony_ci MT_EE_TX0_POWER_2G_V2 = 0x441, 3062306a36Sopenharmony_ci MT_EE_TX0_POWER_5G_V2 = 0x445, 3162306a36Sopenharmony_ci MT_EE_TX0_POWER_6G_V2 = 0x465, 3262306a36Sopenharmony_ci MT_EE_ADIE_FT_VERSION = 0x9a0, 3362306a36Sopenharmony_ci 3462306a36Sopenharmony_ci __MT_EE_MAX = 0xe00, 3562306a36Sopenharmony_ci __MT_EE_MAX_V2 = 0x1000, 3662306a36Sopenharmony_ci /* 0xe10 ~ 0x5780 used to save group cal data */ 3762306a36Sopenharmony_ci MT_EE_PRECAL = 0xe10, 3862306a36Sopenharmony_ci MT_EE_PRECAL_V2 = 0x1010 3962306a36Sopenharmony_ci}; 4062306a36Sopenharmony_ci 4162306a36Sopenharmony_ci#define MT_EE_WIFI_CAL_GROUP BIT(0) 4262306a36Sopenharmony_ci#define MT_EE_WIFI_CAL_DPD GENMASK(2, 1) 4362306a36Sopenharmony_ci#define MT_EE_CAL_UNIT 1024 4462306a36Sopenharmony_ci#define MT_EE_CAL_GROUP_SIZE (49 * MT_EE_CAL_UNIT + 16) 4562306a36Sopenharmony_ci#define MT_EE_CAL_DPD_SIZE (54 * MT_EE_CAL_UNIT) 4662306a36Sopenharmony_ci 4762306a36Sopenharmony_ci#define MT_EE_WIFI_CONF0_TX_PATH GENMASK(2, 0) 4862306a36Sopenharmony_ci#define MT_EE_WIFI_CONF0_BAND_SEL GENMASK(7, 6) 4962306a36Sopenharmony_ci#define MT_EE_WIFI_CONF1_BAND_SEL GENMASK(7, 6) 5062306a36Sopenharmony_ci#define MT_EE_WIFI_CONF_STREAM_NUM GENMASK(7, 5) 5162306a36Sopenharmony_ci#define MT_EE_WIFI_CONF3_TX_PATH_B0 GENMASK(1, 0) 5262306a36Sopenharmony_ci#define MT_EE_WIFI_CONF3_TX_PATH_B1 GENMASK(5, 4) 5362306a36Sopenharmony_ci#define MT_EE_WIFI_CONF7_TSSI0_2G BIT(0) 5462306a36Sopenharmony_ci#define MT_EE_WIFI_CONF7_TSSI0_5G BIT(2) 5562306a36Sopenharmony_ci#define MT_EE_WIFI_CONF7_TSSI1_5G BIT(4) 5662306a36Sopenharmony_ci 5762306a36Sopenharmony_ci#define MT_EE_RATE_DELTA_MASK GENMASK(5, 0) 5862306a36Sopenharmony_ci#define MT_EE_RATE_DELTA_SIGN BIT(6) 5962306a36Sopenharmony_ci#define MT_EE_RATE_DELTA_EN BIT(7) 6062306a36Sopenharmony_ci 6162306a36Sopenharmony_cienum mt7915_adie_sku { 6262306a36Sopenharmony_ci MT7976_ONE_ADIE_DBDC = 0x7, 6362306a36Sopenharmony_ci MT7975_ONE_ADIE = 0x8, 6462306a36Sopenharmony_ci MT7976_ONE_ADIE = 0xa, 6562306a36Sopenharmony_ci MT7975_DUAL_ADIE = 0xd, 6662306a36Sopenharmony_ci MT7976_DUAL_ADIE = 0xf, 6762306a36Sopenharmony_ci}; 6862306a36Sopenharmony_ci 6962306a36Sopenharmony_cienum mt7915_eeprom_band { 7062306a36Sopenharmony_ci MT_EE_BAND_SEL_DEFAULT, 7162306a36Sopenharmony_ci MT_EE_BAND_SEL_5GHZ, 7262306a36Sopenharmony_ci MT_EE_BAND_SEL_2GHZ, 7362306a36Sopenharmony_ci MT_EE_BAND_SEL_DUAL, 7462306a36Sopenharmony_ci}; 7562306a36Sopenharmony_ci 7662306a36Sopenharmony_cienum { 7762306a36Sopenharmony_ci MT_EE_V2_BAND_SEL_2GHZ, 7862306a36Sopenharmony_ci MT_EE_V2_BAND_SEL_5GHZ, 7962306a36Sopenharmony_ci MT_EE_V2_BAND_SEL_6GHZ, 8062306a36Sopenharmony_ci MT_EE_V2_BAND_SEL_5GHZ_6GHZ, 8162306a36Sopenharmony_ci}; 8262306a36Sopenharmony_ci 8362306a36Sopenharmony_cienum mt7915_sku_rate_group { 8462306a36Sopenharmony_ci SKU_CCK, 8562306a36Sopenharmony_ci SKU_OFDM, 8662306a36Sopenharmony_ci SKU_HT_BW20, 8762306a36Sopenharmony_ci SKU_HT_BW40, 8862306a36Sopenharmony_ci SKU_VHT_BW20, 8962306a36Sopenharmony_ci SKU_VHT_BW40, 9062306a36Sopenharmony_ci SKU_VHT_BW80, 9162306a36Sopenharmony_ci SKU_VHT_BW160, 9262306a36Sopenharmony_ci SKU_HE_RU26, 9362306a36Sopenharmony_ci SKU_HE_RU52, 9462306a36Sopenharmony_ci SKU_HE_RU106, 9562306a36Sopenharmony_ci SKU_HE_RU242, 9662306a36Sopenharmony_ci SKU_HE_RU484, 9762306a36Sopenharmony_ci SKU_HE_RU996, 9862306a36Sopenharmony_ci SKU_HE_RU2x996, 9962306a36Sopenharmony_ci MAX_SKU_RATE_GROUP_NUM, 10062306a36Sopenharmony_ci}; 10162306a36Sopenharmony_ci 10262306a36Sopenharmony_cistatic inline int 10362306a36Sopenharmony_cimt7915_get_channel_group_5g(int channel, bool is_7976) 10462306a36Sopenharmony_ci{ 10562306a36Sopenharmony_ci if (is_7976) { 10662306a36Sopenharmony_ci if (channel <= 64) 10762306a36Sopenharmony_ci return 0; 10862306a36Sopenharmony_ci if (channel <= 96) 10962306a36Sopenharmony_ci return 1; 11062306a36Sopenharmony_ci if (channel <= 128) 11162306a36Sopenharmony_ci return 2; 11262306a36Sopenharmony_ci if (channel <= 144) 11362306a36Sopenharmony_ci return 3; 11462306a36Sopenharmony_ci return 4; 11562306a36Sopenharmony_ci } 11662306a36Sopenharmony_ci 11762306a36Sopenharmony_ci if (channel >= 184 && channel <= 196) 11862306a36Sopenharmony_ci return 0; 11962306a36Sopenharmony_ci if (channel <= 48) 12062306a36Sopenharmony_ci return 1; 12162306a36Sopenharmony_ci if (channel <= 64) 12262306a36Sopenharmony_ci return 2; 12362306a36Sopenharmony_ci if (channel <= 96) 12462306a36Sopenharmony_ci return 3; 12562306a36Sopenharmony_ci if (channel <= 112) 12662306a36Sopenharmony_ci return 4; 12762306a36Sopenharmony_ci if (channel <= 128) 12862306a36Sopenharmony_ci return 5; 12962306a36Sopenharmony_ci if (channel <= 144) 13062306a36Sopenharmony_ci return 6; 13162306a36Sopenharmony_ci return 7; 13262306a36Sopenharmony_ci} 13362306a36Sopenharmony_ci 13462306a36Sopenharmony_cistatic inline int 13562306a36Sopenharmony_cimt7915_get_channel_group_6g(int channel) 13662306a36Sopenharmony_ci{ 13762306a36Sopenharmony_ci if (channel <= 29) 13862306a36Sopenharmony_ci return 0; 13962306a36Sopenharmony_ci 14062306a36Sopenharmony_ci return DIV_ROUND_UP(channel - 29, 32); 14162306a36Sopenharmony_ci} 14262306a36Sopenharmony_ci 14362306a36Sopenharmony_cistatic inline bool 14462306a36Sopenharmony_cimt7915_tssi_enabled(struct mt7915_dev *dev, enum nl80211_band band) 14562306a36Sopenharmony_ci{ 14662306a36Sopenharmony_ci u8 *eep = dev->mt76.eeprom.data; 14762306a36Sopenharmony_ci u8 offs = is_mt7981(&dev->mt76) ? 8 : 7; 14862306a36Sopenharmony_ci u8 val = eep[MT_EE_WIFI_CONF + offs]; 14962306a36Sopenharmony_ci 15062306a36Sopenharmony_ci if (band == NL80211_BAND_2GHZ) 15162306a36Sopenharmony_ci return val & MT_EE_WIFI_CONF7_TSSI0_2G; 15262306a36Sopenharmony_ci 15362306a36Sopenharmony_ci if (dev->dbdc_support) 15462306a36Sopenharmony_ci return val & MT_EE_WIFI_CONF7_TSSI1_5G; 15562306a36Sopenharmony_ci else 15662306a36Sopenharmony_ci return val & MT_EE_WIFI_CONF7_TSSI0_5G; 15762306a36Sopenharmony_ci} 15862306a36Sopenharmony_ci 15962306a36Sopenharmony_ciextern const u8 mt7915_sku_group_len[MAX_SKU_RATE_GROUP_NUM]; 16062306a36Sopenharmony_ci 16162306a36Sopenharmony_ci#endif 162