iwlwifi: default to using all chains
When instructing the microcode to use just a single chain when we have power saving enabled, we should also tell the AP that we are doing SM powersave. However, using a single chain doesn't actually have any power saving advantage while idle -- measurements show that the power consumption is no different when using one vs. two or three chains. Therefore, always instruct the microcode to use all chains. Signed-off-by: Johannes Berg <johannes@sipsolutions.net> Signed-off-by: Reinette Chatre <reinette.chatre@intel.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
9bddbab36d
commit
2b396a1209
|
@ -948,8 +948,13 @@ EXPORT_SYMBOL(iwl_set_rxon_ht);
|
||||||
#define IWL_NUM_IDLE_CHAINS_DUAL 2
|
#define IWL_NUM_IDLE_CHAINS_DUAL 2
|
||||||
#define IWL_NUM_IDLE_CHAINS_SINGLE 1
|
#define IWL_NUM_IDLE_CHAINS_SINGLE 1
|
||||||
|
|
||||||
/* Determine how many receiver/antenna chains to use.
|
/*
|
||||||
* More provides better reception via diversity. Fewer saves power.
|
* Determine how many receiver/antenna chains to use.
|
||||||
|
*
|
||||||
|
* More provides better reception via diversity. Fewer saves power
|
||||||
|
* at the expense of throughput, but only when not in powersave to
|
||||||
|
* start with.
|
||||||
|
*
|
||||||
* MIMO (dual stream) requires at least 2, but works better with 3.
|
* MIMO (dual stream) requires at least 2, but works better with 3.
|
||||||
* This does not determine *which* chains to use, just how many.
|
* This does not determine *which* chains to use, just how many.
|
||||||
*/
|
*/
|
||||||
|
@ -962,19 +967,18 @@ static int iwl_get_active_rx_chain_count(struct iwl_priv *priv)
|
||||||
return IWL_NUM_RX_CHAINS_MULTIPLE;
|
return IWL_NUM_RX_CHAINS_MULTIPLE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* When we are in power saving, there's no difference between
|
||||||
|
* using multiple chains or just a single chain, but due to the
|
||||||
|
* lack of SM PS we lose a lot of throughput if we use just a
|
||||||
|
* single chain.
|
||||||
|
*
|
||||||
|
* Therefore, use the active count here (which will use multiple
|
||||||
|
* chains unless connected to a legacy AP).
|
||||||
|
*/
|
||||||
static int iwl_get_idle_rx_chain_count(struct iwl_priv *priv, int active_cnt)
|
static int iwl_get_idle_rx_chain_count(struct iwl_priv *priv, int active_cnt)
|
||||||
{
|
{
|
||||||
bool is_cam = !test_bit(STATUS_POWER_PMI, &priv->status);
|
return active_cnt;
|
||||||
|
|
||||||
/* # Rx chains when idling and maybe trying to save power */
|
|
||||||
|
|
||||||
/*
|
|
||||||
* XXX: this is incorrect!!
|
|
||||||
* we always indicate to the AP that
|
|
||||||
* our SM PS mode is "disabled"
|
|
||||||
*/
|
|
||||||
|
|
||||||
return is_cam ? active_cnt : IWL_NUM_IDLE_CHAINS_SINGLE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* up to 4 chains */
|
/* up to 4 chains */
|
||||||
|
|
Loading…
Reference in New Issue