Skip to content

Commit 0567263

Browse files
LorenzoBianconiKalle Valo
authored andcommitted
mt76x0: eeprom: fix chan_vs_power map in mt76x0_get_power_info
Report correct eeprom per channel power value. Fix chan_vs_power map in mt76x0_get_power_info routine Fixes: f2a2e81 ("mt76x0: remove eeprom dependency from mt76x0_get_power_info") Signed-off-by: Lorenzo Bianconi <lorenzo.bianconi@redhat.com> Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
1 parent 13e6262 commit 0567263

File tree

3 files changed

+25
-27
lines changed

3 files changed

+25
-27
lines changed

drivers/net/wireless/mediatek/mt76/mt76x0/eeprom.c

Lines changed: 19 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -212,24 +212,24 @@ void mt76x0_get_tx_power_per_rate(struct mt76x02_dev *dev)
212212
mt76x02_add_rate_power_offset(t, delta);
213213
}
214214

215-
void mt76x0_get_power_info(struct mt76x02_dev *dev, u8 *info)
215+
void mt76x0_get_power_info(struct mt76x02_dev *dev, s8 *tp)
216216
{
217217
struct mt76x0_chan_map {
218218
u8 chan;
219219
u8 offset;
220220
} chan_map[] = {
221-
{ 2, 0 }, { 4, 1 }, { 6, 2 }, { 8, 3 },
222-
{ 10, 4 }, { 12, 5 }, { 14, 6 }, { 38, 0 },
223-
{ 44, 1 }, { 48, 2 }, { 54, 3 }, { 60, 4 },
224-
{ 64, 5 }, { 102, 6 }, { 108, 7 }, { 112, 8 },
225-
{ 118, 9 }, { 124, 10 }, { 128, 11 }, { 134, 12 },
226-
{ 140, 13 }, { 151, 14 }, { 157, 15 }, { 161, 16 },
227-
{ 167, 17 }, { 171, 18 }, { 173, 19 },
221+
{ 2, 0 }, { 4, 2 }, { 6, 4 }, { 8, 6 },
222+
{ 10, 8 }, { 12, 10 }, { 14, 12 }, { 38, 0 },
223+
{ 44, 2 }, { 48, 4 }, { 54, 6 }, { 60, 8 },
224+
{ 64, 10 }, { 102, 12 }, { 108, 14 }, { 112, 16 },
225+
{ 118, 18 }, { 124, 20 }, { 128, 22 }, { 134, 24 },
226+
{ 140, 26 }, { 151, 28 }, { 157, 30 }, { 161, 32 },
227+
{ 167, 34 }, { 171, 36 }, { 175, 38 },
228228
};
229229
struct ieee80211_channel *chan = dev->mt76.chandef.chan;
230230
u8 offset, addr;
231+
int i, idx = 0;
231232
u16 data;
232-
int i;
233233

234234
if (mt76x0_tssi_enabled(dev)) {
235235
s8 target_power;
@@ -239,14 +239,14 @@ void mt76x0_get_power_info(struct mt76x02_dev *dev, u8 *info)
239239
else
240240
data = mt76x02_eeprom_get(dev, MT_EE_2G_TARGET_POWER);
241241
target_power = (data & 0xff) - dev->mt76.rate_power.ofdm[7];
242-
info[0] = target_power + mt76x0_get_delta(dev);
243-
info[1] = 0;
242+
*tp = target_power + mt76x0_get_delta(dev);
244243

245244
return;
246245
}
247246

248247
for (i = 0; i < ARRAY_SIZE(chan_map); i++) {
249-
if (chan_map[i].chan <= chan->hw_value) {
248+
if (chan->hw_value <= chan_map[i].chan) {
249+
idx = (chan->hw_value == chan_map[i].chan);
250250
offset = chan_map[i].offset;
251251
break;
252252
}
@@ -258,13 +258,16 @@ void mt76x0_get_power_info(struct mt76x02_dev *dev, u8 *info)
258258
addr = MT_EE_TX_POWER_DELTA_BW80 + offset;
259259
} else {
260260
switch (chan->hw_value) {
261+
case 42:
262+
offset = 2;
263+
break;
261264
case 58:
262265
offset = 8;
263266
break;
264267
case 106:
265268
offset = 14;
266269
break;
267-
case 112:
270+
case 122:
268271
offset = 20;
269272
break;
270273
case 155:
@@ -277,14 +280,9 @@ void mt76x0_get_power_info(struct mt76x02_dev *dev, u8 *info)
277280
}
278281

279282
data = mt76x02_eeprom_get(dev, addr);
280-
281-
info[0] = data;
282-
if (!info[0] || info[0] > 0x3f)
283-
info[0] = 5;
284-
285-
info[1] = data >> 8;
286-
if (!info[1] || info[1] > 0x3f)
287-
info[1] = 5;
283+
*tp = data >> (8 * idx);
284+
if (*tp < 0 || *tp > 0x3f)
285+
*tp = 5;
288286
}
289287

290288
static int mt76x0_check_eeprom(struct mt76x02_dev *dev)

drivers/net/wireless/mediatek/mt76/mt76x0/eeprom.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ struct mt76x02_dev;
2626
int mt76x0_eeprom_init(struct mt76x02_dev *dev);
2727
void mt76x0_read_rx_gain(struct mt76x02_dev *dev);
2828
void mt76x0_get_tx_power_per_rate(struct mt76x02_dev *dev);
29-
void mt76x0_get_power_info(struct mt76x02_dev *dev, u8 *info);
29+
void mt76x0_get_power_info(struct mt76x02_dev *dev, s8 *tp);
3030

3131
static inline s8 s6_to_s8(u32 val)
3232
{

drivers/net/wireless/mediatek/mt76/mt76x0/phy.c

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -845,17 +845,17 @@ static void mt76x0_phy_tssi_calibrate(struct mt76x02_dev *dev)
845845
void mt76x0_phy_set_txpower(struct mt76x02_dev *dev)
846846
{
847847
struct mt76_rate_power *t = &dev->mt76.rate_power;
848-
u8 info[2];
848+
s8 info;
849849

850850
mt76x0_get_tx_power_per_rate(dev);
851-
mt76x0_get_power_info(dev, info);
851+
mt76x0_get_power_info(dev, &info);
852852

853-
mt76x02_add_rate_power_offset(t, info[0]);
853+
mt76x02_add_rate_power_offset(t, info);
854854
mt76x02_limit_rate_power(t, dev->mt76.txpower_conf);
855855
dev->mt76.txpower_cur = mt76x02_get_max_rate_power(t);
856-
mt76x02_add_rate_power_offset(t, -info[0]);
856+
mt76x02_add_rate_power_offset(t, -info);
857857

858-
mt76x02_phy_set_txpower(dev, info[0], info[1]);
858+
mt76x02_phy_set_txpower(dev, info, info);
859859
}
860860

861861
void mt76x0_phy_calibrate(struct mt76x02_dev *dev, bool power_on)

0 commit comments

Comments
 (0)