[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