xref: /linux/drivers/net/wireless/mediatek/mt76/mt7615/eeprom.h (revision 1ac731c529cd4d6adbce134754b51ff7d822b145)
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 
20dc7bd30bSFelix Fietkau #define MT7615_EEPROM_FULL_SIZE			(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,
34c88bf52bSLorenzo 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,
49*e12b2e99SFelix Fietkau 	MT7663_EE_MAX =				0x600,
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
mt7615_get_channel_group(int channel)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
mt7615_ext_pa_enabled(struct mt7615_dev * dev,enum nl80211_band band)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