Commit 511b082d authored by Johannes Berg's avatar Johannes Berg Committed by John W. Linville

iwlagn: keep BT settings across restart

The BT SCO needs to be re-applied to the device,
while the traffic load just needs to be correct
in software.
Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
Signed-off-by: default avatarWey-Yi Guy <wey-yi.w.guy@intel.com>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent 59079949
...@@ -241,6 +241,22 @@ static void iwl6000g2b_send_bt_config(struct iwl_priv *priv) ...@@ -241,6 +241,22 @@ static void iwl6000g2b_send_bt_config(struct iwl_priv *priv)
if (iwl_send_cmd_pdu(priv, REPLY_BT_CONFIG, sizeof(bt_cmd), &bt_cmd)) if (iwl_send_cmd_pdu(priv, REPLY_BT_CONFIG, sizeof(bt_cmd), &bt_cmd))
IWL_ERR(priv, "failed to send BT Coex Config\n"); IWL_ERR(priv, "failed to send BT Coex Config\n");
/*
* When we are doing a restart, need to also reconfigure BT
* SCO to the device. If not doing a restart, bt_sco_active
* will always be false, so there's no need to have an extra
* variable to check for it.
*/
if (priv->bt_sco_active) {
struct iwl6000g2b_bt_sco_cmd sco_cmd = { .flags = 0 };
if (priv->bt_sco_active)
sco_cmd.flags |= IWL6000G2B_BT_SCO_ACTIVE;
if (iwl_send_cmd_pdu(priv, REPLY_BT_COEX_SCO,
sizeof(sco_cmd), &sco_cmd))
IWL_ERR(priv, "failed to send BT SCO command\n");
}
} }
static struct iwl_sensitivity_ranges iwl6000_sensitivity = { static struct iwl_sensitivity_ranges iwl6000_sensitivity = {
......
...@@ -3079,10 +3079,30 @@ static void iwl_bg_restart(struct work_struct *data) ...@@ -3079,10 +3079,30 @@ static void iwl_bg_restart(struct work_struct *data)
return; return;
if (test_and_clear_bit(STATUS_FW_ERROR, &priv->status)) { if (test_and_clear_bit(STATUS_FW_ERROR, &priv->status)) {
bool bt_sco;
u8 bt_load;
mutex_lock(&priv->mutex); mutex_lock(&priv->mutex);
priv->vif = NULL; priv->vif = NULL;
priv->is_open = 0; priv->is_open = 0;
/*
* __iwl_down() will clear the BT status variables,
* which is correct, but when we restart we really
* want to keep them so restore them afterwards.
*
* The restart process will later pick them up and
* re-configure the hw when we reconfigure the BT
* command.
*/
bt_sco = priv->bt_sco_active;
bt_load = priv->bt_traffic_load;
__iwl_down(priv); __iwl_down(priv);
priv->bt_sco_active = bt_sco;
priv->bt_traffic_load = bt_load;
mutex_unlock(&priv->mutex); mutex_unlock(&priv->mutex);
iwl_cancel_deferred_work(priv); iwl_cancel_deferred_work(priv);
ieee80211_restart_hw(priv->hw); ieee80211_restart_hw(priv->hw);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment