if (ath12k_check_chain_mask(ar, rx_ant, false))
                return -EINVAL;
 
+       /* Since we advertised the max cap of all radios combined during wiphy
+        * registration, ensure we don't set the antenna config higher than the
+        * limits
+        */
+       tx_ant = min_t(u32, tx_ant, ar->pdev->cap.tx_chain_mask);
+       rx_ant = min_t(u32, rx_ant, ar->pdev->cap.rx_chain_mask);
+
        ar->cfg_tx_chainmask = tx_ant;
        ar->cfg_rx_chainmask = rx_ant;
 
 static int ath12k_mac_op_get_antenna(struct ieee80211_hw *hw, u32 *tx_ant, u32 *rx_ant)
 {
        struct ath12k_hw *ah = ath12k_hw_to_ah(hw);
+       int antennas_rx = 0, antennas_tx = 0;
        struct ath12k *ar;
+       int i;
 
-       ar = ath12k_ah_to_ar(ah, 0);
-
-       mutex_lock(&ar->conf_mutex);
-
-       *tx_ant = ar->cfg_tx_chainmask;
-       *rx_ant = ar->cfg_rx_chainmask;
+       for_each_ar(ah, ar, i) {
+               mutex_lock(&ar->conf_mutex);
+               antennas_rx = max_t(u32, antennas_rx, ar->cfg_rx_chainmask);
+               antennas_tx = max_t(u32, antennas_tx, ar->cfg_tx_chainmask);
+               mutex_unlock(&ar->conf_mutex);
+       }
 
-       mutex_unlock(&ar->conf_mutex);
+       *tx_ant = antennas_tx;
+       *rx_ant = antennas_rx;
 
        return 0;
 }
 {
        struct ath12k_hw *ah = ath12k_hw_to_ah(hw);
        struct ath12k *ar;
-       int ret;
-
-       ar = ath12k_ah_to_ar(ah, 0);
+       int ret = 0;
+       int i;
 
-       mutex_lock(&ar->conf_mutex);
-       ret = __ath12k_set_antenna(ar, tx_ant, rx_ant);
-       mutex_unlock(&ar->conf_mutex);
+       for_each_ar(ah, ar, i) {
+               mutex_lock(&ar->conf_mutex);
+               ret = __ath12k_set_antenna(ar, tx_ant, rx_ant);
+               mutex_unlock(&ar->conf_mutex);
+               if (ret)
+                       break;
+       }
 
        return ret;
 }