// SPDX-License-Identifier: BSD-3-Clause-Clear
 /*
  * Copyright (c) 2018-2019 The Linux Foundation. All rights reserved.
- * Copyright (c) 2021-2024 Qualcomm Innovation Center, Inc. All rights reserved.
+ * Copyright (c) 2021-2025 Qualcomm Innovation Center, Inc. All rights reserved.
  */
 #include <linux/rtnetlink.h>
 
        ath11k_dbg(ar->ab, ATH11K_DBG_REG,
                   "Regulatory Notification received for %s\n", wiphy_name(wiphy));
 
+       if (request->initiator == NL80211_REGDOM_SET_BY_DRIVER) {
+               ath11k_dbg(ar->ab, ATH11K_DBG_REG,
+                          "driver initiated regd update\n");
+               if (ar->state != ATH11K_STATE_ON)
+                       return;
+
+               ret = ath11k_reg_update_chan_list(ar, true);
+               if (ret)
+                       ath11k_warn(ar->ab, "failed to update channel list: %d\n", ret);
+
+               return;
+       }
+
        /* Currently supporting only General User Hints. Cell base user
         * hints to be handled later.
         * Hints from other sources like Core, Beacons are not expected for
        if (ret)
                goto err;
 
-       if (ar->state == ATH11K_STATE_ON) {
-               ret = ath11k_reg_update_chan_list(ar, true);
-               if (ret)
-                       goto err;
-       }
-
        return 0;
 err:
        ath11k_warn(ab, "failed to perform regd update : %d\n", ret);
 void ath11k_reg_init(struct ath11k *ar)
 {
        ar->hw->wiphy->regulatory_flags = REGULATORY_WIPHY_SELF_MANAGED;
+       ar->hw->wiphy->flags |= WIPHY_FLAG_NOTIFY_REGDOM_BY_DRIVER;
        ar->hw->wiphy->reg_notifier = ath11k_reg_notifier;
 }