struct mt76_dev *dev = hw->priv;
        int n_chains = hweight8(dev->antenna_mask);
 
-       *dbm = dev->txpower_cur / 2;
+       *dbm = DIV_ROUND_UP(dev->txpower_cur, 2);
 
        /* convert from per-chain power to combined
         * output on 2x2 devices
 
        for (i = 0; i < sband->n_channels; i++) {
                chan = &sband->channels[i];
                chan->max_power = target_power;
+               chan->orig_mpwr = target_power;
        }
 }
 
 
                mt76x0_get_power_info(dev, chan, &tp);
 
                chan->max_power = (mt76x02_get_max_rate_power(&t) + tp) / 2;
+               chan->orig_mpwr = chan->max_power;
        }
 }
 
 
        struct ieee80211_channel *chan;
        struct mt76x2_tx_power_info txp;
        struct mt76_rate_power t = {};
-       int target_power;
        int i;
 
        for (i = 0; i < sband->n_channels; i++) {
                chan = &sband->channels[i];
 
                mt76x2_get_power_info(dev, &txp, chan);
-
-               target_power = max_t(int, (txp.chain[0].target_power +
-                                          txp.chain[0].delta),
-                                         (txp.chain[1].target_power +
-                                          txp.chain[1].delta));
-
                mt76x2_get_rate_power(dev, &t, chan);
 
                chan->max_power = mt76x02_get_max_rate_power(&t) +
-                                 target_power;
-               chan->max_power /= 2;
+                                 txp.target_power;
+               chan->max_power = DIV_ROUND_UP(chan->max_power, 2);
 
                /* convert to combined output power on 2x2 devices */
                chan->max_power += 3;
+               chan->orig_mpwr = chan->max_power;
        }
 }
 EXPORT_SYMBOL_GPL(mt76x2_init_txpower);
 
                delta = txp.delta_bw80;
 
        mt76x2_get_rate_power(dev, &t, chan);
-       mt76x02_add_rate_power_offset(&t, txp.chain[0].target_power);
+       mt76x02_add_rate_power_offset(&t, txp.target_power + delta);
        mt76x02_limit_rate_power(&t, dev->mt76.txpower_conf);
        dev->mt76.txpower_cur = mt76x02_get_max_rate_power(&t);
 
        base_power = mt76x2_get_min_rate_power(&t);
-       delta += base_power - txp.chain[0].target_power;
+       delta = base_power - txp.target_power;
        txp_0 = txp.chain[0].target_power + txp.chain[0].delta + delta;
        txp_1 = txp.chain[1].target_power + txp.chain[1].delta + delta;
 
        }
 
        mt76x02_add_rate_power_offset(&t, -base_power);
-       dev->target_power = txp.chain[0].target_power;
+       dev->target_power = txp.target_power;
        dev->target_power_delta[0] = txp_0 - txp.chain[0].target_power;
        dev->target_power_delta[1] = txp_1 - txp.chain[0].target_power;
        dev->mt76.rate_power = t;