static int ath12k_mac_op_get_survey(struct ieee80211_hw *hw, int idx,
                                    struct survey_info *survey)
 {
-       struct ath12k_hw *ah = ath12k_hw_to_ah(hw);
        struct ath12k *ar;
        struct ieee80211_supported_band *sband;
        struct survey_info *ar_survey;
-       int ret = 0;
 
        if (idx >= ATH12K_NUM_CHANS)
                return -ENOENT;
 
-       ar = ath12k_ah_to_ar(ah, 0);
-
-       ar_survey = &ar->survey[idx];
-
-       mutex_lock(&ar->conf_mutex);
-
        sband = hw->wiphy->bands[NL80211_BAND_2GHZ];
        if (sband && idx >= sband->n_channels) {
                idx -= sband->n_channels;
        if (!sband)
                sband = hw->wiphy->bands[NL80211_BAND_5GHZ];
 
-       if (!sband || idx >= sband->n_channels) {
-               ret = -ENOENT;
-               goto exit;
+       if (!sband || idx >= sband->n_channels)
+               return -ENOENT;
+
+       ar = ath12k_mac_get_ar_by_chan(hw, &sband->channels[idx]);
+       if (!ar) {
+               if (sband->channels[idx].flags & IEEE80211_CHAN_DISABLED) {
+                       memset(survey, 0, sizeof(*survey));
+                       return 0;
+               }
+               return -ENOENT;
        }
 
+       ar_survey = &ar->survey[idx];
+
+       mutex_lock(&ar->conf_mutex);
+
        ath12k_mac_update_bss_chan_survey(ar, &sband->channels[idx]);
 
        spin_lock_bh(&ar->data_lock);
        if (ar->rx_channel == survey->channel)
                survey->filled |= SURVEY_INFO_IN_USE;
 
-exit:
        mutex_unlock(&ar->conf_mutex);
-
-       return ret;
+       return 0;
 }
 
 static void ath12k_mac_op_sta_statistics(struct ieee80211_hw *hw,