aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/iwlwifi/iwl-core.c
diff options
context:
space:
mode:
authorWey-Yi Guy <wey-yi.w.guy@intel.com>2010-08-23 10:57:04 -0400
committerJohn W. Linville <linville@tuxdriver.com>2010-08-25 14:34:19 -0400
commitbee008b78307ccc2e17c7ec152dd2098d5f2e1fa (patch)
treea66fd8ef5e086df61c5f8e27a575e4877a06c680 /drivers/net/wireless/iwlwifi/iwl-core.c
parentbd6e2d579949aede258c673caf4b1eb39b95e172 (diff)
iwlwifi: add bt full concurrency support
Adding the bluetooth full concurrency support for WiFi/BT combo devices. Driver should configure uCode to operate in "full concurrency" mode (via LUT) if both conditions are met: - Antenna Coupling is more than 35dB - WiFi Channel Inhibition Request is hornored by BT Core Currently, there is no antenna coupling information provided by uCode; use module parameter to specified the antenna coupling in dB. When in "full concurrency" mode, driver need to download different LUT to uCode while sending bt configuration command; also, driver need to configure the device operate in 1x1 while in full concurrency mode. Signed-off-by: Wey-Yi Guy <wey-yi.w.guy@intel.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/iwlwifi/iwl-core.c')
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-core.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl-core.c b/drivers/net/wireless/iwlwifi/iwl-core.c
index 5e8fc720c570..13d2dcea85d1 100644
--- a/drivers/net/wireless/iwlwifi/iwl-core.c
+++ b/drivers/net/wireless/iwlwifi/iwl-core.c
@@ -780,6 +780,10 @@ EXPORT_SYMBOL(iwl_set_rxon_ht);
780 */ 780 */
781static int iwl_get_active_rx_chain_count(struct iwl_priv *priv) 781static int iwl_get_active_rx_chain_count(struct iwl_priv *priv)
782{ 782{
783 if (priv->cfg->advanced_bt_coexist && priv->bt_full_concurrent) {
784 /* operated as 1x1 in full concurrency mode */
785 return IWL_NUM_RX_CHAINS_SINGLE;
786 }
783 /* # of Rx chains to use when expecting MIMO. */ 787 /* # of Rx chains to use when expecting MIMO. */
784 if (is_single_rx_stream(priv)) 788 if (is_single_rx_stream(priv))
785 return IWL_NUM_RX_CHAINS_SINGLE; 789 return IWL_NUM_RX_CHAINS_SINGLE;
@@ -836,11 +840,16 @@ void iwl_set_rxon_chain(struct iwl_priv *priv)
836 * Before first association, we assume all antennas are connected. 840 * Before first association, we assume all antennas are connected.
837 * Just after first association, iwl_chain_noise_calibration() 841 * Just after first association, iwl_chain_noise_calibration()
838 * checks which antennas actually *are* connected. */ 842 * checks which antennas actually *are* connected. */
839 if (priv->chain_noise_data.active_chains) 843 if (priv->chain_noise_data.active_chains)
840 active_chains = priv->chain_noise_data.active_chains; 844 active_chains = priv->chain_noise_data.active_chains;
841 else 845 else
842 active_chains = priv->hw_params.valid_rx_ant; 846 active_chains = priv->hw_params.valid_rx_ant;
843 847
848 if (priv->cfg->advanced_bt_coexist && priv->bt_full_concurrent) {
849 /* operated as 1x1 in full concurrency mode */
850 active_chains = first_antenna(active_chains);
851 }
852
844 rx_chain = active_chains << RXON_RX_CHAIN_VALID_POS; 853 rx_chain = active_chains << RXON_RX_CHAIN_VALID_POS;
845 854
846 /* How many receivers should we use? */ 855 /* How many receivers should we use? */