* interface (and monitors) in PS, this then points there.
         */
        struct ieee80211_sub_if_data *ps_sdata;
-       struct work_struct dynamic_ps_enable_work;
-       struct work_struct dynamic_ps_disable_work;
+       struct wiphy_work dynamic_ps_enable_work;
+       struct wiphy_work dynamic_ps_disable_work;
        struct timer_list dynamic_ps_timer;
        struct notifier_block ifa_notifier;
        struct notifier_block ifa6_notifier;
        return ieee802_1d_to_ac[tid & 7];
 }
 
-void ieee80211_dynamic_ps_enable_work(struct work_struct *work);
-void ieee80211_dynamic_ps_disable_work(struct work_struct *work);
+void ieee80211_dynamic_ps_enable_work(struct wiphy *wiphy,
+                                     struct wiphy_work *work);
+void ieee80211_dynamic_ps_disable_work(struct wiphy *wiphy,
+                                      struct wiphy_work *work);
 void ieee80211_dynamic_ps_timer(struct timer_list *t);
 void ieee80211_send_nullfunc(struct ieee80211_local *local,
                             struct ieee80211_sub_if_data *sdata,
 
        }
 
        del_timer_sync(&local->dynamic_ps_timer);
-       cancel_work_sync(&local->dynamic_ps_enable_work);
+       wiphy_work_cancel(local->hw.wiphy, &local->dynamic_ps_enable_work);
 
        sdata_lock(sdata);
        WARN(ieee80211_vif_is_mld(&sdata->vif),
 
        INIT_WORK(&local->reconfig_filter, ieee80211_reconfig_filter);
        local->smps_mode = IEEE80211_SMPS_OFF;
 
-       INIT_WORK(&local->dynamic_ps_enable_work,
-                 ieee80211_dynamic_ps_enable_work);
-       INIT_WORK(&local->dynamic_ps_disable_work,
-                 ieee80211_dynamic_ps_disable_work);
+       wiphy_work_init(&local->dynamic_ps_enable_work,
+                       ieee80211_dynamic_ps_enable_work);
+       wiphy_work_init(&local->dynamic_ps_disable_work,
+                       ieee80211_dynamic_ps_disable_work);
        timer_setup(&local->dynamic_ps_timer, ieee80211_dynamic_ps_timer, 0);
 
        INIT_WORK(&local->sched_scan_stopped_work,
 
                conf->flags &= ~IEEE80211_CONF_PS;
                ieee80211_hw_config(local, IEEE80211_CONF_CHANGE_PS);
                del_timer_sync(&local->dynamic_ps_timer);
-               cancel_work_sync(&local->dynamic_ps_enable_work);
+               wiphy_work_cancel(local->hw.wiphy,
+                                 &local->dynamic_ps_enable_work);
        }
 }
 
        }
 }
 
-void ieee80211_dynamic_ps_disable_work(struct work_struct *work)
+void ieee80211_dynamic_ps_disable_work(struct wiphy *wiphy,
+                                      struct wiphy_work *work)
 {
        struct ieee80211_local *local =
                container_of(work, struct ieee80211_local,
                                        false);
 }
 
-void ieee80211_dynamic_ps_enable_work(struct work_struct *work)
+void ieee80211_dynamic_ps_enable_work(struct wiphy *wiphy,
+                                     struct wiphy_work *work)
 {
        struct ieee80211_local *local =
                container_of(work, struct ieee80211_local,
 {
        struct ieee80211_local *local = from_timer(local, t, dynamic_ps_timer);
 
-       ieee80211_queue_work(&local->hw, &local->dynamic_ps_enable_work);
+       wiphy_work_queue(local->hw.wiphy, &local->dynamic_ps_enable_work);
 }
 
 void ieee80211_dfs_cac_timer_work(struct wiphy *wiphy, struct wiphy_work *work)
        sdata->deflink.ap_power_level = IEEE80211_UNSET_POWER_LEVEL;
 
        del_timer_sync(&local->dynamic_ps_timer);
-       cancel_work_sync(&local->dynamic_ps_enable_work);
+       wiphy_work_cancel(local->hw.wiphy, &local->dynamic_ps_enable_work);
 
        /* Disable ARP filtering */
        if (sdata->vif.cfg.arp_addr_cnt)
 
        del_timer_sync(&ifmgd->bcn_mon_timer);
        del_timer_sync(&ifmgd->conn_mon_timer);
 
-       cancel_work_sync(&local->dynamic_ps_enable_work);
+       wiphy_work_cancel(local->hw.wiphy, &local->dynamic_ps_enable_work);
 
        if (local->hw.conf.flags & IEEE80211_CONF_PS) {
                offchannel_ps_enabled = true;
 
 // SPDX-License-Identifier: GPL-2.0
 /*
  * Portions
- * Copyright (C) 2020-2021 Intel Corporation
+ * Copyright (C) 2020-2021, 2023 Intel Corporation
  */
 #include <net/mac80211.h>
 #include <net/rtnetlink.h>
         * Note that this particular timer doesn't need to be
         * restarted at resume.
         */
-       cancel_work_sync(&local->dynamic_ps_enable_work);
+       wiphy_work_cancel(local->hw.wiphy, &local->dynamic_ps_enable_work);
        del_timer_sync(&local->dynamic_ps_timer);
 
        local->wowlan = wowlan;
 
                                                IEEE80211_QUEUE_STOP_REASON_PS,
                                                false);
                ifmgd->flags &= ~IEEE80211_STA_NULLFUNC_ACKED;
-               ieee80211_queue_work(&local->hw,
-                                    &local->dynamic_ps_disable_work);
+               wiphy_work_queue(local->hw.wiphy,
+                                &local->dynamic_ps_disable_work);
        }
 
        /* Don't restart the timer if we're not disassociated */