Skip to content

Commit e59ad99

Browse files
LorenzoBianconinbd168
authored andcommitted
mt76: add mt76x02_get_rx_gain and mt76x02_get_lna_gain utility routines
Add mt76x02_get_rx_gain and mt76x02_get_lna_gain utility routines for rx gain parsing. mt76x02_get_rx_gain and mt76x02_get_lna_gain will be reused for eeprom parsing in mt76x0 driver Signed-off-by: Lorenzo Bianconi <lorenzo.bianconi@redhat.com> Signed-off-by: Felix Fietkau <nbd@nbd.name>
1 parent 1137847 commit e59ad99

File tree

3 files changed

+63
-43
lines changed

3 files changed

+63
-43
lines changed

drivers/net/wireless/mediatek/mt76/mt76x02_eeprom.c

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,3 +81,57 @@ bool mt76x02_ext_pa_enabled(struct mt76_dev *dev, enum nl80211_band band)
8181
return !(conf0 & MT_EE_NIC_CONF_0_PA_INT_2G);
8282
}
8383
EXPORT_SYMBOL_GPL(mt76x02_ext_pa_enabled);
84+
85+
void mt76x02_get_rx_gain(struct mt76_dev *dev, enum nl80211_band band,
86+
u16 *rssi_offset, s8 *lna_2g, s8 *lna_5g)
87+
{
88+
u16 val;
89+
90+
val = mt76x02_eeprom_get(dev, MT_EE_LNA_GAIN);
91+
*lna_2g = val & 0xff;
92+
lna_5g[0] = val >> 8;
93+
94+
val = mt76x02_eeprom_get(dev, MT_EE_RSSI_OFFSET_2G_1);
95+
lna_5g[1] = val >> 8;
96+
97+
val = mt76x02_eeprom_get(dev, MT_EE_RSSI_OFFSET_5G_1);
98+
lna_5g[2] = val >> 8;
99+
100+
if (!mt76x02_field_valid(lna_5g[1]))
101+
lna_5g[1] = lna_5g[0];
102+
103+
if (!mt76x02_field_valid(lna_5g[2]))
104+
lna_5g[2] = lna_5g[0];
105+
106+
if (band == NL80211_BAND_2GHZ)
107+
*rssi_offset = mt76x02_eeprom_get(dev, MT_EE_RSSI_OFFSET_2G_0);
108+
else
109+
*rssi_offset = mt76x02_eeprom_get(dev, MT_EE_RSSI_OFFSET_5G_0);
110+
}
111+
EXPORT_SYMBOL_GPL(mt76x02_get_rx_gain);
112+
113+
u8 mt76x02_get_lna_gain(struct mt76_dev *dev,
114+
s8 *lna_2g, s8 *lna_5g,
115+
struct ieee80211_channel *chan)
116+
{
117+
u16 val;
118+
u8 lna;
119+
120+
val = mt76x02_eeprom_get(dev, MT_EE_NIC_CONF_1);
121+
if (val & MT_EE_NIC_CONF_1_LNA_EXT_2G)
122+
*lna_2g = 0;
123+
if (val & MT_EE_NIC_CONF_1_LNA_EXT_5G)
124+
memset(lna_5g, 0, sizeof(s8) * 3);
125+
126+
if (chan->band == NL80211_BAND_2GHZ)
127+
lna = *lna_2g;
128+
else if (chan->hw_value <= 64)
129+
lna = lna_5g[0];
130+
else if (chan->hw_value <= 128)
131+
lna = lna_5g[1];
132+
else
133+
lna = lna_5g[2];
134+
135+
return lna != 0xff ? lna : 0;
136+
}
137+
EXPORT_SYMBOL_GPL(mt76x02_get_lna_gain);

drivers/net/wireless/mediatek/mt76/mt76x02_eeprom.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,5 +154,10 @@ mt76x02_eeprom_get(struct mt76_dev *dev,
154154
bool mt76x02_ext_pa_enabled(struct mt76_dev *dev, enum nl80211_band band);
155155
int mt76x02_get_efuse_data(struct mt76_dev *dev, u16 base, void *buf,
156156
int len, enum mt76x02_eeprom_modes mode);
157+
void mt76x02_get_rx_gain(struct mt76_dev *dev, enum nl80211_band band,
158+
u16 *rssi_offset, s8 *lna_2g, s8 *lna_5g);
159+
u8 mt76x02_get_lna_gain(struct mt76_dev *dev,
160+
s8 *lna_2g, s8 *lna_5g,
161+
struct ieee80211_channel *chan);
157162

158163
#endif /* __MT76x02_EEPROM_H */

drivers/net/wireless/mediatek/mt76/mt76x2_eeprom.c

Lines changed: 4 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -310,55 +310,16 @@ void mt76x2_read_rx_gain(struct mt76x2_dev *dev)
310310

311311
mt76x2_set_rx_gain_group(dev, val);
312312

313-
if (chan->band == NL80211_BAND_2GHZ) {
314-
val = mt76x02_eeprom_get(&dev->mt76, MT_EE_RSSI_OFFSET_2G_0);
315-
mt76x2_set_rssi_offset(dev, 0, val);
316-
mt76x2_set_rssi_offset(dev, 1, val >> 8);
317-
} else {
318-
val = mt76x02_eeprom_get(&dev->mt76, MT_EE_RSSI_OFFSET_5G_0);
319-
mt76x2_set_rssi_offset(dev, 0, val);
320-
mt76x2_set_rssi_offset(dev, 1, val >> 8);
321-
}
322-
323-
val = mt76x02_eeprom_get(&dev->mt76, MT_EE_LNA_GAIN);
324-
lna_2g = val & 0xff;
325-
lna_5g[0] = val >> 8;
326-
327-
val = mt76x02_eeprom_get(&dev->mt76, MT_EE_RSSI_OFFSET_2G_1);
328-
lna_5g[1] = val >> 8;
329-
330-
val = mt76x02_eeprom_get(&dev->mt76, MT_EE_RSSI_OFFSET_5G_1);
331-
lna_5g[2] = val >> 8;
332-
333-
if (!mt76x02_field_valid(lna_5g[1]))
334-
lna_5g[1] = lna_5g[0];
335-
336-
if (!mt76x02_field_valid(lna_5g[2]))
337-
lna_5g[2] = lna_5g[0];
313+
mt76x02_get_rx_gain(&dev->mt76, chan->band, &val, &lna_2g, lna_5g);
314+
mt76x2_set_rssi_offset(dev, 0, val);
315+
mt76x2_set_rssi_offset(dev, 1, val >> 8);
338316

339317
dev->cal.rx.mcu_gain = (lna_2g & 0xff);
340318
dev->cal.rx.mcu_gain |= (lna_5g[0] & 0xff) << 8;
341319
dev->cal.rx.mcu_gain |= (lna_5g[1] & 0xff) << 16;
342320
dev->cal.rx.mcu_gain |= (lna_5g[2] & 0xff) << 24;
343321

344-
val = mt76x02_eeprom_get(&dev->mt76, MT_EE_NIC_CONF_1);
345-
if (val & MT_EE_NIC_CONF_1_LNA_EXT_2G)
346-
lna_2g = 0;
347-
if (val & MT_EE_NIC_CONF_1_LNA_EXT_5G)
348-
memset(lna_5g, 0, sizeof(lna_5g));
349-
350-
if (chan->band == NL80211_BAND_2GHZ)
351-
lna = lna_2g;
352-
else if (channel <= 64)
353-
lna = lna_5g[0];
354-
else if (channel <= 128)
355-
lna = lna_5g[1];
356-
else
357-
lna = lna_5g[2];
358-
359-
if (lna == 0xff)
360-
lna = 0;
361-
322+
lna = mt76x02_get_lna_gain(&dev->mt76, &lna_2g, lna_5g, chan);
362323
dev->cal.rx.lna_gain = mt76x02_sign_extend(lna, 8);
363324
}
364325
EXPORT_SYMBOL_GPL(mt76x2_read_rx_gain);

0 commit comments

Comments
 (0)