104b8e659SRyder Lee /* SPDX-License-Identifier: ISC */ 204b8e659SRyder Lee /* Copyright (C) 2019 MediaTek Inc. */ 304b8e659SRyder Lee 404b8e659SRyder Lee #ifndef __MT7615_EEPROM_H 504b8e659SRyder Lee #define __MT7615_EEPROM_H 604b8e659SRyder Lee 704b8e659SRyder Lee #include "mt7615.h" 804b8e659SRyder Lee 9ad380ad1SFelix Fietkau 10ad380ad1SFelix Fietkau #define MT7615_EEPROM_DCOC_OFFSET MT7615_EEPROM_SIZE 11ad380ad1SFelix Fietkau #define MT7615_EEPROM_DCOC_SIZE 256 12ad380ad1SFelix Fietkau #define MT7615_EEPROM_DCOC_COUNT 34 13ad380ad1SFelix Fietkau 14ad380ad1SFelix Fietkau #define MT7615_EEPROM_TXDPD_OFFSET (MT7615_EEPROM_SIZE + \ 15ad380ad1SFelix Fietkau MT7615_EEPROM_DCOC_COUNT * \ 16ad380ad1SFelix Fietkau MT7615_EEPROM_DCOC_SIZE) 17ad380ad1SFelix Fietkau #define MT7615_EEPROM_TXDPD_SIZE 216 18ad380ad1SFelix Fietkau #define MT7615_EEPROM_TXDPD_COUNT (44 + 3) 19ad380ad1SFelix Fietkau 20ad380ad1SFelix Fietkau #define MT7615_EEPROM_EXTRA_DATA (MT7615_EEPROM_TXDPD_OFFSET + \ 21ad380ad1SFelix Fietkau MT7615_EEPROM_TXDPD_COUNT * \ 22ad380ad1SFelix Fietkau MT7615_EEPROM_TXDPD_SIZE) 23ad380ad1SFelix Fietkau 2404b8e659SRyder Lee enum mt7615_eeprom_field { 2504b8e659SRyder Lee MT_EE_CHIP_ID = 0x000, 2604b8e659SRyder Lee MT_EE_VERSION = 0x002, 2704b8e659SRyder Lee MT_EE_MAC_ADDR = 0x004, 2804b8e659SRyder Lee MT_EE_NIC_CONF_0 = 0x034, 2916a2f8e2SLorenzo Bianconi MT_EE_NIC_CONF_1 = 0x036, 30c988a77fSLorenzo Bianconi MT_EE_WIFI_CONF = 0x03e, 31ad380ad1SFelix Fietkau MT_EE_CALDATA_FLASH = 0x052, 3261d36824SLorenzo Bianconi MT_EE_TX0_2G_TARGET_POWER = 0x058, 3361d36824SLorenzo Bianconi MT_EE_TX0_5G_G0_TARGET_POWER = 0x070, 34*c88bf52bSLorenzo Bianconi MT7663_EE_5G_RATE_POWER = 0x089, 3561d36824SLorenzo Bianconi MT_EE_TX1_5G_G0_TARGET_POWER = 0x098, 3689f8bc6aSFelix Fietkau MT_EE_2G_RATE_POWER = 0x0be, 3789f8bc6aSFelix Fietkau MT_EE_5G_RATE_POWER = 0x0d5, 38e0ec633dSLorenzo Bianconi MT7663_EE_TX0_2G_TARGET_POWER = 0x0e3, 3916a2f8e2SLorenzo Bianconi MT_EE_EXT_PA_2G_TARGET_POWER = 0x0f2, 4016a2f8e2SLorenzo Bianconi MT_EE_EXT_PA_5G_TARGET_POWER = 0x0f3, 4161d36824SLorenzo Bianconi MT_EE_TX2_5G_G0_TARGET_POWER = 0x142, 4261d36824SLorenzo Bianconi MT_EE_TX3_5G_G0_TARGET_POWER = 0x16a, 43eb7bd8d7SLorenzo Bianconi MT7663_EE_HW_CONF1 = 0x1b0, 44e0ec633dSLorenzo Bianconi MT7663_EE_TX0_5G_G0_TARGET_POWER = 0x245, 45e0ec633dSLorenzo Bianconi MT7663_EE_TX1_5G_G0_TARGET_POWER = 0x2b5, 4604b8e659SRyder Lee 475dff21eeSFelix Fietkau MT7615_EE_MAX = 0x3bf, 485dff21eeSFelix Fietkau MT7622_EE_MAX = 0x3db, 49c321a3d7SLorenzo Bianconi MT7663_EE_MAX = 0x400, 5004b8e659SRyder Lee }; 5104b8e659SRyder Lee 5289f8bc6aSFelix Fietkau #define MT_EE_RATE_POWER_MASK GENMASK(5, 0) 5389f8bc6aSFelix Fietkau #define MT_EE_RATE_POWER_SIGN BIT(6) 5489f8bc6aSFelix Fietkau #define MT_EE_RATE_POWER_EN BIT(7) 5589f8bc6aSFelix Fietkau 56ad380ad1SFelix Fietkau #define MT_EE_CALDATA_FLASH_TX_DPD BIT(0) 57ad380ad1SFelix Fietkau #define MT_EE_CALDATA_FLASH_RX_CAL BIT(1) 58ad380ad1SFelix Fietkau 59acf5457fSLorenzo Bianconi #define MT_EE_NIC_CONF_TX_MASK GENMASK(7, 4) 60acf5457fSLorenzo Bianconi #define MT_EE_NIC_CONF_RX_MASK GENMASK(3, 0) 61acf5457fSLorenzo Bianconi 62eb7bd8d7SLorenzo Bianconi #define MT_EE_HW_CONF1_TX_MASK GENMASK(2, 0) 63eb7bd8d7SLorenzo Bianconi 6416a2f8e2SLorenzo Bianconi #define MT_EE_NIC_CONF_TSSI_2G BIT(5) 6516a2f8e2SLorenzo Bianconi #define MT_EE_NIC_CONF_TSSI_5G BIT(6) 6616a2f8e2SLorenzo Bianconi 67c988a77fSLorenzo Bianconi #define MT_EE_NIC_WIFI_CONF_BAND_SEL GENMASK(5, 4) 68c988a77fSLorenzo Bianconi enum mt7615_eeprom_band { 69c988a77fSLorenzo Bianconi MT_EE_DUAL_BAND, 70c988a77fSLorenzo Bianconi MT_EE_5GHZ, 71c988a77fSLorenzo Bianconi MT_EE_2GHZ, 72c988a77fSLorenzo Bianconi MT_EE_DBDC, 73c988a77fSLorenzo Bianconi }; 74c988a77fSLorenzo Bianconi 7561d36824SLorenzo Bianconi enum mt7615_channel_group { 7661d36824SLorenzo Bianconi MT_CH_5G_JAPAN, 7761d36824SLorenzo Bianconi MT_CH_5G_UNII_1, 7861d36824SLorenzo Bianconi MT_CH_5G_UNII_2A, 7961d36824SLorenzo Bianconi MT_CH_5G_UNII_2B, 8061d36824SLorenzo Bianconi MT_CH_5G_UNII_2E_1, 8161d36824SLorenzo Bianconi MT_CH_5G_UNII_2E_2, 8261d36824SLorenzo Bianconi MT_CH_5G_UNII_2E_3, 8361d36824SLorenzo Bianconi MT_CH_5G_UNII_3, 8461d36824SLorenzo Bianconi __MT_CH_MAX 8561d36824SLorenzo Bianconi }; 8661d36824SLorenzo Bianconi 8761d36824SLorenzo Bianconi static inline enum mt7615_channel_group 8861d36824SLorenzo Bianconi mt7615_get_channel_group(int channel) 8961d36824SLorenzo Bianconi { 9061d36824SLorenzo Bianconi if (channel >= 184 && channel <= 196) 9161d36824SLorenzo Bianconi return MT_CH_5G_JAPAN; 9261d36824SLorenzo Bianconi if (channel <= 48) 9361d36824SLorenzo Bianconi return MT_CH_5G_UNII_1; 9461d36824SLorenzo Bianconi if (channel <= 64) 9561d36824SLorenzo Bianconi return MT_CH_5G_UNII_2A; 9661d36824SLorenzo Bianconi if (channel <= 114) 9761d36824SLorenzo Bianconi return MT_CH_5G_UNII_2E_1; 9861d36824SLorenzo Bianconi if (channel <= 144) 9961d36824SLorenzo Bianconi return MT_CH_5G_UNII_2E_2; 10061d36824SLorenzo Bianconi if (channel <= 161) 10161d36824SLorenzo Bianconi return MT_CH_5G_UNII_2E_3; 10261d36824SLorenzo Bianconi return MT_CH_5G_UNII_3; 10361d36824SLorenzo Bianconi } 10461d36824SLorenzo Bianconi 10516a2f8e2SLorenzo Bianconi static inline bool 10616a2f8e2SLorenzo Bianconi mt7615_ext_pa_enabled(struct mt7615_dev *dev, enum nl80211_band band) 10716a2f8e2SLorenzo Bianconi { 10816a2f8e2SLorenzo Bianconi u8 *eep = dev->mt76.eeprom.data; 10916a2f8e2SLorenzo Bianconi 11016a2f8e2SLorenzo Bianconi if (band == NL80211_BAND_5GHZ) 11116a2f8e2SLorenzo Bianconi return !(eep[MT_EE_NIC_CONF_1 + 1] & MT_EE_NIC_CONF_TSSI_5G); 11216a2f8e2SLorenzo Bianconi else 11316a2f8e2SLorenzo Bianconi return !(eep[MT_EE_NIC_CONF_1 + 1] & MT_EE_NIC_CONF_TSSI_2G); 11416a2f8e2SLorenzo Bianconi } 11516a2f8e2SLorenzo Bianconi 11604b8e659SRyder Lee #endif 117