if (!wl->conf.rx_streaming.interval)
                goto out;
 
-       ret = pm_runtime_get_sync(wl->dev);
-       if (ret < 0) {
-               pm_runtime_put_noidle(wl->dev);
+       ret = pm_runtime_resume_and_get(wl->dev);
+       if (ret < 0)
                goto out;
-       }
 
        ret = wl1271_set_rx_streaming(wl, wlvif, true);
        if (ret < 0)
        if (!test_bit(WLVIF_FLAG_RX_STREAMING_STARTED, &wlvif->flags))
                goto out;
 
-       ret = pm_runtime_get_sync(wl->dev);
-       if (ret < 0) {
-               pm_runtime_put_noidle(wl->dev);
+       ret = pm_runtime_resume_and_get(wl->dev);
+       if (ret < 0)
                goto out;
-       }
 
        ret = wl1271_set_rx_streaming(wl, wlvif, false);
        if (ret)
        if (unlikely(wl->state != WLCORE_STATE_ON))
                goto out;
 
-       ret = pm_runtime_get_sync(wl->dev);
-       if (ret < 0) {
-               pm_runtime_put_noidle(wl->dev);
+       ret = pm_runtime_resume_and_get(wl->dev);
+       if (ret < 0)
                goto out;
-       }
 
        if (ieee80211_vif_is_mesh(vif)) {
                ret = wl1271_acx_set_ht_capabilities(wl, &wlvif->rc_ht_cap,
        if (unlikely(wl->state != WLCORE_STATE_ON))
                goto out;
 
-       ret = pm_runtime_get_sync(wl->dev);
-       if (ret < 0) {
-               pm_runtime_put_noidle(wl->dev);
+       ret = pm_runtime_resume_and_get(wl->dev);
+       if (ret < 0)
                goto out;
-       }
 
        while (!done && loopcount--) {
                smp_mb__after_atomic();
         * Do not send a stop fwlog command if the fw is hanged or if
         * dbgpins are used (due to some fw bug).
         */
-       error = pm_runtime_get_sync(wl->dev);
-       if (error < 0) {
-               pm_runtime_put_noidle(wl->dev);
+       error = pm_runtime_resume_and_get(wl->dev);
+       if (error < 0)
                return;
-       }
        if (!wl->watchdog_recovery &&
            wl->conf.fwlog.output != WL12XX_FWLOG_OUTPUT_DBG_PINS)
                wl12xx_cmd_stop_fwlog(wl);
        if (wl->state == WLCORE_STATE_OFF || wl->plt)
                goto out_unlock;
 
-       error = pm_runtime_get_sync(wl->dev);
-       if (error < 0) {
+       error = pm_runtime_resume_and_get(wl->dev);
+       if (error < 0)
                wl1271_warning("Enable for recovery failed");
-               pm_runtime_put_noidle(wl->dev);
-       }
        wlcore_disable_interrupts_nosync(wl);
 
        if (!test_bit(WL1271_FLAG_INTENDED_FW_RECOVERY, &wl->flags)) {
 
        mutex_lock(&wl->mutex);
 
-       ret = pm_runtime_get_sync(wl->dev);
+       ret = pm_runtime_resume_and_get(wl->dev);
        if (ret < 0) {
-               pm_runtime_put_noidle(wl->dev);
                mutex_unlock(&wl->mutex);
                return ret;
        }
                goto out_sleep;
        }
 
-       ret = pm_runtime_get_sync(wl->dev);
-       if (ret < 0) {
-               pm_runtime_put_noidle(wl->dev);
+       ret = pm_runtime_resume_and_get(wl->dev);
+       if (ret < 0)
                goto out;
-       }
 
        wl12xx_for_each_wlvif(wl, wlvif) {
                if (wlcore_is_p2p_mgmt(wlvif))
        vif = wl12xx_wlvif_to_vif(wlvif);
        ieee80211_chswitch_done(vif, false);
 
-       ret = pm_runtime_get_sync(wl->dev);
-       if (ret < 0) {
-               pm_runtime_put_noidle(wl->dev);
+       ret = pm_runtime_resume_and_get(wl->dev);
+       if (ret < 0)
                goto out;
-       }
 
        wl12xx_cmd_stop_channel_switch(wl, wlvif);
 
        if (!time_after(time_spare, wlvif->pending_auth_reply_time))
                goto out;
 
-       ret = pm_runtime_get_sync(wl->dev);
-       if (ret < 0) {
-               pm_runtime_put_noidle(wl->dev);
+       ret = pm_runtime_resume_and_get(wl->dev);
+       if (ret < 0)
                goto out;
-       }
 
        /* cancel the ROC if active */
        wlcore_update_inconn_sta(wl, wlvif, NULL, false);
         * Call runtime PM only after possible wl12xx_init_fw() above
         * is done. Otherwise we do not have interrupts enabled.
         */
-       ret = pm_runtime_get_sync(wl->dev);
-       if (ret < 0) {
-               pm_runtime_put_noidle(wl->dev);
+       ret = pm_runtime_resume_and_get(wl->dev);
+       if (ret < 0)
                goto out_unlock;
-       }
 
        if (wl12xx_need_fw_change(wl, vif_count, true)) {
                wl12xx_force_active_psm(wl);
 
        if (!test_bit(WL1271_FLAG_RECOVERY_IN_PROGRESS, &wl->flags)) {
                /* disable active roles */
-               ret = pm_runtime_get_sync(wl->dev);
-               if (ret < 0) {
-                       pm_runtime_put_noidle(wl->dev);
+               ret = pm_runtime_resume_and_get(wl->dev);
+               if (ret < 0)
                        goto deinit;
-               }
 
                if (wlvif->bss_type == BSS_TYPE_STA_BSS ||
                    wlvif->bss_type == BSS_TYPE_IBSS) {
        if (unlikely(wl->state != WLCORE_STATE_ON))
                goto out;
 
-       ret = pm_runtime_get_sync(wl->dev);
-       if (ret < 0) {
-               pm_runtime_put_noidle(wl->dev);
+       ret = pm_runtime_resume_and_get(wl->dev);
+       if (ret < 0)
                goto out;
-       }
 
        /* configure each interface */
        wl12xx_for_each_wlvif(wl, wlvif) {
        if (unlikely(wl->state != WLCORE_STATE_ON))
                goto out;
 
-       ret = pm_runtime_get_sync(wl->dev);
-       if (ret < 0) {
-               pm_runtime_put_noidle(wl->dev);
+       ret = pm_runtime_resume_and_get(wl->dev);
+       if (ret < 0)
                goto out;
-       }
 
        wl12xx_for_each_wlvif(wl, wlvif) {
                if (wlcore_is_p2p_mgmt(wlvif))
                goto out_wake_queues;
        }
 
-       ret = pm_runtime_get_sync(wl->dev);
-       if (ret < 0) {
-               pm_runtime_put_noidle(wl->dev);
+       ret = pm_runtime_resume_and_get(wl->dev);
+       if (ret < 0)
                goto out_wake_queues;
-       }
 
        ret = wlcore_hw_set_key(wl, cmd, vif, sta, key_conf);
 
                goto out_unlock;
        }
 
-       ret = pm_runtime_get_sync(wl->dev);
-       if (ret < 0) {
-               pm_runtime_put_noidle(wl->dev);
+       ret = pm_runtime_resume_and_get(wl->dev);
+       if (ret < 0)
                goto out_unlock;
-       }
 
        wlvif->default_key = key_idx;
 
        if (unlikely(wl->state != WLCORE_STATE_ON))
                goto out;
 
-       ret = pm_runtime_get_sync(wl->dev);
-       if (ret < 0) {
-               pm_runtime_put_autosuspend(wl->dev);
+       ret = pm_runtime_resume_and_get(wl->dev);
+       if (ret < 0)
                goto out;
-       }
 
        ret = wlcore_cmd_regdomain_config_locked(wl);
        if (ret < 0) {
                goto out;
        }
 
-       ret = pm_runtime_get_sync(wl->dev);
-       if (ret < 0) {
-               pm_runtime_put_noidle(wl->dev);
+       ret = pm_runtime_resume_and_get(wl->dev);
+       if (ret < 0)
                goto out;
-       }
 
        /* fail if there is any role in ROC */
        if (find_first_bit(wl->roc_map, WL12XX_MAX_ROLES) < WL12XX_MAX_ROLES) {
        if (wl->scan.state == WL1271_SCAN_STATE_IDLE)
                goto out;
 
-       ret = pm_runtime_get_sync(wl->dev);
-       if (ret < 0) {
-               pm_runtime_put_noidle(wl->dev);
+       ret = pm_runtime_resume_and_get(wl->dev);
+       if (ret < 0)
                goto out;
-       }
 
        if (wl->scan.state != WL1271_SCAN_STATE_DONE) {
                ret = wl->ops->scan_stop(wl, wlvif);
                goto out;
        }
 
-       ret = pm_runtime_get_sync(wl->dev);
-       if (ret < 0) {
-               pm_runtime_put_noidle(wl->dev);
+       ret = pm_runtime_resume_and_get(wl->dev);
+       if (ret < 0)
                goto out;
-       }
 
        ret = wl->ops->sched_scan_start(wl, wlvif, req, ies);
        if (ret < 0)
        if (unlikely(wl->state != WLCORE_STATE_ON))
                goto out;
 
-       ret = pm_runtime_get_sync(wl->dev);
-       if (ret < 0) {
-               pm_runtime_put_noidle(wl->dev);
+       ret = pm_runtime_resume_and_get(wl->dev);
+       if (ret < 0)
                goto out;
-       }
 
        wl->ops->sched_scan_stop(wl, wlvif);
 
                goto out;
        }
 
-       ret = pm_runtime_get_sync(wl->dev);
-       if (ret < 0) {
-               pm_runtime_put_noidle(wl->dev);
+       ret = pm_runtime_resume_and_get(wl->dev);
+       if (ret < 0)
                goto out;
-       }
 
        ret = wl1271_acx_frag_threshold(wl, value);
        if (ret < 0)
                goto out;
        }
 
-       ret = pm_runtime_get_sync(wl->dev);
-       if (ret < 0) {
-               pm_runtime_put_noidle(wl->dev);
+       ret = pm_runtime_resume_and_get(wl->dev);
+       if (ret < 0)
                goto out;
-       }
 
        wl12xx_for_each_wlvif(wl, wlvif) {
                ret = wl1271_acx_rts_threshold(wl, wlvif, value);
        if (unlikely(!test_bit(WLVIF_FLAG_INITIALIZED, &wlvif->flags)))
                goto out;
 
-       ret = pm_runtime_get_sync(wl->dev);
-       if (ret < 0) {
-               pm_runtime_put_noidle(wl->dev);
+       ret = pm_runtime_resume_and_get(wl->dev);
+       if (ret < 0)
                goto out;
-       }
 
        if ((changed & BSS_CHANGED_TXPOWER) &&
            bss_conf->txpower != wlvif->power_level) {
 
        mutex_lock(&wl->mutex);
 
-       ret = pm_runtime_get_sync(wl->dev);
-       if (ret < 0) {
-               pm_runtime_put_noidle(wl->dev);
+       ret = pm_runtime_resume_and_get(wl->dev);
+       if (ret < 0)
                goto out;
-       }
 
        wl12xx_for_each_wlvif(wl, wlvif) {
                struct ieee80211_vif *vif = wl12xx_wlvif_to_vif(wlvif);
        if (unlikely(!test_bit(WLVIF_FLAG_INITIALIZED, &wlvif->flags)))
                goto out;
 
-       ret = pm_runtime_get_sync(wl->dev);
-       if (ret < 0) {
-               pm_runtime_put_noidle(wl->dev);
+       ret = pm_runtime_resume_and_get(wl->dev);
+       if (ret < 0)
                goto out;
-       }
 
        wlvif->band = ctx->def.chan->band;
        wlvif->channel = channel;
        if (unlikely(!test_bit(WLVIF_FLAG_INITIALIZED, &wlvif->flags)))
                goto out;
 
-       ret = pm_runtime_get_sync(wl->dev);
-       if (ret < 0) {
-               pm_runtime_put_noidle(wl->dev);
+       ret = pm_runtime_resume_and_get(wl->dev);
+       if (ret < 0)
                goto out;
-       }
 
        if (wlvif->radar_enabled) {
                wl1271_debug(DEBUG_MAC80211, "Stop radar detection");
 
        mutex_lock(&wl->mutex);
 
-       ret = pm_runtime_get_sync(wl->dev);
-       if (ret < 0) {
-               pm_runtime_put_noidle(wl->dev);
+       ret = pm_runtime_resume_and_get(wl->dev);
+       if (ret < 0)
                goto out;
-       }
 
        for (i = 0; i < n_vifs; i++) {
                struct wl12xx_vif *wlvif = wl12xx_vif_to_data(vifs[i].vif);
        if (!test_bit(WLVIF_FLAG_INITIALIZED, &wlvif->flags))
                goto out;
 
-       ret = pm_runtime_get_sync(wl->dev);
-       if (ret < 0) {
-               pm_runtime_put_noidle(wl->dev);
+       ret = pm_runtime_resume_and_get(wl->dev);
+       if (ret < 0)
                goto out;
-       }
 
        /*
         * the txop is confed in units of 32us by the mac80211,
        if (unlikely(wl->state != WLCORE_STATE_ON))
                goto out;
 
-       ret = pm_runtime_get_sync(wl->dev);
-       if (ret < 0) {
-               pm_runtime_put_noidle(wl->dev);
+       ret = pm_runtime_resume_and_get(wl->dev);
+       if (ret < 0)
                goto out;
-       }
 
        ret = wl12xx_acx_tsf_info(wl, wlvif, &mactime);
        if (ret < 0)
                goto out;
        }
 
-       ret = pm_runtime_get_sync(wl->dev);
-       if (ret < 0) {
-               pm_runtime_put_noidle(wl->dev);
+       ret = pm_runtime_resume_and_get(wl->dev);
+       if (ret < 0)
                goto out;
-       }
 
        ret = wl12xx_update_sta_state(wl, wlvif, sta, old_state, new_state);
 
 
        ba_bitmap = &wl->links[hlid].ba_bitmap;
 
-       ret = pm_runtime_get_sync(wl->dev);
-       if (ret < 0) {
-               pm_runtime_put_noidle(wl->dev);
+       ret = pm_runtime_resume_and_get(wl->dev);
+       if (ret < 0)
                goto out;
-       }
 
        wl1271_debug(DEBUG_MAC80211, "mac80211 ampdu: Rx tid %d action %d",
                     tid, action);
        if (wlvif->bss_type == BSS_TYPE_STA_BSS &&
            !test_bit(WLVIF_FLAG_STA_ASSOCIATED, &wlvif->flags)) {
 
-               ret = pm_runtime_get_sync(wl->dev);
-               if (ret < 0) {
-                       pm_runtime_put_noidle(wl->dev);
+               ret = pm_runtime_resume_and_get(wl->dev);
+               if (ret < 0)
                        goto out;
-               }
 
                wl1271_set_band_rate(wl, wlvif);
                wlvif->basic_rate =
                goto out;
        }
 
-       ret = pm_runtime_get_sync(wl->dev);
-       if (ret < 0) {
-               pm_runtime_put_noidle(wl->dev);
+       ret = pm_runtime_resume_and_get(wl->dev);
+       if (ret < 0)
                goto out;
-       }
 
        /* TODO: change mac80211 to pass vif as param */
 
                goto out;
        }
 
-       ret = pm_runtime_get_sync(wl->dev);
-       if (ret < 0) {
-               pm_runtime_put_noidle(wl->dev);
+       ret = pm_runtime_resume_and_get(wl->dev);
+       if (ret < 0)
                goto out;
-       }
 
        ret = wl->ops->channel_switch(wl, wlvif, &ch_switch);
        if (ret)
                goto out;
        }
 
-       ret = pm_runtime_get_sync(wl->dev);
-       if (ret < 0) {
-               pm_runtime_put_noidle(wl->dev);
+       ret = pm_runtime_resume_and_get(wl->dev);
+       if (ret < 0)
                goto out;
-       }
 
        ret = wl12xx_start_dev(wl, wlvif, chan->band, channel);
        if (ret < 0)
                goto out;
        }
 
-       ret = pm_runtime_get_sync(wl->dev);
-       if (ret < 0) {
-               pm_runtime_put_noidle(wl->dev);
+       ret = pm_runtime_resume_and_get(wl->dev);
+       if (ret < 0)
                goto out;
-       }
 
        ret = __wlcore_roc_completed(wl);
 
        if (unlikely(wl->state != WLCORE_STATE_ON))
                goto out;
 
-       ret = pm_runtime_get_sync(wl->dev);
-       if (ret < 0) {
-               pm_runtime_put_noidle(wl->dev);
+       ret = pm_runtime_resume_and_get(wl->dev);
+       if (ret < 0)
                goto out_sleep;
-       }
 
        ret = wlcore_acx_average_rssi(wl, wlvif, &rssi_dbm);
        if (ret < 0)