introduce ACPI SAR support
Subsystems (2)
v2 cover introduce ACPI SAR support
From: Deren Wu <[email protected]>
Introduce ACPI SAR support for mt7921 serials.
Changes since v1:
- replace BIOS with ACPI
- replace "6G" with "6 GHz" in patch subject
- remove unnecessary function export
Deren Wu (3):
mt76: add 6 GHz band support in mt76_sar_freq_ranges
mt76: mt7921: introduce ACPI SAR support
mt76: mt7921: introduce ACPI SAR config in tx power
drivers/net/wireless/mediatek/mt76/mac80211.c | 6 + .../wireless/mediatek/mt76/mt7921/Makefile | 1 + .../wireless/mediatek/mt76/mt7921/acpi_sar.c | 279 ++++++++++++++++++ .../wireless/mediatek/mt76/mt7921/acpi_sar.h | 93 ++++++ .../net/wireless/mediatek/mt76/mt7921/init.c | 5 +- .../net/wireless/mediatek/mt76/mt7921/main.c | 31 +- .../wireless/mediatek/mt76/mt7921/mt7921.h | 22 ++ 7 files changed, 426 insertions(+), 11 deletions(-) create mode 100644 drivers/net/wireless/mediatek/mt76/mt7921/acpi_sar.c create mode 100644 drivers/net/wireless/mediatek/mt76/mt7921/acpi_sar.h
Signature · 1 line
2.18.0
PATCH v2 1/3 mt76: add 6 GHz band support in mt76_sar_freq_ranges
From: Deren Wu <[email protected]>
Add new frequencies support in mt76_sar_freq_ranges[]
* 5945 - 6165
* 6165 - 6405
* 6405 - 6525
* 6525 - 6705
* 6705 - 6865
* 6865 - 7125
--- drivers/net/wireless/mediatek/mt76/mac80211.c | 6 ++++++ 1 file changed, 6 insertions(+)
drivers/net/wireless/mediatek/mt76/mac80211.c +6 -0
@@ -178,6 +178,12 @@ static const struct cfg80211_sar_freq_ranges mt76_sar_freq_ranges[] = { { .start_freq = 5350, .end_freq = 5470, }, { .start_freq = 5470, .end_freq = 5725, }, { .start_freq = 5725, .end_freq = 5950, }, + { .start_freq = 5945, .end_freq = 6165, }, + { .start_freq = 6165, .end_freq = 6405, }, + { .start_freq = 6405, .end_freq = 6525, }, + { .start_freq = 6525, .end_freq = 6705, }, + { .start_freq = 6705, .end_freq = 6865, }, + { .start_freq = 6865, .end_freq = 7125, }, }; static const struct cfg80211_sar_capa mt76_sar_capa = {
Signature · 1 line
2.18.0
PATCH v2 2/3 mt76: mt7921: introduce ACPI SAR support
In reply to Deren WuFrom: Deren Wu <[email protected]>
In ACPI SAR enabled device, mt7921 should read power limit in ACPI config. The limit value would be applied to regular tx power settings in mt76.
Two major functionalities added:
1. Get SAR power table through ACPI.
2. Read power in Dynamic/Geo SAR table for tx power limit.
Table note
MTDS: Dynamic SAR table
MTGS: Geo SAR table
MTCL: Country List table (for 6GHz support)
--- .../wireless/mediatek/mt76/mt7921/Makefile | 1 + .../wireless/mediatek/mt76/mt7921/acpi_sar.c | 279 ++++++++++++++++++ .../wireless/mediatek/mt76/mt7921/acpi_sar.h | 93 ++++++ .../net/wireless/mediatek/mt76/mt7921/init.c | 2 + .../wireless/mediatek/mt76/mt7921/mt7921.h | 20 ++ 5 files changed, 395 insertions(+) create mode 100644 drivers/net/wireless/mediatek/mt76/mt7921/acpi_sar.c create mode 100644 drivers/net/wireless/mediatek/mt76/mt7921/acpi_sar.h
drivers/net/wireless/mediatek/mt76/mt7921/Makefile +1 -0
@@ -9,6 +9,7 @@ CFLAGS_trace.o := -I$(src) mt7921-common-y := mac.o mcu.o main.o init.o debugfs.o trace.o mt7921-common-$(CONFIG_NL80211_TESTMODE) += testmode.o +mt7921-common-$(CONFIG_ACPI) += acpi_sar.o mt7921e-y := pci.o pci_mac.o pci_mcu.o dma.o mt7921s-y := sdio.o sdio_mac.o sdio_mcu.o mt7921u-y := usb.o usb_mac.o
drivers/net/wireless/mediatek/mt76/mt7921/acpi_sar.c new file +279 -0
279 lines not on this page · raw message
drivers/net/wireless/mediatek/mt76/mt7921/acpi_sar.h new file +93 -0
93 lines not on this page · raw message
drivers/net/wireless/mediatek/mt76/mt7921/init.c +2 -0
@@ -289,6 +289,8 @@ int mt7921_register_device(struct mt7921_dev *dev)if (!mt76_is_mmio (&dev->mt76)) hw->extra_tx_headroom +=MT_SDIO_TXD_SIZE +MT_SDIO_HDR_SIZE ; +mt7921_init_acpi_sar (dev); + ret =mt7921_init_wcid (dev);if (ret)return ret;
drivers/net/wireless/mediatek/mt76/mt7921/mt7921.h +20 -0
@@ -8,6 +8,7 @@#include <linux/ktime.h> #include "../mt76_connac_mcu.h" #include "regs.h" +#include "acpi_sar.h" #define MT7921_MAX_INTERFACES 4#define MT7921_MAX_WMM_SETS 4
@@ -171,6 +172,9 @@ struct mt7921_phy {struct sk_buff_head scan_event_list;struct delayed_work scan_work; +#ifdef CONFIG_ACPI +struct mt7921_acpi_sar *acpisar; +#endif };#define mt7921_init_reset (dev) ((dev)->hif_ops->init_reset(dev))
@@ -481,4 +485,20 @@ int mt7921_mcu_uni_add_beacon_offload(struct mt7921_dev *dev,struct ieee80211_hw *hw, struct ieee80211_vif *vif, bool enable); +#ifdef CONFIG_ACPI +int mt7921_init_acpi_sar (struct mt7921_dev *dev); +int mt7921_init_acpi_sar_power (struct mt7921_phy *phy,bool set_default); +#else +static inline int +mt7921_init_acpi_sar (struct mt7921_dev *dev) +{ +return 0 ; +} + +static inline int +mt7921_init_acpi_sar_power (struct mt7921_phy *phy,bool set_default) +{ +return 0 ; +} +#endif #endif
Signature · 1 line
2.18.0
PATCH v2 3/3 mt76: mt7921: introduce ACPI SAR config in tx power
In reply to Deren WuFrom: Deren Wu <[email protected]>
Add new function mt7921_set_tx_sar_pwr() to update SAR power from .set_sar_specs and ACPI setting. Both settings would be merged into mt76_freq_range_power for final tx power value.
--- .../net/wireless/mediatek/mt76/mt7921/init.c | 3 +- .../net/wireless/mediatek/mt76/mt7921/main.c | 31 +++++++++++++------ .../wireless/mediatek/mt76/mt7921/mt7921.h | 2 ++ 3 files changed, 25 insertions(+), 11 deletions(-)
drivers/net/wireless/mediatek/mt76/mt7921/init.c +1 -2
@@ -34,14 +34,13 @@ mt7921_regd_notifier(struct wiphy *wiphy, {struct ieee80211_hw *hw =wiphy_to_ieee80211_hw (wiphy);struct mt7921_dev *dev =mt7921_hw_dev (hw); -struct mt7921_phy *phy =mt7921_hw_phy (hw);memcpy (dev->mt76.alpha2, request->alpha2,sizeof (dev->mt76.alpha2)); dev->mt76.region = request->dfs_region;mt7921_mutex_acquire (dev);mt76_connac_mcu_set_channel_domain (hw->priv); -mt76_connac_mcu_set_rate_txpower (phy->mt76); +mt7921_set_tx_sar_pwr (hw,NULL );mt7921_mutex_release (dev); }
drivers/net/wireless/mediatek/mt76/mt7921/main.c +22 -9
@@ -257,7 +257,7 @@ int __mt7921_start(struct mt7921_phy *phy)if (err)return err; - err =mt76_connac_mcu_set_rate_txpower (phy->mt76); + err =mt7921_set_tx_sar_pwr (mphy->hw,NULL );if (err)return err;
@@ -548,7 +548,7 @@ static int mt7921_config(struct ieee80211_hw *hw, u32 changed)mt7921_mutex_acquire (dev);if (changed &IEEE80211_CONF_CHANGE_POWER ) { - ret =mt76_connac_mcu_set_rate_txpower (phy->mt76); + ret =mt7921_set_tx_sar_pwr (hw,NULL );if (ret) goto out; }
@@ -1469,20 +1469,33 @@ static void mt7921_ipv6_addr_change(struct ieee80211_hw *hw, }#endif +int mt7921_set_tx_sar_pwr (struct ieee80211_hw *hw, +const struct cfg80211_sar_specs *sar) +{ +struct mt76_phy *mphy = hw->priv; +int err; + +if (sar) { + err =mt76_init_sar_power (hw, sar); +if (err) +return err; + } + +mt7921_init_acpi_sar_power (mt7921_hw_phy (hw), !sar); + + err =mt76_connac_mcu_set_rate_txpower (mphy); + +return err; +} +static int mt7921_set_sar_specs (struct ieee80211_hw *hw,const struct cfg80211_sar_specs *sar) {struct mt7921_dev *dev =mt7921_hw_dev (hw); -struct mt76_phy *mphy = hw->priv;int err;mt7921_mutex_acquire (dev); - err =mt76_init_sar_power (hw, sar); -if (err) - goto out; - - err =mt76_connac_mcu_set_rate_txpower (mphy); -out: + err =mt7921_set_tx_sar_pwr (hw, sar);mt7921_mutex_release (dev);return err;
drivers/net/wireless/mediatek/mt76/mt7921/mt7921.h +2 -0
@@ -501,4 +501,6 @@ mt7921_init_acpi_sar_power(struct mt7921_phy *phy, bool set_default)return 0 ; }#endif +int mt7921_set_tx_sar_pwr (struct ieee80211_hw *hw, +const struct cfg80211_sar_specs *sar);#endif
Signature · 1 line
2.18.0