ieee80211_hw_set(hw, SUPPORTS_PS);
        ieee80211_hw_set(hw, SUPPORTS_DYNAMIC_PS);
        ieee80211_hw_set(hw, SUPPORTS_VHT_EXT_NSS_BW);
+       ieee80211_hw_set(hw, CONNECTION_MONITOR);
 
        if (dev->pm.enable)
                ieee80211_hw_set(hw, CONNECTION_MONITOR);
 
                mtxq->wcid = idx;
        }
 
+       vif->driver_flags |= IEEE80211_VIF_BEACON_FILTER;
 out:
        mt7921_mutex_release(dev);
 
 mt7921_pm_interface_iter(void *priv, u8 *mac, struct ieee80211_vif *vif)
 {
        struct mt7921_dev *dev = priv;
+       struct ieee80211_hw *hw = mt76_hw(dev);
+       bool pm_enable = dev->pm.enable;
+       int err;
 
-       mt7921_mcu_set_beacon_filter(dev, vif, dev->pm.enable);
+       err = mt7921_mcu_set_beacon_filter(dev, vif, pm_enable);
+       if (err < 0)
+               return;
+
+       if (pm_enable) {
+               vif->driver_flags |= IEEE80211_VIF_BEACON_FILTER;
+               ieee80211_hw_set(hw, CONNECTION_MONITOR);
+       } else {
+               vif->driver_flags &= ~IEEE80211_VIF_BEACON_FILTER;
+               __clear_bit(IEEE80211_HW_CONNECTION_MONITOR, hw->flags);
+       }
 }
 
 static void
 
                                 struct ieee80211_vif *vif,
                                 bool enable)
 {
-       struct ieee80211_hw *hw = mt76_hw(dev);
        int err;
 
        if (enable) {
                if (err)
                        return err;
 
-               vif->driver_flags |= IEEE80211_VIF_BEACON_FILTER;
-               ieee80211_hw_set(hw, CONNECTION_MONITOR);
                mt76_set(dev, MT_WF_RFCR(0), MT_WF_RFCR_DROP_OTHER_BEACON);
 
                return 0;
        if (err)
                return err;
 
-       vif->driver_flags &= ~IEEE80211_VIF_BEACON_FILTER;
-       __clear_bit(IEEE80211_HW_CONNECTION_MONITOR, hw->flags);
        mt76_clear(dev, MT_WF_RFCR(0), MT_WF_RFCR_DROP_OTHER_BEACON);
 
        return 0;