blob: 24cc488edc8a70bdb3fd73e242f3d7c7e642cf66 [file] [log] [blame]
developer20d67712022-03-02 14:09:32 +08001From 1bf24a0f752e0e2effc0e5ffc2e641383b320d96 Mon Sep 17 00:00:00 2001
2From: Shayne Chen <shayne.chen@mediatek.com>
3Date: Mon, 14 Feb 2022 17:51:08 +0800
4Subject: [PATCH 10/11] mt76: mt7915: fix eeprom fields of txpower init values
5
67976 adie has different offset and uses different channel group
7definition on txpower init value.
8
9Signed-off-by: Shayne Chen <shayne.chen@mediatek.com>
10---
11 .../wireless/mediatek/mt76/mt7915/eeprom.c | 52 ++++++++++---------
12 .../wireless/mediatek/mt76/mt7915/eeprom.h | 14 ++++-
13 2 files changed, 40 insertions(+), 26 deletions(-)
14
15diff --git a/mt7915/eeprom.c b/mt7915/eeprom.c
16index bbd9bef..0aab381 100644
17--- a/mt7915/eeprom.c
18+++ b/mt7915/eeprom.c
19@@ -263,32 +263,38 @@ int mt7915_eeprom_get_target_power(struct mt7915_dev *dev,
20 {
21 u8 *eeprom = dev->mt76.eeprom.data;
22 int index, target_power;
23- bool tssi_on;
24+ bool tssi_on, is_7976;
25
26 if (chain_idx > 3)
27 return -EINVAL;
28
29 tssi_on = mt7915_tssi_enabled(dev, chan->band);
30+ is_7976 = mt7915_check_adie(dev, false) || is_mt7916(&dev->mt76);
31
32 if (chan->band == NL80211_BAND_2GHZ) {
33- u32 power = is_mt7915(&dev->mt76) ?
34- MT_EE_TX0_POWER_2G : MT_EE_TX0_POWER_2G_V2;
35-
36- index = power + chain_idx * 3;
37- target_power = eeprom[index];
38+ if (is_7976) {
39+ index = MT_EE_TX0_POWER_2G_V2 + chain_idx;
40+ target_power = eeprom[index];
41+ } else {
42+ index = MT_EE_TX0_POWER_2G + chain_idx * 3;
43+ target_power = eeprom[index];
44
45- if (!tssi_on)
46- target_power += eeprom[index + 1];
47+ if (!tssi_on)
48+ target_power += eeprom[index + 1];
49+ }
50 } else {
51- int group = mt7915_get_channel_group(chan->hw_value);
52- u32 power = is_mt7915(&dev->mt76) ?
53- MT_EE_TX0_POWER_5G : MT_EE_TX0_POWER_5G_V2;
54+ int group = mt7915_get_channel_group(chan->hw_value, is_7976);
55
56- index = power + chain_idx * 12;
57- target_power = eeprom[index + group];
58+ if (is_7976) {
59+ index = MT_EE_TX0_POWER_5G_V2 + chain_idx * 5;
60+ target_power = eeprom[index + group];
61+ } else {
62+ index = MT_EE_TX0_POWER_5G + chain_idx * 12;
63+ target_power = eeprom[index + group];
64
65- if (!tssi_on)
66- target_power += eeprom[index + 8];
67+ if (!tssi_on)
68+ target_power += eeprom[index + 8];
69+ }
70 }
71
72 return target_power;
73@@ -297,20 +303,16 @@ int mt7915_eeprom_get_target_power(struct mt7915_dev *dev,
74 s8 mt7915_eeprom_get_power_delta(struct mt7915_dev *dev, int band)
75 {
76 u8 *eeprom = dev->mt76.eeprom.data;
77- u32 val;
78+ u32 val, offs;
79 s8 delta;
80- u32 rate_2g, rate_5g;
81-
82- rate_2g = is_mt7915(&dev->mt76) ?
83- MT_EE_RATE_DELTA_2G : MT_EE_RATE_DELTA_2G_V2;
84-
85- rate_5g = is_mt7915(&dev->mt76) ?
86- MT_EE_RATE_DELTA_5G : MT_EE_RATE_DELTA_5G_V2;
87+ bool is_7976 = mt7915_check_adie(dev, false) || is_mt7916(&dev->mt76);
88
89 if (band == NL80211_BAND_2GHZ)
90- val = eeprom[rate_2g];
91+ offs = is_7976 ? MT_EE_RATE_DELTA_2G_V2 : MT_EE_RATE_DELTA_2G;
92 else
93- val = eeprom[rate_5g];
94+ offs = is_7976 ? MT_EE_RATE_DELTA_5G_V2 : MT_EE_RATE_DELTA_5G;
95+
96+ val = eeprom[offs];
97
98 if (!(val & MT_EE_RATE_DELTA_EN))
99 return 0;
100diff --git a/mt7915/eeprom.h b/mt7915/eeprom.h
101index 5dad5b0..4576091 100644
102--- a/mt7915/eeprom.h
103+++ b/mt7915/eeprom.h
104@@ -103,8 +103,20 @@ enum mt7915_sku_rate_group {
105 };
106
107 static inline int
108-mt7915_get_channel_group(int channel)
109+mt7915_get_channel_group(int channel, bool is_7976)
110 {
111+ if (is_7976) {
112+ if (channel <= 64)
113+ return 0;
114+ if (channel <= 96)
115+ return 1;
116+ if (channel <= 128)
117+ return 2;
118+ if (channel <= 144)
119+ return 3;
120+ return 4;
121+ }
122+
123 if (channel >= 184 && channel <= 196)
124 return 0;
125 if (channel <= 48)
126--
1272.25.1
128