[PATCH 3/5] wifi: mt76: mt7921: refactor regulatory notifier flow
Sean Wang
sean.wang at kernel.org
Mon Feb 23 15:17:04 PST 2026
Hi, JB
On Mon, Feb 23, 2026 at 1:40 AM JB Tsai <jb.tsai at mediatek.com> wrote:
>
> Rename mt7921_regd_update() to mt7921_mcu_regd_update() to centralize
> regd updates with error handling.
>
> Signed-off-by: JB Tsai <jb.tsai at mediatek.com>
> ---
> .../net/wireless/mediatek/mt76/mt7921/pci.c | 2 +-
> .../net/wireless/mediatek/mt76/mt7921/regd.c | 45 +++++++++++++------
> .../net/wireless/mediatek/mt76/mt7921/regd.h | 3 +-
> 3 files changed, 35 insertions(+), 15 deletions(-)
>
> diff --git a/drivers/net/wireless/mediatek/mt76/mt7921/pci.c b/drivers/net/wireless/mediatek/mt76/mt7921/pci.c
> index a173a61f2b49..3fdf55c056a6 100644
> --- a/drivers/net/wireless/mediatek/mt76/mt7921/pci.c
> +++ b/drivers/net/wireless/mediatek/mt76/mt7921/pci.c
> @@ -545,7 +545,7 @@ static int mt7921_pci_resume(struct device *device)
> if (err < 0)
> goto failed;
>
> - mt7921_regd_update(dev);
> + mt7921_mcu_regd_update(dev, mdev->alpha2, dev->country_ie_env);
> err = mt7921_mcu_radio_led_ctrl(dev, EXT_CMD_RADIO_ON_LED);
> failed:
> pm->suspended = false;
> diff --git a/drivers/net/wireless/mediatek/mt76/mt7921/regd.c b/drivers/net/wireless/mediatek/mt76/mt7921/regd.c
> index 70440ab8ba82..f795ee2eb446 100644
> --- a/drivers/net/wireless/mediatek/mt76/mt7921/regd.c
> +++ b/drivers/net/wireless/mediatek/mt76/mt7921/regd.c
> @@ -72,18 +72,43 @@ mt7921_regd_channel_update(struct wiphy *wiphy, struct mt792x_dev *dev)
> }
> }
>
> -void mt7921_regd_update(struct mt792x_dev *dev)
> +int mt7921_mcu_regd_update(struct mt792x_dev *dev, u8 *alpha2,
> + enum environment_cap country_ie_env)
To keep naming consistent, how about renaming mt7921_mcu_regd_update
to mt7921_regd_mcu_update, matching the mt7921_regd_* prefix?
> {
> struct mt76_dev *mdev = &dev->mt76;
> struct ieee80211_hw *hw = mdev->hw;
> struct wiphy *wiphy = hw->wiphy;
> + int ret = 0;
> +
> + dev->regd_in_progress = true;
> +
> + mt792x_mutex_acquire(dev);
> + if (!dev->regd_change)
> + goto err;
> +
> + ret = mt7921_mcu_set_clc(dev, alpha2, country_ie_env);
> + if (ret < 0)
> + goto err;
>
I’d prefer to keep the refactor logic-preserving. The new error
handling and flag sequencing the dev->regd_change handling looks like
a functional change, so it would be clearer as a follow-up patch where
the behavior change can be explained. For example, the
dev->regd_change handling could be moved to the “wifi: mt76: mt7921:
add auto regdomain switch support” patch so the regd_change flow is
handled end-to-end there.
> - mt7921_mcu_set_clc(dev, mdev->alpha2, dev->country_ie_env);
> mt7921_regd_channel_update(wiphy, dev);
> - mt76_connac_mcu_set_channel_domain(hw->priv);
> - mt7921_set_tx_sar_pwr(hw, NULL);
> +
> + ret = mt76_connac_mcu_set_channel_domain(hw->priv);
> + if (ret < 0)
> + goto err;
> +
> + ret = mt7921_set_tx_sar_pwr(hw, NULL);
> + if (ret < 0)
> + goto err;
> +
> +err:
> + mt792x_mutex_release(dev);
> + dev->regd_change = false;
> + dev->regd_in_progress = false;
> + wake_up(&dev->wait);
> +
> + return ret;
> }
> -EXPORT_SYMBOL_GPL(mt7921_regd_update);
> +EXPORT_SYMBOL_GPL(mt7921_mcu_regd_update);
>
> void mt7921_regd_notifier(struct wiphy *wiphy,
> struct regulatory_request *request)
> @@ -106,12 +131,6 @@ void mt7921_regd_notifier(struct wiphy *wiphy,
> if (pm->suspended)
> return;
>
> - dev->regd_in_progress = true;
> -
> - mt792x_mutex_acquire(dev);
> - mt7921_regd_update(dev);
> - mt792x_mutex_release(dev);
> -
> - dev->regd_in_progress = false;
> - wake_up(&dev->wait);
> + mt7921_mcu_regd_update(dev, request->alpha2,
> + request->country_ie_env);
> }
> diff --git a/drivers/net/wireless/mediatek/mt76/mt7921/regd.h b/drivers/net/wireless/mediatek/mt76/mt7921/regd.h
> index 74bc2fdd532c..da5bd4450312 100644
> --- a/drivers/net/wireless/mediatek/mt76/mt7921/regd.h
> +++ b/drivers/net/wireless/mediatek/mt76/mt7921/regd.h
> @@ -6,7 +6,8 @@
>
> #include "mt7921.h"
>
> -void mt7921_regd_update(struct mt792x_dev *dev);
> +int mt7921_mcu_regd_update(struct mt792x_dev *dev, u8 *alpha2,
> + enum environment_cap country_ie_env);
> void mt7921_regd_notifier(struct wiphy *wiphy,
> struct regulatory_request *request);
> bool mt7921_regd_clc_supported(struct mt792x_dev *dev);
> --
> 2.45.2
>
>
More information about the Linux-mediatek
mailing list