--- a/include/net/mac80211.h +++ b/include/net/mac80211.h @@ -1718,6 +1718,7 @@ struct ieee80211_hw { u8 max_tx_aggregation_subframes; u8 offchannel_tx_hw_queue; u8 radiotap_mcs_details; + s8 cur_power_level; u16 radiotap_vht_details; netdev_features_t netdev_features; u8 uapsd_queues; --- a/net/mac80211/cfg.c +++ b/net/mac80211/cfg.c @@ -2083,7 +2083,9 @@ static int ieee80211_get_tx_power(struct struct ieee80211_local *local = wiphy_priv(wiphy); struct ieee80211_sub_if_data *sdata = IEEE80211_WDEV_TO_SUB_IF(wdev); - if (!local->use_chanctx) + if (local->hw.cur_power_level) + *dbm = local->hw.cur_power_level; + else if (!local->use_chanctx) *dbm = local->hw.conf.power_level; else *dbm = sdata->vif.bss_conf.txpower; --- a/net/mac80211/main.c +++ b/net/mac80211/main.c @@ -156,6 +156,7 @@ static u32 ieee80211_hw_conf_chan(struct if (local->hw.conf.power_level != power) { changed |= IEEE80211_CONF_CHANGE_POWER; + local->hw.cur_power_level = power; local->hw.conf.power_level = power; }