ieee80211_recalc_txpower(sdata);
        sdata->vif.bss_conf.idle = false;
-       ieee80211_bss_info_change_notify(sdata, BSS_CHANGED_IDLE);
+
+       if (sdata->vif.type != NL80211_IFTYPE_P2P_DEVICE &&
+           sdata->vif.type != NL80211_IFTYPE_MONITOR)
+               ieee80211_bss_info_change_notify(sdata, BSS_CHANGED_IDLE);
 
        return 0;
 }
        rcu_assign_pointer(sdata->vif.chanctx_conf, NULL);
 
        sdata->vif.bss_conf.idle = true;
-       ieee80211_bss_info_change_notify(sdata, BSS_CHANGED_IDLE);
+
+       if (sdata->vif.type != NL80211_IFTYPE_P2P_DEVICE &&
+           sdata->vif.type != NL80211_IFTYPE_MONITOR)
+               ieee80211_bss_info_change_notify(sdata, BSS_CHANGED_IDLE);
 
        drv_unassign_vif_chanctx(local, sdata, ctx);
 
 
 {
        might_sleep();
 
-       WARN_ON_ONCE(changed & (BSS_CHANGED_BEACON |
-                               BSS_CHANGED_BEACON_ENABLED) &&
-                    sdata->vif.type != NL80211_IFTYPE_AP &&
-                    sdata->vif.type != NL80211_IFTYPE_ADHOC &&
-                    sdata->vif.type != NL80211_IFTYPE_MESH_POINT);
-       WARN_ON_ONCE(sdata->vif.type == NL80211_IFTYPE_P2P_DEVICE &&
-                    changed & ~BSS_CHANGED_IDLE);
+       if (WARN_ON_ONCE(changed & (BSS_CHANGED_BEACON |
+                                   BSS_CHANGED_BEACON_ENABLED) &&
+                        sdata->vif.type != NL80211_IFTYPE_AP &&
+                        sdata->vif.type != NL80211_IFTYPE_ADHOC &&
+                        sdata->vif.type != NL80211_IFTYPE_MESH_POINT))
+               return;
+
+       if (WARN_ON_ONCE(sdata->vif.type == NL80211_IFTYPE_P2P_DEVICE ||
+                        sdata->vif.type == NL80211_IFTYPE_MONITOR))
+               return;
 
        check_sdata_in_driver(sdata);