xref: /freebsd/sys/contrib/dev/mediatek/mt76/mt7615/eeprom.h (revision 6c92544d7c9722a3fe6263134938d1f864c158c5)
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