1*6c92544dSBjoern A. Zeeb /* SPDX-License-Identifier: ISC */ 2*6c92544dSBjoern A. Zeeb /* Copyright (C) 2019 MediaTek Inc. */ 3*6c92544dSBjoern A. Zeeb 4*6c92544dSBjoern A. Zeeb #ifndef __MT7615_EEPROM_H 5*6c92544dSBjoern A. Zeeb #define __MT7615_EEPROM_H 6*6c92544dSBjoern A. Zeeb 7*6c92544dSBjoern A. Zeeb #include "mt7615.h" 8*6c92544dSBjoern A. Zeeb 9*6c92544dSBjoern A. Zeeb 10*6c92544dSBjoern A. Zeeb #define MT7615_EEPROM_DCOC_OFFSET MT7615_EEPROM_SIZE 11*6c92544dSBjoern A. Zeeb #define MT7615_EEPROM_DCOC_SIZE 256 12*6c92544dSBjoern A. Zeeb #define MT7615_EEPROM_DCOC_COUNT 34 13*6c92544dSBjoern A. Zeeb 14*6c92544dSBjoern A. Zeeb #define MT7615_EEPROM_TXDPD_OFFSET (MT7615_EEPROM_SIZE + \ 15*6c92544dSBjoern A. Zeeb MT7615_EEPROM_DCOC_COUNT * \ 16*6c92544dSBjoern A. Zeeb MT7615_EEPROM_DCOC_SIZE) 17*6c92544dSBjoern A. Zeeb #define MT7615_EEPROM_TXDPD_SIZE 216 18*6c92544dSBjoern A. Zeeb #define MT7615_EEPROM_TXDPD_COUNT (44 + 3) 19*6c92544dSBjoern A. Zeeb 20*6c92544dSBjoern A. Zeeb #define MT7615_EEPROM_FULL_SIZE (MT7615_EEPROM_TXDPD_OFFSET + \ 21*6c92544dSBjoern A. Zeeb MT7615_EEPROM_TXDPD_COUNT * \ 22*6c92544dSBjoern A. Zeeb MT7615_EEPROM_TXDPD_SIZE) 23*6c92544dSBjoern A. Zeeb 24*6c92544dSBjoern A. Zeeb enum mt7615_eeprom_field { 25*6c92544dSBjoern A. Zeeb MT_EE_CHIP_ID = 0x000, 26*6c92544dSBjoern A. Zeeb MT_EE_VERSION = 0x002, 27*6c92544dSBjoern A. Zeeb MT_EE_MAC_ADDR = 0x004, 28*6c92544dSBjoern A. Zeeb MT_EE_NIC_CONF_0 = 0x034, 29*6c92544dSBjoern A. Zeeb MT_EE_NIC_CONF_1 = 0x036, 30*6c92544dSBjoern A. Zeeb MT_EE_WIFI_CONF = 0x03e, 31*6c92544dSBjoern A. Zeeb MT_EE_CALDATA_FLASH = 0x052, 32*6c92544dSBjoern A. Zeeb MT_EE_TX0_2G_TARGET_POWER = 0x058, 33*6c92544dSBjoern A. Zeeb MT_EE_TX0_5G_G0_TARGET_POWER = 0x070, 34*6c92544dSBjoern A. Zeeb MT7663_EE_5G_RATE_POWER = 0x089, 35*6c92544dSBjoern A. Zeeb MT_EE_TX1_5G_G0_TARGET_POWER = 0x098, 36*6c92544dSBjoern A. Zeeb MT_EE_2G_RATE_POWER = 0x0be, 37*6c92544dSBjoern A. Zeeb MT_EE_5G_RATE_POWER = 0x0d5, 38*6c92544dSBjoern A. Zeeb MT7663_EE_TX0_2G_TARGET_POWER = 0x0e3, 39*6c92544dSBjoern A. Zeeb MT_EE_EXT_PA_2G_TARGET_POWER = 0x0f2, 40*6c92544dSBjoern A. Zeeb MT_EE_EXT_PA_5G_TARGET_POWER = 0x0f3, 41*6c92544dSBjoern A. Zeeb MT_EE_TX2_5G_G0_TARGET_POWER = 0x142, 42*6c92544dSBjoern A. Zeeb MT_EE_TX3_5G_G0_TARGET_POWER = 0x16a, 43*6c92544dSBjoern A. Zeeb MT7663_EE_HW_CONF1 = 0x1b0, 44*6c92544dSBjoern A. Zeeb MT7663_EE_TX0_5G_G0_TARGET_POWER = 0x245, 45*6c92544dSBjoern A. Zeeb MT7663_EE_TX1_5G_G0_TARGET_POWER = 0x2b5, 46*6c92544dSBjoern A. Zeeb 47*6c92544dSBjoern A. Zeeb MT7615_EE_MAX = 0x3bf, 48*6c92544dSBjoern A. Zeeb MT7622_EE_MAX = 0x3db, 49*6c92544dSBjoern A. Zeeb MT7663_EE_MAX = 0x400, 50*6c92544dSBjoern A. Zeeb }; 51*6c92544dSBjoern A. Zeeb 52*6c92544dSBjoern A. Zeeb #define MT_EE_RATE_POWER_MASK GENMASK(5, 0) 53*6c92544dSBjoern A. Zeeb #define MT_EE_RATE_POWER_SIGN BIT(6) 54*6c92544dSBjoern A. Zeeb #define MT_EE_RATE_POWER_EN BIT(7) 55*6c92544dSBjoern A. Zeeb 56*6c92544dSBjoern A. Zeeb #define MT_EE_CALDATA_FLASH_TX_DPD BIT(0) 57*6c92544dSBjoern A. Zeeb #define MT_EE_CALDATA_FLASH_RX_CAL BIT(1) 58*6c92544dSBjoern A. Zeeb 59*6c92544dSBjoern A. Zeeb #define MT_EE_NIC_CONF_TX_MASK GENMASK(7, 4) 60*6c92544dSBjoern A. Zeeb #define MT_EE_NIC_CONF_RX_MASK GENMASK(3, 0) 61*6c92544dSBjoern A. Zeeb 62*6c92544dSBjoern A. Zeeb #define MT_EE_HW_CONF1_TX_MASK GENMASK(2, 0) 63*6c92544dSBjoern A. Zeeb 64*6c92544dSBjoern A. Zeeb #define MT_EE_NIC_CONF_TSSI_2G BIT(5) 65*6c92544dSBjoern A. Zeeb #define MT_EE_NIC_CONF_TSSI_5G BIT(6) 66*6c92544dSBjoern A. Zeeb 67*6c92544dSBjoern A. Zeeb #define MT_EE_NIC_WIFI_CONF_BAND_SEL GENMASK(5, 4) 68*6c92544dSBjoern A. Zeeb enum mt7615_eeprom_band { 69*6c92544dSBjoern A. Zeeb MT_EE_DUAL_BAND, 70*6c92544dSBjoern A. Zeeb MT_EE_5GHZ, 71*6c92544dSBjoern A. Zeeb MT_EE_2GHZ, 72*6c92544dSBjoern A. Zeeb MT_EE_DBDC, 73*6c92544dSBjoern A. Zeeb }; 74*6c92544dSBjoern A. Zeeb 75*6c92544dSBjoern A. Zeeb enum mt7615_channel_group { 76*6c92544dSBjoern A. Zeeb MT_CH_5G_JAPAN, 77*6c92544dSBjoern A. Zeeb MT_CH_5G_UNII_1, 78*6c92544dSBjoern A. Zeeb MT_CH_5G_UNII_2A, 79*6c92544dSBjoern A. Zeeb MT_CH_5G_UNII_2B, 80*6c92544dSBjoern A. Zeeb MT_CH_5G_UNII_2E_1, 81*6c92544dSBjoern A. Zeeb MT_CH_5G_UNII_2E_2, 82*6c92544dSBjoern A. Zeeb MT_CH_5G_UNII_2E_3, 83*6c92544dSBjoern A. Zeeb MT_CH_5G_UNII_3, 84*6c92544dSBjoern A. Zeeb __MT_CH_MAX 85*6c92544dSBjoern A. Zeeb }; 86*6c92544dSBjoern A. Zeeb 87*6c92544dSBjoern A. Zeeb static inline enum mt7615_channel_group 88*6c92544dSBjoern A. Zeeb mt7615_get_channel_group(int channel) 89*6c92544dSBjoern A. Zeeb { 90*6c92544dSBjoern A. Zeeb if (channel >= 184 && channel <= 196) 91*6c92544dSBjoern A. Zeeb return MT_CH_5G_JAPAN; 92*6c92544dSBjoern A. Zeeb if (channel <= 48) 93*6c92544dSBjoern A. Zeeb return MT_CH_5G_UNII_1; 94*6c92544dSBjoern A. Zeeb if (channel <= 64) 95*6c92544dSBjoern A. Zeeb return MT_CH_5G_UNII_2A; 96*6c92544dSBjoern A. Zeeb if (channel <= 114) 97*6c92544dSBjoern A. Zeeb return MT_CH_5G_UNII_2E_1; 98*6c92544dSBjoern A. Zeeb if (channel <= 144) 99*6c92544dSBjoern A. Zeeb return MT_CH_5G_UNII_2E_2; 100*6c92544dSBjoern A. Zeeb if (channel <= 161) 101*6c92544dSBjoern A. Zeeb return MT_CH_5G_UNII_2E_3; 102*6c92544dSBjoern A. Zeeb return MT_CH_5G_UNII_3; 103*6c92544dSBjoern A. Zeeb } 104*6c92544dSBjoern A. Zeeb 105*6c92544dSBjoern A. Zeeb static inline bool 106*6c92544dSBjoern A. Zeeb mt7615_ext_pa_enabled(struct mt7615_dev *dev, enum nl80211_band band) 107*6c92544dSBjoern A. Zeeb { 108*6c92544dSBjoern A. Zeeb u8 *eep = dev->mt76.eeprom.data; 109*6c92544dSBjoern A. Zeeb 110*6c92544dSBjoern A. Zeeb if (band == NL80211_BAND_5GHZ) 111*6c92544dSBjoern A. Zeeb return !(eep[MT_EE_NIC_CONF_1 + 1] & MT_EE_NIC_CONF_TSSI_5G); 112*6c92544dSBjoern A. Zeeb else 113*6c92544dSBjoern A. Zeeb return !(eep[MT_EE_NIC_CONF_1 + 1] & MT_EE_NIC_CONF_TSSI_2G); 114*6c92544dSBjoern A. Zeeb } 115*6c92544dSBjoern A. Zeeb 116*6c92544dSBjoern A. Zeeb #endif 117