|
@@ -581,6 +581,7 @@ static void iwl_bg_request_scan(struct work_struct *data)
|
|
|
u8 rate;
|
|
|
bool is_active = false;
|
|
|
int chan_mod;
|
|
|
+ u8 active_chains;
|
|
|
|
|
|
conf = ieee80211_get_hw_conf(priv->hw);
|
|
|
|
|
@@ -734,9 +735,22 @@ static void iwl_bg_request_scan(struct work_struct *data)
|
|
|
rate_flags |= iwl_ant_idx_to_flags(priv->scan_tx_ant[band]);
|
|
|
scan->tx_cmd.rate_n_flags = iwl_hw_set_rate_n_flags(rate, rate_flags);
|
|
|
|
|
|
+ /* In power save mode use one chain, otherwise use all chains */
|
|
|
+ if (test_bit(STATUS_POWER_PMI, &priv->status)) {
|
|
|
+ /* rx_ant has been set to all valid chains previously */
|
|
|
+ active_chains = rx_ant &
|
|
|
+ ((u8)(priv->chain_noise_data.active_chains));
|
|
|
+ if (!active_chains)
|
|
|
+ active_chains = rx_ant;
|
|
|
+
|
|
|
+ IWL_DEBUG_SCAN(priv, "chain_noise_data.active_chains: %u\n",
|
|
|
+ priv->chain_noise_data.active_chains);
|
|
|
+
|
|
|
+ rx_ant = first_antenna(active_chains);
|
|
|
+ }
|
|
|
/* MIMO is not used here, but value is required */
|
|
|
rx_chain |= ANT_ABC << RXON_RX_CHAIN_VALID_POS;
|
|
|
- rx_chain |= ANT_ABC << RXON_RX_CHAIN_FORCE_MIMO_SEL_POS;
|
|
|
+ rx_chain |= rx_ant << RXON_RX_CHAIN_FORCE_MIMO_SEL_POS;
|
|
|
rx_chain |= rx_ant << RXON_RX_CHAIN_FORCE_SEL_POS;
|
|
|
rx_chain |= 0x1 << RXON_RX_CHAIN_DRIVER_FORCE_POS;
|
|
|
scan->rx_chain = cpu_to_le16(rx_chain);
|