diff --git a/mt76x2.h b/mt76x2.h index d209097d..538af9f6 100644 --- a/mt76x2.h +++ b/mt76x2.h @@ -122,6 +122,7 @@ struct mt76x2_dev { s8 target_power; s8 target_power_delta[2]; struct mt76_rate_power rate_power; + bool enable_tpc; u8 coverage_class; u8 slottime; diff --git a/mt76x2_debugfs.c b/mt76x2_debugfs.c index 3e33a2f0..293e9879 100644 --- a/mt76x2_debugfs.c +++ b/mt76x2_debugfs.c @@ -93,6 +93,7 @@ void mt76x2_init_debugfs(struct mt76x2_dev *dev) return; debugfs_create_u8("temperature", S_IRUSR, dir, &dev->cal.temp); + debugfs_create_bool("tpc", S_IRUSR | S_IWUSR, dir, &dev->enable_tpc); debugfs_create_file("ampdu_stat", S_IRUSR, dir, dev, &fops_ampdu_stat); debugfs_create_devm_seqfile(dev->mt76.dev, "txpower", dir, read_txpower); diff --git a/mt76x2_tx.c b/mt76x2_tx.c index 8f746e34..d45454a9 100644 --- a/mt76x2_tx.c +++ b/mt76x2_tx.c @@ -104,7 +104,9 @@ s8 mt76x2_tx_get_txpwr_adj(struct mt76x2_dev *dev, s8 txpwr, s8 max_txpwr_adj) txpwr -= (dev->target_power + dev->target_power_delta[0]); txpwr = min_t(s8, txpwr, max_txpwr_adj); - if (txpwr >= 0) + if (!dev->enable_tpc) + return 0; + else if (txpwr >= 0) return min_t(s8, txpwr, 7); else return (txpwr < -16) ? 8 : (txpwr + 32) / 2;