diff options
author | Wey-Yi Guy <wey-yi.w.guy@intel.com> | 2010-08-23 10:57:04 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2010-08-25 14:34:19 -0400 |
commit | bee008b78307ccc2e17c7ec152dd2098d5f2e1fa (patch) | |
tree | a66fd8ef5e086df61c5f8e27a575e4877a06c680 /drivers/net/wireless/iwlwifi/iwl-core.c | |
parent | bd6e2d579949aede258c673caf4b1eb39b95e172 (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.c | 11 |
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 | */ |
781 | static int iwl_get_active_rx_chain_count(struct iwl_priv *priv) | 781 | static 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? */ |