goto out_sleep;
        }
 
-       /* cancel ROC before scanning */
-       if (wl12xx_dev_role_started(wlvif))
-               wl12xx_croc(wl, wlvif->dev_role_id);
-
        ret = wl1271_scan(hw->priv, vif, ssid, len, req);
 out_sleep:
        wl1271_ps_elp_sleep(wl);
                IEEE80211_HW_SPECTRUM_MGMT |
                IEEE80211_HW_AP_LINK_PS |
                IEEE80211_HW_AMPDU_AGGREGATION |
-               IEEE80211_HW_TX_AMPDU_SETUP_IN_HW;
+               IEEE80211_HW_TX_AMPDU_SETUP_IN_HW |
+               IEEE80211_HW_SCAN_WHILE_IDLE;
 
        wl->hw->wiphy->cipher_suites = cipher_suites;
        wl->hw->wiphy->n_cipher_suites = ARRAY_SIZE(cipher_suites);
 
        struct ieee80211_vif *vif;
        struct wl12xx_vif *wlvif;
        int ret;
-       bool is_sta, is_ibss;
 
        dwork = container_of(work, struct delayed_work, work);
        wl = container_of(dwork, struct wl1271, scan_complete_work);
                wl1271_cmd_build_ap_probe_req(wl, wlvif, wlvif->probereq);
        }
 
-       /* return to ROC if needed */
-       is_sta = (wlvif->bss_type == BSS_TYPE_STA_BSS);
-       is_ibss = (wlvif->bss_type == BSS_TYPE_IBSS);
-       if (((is_sta && !test_bit(WLVIF_FLAG_STA_ASSOCIATED, &wlvif->flags)) ||
-            (is_ibss && !test_bit(WLVIF_FLAG_IBSS_JOINED, &wlvif->flags))) &&
-           !test_bit(wlvif->dev_role_id, wl->roc_map)) {
-               /* restore remain on channel */
-               if (wlvif->dev_hlid == WL12XX_INVALID_LINK_ID)
-                       wl12xx_start_dev(wl, wlvif);
-               else
-                       wl12xx_roc(wl, wlvif, wlvif->dev_role_id);
-       }
        wl1271_ps_elp_sleep(wl);
 
        if (wl->scan.failed) {