switch (priv->hw_rev & CSR_HW_REV_TYPE_MSK) {
        case CSR_HW_REV_TYPE_5100:
+               priv->hw_params.tx_chains_num = 1;
+               priv->hw_params.rx_chains_num = 2;
+               priv->hw_params.valid_tx_ant = ANT_B;
+               priv->hw_params.valid_rx_ant = ANT_AB;
+               break;
        case CSR_HW_REV_TYPE_5150:
                priv->hw_params.tx_chains_num = 1;
                priv->hw_params.rx_chains_num = 2;
-               /* FIXME: move to ANT_A, ANT_B, ANT_C enum */
                priv->hw_params.valid_tx_ant = ANT_A;
                priv->hw_params.valid_rx_ant = ANT_AB;
                break;
 
        struct iwl_link_quality_cmd link_cmd = {
                .reserved1 = 0,
        };
-       u16 rate_flags;
+       u32 rate_flags;
 
        /* Set up the rate scaling to start at selected rate, fall back
         * all the way down to 1M in IEEE order, and then spin on 1M */
                if (r >= IWL_FIRST_CCK_RATE && r <= IWL_LAST_CCK_RATE)
                        rate_flags |= RATE_MCS_CCK_MSK;
 
-               /* Use Tx antenna B only */
-               rate_flags |= RATE_MCS_ANT_B_MSK; /*FIXME:RS*/
+               rate_flags |= first_antenna(priv->hw_params.valid_tx_ant) <<
+                               RATE_MCS_ANT_POS;
 
                link_cmd.rs_table[i].rate_n_flags =
                        iwl_hw_set_rate_n_flags(iwl_rates[r].plcp, rate_flags);
                r = iwl4965_get_prev_ieee_rate(r);
        }
 
-       link_cmd.general_params.single_stream_ant_msk = 2;
+       link_cmd.general_params.single_stream_ant_msk =
+                               first_antenna(priv->hw_params.valid_tx_ant);
        link_cmd.general_params.dual_stream_ant_msk = 3;
        link_cmd.agg_params.agg_dis_start_th = 3;
        link_cmd.agg_params.agg_time_limit = cpu_to_le16(4000);