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