162306a36Sopenharmony_ci/* SPDX-License-Identifier: ISC */ 262306a36Sopenharmony_ci/* Copyright (C) 2019 MediaTek Inc. */ 362306a36Sopenharmony_ci 462306a36Sopenharmony_ci#ifndef __MT7615_EEPROM_H 562306a36Sopenharmony_ci#define __MT7615_EEPROM_H 662306a36Sopenharmony_ci 762306a36Sopenharmony_ci#include "mt7615.h" 862306a36Sopenharmony_ci 962306a36Sopenharmony_ci 1062306a36Sopenharmony_ci#define MT7615_EEPROM_DCOC_OFFSET MT7615_EEPROM_SIZE 1162306a36Sopenharmony_ci#define MT7615_EEPROM_DCOC_SIZE 256 1262306a36Sopenharmony_ci#define MT7615_EEPROM_DCOC_COUNT 34 1362306a36Sopenharmony_ci 1462306a36Sopenharmony_ci#define MT7615_EEPROM_TXDPD_OFFSET (MT7615_EEPROM_SIZE + \ 1562306a36Sopenharmony_ci MT7615_EEPROM_DCOC_COUNT * \ 1662306a36Sopenharmony_ci MT7615_EEPROM_DCOC_SIZE) 1762306a36Sopenharmony_ci#define MT7615_EEPROM_TXDPD_SIZE 216 1862306a36Sopenharmony_ci#define MT7615_EEPROM_TXDPD_COUNT (44 + 3) 1962306a36Sopenharmony_ci 2062306a36Sopenharmony_ci#define MT7615_EEPROM_FULL_SIZE (MT7615_EEPROM_TXDPD_OFFSET + \ 2162306a36Sopenharmony_ci MT7615_EEPROM_TXDPD_COUNT * \ 2262306a36Sopenharmony_ci MT7615_EEPROM_TXDPD_SIZE) 2362306a36Sopenharmony_ci 2462306a36Sopenharmony_cienum mt7615_eeprom_field { 2562306a36Sopenharmony_ci MT_EE_CHIP_ID = 0x000, 2662306a36Sopenharmony_ci MT_EE_VERSION = 0x002, 2762306a36Sopenharmony_ci MT_EE_MAC_ADDR = 0x004, 2862306a36Sopenharmony_ci MT_EE_NIC_CONF_0 = 0x034, 2962306a36Sopenharmony_ci MT_EE_NIC_CONF_1 = 0x036, 3062306a36Sopenharmony_ci MT_EE_WIFI_CONF = 0x03e, 3162306a36Sopenharmony_ci MT_EE_CALDATA_FLASH = 0x052, 3262306a36Sopenharmony_ci MT_EE_TX0_2G_TARGET_POWER = 0x058, 3362306a36Sopenharmony_ci MT_EE_TX0_5G_G0_TARGET_POWER = 0x070, 3462306a36Sopenharmony_ci MT7663_EE_5G_RATE_POWER = 0x089, 3562306a36Sopenharmony_ci MT_EE_TX1_5G_G0_TARGET_POWER = 0x098, 3662306a36Sopenharmony_ci MT_EE_2G_RATE_POWER = 0x0be, 3762306a36Sopenharmony_ci MT_EE_5G_RATE_POWER = 0x0d5, 3862306a36Sopenharmony_ci MT7663_EE_TX0_2G_TARGET_POWER = 0x0e3, 3962306a36Sopenharmony_ci MT_EE_EXT_PA_2G_TARGET_POWER = 0x0f2, 4062306a36Sopenharmony_ci MT_EE_EXT_PA_5G_TARGET_POWER = 0x0f3, 4162306a36Sopenharmony_ci MT_EE_TX2_5G_G0_TARGET_POWER = 0x142, 4262306a36Sopenharmony_ci MT_EE_TX3_5G_G0_TARGET_POWER = 0x16a, 4362306a36Sopenharmony_ci MT7663_EE_HW_CONF1 = 0x1b0, 4462306a36Sopenharmony_ci MT7663_EE_TX0_5G_G0_TARGET_POWER = 0x245, 4562306a36Sopenharmony_ci MT7663_EE_TX1_5G_G0_TARGET_POWER = 0x2b5, 4662306a36Sopenharmony_ci 4762306a36Sopenharmony_ci MT7615_EE_MAX = 0x3bf, 4862306a36Sopenharmony_ci MT7622_EE_MAX = 0x3db, 4962306a36Sopenharmony_ci MT7663_EE_MAX = 0x600, 5062306a36Sopenharmony_ci}; 5162306a36Sopenharmony_ci 5262306a36Sopenharmony_ci#define MT_EE_RATE_POWER_MASK GENMASK(5, 0) 5362306a36Sopenharmony_ci#define MT_EE_RATE_POWER_SIGN BIT(6) 5462306a36Sopenharmony_ci#define MT_EE_RATE_POWER_EN BIT(7) 5562306a36Sopenharmony_ci 5662306a36Sopenharmony_ci#define MT_EE_CALDATA_FLASH_TX_DPD BIT(0) 5762306a36Sopenharmony_ci#define MT_EE_CALDATA_FLASH_RX_CAL BIT(1) 5862306a36Sopenharmony_ci 5962306a36Sopenharmony_ci#define MT_EE_NIC_CONF_TX_MASK GENMASK(7, 4) 6062306a36Sopenharmony_ci#define MT_EE_NIC_CONF_RX_MASK GENMASK(3, 0) 6162306a36Sopenharmony_ci 6262306a36Sopenharmony_ci#define MT_EE_HW_CONF1_TX_MASK GENMASK(2, 0) 6362306a36Sopenharmony_ci 6462306a36Sopenharmony_ci#define MT_EE_NIC_CONF_TSSI_2G BIT(5) 6562306a36Sopenharmony_ci#define MT_EE_NIC_CONF_TSSI_5G BIT(6) 6662306a36Sopenharmony_ci 6762306a36Sopenharmony_ci#define MT_EE_NIC_WIFI_CONF_BAND_SEL GENMASK(5, 4) 6862306a36Sopenharmony_cienum mt7615_eeprom_band { 6962306a36Sopenharmony_ci MT_EE_DUAL_BAND, 7062306a36Sopenharmony_ci MT_EE_5GHZ, 7162306a36Sopenharmony_ci MT_EE_2GHZ, 7262306a36Sopenharmony_ci MT_EE_DBDC, 7362306a36Sopenharmony_ci}; 7462306a36Sopenharmony_ci 7562306a36Sopenharmony_cienum mt7615_channel_group { 7662306a36Sopenharmony_ci MT_CH_5G_JAPAN, 7762306a36Sopenharmony_ci MT_CH_5G_UNII_1, 7862306a36Sopenharmony_ci MT_CH_5G_UNII_2A, 7962306a36Sopenharmony_ci MT_CH_5G_UNII_2B, 8062306a36Sopenharmony_ci MT_CH_5G_UNII_2E_1, 8162306a36Sopenharmony_ci MT_CH_5G_UNII_2E_2, 8262306a36Sopenharmony_ci MT_CH_5G_UNII_2E_3, 8362306a36Sopenharmony_ci MT_CH_5G_UNII_3, 8462306a36Sopenharmony_ci __MT_CH_MAX 8562306a36Sopenharmony_ci}; 8662306a36Sopenharmony_ci 8762306a36Sopenharmony_cistatic inline enum mt7615_channel_group 8862306a36Sopenharmony_cimt7615_get_channel_group(int channel) 8962306a36Sopenharmony_ci{ 9062306a36Sopenharmony_ci if (channel >= 184 && channel <= 196) 9162306a36Sopenharmony_ci return MT_CH_5G_JAPAN; 9262306a36Sopenharmony_ci if (channel <= 48) 9362306a36Sopenharmony_ci return MT_CH_5G_UNII_1; 9462306a36Sopenharmony_ci if (channel <= 64) 9562306a36Sopenharmony_ci return MT_CH_5G_UNII_2A; 9662306a36Sopenharmony_ci if (channel <= 114) 9762306a36Sopenharmony_ci return MT_CH_5G_UNII_2E_1; 9862306a36Sopenharmony_ci if (channel <= 144) 9962306a36Sopenharmony_ci return MT_CH_5G_UNII_2E_2; 10062306a36Sopenharmony_ci if (channel <= 161) 10162306a36Sopenharmony_ci return MT_CH_5G_UNII_2E_3; 10262306a36Sopenharmony_ci return MT_CH_5G_UNII_3; 10362306a36Sopenharmony_ci} 10462306a36Sopenharmony_ci 10562306a36Sopenharmony_cistatic inline bool 10662306a36Sopenharmony_cimt7615_ext_pa_enabled(struct mt7615_dev *dev, enum nl80211_band band) 10762306a36Sopenharmony_ci{ 10862306a36Sopenharmony_ci u8 *eep = dev->mt76.eeprom.data; 10962306a36Sopenharmony_ci 11062306a36Sopenharmony_ci if (band == NL80211_BAND_5GHZ) 11162306a36Sopenharmony_ci return !(eep[MT_EE_NIC_CONF_1 + 1] & MT_EE_NIC_CONF_TSSI_5G); 11262306a36Sopenharmony_ci else 11362306a36Sopenharmony_ci return !(eep[MT_EE_NIC_CONF_1 + 1] & MT_EE_NIC_CONF_TSSI_2G); 11462306a36Sopenharmony_ci} 11562306a36Sopenharmony_ci 11662306a36Sopenharmony_ci#endif 117