From 3441f0fc8dff1f44cc082d2ab868a261589e397e Mon Sep 17 00:00:00 2001 From: Felix Fietkau Date: Wed, 29 Jul 2015 17:30:59 +0200 Subject: [PATCH] phy: report max per-rate tx power Signed-off-by: Felix Fietkau --- phy.c | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/phy.c b/phy.c index 91f63d2d..5bd997a8 100644 --- a/phy.c +++ b/phy.c @@ -136,6 +136,18 @@ mt76_limit_rate_power(struct mt76_rate_power *r, int limit) r->all[i] = limit; } +static int +mt76_get_max_power(struct mt76_rate_power *r) +{ + int i; + s8 ret = 0; + + for (i = 0; i < sizeof(r->all); i++) + ret = max(ret, r->all[i]); + + return ret; +} + void mt76_phy_set_txpower(struct mt76_dev *dev) { enum nl80211_chan_width width = dev->chandef.width; @@ -150,17 +162,14 @@ void mt76_phy_set_txpower(struct mt76_dev *dev) else if (width == NL80211_CHAN_WIDTH_80) delta = txp.delta_bw80; - if (txp.target_power > dev->txpower_conf) { - dev->txpower_cur = dev->txpower_conf; + if (txp.target_power > dev->txpower_conf) delta -= txp.target_power - dev->txpower_conf; - } else { - dev->txpower_cur = txp.target_power; - } mt76_get_rate_power(dev, &t); mt76_add_rate_power_offset(&t, txp.chain[0].target_power + txp.chain[0].delta); mt76_limit_rate_power(&t, dev->txpower_conf); + dev->txpower_cur = mt76_get_max_power(&t); mt76_add_rate_power_offset(&t, -(txp.chain[0].target_power + txp.chain[0].delta + delta)); dev->target_power = txp.chain[0].target_power;