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